<?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>49382</bug_id>
          
          <creation_ts>2010-11-11 07:25:12 -0800</creation_ts>
          <short_desc>Spatial Navigation: issues with the node selection algorithm.</short_desc>
          <delta_ts>2010-11-29 09:48:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>47448</dependson>
    
    <dependson>47449</dependson>
    
    <dependson>49398</dependson>
          <blocked>46905</blocked>
    
    <blocked>47142</blocked>
    
    <blocked>48394</blocked>
    
    <blocked>49442</blocked>
    
    <blocked>49604</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yael">yael</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ademar</cc>
    
    <cc>buildbot</cc>
    
    <cc>cshu</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>307900</commentid>
    <comment_count>0</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-11 07:25:12 -0800</bug_when>
    <thetext>A few issues were found in the spatial navigation algorithm.
1. When no node is focused, we use tab-index to determine which node to focus. That causes a problem because not all focusable elements have tab-index attribute, so we would skip them.
2. When a frame or scrollable container do not have visible focusable elements, but can scroll, they should scroll to reveal the rest of its content.
3. z-index is not taken into account.
4. If an element will become visible after the container scrolls, it should be focused without an additional click on the arrow key.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307916</commentid>
    <comment_count>1</comment_count>
      <attachid>73612</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-11 07:50:39 -0800</bug_when>
    <thetext>Created attachment 73612
Patch

Modify the Spatial Navigation algorithm, to better handle initial focus and navigation between frames. The new algorithm takes the rect of the focused node as the startingRect, instead of the node itself. That allows us to construct a virtual rect if there is no focused node, or if it is off the screen. The virtual rect is the edge of the container in the direction of the navigation.

With this patch, scrollable containers and frames will scroll regardless of weather they have focusable content. Users will be able to use arrow keys to view all the content of such a container. The only exception is if the container has style overflow:hidden. We will not scroll in that case.

With this patch, we handle z-index and positioning so that if there are 2 overlapping focusable nodes, we do a hit test and only the node on top can get focus.

hasOffScreenRect() was modified so that it can check if a node will be off-screen even after we scrolled its parent container.

For better readability of the patch, we only modified existing layout tests, to ensure that they pass. We will add the new layout tests in future revisions of the patch.
For better readability, we also we preferred creating new functions instead of modifying existing, so that things can be reviewed in better context. A future patch will clean-up code that is no longer used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307919</commentid>
    <comment_count>2</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-11 07:53:11 -0800</bug_when>
    <thetext>*** Bug 47170 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307921</commentid>
    <comment_count>3</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-11 07:53:47 -0800</bug_when>
    <thetext>*** Bug 47176 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307924</commentid>
    <comment_count>4</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-11 07:57:14 -0800</bug_when>
    <thetext>*** Bug 47266 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307927</commentid>
    <comment_count>5</comment_count>
      <attachid>73614</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-11 08:05:01 -0800</bug_when>
    <thetext>Created attachment 73614
Patch

Forgot to check style before uploading the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307941</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-11 08:27:19 -0800</bug_when>
    <thetext>Attachment 73614 did not build on qt:
Build output: http://queues.webkit.org/results/5535100</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307943</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-11 08:30:14 -0800</bug_when>
    <thetext>Attachment 73612 did not build on mac:
Build output: http://queues.webkit.org/results/5630017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307954</commentid>
    <comment_count>8</comment_count>
      <attachid>73617</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-11 09:03:01 -0800</bug_when>
    <thetext>Created attachment 73617
Patch

Fix build warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307957</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-11 09:11:06 -0800</bug_when>
    <thetext>Attachment 73617 did not build on mac:
Build output: http://queues.webkit.org/results/5489101</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307958</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-11 09:11:35 -0800</bug_when>
    <thetext>Attachment 73614 did not build on chromium:
Build output: http://queues.webkit.org/results/5559098</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307997</commentid>
    <comment_count>11</comment_count>
      <attachid>73627</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-11 10:59:29 -0800</bug_when>
    <thetext>Created attachment 73627
Patch

Attempt to fix the mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308017</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-11 11:27:38 -0800</bug_when>
    <thetext>Attachment 73627 did not build on mac:
Build output: http://queues.webkit.org/results/5473109</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308074</commentid>
    <comment_count>13</comment_count>
      <attachid>73639</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-11 12:54:05 -0800</bug_when>
    <thetext>Created attachment 73639
Patch

Another attempt to fix the mac build. It is not failing on my Snow Leopard machine, so I can only guess :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308493</commentid>
    <comment_count>14</comment_count>
      <attachid>73729</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-12 05:05:07 -0800</bug_when>
    <thetext>Created attachment 73729
Patch including code and no tests

This patch is the same as previous, but without the layout tests. I just wanted to make it smaller and hopefully easier for reviewers to handle :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309066</commentid>
    <comment_count>15</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-14 06:14:56 -0800</bug_when>
    <thetext>Lets do it this way:

1) Put the patch w/out tests up for review.
2) Make the patch only with the tests, and put it up for review.
3) Then we review the code clean up in bug 49442.

They will get reviewed separately, but will get squashed altogether before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309070</commentid>
    <comment_count>16</comment_count>
      <attachid>73729</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-14 07:30:15 -0800</bug_when>
    <thetext>Comment on attachment 73729
Patch including code and no tests

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

Nice work! 

It needs one more round, though. I would like to get some of my comments addressed and questions answered.

&gt; WebCore/page/SpatialNavigation.cpp:291
&gt; +        return curRect.x() &lt; targetRect.right() || curRect.x() - targetRect.right() &gt; viewSize.width();

&quot;curRect.x() &lt; targetRect.right()&quot;. This should not be tested here OR the method has to be renamed. iirc there were other methods that would catch these cases.

areRectsTooFarApart essentially test the second conditions e.g. &quot;curRect.x() - targetRect.right() &gt; viewSize.width();&quot;

&gt; WebCore/page/SpatialNavigation.cpp:293
&gt; +        return targetRect.x() &lt; curRect.right() || targetRect.x() - curRect.right() &gt; viewSize.width();

ditto

&gt; WebCore/page/SpatialNavigation.cpp:295
&gt; +        return curRect.y() &lt; targetRect.bottom() || curRect.y() - targetRect.bottom() &gt; viewSize.height();

ditto

&gt; WebCore/page/SpatialNavigation.cpp:297
&gt; +        return targetRect.y() &lt; curRect.bottom() || targetRect.y() - curRect.bottom() &gt; viewSize.height();

ditto

&gt; WebCore/page/SpatialNavigation.cpp:524
&gt; +bool scrollInDirection(Node* container, FocusDirection direction, const FocusCandidate&amp;)

I wish, if possible you keep using the enclosingScrollableBox logic in FocusCandidate.

That way you should just do

scrollInDirection(direction, focusCandidate);

focuscandidate would have a reference for the &apos;container&apos; node.

&gt; WebCore/page/SpatialNavigation.cpp:653
&gt; +Node* scrollableOrFrameParentForNodeAndDirection(FocusDirection direction, Node* node)

FocusCandidate POD has a enclosingScrollableBox. Why not using this?

&gt; WebCore/page/SpatialNavigation.cpp:659
&gt; +        if (parent-&gt;isDocumentNode())
&gt; +            parent = static_cast&lt;Document*&gt;(parent)-&gt;document()-&gt;frame()-&gt;ownerElement();

put a &apos;break&apos; right below here, and remove the isDocumentNode check from the loop condition.

&gt; WebCore/page/SpatialNavigation.cpp:673
&gt; +    if (!container-&gt;renderBox() || !container-&gt;renderBox()-&gt;canBeScrolledAndHasScrollableArea())
&gt; +        return false;

why not use isScrollableContainerNode() ?

&gt; WebCore/page/SpatialNavigation.cpp:695
&gt; +    if ((direction == FocusDirectionLeft || direction == FocusDirectionRight) &amp;&amp; !frame-&gt;view()-&gt;horizontalScrollbar())
&gt; +        return false;

Will it work with scrollbar policy thing of the Qt API? It is toggled OFF for WRT.

&gt; WebCore/page/SpatialNavigation.cpp:717
&gt; +IntRect nodeRectInAbsCoords(Node* node, bool ignoreBorder)

Abs =&gt; Absolute

&gt; WebCore/page/SpatialNavigation.cpp:732
&gt; +    for (Frame* frame = node-&gt;document()-&gt;frame(); frame; frame = frame-&gt;tree()-&gt;parent()) {
&gt; +        if (Element* element = static_cast&lt;Element*&gt;(frame-&gt;ownerElement())) {
&gt; +            do {
&gt; +                rect.move(element-&gt;offsetLeft(), element-&gt;offsetTop());
&gt; +            } while ((element = element-&gt;offsetParent()));
&gt; +            rect.move((-frame-&gt;view()-&gt;scrollOffset()));
&gt; +        }
&gt; +    }

This steps are duplicated here and in frameRectInAbsCoords. Lets make it a helper.

&gt; WebCore/page/SpatialNavigation.cpp:734
&gt; +    // For authors that use border indtead of outline in their CSS, we compensate by ignoring the border when calculating

typo: inStead

&gt; WebCore/page/SpatialNavigation.cpp:744
&gt; +IntRect frameRectInAbsCoords(Frame* frame)

Abs -&gt; Absolute.

&gt; WebCore/page/SpatialNavigation.cpp:755
&gt; +    for (; frame; frame = frame-&gt;tree()-&gt;parent()) {
&gt; +        if (Element* element = static_cast&lt;Element*&gt;(frame-&gt;ownerElement())) {
&gt; +            do {
&gt; +                rect.move(element-&gt;offsetLeft(), element-&gt;offsetTop());
&gt; +            } while ((element = element-&gt;offsetParent()));
&gt; +            rect.move((-frame-&gt;view()-&gt;scrollOffset()));
&gt; +        }
&gt; +    }

Duplicated code.

&gt; WebCore/page/SpatialNavigation.cpp:816
&gt; +void distanceDataForNode(FocusDirection direction, const IntRect&amp; startingRect, FocusCandidate&amp; candidate)

In my opinion,the signature of this method is inconsistent: you should be either pass the direction and both nodes OR the direction and both rects.

Maybe we need this first, where &quot;startingNode&quot; would be &quot;FocusCandidate focusedNode&quot;. If there is not current focused not, focusedNode.isNull() would catch it and then you get your wanted starting rect from within this method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309272</commentid>
    <comment_count>17</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-15 07:29:36 -0800</bug_when>
    <thetext>(In reply to comment #16)
Thank you for the review, my comments are below. 

&gt; &gt; WebCore/page/SpatialNavigation.cpp:291
&gt; &gt; +        return curRect.x() &lt; targetRect.right() || curRect.x() - targetRect.right() &gt; viewSize.width();
&gt; 
&gt; &quot;curRect.x() &lt; targetRect.right()&quot;. This should not be tested here OR the method has to be renamed. iirc there were other methods that would catch these cases.
 
I will rename the method to reflect the fact that we do not want to select elements that are more than a full screen away. 
There is no other place that this is checked. If I remove this, and there is an element in full alignment, we will scroll all the way down to it, and will refuse any other element that is closer, but not in full alignment.

&gt; &gt; WebCore/page/SpatialNavigation.cpp:524
&gt; &gt; +bool scrollInDirection(Node* container, FocusDirection direction, const FocusCandidate&amp;)
&gt; 
&gt; I wish, if possible you keep using the enclosingScrollableBox logic in FocusCandidate.
&gt; 
Good idea, I will change FocusCandidate to include all the necessary information.

&gt; &gt; WebCore/page/SpatialNavigation.cpp:653
&gt; &gt; +Node* scrollableOrFrameParentForNodeAndDirection(FocusDirection direction, Node* node)
&gt; 
&gt; FocusCandidate POD has a enclosingScrollableBox. Why not using this?

This is used during the initialization, before we have a FocusCandidate.

 
&gt; &gt; WebCore/page/SpatialNavigation.cpp:659
&gt; &gt; +        if (parent-&gt;isDocumentNode())
&gt; &gt; +            parent = static_cast&lt;Document*&gt;(parent)-&gt;document()-&gt;frame()-&gt;ownerElement();
&gt; 
&gt; put a &apos;break&apos; right below here, and remove the isDocumentNode check from the loop condition.
&gt; 
Cannot do that:-) The check you are looking at is for the _current_ node, if we start from a document node, we want to ignore it and keep going up the parent tree. I will add a comment to explain that better.

&gt; 
&gt; &gt; WebCore/page/SpatialNavigation.cpp:695
&gt; &gt; +    if ((direction == FocusDirectionLeft || direction == FocusDirectionRight) &amp;&amp; !frame-&gt;view()-&gt;horizontalScrollbar())
&gt; &gt; +        return false;
&gt; 
&gt; Will it work with scrollbar policy thing of the Qt API? It is toggled OFF for WRT.
In my Symbian build of WRT there are scrollbars, I need to check what is going on :-) 

&gt; 
&gt; &gt; WebCore/page/SpatialNavigation.cpp:816
&gt; &gt; +void distanceDataForNode(FocusDirection direction, const IntRect&amp; startingRect, FocusCandidate&amp; candidate)
&gt; 
&gt; In my opinion,the signature of this method is inconsistent: you should be either pass the direction and both nodes OR the direction and both rects.
&gt; 
&gt; Maybe we need this first, where &quot;startingNode&quot; would be &quot;FocusCandidate focusedNode&quot;. If there is not current focused not, focusedNode.isNull() would catch it and then you get your wanted starting rect from within this method.
ok

I found a problem with the way I am detecting divs with overflow:hidden, so I will fix that before submitting a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309552</commentid>
    <comment_count>18</comment_count>
      <attachid>73954</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-15 20:01:17 -0800</bug_when>
    <thetext>Created attachment 73954
Patch - code only

This patch addresses comment #16. Due to the size of the patch it contains only code changes, the tests changes are coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309553</commentid>
    <comment_count>19</comment_count>
      <attachid>73955</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-15 20:02:44 -0800</bug_when>
    <thetext>Created attachment 73955
Patch - tests changes only.

This patch contains test changes only, they were split from https://bugs.webkit.org/attachment.cgi?id=73954&amp;action=edit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309588</commentid>
    <comment_count>20</comment_count>
      <attachid>73954</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-15 22:18:45 -0800</bug_when>
    <thetext>Comment on attachment 73954
Patch - code only

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

Great! ... but we are still missing some stuff. One more batch needed.

&gt; WebCore/page/FocusController.cpp:783
&gt; +            rect = nodeRectInAbsoluteCoordinates(focusedNode, true);

Add a comment here explaining the bool.

rect = nodeRectInAbsoluteCoordinates(focusedNode, true /* ignore border */);

&gt; WebCore/page/FocusController.cpp:817
&gt; +bool FocusController::navigateIn4WayDirection(FocusDirection direction, KeyboardEvent* event)

I would really like a better name here. Why not keep the previous name?

&gt; WebCore/page/FocusController.cpp:833
&gt; +        container = scrollableOrFrameParentForNodeAndDirection(direction, focusedNode);
&gt; +        startingRect = nodeRectInAbsoluteCoordinates(focusedNode, true);

On IRC we talked about renamed FocusableCandidate to FocusableContent. It would have an additional IntRect, and Node could be 0. The &apos;container&apos; above would be the FocusableContent::scrollableEnclosingNode. Does it make sense to implement, so it all gets consistent?

ps: Add a comment explaining the bool here too.

&gt; WebCore/page/FocusController.cpp:836
&gt; +    bool consumed = false;

what is consumed?

&gt; WebCore/page/FocusController.cpp:841
&gt; +        startingRect = nodeRectInAbsoluteCoordinates(container, true);

Comment for the bool.

&gt; WebCore/page/FocusController.cpp:844
&gt; +    } while (!consumed &amp;&amp; container);
&gt; +    return consumed;

Add a line between these two.

&gt; WebCore/page/SpatialNavigation.cpp:64
&gt; +    , rect(nodeRectInAbsoluteCoordinates(n, true))

Please add a &quot;/* */&quot; comment explaining the bool.

&gt; WebCore/page/SpatialNavigation.cpp:301
&gt; +{

Could you consider making use of isRectInDirection() all over this method, instead of &quot;curRect.x() &lt; targetRect.right()&quot; , &quot;targetRect.x() &lt; curRect.right()&quot;...

It made practical results better for me, back on time.

&gt; WebCore/page/SpatialNavigation.cpp:494
&gt; +    default:
&gt; +        break;
&gt; +    }

Add an assert_not_reached here, and return :)

&gt; WebCore/page/SpatialNavigation.cpp:528
&gt; +            ASSERT_NOT_REACHED();

add a &apos;return&apos; here as well.

&gt; WebCore/page/SpatialNavigation.cpp:564
&gt; +            ASSERT_NOT_REACHED();

&apos;return&apos; here too.

&gt; WebCore/page/SpatialNavigation.cpp:569
&gt; +
&gt; +        return true;

Remove this empty line.

&gt; WebCore/page/SpatialNavigation.cpp:667
&gt; +        if (parent-&gt;isDocumentNode()) // This is true only if node is a document node.

I would remove this comment.

&gt; WebCore/page/SpatialNavigation.cpp:672
&gt; +            parent = parent-&gt;parentNode();
&gt; +    } while (parent &amp;&amp; !canScrollInDirection(direction, parent) &amp;&amp; !parent-&gt;isDocumentNode());
&gt; +    return parent;

Empty line between this two.

&gt; WebCore/page/SpatialNavigation.cpp:705
&gt; +    frame-&gt;view()-&gt;calculateScrollbarModesForLayout(horizontalMode, verticalMode);

Maybe FrameView::calculateScrollbarModesForLayout does not consider the case when Webkit side disabled the scrollbars? See ScrollView::scrollbarModes()...

&gt; WebCore/page/SpatialNavigation.cpp:788
&gt; +        ASSERT_NOT_REACHED();

&apos;return&apos; here too.

&gt; WebCore/page/SpatialNavigation.cpp:848
&gt; +    switch (direction) {
&gt; +    case FocusDirectionLeft:
&gt; +        if (nodeRect.right() &gt; currentRect.x())
&gt; +            return;
&gt; +        break;
&gt; +    case FocusDirectionUp:
&gt; +        if (nodeRect.bottom() &gt; currentRect.y())
&gt; +            return;
&gt; +        break;
&gt; +    case FocusDirectionRight:
&gt; +        if (nodeRect.x() &lt; currentRect.right())
&gt; +            return;
&gt; +        break;
&gt; +    case FocusDirectionDown:
&gt; +        if (nodeRect.y() &lt; currentRect.bottom())
&gt; +            return;

are not you doing these checks in areRectsMoreThanFullScreenApart?

&gt; WebCore/page/SpatialNavigation.cpp:851
&gt; +        ASSERT_NOT_REACHED();

return here.

&gt; WebCore/page/SpatialNavigation.cpp:857
&gt; +    int sameAxisDist = 0;
&gt; +    int otherAxisDist = 0;

Lets spell out &apos;Dist&apos;.

&gt; WebCore/page/SpatialNavigation.cpp:898
&gt; +    IntRect candidateRect = nodeRectInAbsoluteCoordinates(candidate.node);

do not need to do this. Just use candidate.rect ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309589</commentid>
    <comment_count>21</comment_count>
      <attachid>73955</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-15 22:19:44 -0800</bug_when>
    <thetext>Comment on attachment 73955
Patch - tests changes only.

Yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309696</commentid>
    <comment_count>22</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-16 06:00:27 -0800</bug_when>
    <thetext>(In reply to comment #20)
Thanks for reviewing at 1:30 in the morning :-) A new patch is coming as soon as I am done compiling and running some tests. 

&gt; &gt; WebCore/page/FocusController.cpp:817
&gt; &gt; +bool FocusController::navigateIn4WayDirection(FocusDirection direction, KeyboardEvent* event)
&gt; 
&gt; I would really like a better name here. Why not keep the previous name?
I like the old name better too :-)
 
&gt; &gt; WebCore/page/FocusController.cpp:833
&gt; &gt; +        container = scrollableOrFrameParentForNodeAndDirection(direction, focusedNode);
&gt; &gt; +        startingRect = nodeRectInAbsoluteCoordinates(focusedNode, true);
&gt; 
&gt; On IRC we talked about renamed FocusableCandidate to FocusableContent. It would have an additional IntRect, and Node could be 0. The &apos;container&apos; above would be the FocusableContent::scrollableEnclosingNode. Does it make sense to implement, so it all gets consistent?

I did add a IntRect to FocusCandidate. The code you are pointing at is the initialization of the currently focused node, before we have a focus candidate. I kind of like the existing logic where we have a FocusCandidate, and a &quot;contender&quot; FocusCandidate. Do you really think we should wrap the currently focused node and its container with a FocusCandidate? That will break the current logic.
 
&gt; &gt; WebCore/page/FocusController.cpp:836
&gt; &gt; +    bool consumed = false;
&gt; 
&gt; what is consumed?
The keyboard event. If we move focus or scroll, we also consume the event. If we don&apos;t do any of those, we don&apos;t consume the keyboard event.

&gt; &gt; WebCore/page/SpatialNavigation.cpp:494
&gt; &gt; +    default:
&gt; &gt; +        break;
&gt; &gt; +    }
&gt; 
&gt; Add an assert_not_reached here, and return :)
&gt; 
&gt; &gt; WebCore/page/SpatialNavigation.cpp:528
&gt; &gt; +            ASSERT_NOT_REACHED();
&gt; 
&gt; add a &apos;return&apos; here as well.
Sometimes we call this without direction, mainly when we deal with overflow:hidden, and no scrolling is involved.

&gt; 
&gt; &gt; WebCore/page/SpatialNavigation.cpp:569
&gt; &gt; +
&gt; &gt; +        return true;
&gt; 
&gt; Remove this empty line.
&gt; 
&gt; &gt; WebCore/page/SpatialNavigation.cpp:667
&gt; &gt; +        if (parent-&gt;isDocumentNode()) // This is true only if node is a document node.
&gt; 
&gt; I would remove this comment.
&gt; 
&gt; &gt; WebCore/page/SpatialNavigation.cpp:672
&gt; &gt; +            parent = parent-&gt;parentNode();
&gt; &gt; +    } while (parent &amp;&amp; !canScrollInDirection(direction, parent) &amp;&amp; !parent-&gt;isDocumentNode());
&gt; &gt; +    return parent;
&gt; 
&gt; Empty line between this two.
&gt; 
&gt; &gt; WebCore/page/SpatialNavigation.cpp:705
&gt; &gt; +    frame-&gt;view()-&gt;calculateScrollbarModesForLayout(horizontalMode, verticalMode);
&gt; 
&gt; Maybe FrameView::calculateScrollbarModesForLayout does not consider the case when Webkit side disabled the scrollbars? See ScrollView::scrollbarModes()...
&gt; 
During my testing I called the API to turn off scrollbars (hacked FrameLoaderClientQt to do that for every frame) and this gave the correct results.

&gt; &gt; WebCore/page/SpatialNavigation.cpp:848
&gt; &gt; +    switch (direction) {
&gt; &gt; +    case FocusDirectionLeft:
&gt; &gt; +        if (nodeRect.right() &gt; currentRect.x())
&gt; &gt; +            return;
&gt; &gt; +        break;
&gt; &gt; +    case FocusDirectionUp:
&gt; &gt; +        if (nodeRect.bottom() &gt; currentRect.y())
&gt; &gt; +            return;
&gt; &gt; +        break;
&gt; &gt; +    case FocusDirectionRight:
&gt; &gt; +        if (nodeRect.x() &lt; currentRect.right())
&gt; &gt; +            return;
&gt; &gt; +        break;
&gt; &gt; +    case FocusDirectionDown:
&gt; &gt; +        if (nodeRect.y() &lt; currentRect.bottom())
&gt; &gt; +            return;
&gt; 
&gt; are not you doing these checks in areRectsMoreThanFullScreenApart?
Sorry :-) Removed the check from areRectsMoreThanFullScreenApart() since this is done first.

&gt; &gt; WebCore/page/SpatialNavigation.cpp:898
&gt; &gt; +    IntRect candidateRect = nodeRectInAbsoluteCoordinates(candidate.node);
&gt; 
&gt; do not need to do this. Just use candidate.rect ?
Good catch.

One last comment, I tried using the middle point before started I using entry/exit points, and the results seem to not be as good as using entry/exit points. I&apos;d like to not use middle point, so I modified isRectInDirection accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309712</commentid>
    <comment_count>23</comment_count>
      <attachid>73990</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-16 07:06:35 -0800</bug_when>
    <thetext>Created attachment 73990
Patch- code only

Address comment #20.
I will update the patch in https://bugs.webkit.org/show_bug.cgi?id=49442 once we finalize this, and commit them all together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309713</commentid>
    <comment_count>24</comment_count>
      <attachid>73991</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-16 07:10:05 -0800</bug_when>
    <thetext>Created attachment 73991
Patch - code only

When will I learn to run check-webkit-style _before_ attaching a patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309714</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-16 07:10:22 -0800</bug_when>
    <thetext>Attachment 73990 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/ChangeLog&apos;, u&apos;WebCore/page/FocusController.cpp&apos;, u&apos;WebCore/page/FocusController.h&apos;, u&apos;WebCore/page/FrameView.h&apos;, u&apos;WebCore/page/SpatialNavigation.cpp&apos;, u&apos;WebCore/page/SpatialNavigation.h&apos;]&quot; exit_code: 1
WebCore/page/SpatialNavigation.cpp:449:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309717</commentid>
    <comment_count>26</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-11-16 07:24:41 -0800</bug_when>
    <thetext>Attachment 73990 did not build on win:
Build output: http://queues.webkit.org/results/6004088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309720</commentid>
    <comment_count>27</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-11-16 07:41:05 -0800</bug_when>
    <thetext>Attachment 73991 did not build on win:
Build output: http://queues.webkit.org/results/6012090</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309722</commentid>
    <comment_count>28</comment_count>
      <attachid>73993</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-16 07:42:54 -0800</bug_when>
    <thetext>Created attachment 73993
Patch - code only

Build fix for windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311285</commentid>
    <comment_count>29</comment_count>
      <attachid>73993</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-18 21:16:37 -0800</bug_when>
    <thetext>Comment on attachment 73993
Patch - code only

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

&gt; WebCore/page/FocusController.cpp:638
&gt; +        HitTestResult result = candidate.node-&gt;document()-&gt;page()-&gt;mainFrame()-&gt;eventHandler()-&gt;hitTestResultAtPoint(IntPoint(x, y), false, true);

page()-&gt;eventHandler()

&gt; WebCore/page/FocusController.cpp:700
&gt; +    // The starting rect is the rect of the focused node, in document coordinates.
&gt; +    // Compose a virtual starting rect if there is no focused node or if it is off screen.
&gt; +    // The virtual rect is the edge of the container or frame. We select which
&gt; +    // edge depending on the direction of the navigation.
&gt; +    IntRect newStartingRect = startingRect;
&gt; +
&gt; +    if (startingRect.isEmpty()) {
&gt; +        newStartingRect = nodeRectInAbsoluteCoordinates(container);
&gt; +        switch (direction) {
&gt; +        case FocusDirectionLeft:
&gt; +            newStartingRect.setX(newStartingRect.right());
&gt; +            newStartingRect.setWidth(0);
&gt; +            break;
&gt; +        case FocusDirectionUp:
&gt; +            newStartingRect.setY(newStartingRect.bottom());
&gt; +            newStartingRect.setHeight(0);
&gt; +            break;
&gt; +        case FocusDirectionRight:
&gt; +            newStartingRect.setWidth(0);
&gt; +            break;
&gt; +        case FocusDirectionDown:
&gt; +            newStartingRect.setHeight(0);
&gt; +            break;
&gt; +        default:
&gt; +            ASSERT_NOT_REACHED();
&gt; +        }
&gt; +    }

Make it a helper.

&gt; WebCore/page/FocusController.cpp:709
&gt; +    if (focusCandidate.isNull()) {
&gt; +        if (canScrollInDirection(direction, container)) {
&gt; +            // Nothing to focus, scroll if possible.
&gt; +            scrollInDirection(container, direction);

Lets change the logic here as following:

if (focusCandidate.isNull()) {

  // Nothing to focus, scroll if possible.
  if (scrollInDirection)
  ...
}

From within scrollInDirection, you check canScrollInDirection, bailing out earlier if it can not. Adjust the following &apos;return&apos; calls accordingly.

&gt; WebCore/page/FocusController.cpp:719
&gt; +        if (hasOffscreenRect(focusCandidate.node, direction)) {
&gt; +            Frame* frame = focusCandidate.node-&gt;document()-&gt;view()-&gt;frame();
&gt; +            scrollInDirection(frame-&gt;document(), direction);
&gt; +            return true;

You have two scrollInDirection methods. Here you should just use the one that takes Frame*

Frame* frame = focusCandidate.node-&gt;document()-&gt;view()-&gt;frame();
scrollInDirection(frame, direction);
return true;

or make it:

Document* document = focusCandidate.node-&gt;document();
scrollInDirection(document, direction);
return true;

&gt; WebCore/page/FocusController.cpp:725
&gt; +        IntRect rect;
&gt; +        Node* focusedNode = focusedOrMainFrame()-&gt;document()-&gt;focusedNode();
&gt; +        if (focusedNode &amp;&amp; !hasOffscreenRect(focusedNode))
&gt; +            rect = nodeRectInAbsoluteCoordinates(focusedNode, true /* ignore border */);

what happens here if you have no focused node, so &apos;rect&apos; is empty. Also &apos;rect&apos; is a too generic name in this context. Lets give it a more descriptive name.

&gt; WebCore/page/FocusController.cpp:726
&gt; +        ASSERT(static_cast&lt;HTMLFrameOwnerElement*&gt;(focusCandidate.node)-&gt;contentFrame());

Move this assert to outside the outer if here. If FrameOwnerElement is not a contentFrame it just be no-op.

it should be 

if (focusCandidate.node-&gt;isFrameOwnerElement() &amp;&amp; static_cast&lt;HTMLFrameOwnerElement*&gt;(focusableCandidate.node)-&gt;contentFrame())

&gt; WebCore/page/FocusController.cpp:727
&gt; +        static_cast&lt;HTMLFrameOwnerElement*&gt;(focusCandidate.node)-&gt;contentFrame()-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets();

Why not just do 

focusCandidate.node-&gt;document()?

&gt; WebCore/page/FocusController.cpp:728
&gt; +        if (!navigateInContainer(static_cast&lt;HTMLFrameOwnerElement*&gt;(focusCandidate.node)-&gt;contentFrame()-&gt;document(), rect, direction, event))

Same here.

Also, let same &quot;Document* focusedDocument = focusCandidate.node-&gt;document()&quot; in a auxiliar variable to avoid make this cast so many times.

&gt; WebCore/page/FocusController.cpp:729
&gt; +            // The new frame had nothing interesting, skip past it and try again.

&quot;skip past it&quot; sounds strange.

Also put {} around the &apos;if&apos; here.

&gt; WebCore/page/FocusController.cpp:747
&gt; +        scrollInDirection(container, direction);

you are ignoring the return value here. Should you?

&gt; WebCore/page/FrameView.h:238
&gt; +    void calculateScrollbarModesForLayout(ScrollbarMode&amp; hMode, ScrollbarMode&amp; vMode);

Your changelog should explain this change. Is this method designed to be public?

&gt; WebCore/page/SpatialNavigation.cpp:491
&gt; +    default:
&gt; +        break;

It is not clear to me why you do not assert, and bail out. Could you explain?

&gt; WebCore/page/SpatialNavigation.cpp:507
&gt; +    ASSERT(frame &amp;&amp; canScrollInDirection(direction, frame-&gt;document()));

you should be assert &quot;canScrollInDirection&quot; here. it should actually early return here.

&gt; WebCore/page/SpatialNavigation.cpp:560
&gt; +        switch (direction) {
&gt; +        case FocusDirectionLeft:
&gt; +            dx = - min(Scrollbar::pixelsPerLineStep(), container-&gt;renderBox()-&gt;scrollLeft());
&gt; +            break;
&gt; +        case FocusDirectionRight:
&gt; +            ASSERT(container-&gt;renderBox()-&gt;scrollWidth() &gt; (container-&gt;renderBox()-&gt;scrollLeft() + container-&gt;renderBox()-&gt;clientWidth()));
&gt; +            dx = min(Scrollbar::pixelsPerLineStep(), container-&gt;renderBox()-&gt;scrollWidth() - (container-&gt;renderBox()-&gt;scrollLeft() + container-&gt;renderBox()-&gt;clientWidth()));
&gt; +            break;
&gt; +        case FocusDirectionUp:
&gt; +            dy = - min(Scrollbar::pixelsPerLineStep(), container-&gt;renderBox()-&gt;scrollTop());
&gt; +            break;
&gt; +        case FocusDirectionDown:
&gt; +            ASSERT(container-&gt;renderBox()-&gt;scrollHeight() - (container-&gt;renderBox()-&gt;scrollTop() + container-&gt;renderBox()-&gt;clientHeight()));
&gt; +            dy = min(Scrollbar::pixelsPerLineStep(), container-&gt;renderBox()-&gt;scrollHeight() - (container-&gt;renderBox()-&gt;scrollTop() + container-&gt;renderBox()-&gt;clientHeight()));

why do we need the minimal between the scrollable offset available and Scrollbar::pixelPerLineStep ?

Just do ScrollGranularity line, and the rest will be handled for you.

&gt; WebCore/page/SpatialNavigation.cpp:567
&gt; +        container-&gt;renderBox()-&gt;enclosingLayer()-&gt;scrollByRecursively(dx, dy);

Why not do page()-&gt;eventHandler()-&gt;scrollRecursively( ... , ..., node), where &apos;node&apos; is the &apos;startingNode&apos;. It does that enclosing layer does and more.

&gt; WebCore/page/SpatialNavigation.cpp:628
&gt; +bool isScrollableContainerNode(const Node* node)

why does it need to be const here and not in the other method we are passing a Node*?

&gt; WebCore/page/SpatialNavigation.cpp:767
&gt; +// Exit point is the closest point in the startingRect, depending on the direction of the navigation.
&gt; +// Entry point is the closest point in the candidate node, depending on the direction of the navigation.

Lets rephrase this comment.

&gt; WebCore/page/SpatialNavigation.h:133
&gt; +Node* scrollableOrFrameParentForNodeAndDirection(FocusDirection, Node* node);

Lets name it either scrollableEnclosingBoxOrParentFrameForNodeInDirection or scrollableOrParentFrameForNodeInDirection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311553</commentid>
    <comment_count>30</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-19 10:20:47 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 73993 [details])
Thank you for the review, Antonio. Your comments are very good feedback to me, but I would like to address a few comments here, and explain why things were done the way I did them.

I added ASSERTs in the code to make sure we never get &quot;stuck&quot;. Some of the comments below will result in removing those ASSERTs, but I would really like to avoid that. If we get &quot;stuck&quot; in the algorithm, the user will press an arrow key and will get no feedback, which is a very frustrating situation. Please consider if we should really remove those ASSERTs.

I added code to control the scrolling very tightly. A suggestion below is to rely on existing API for scrolling, and not use my own code. The reason I did not do that is that there are cases in which the existing API was scroll the parent when that was not needed. The result was not pretty :-(

I tracked the unwanted scrolling to RenderLayer::scrollRectToVisible line 1487:
parentLayer-&gt;scrollRectToVisible(newRect, scrollToAnchor, alignX, alignY);
Sometimes it scrolls the parent unnecessarily. We could look at why it does that separately.

I will update the patch soon, and ask you to review again :-)

&gt;&gt; WebCore/page/FocusController.cpp:638
&gt;&gt; +        HitTestResult result = &gt;candidate.node-&gt;document()-&gt;page()-&gt;mainFrame()-&gt;eventHandler()-&gt;hitTestResult&gt;AtPoint(IntPoint(x, y), false, true);
&gt;
&gt;page()-&gt;eventHandler()
page does not have a eventHandler ?
 
&gt; &gt; WebCore/page/FocusController.cpp:709
&gt; From within scrollInDirection, you check canScrollInDirection, bailing out earlier if it can not. Adjust the following &apos;return&apos; calls accordingly.

Currently, I do not check if can scroll from inside scrollInDirection. There is an ASSERT there, to make sure scrollInDirection is called _ONLY_ if we can scroll. There is only one call site that calls canScrollInDirection before scrollInDirection. That happens only if we found nothing. If I make the change, I will loose the ASSERT, and that will allow bugs to creep, where if someone forgets to check return value, we think we scroll, but in effect we get &quot;stuck&quot;. That will leave the user not knowing why the browser ignored his click.

&gt; &gt; WebCore/page/FocusController.cpp:725
&gt; what happens here if you have no focused node, so &apos;rect&apos; is empty. Also &apos;rect&apos; is a too generic name in this context. Lets give it a more descriptive name.
Changed the name to &quot;startingRect&quot;. If the startingRect is empty, we construct a virtual starting rect. 


&gt; &gt; WebCore/page/FocusController.cpp:727
&gt; &gt; +        static_cast&lt;HTMLFrameOwnerElement*&gt;(focusCandidate.node)-&gt;contentFrame()-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets();
&gt; 
&gt; Why not just do 
&gt; 
&gt; focusCandidate.node-&gt;document()?

focusCandidate.node-&gt;document() returns the parent document of the iframe element, here I need the document inside the iframe itself.

&gt; &gt; WebCore/page/FocusController.cpp:729
&gt; Also put {} around the &apos;if&apos; here.
&quot;Style police&quot; does not allow that :-)

&gt; &gt; WebCore/page/FocusController.cpp:747
&gt; &gt; +        scrollInDirection(container, direction);
&gt; 
&gt; you are ignoring the return value here. Should you?
Yes. 
A scrollable container is considered in the algorithm only if it can scroll in the specific direction. Otherwise, it is treated like any non-scrollable node. I added the ASSERT in scrollInDirection to make sure that we keep the logic this way. So if the ASSERT was not hit, I can be sure that we scrolled.

&gt; 
&gt; &gt; WebCore/page/FrameView.h:238
&gt; &gt; +    void calculateScrollbarModesForLayout(ScrollbarMode&amp; hMode, ScrollbarMode&amp; vMode);
&gt; 
&gt; Your changelog should explain this change. Is this method designed to be public?
I will explain this in the changelog.
This method knows if a frame can scroll, without taking the scrollMode API into account (we discussed this API on IRC). We really need a public method to tell us if we can scroll the frame or not, and this function is perfect for that purpose.

&gt; &gt; WebCore/page/SpatialNavigation.cpp:491
&gt; &gt; +    default:
&gt; &gt; +        break;
&gt; 
&gt; It is not clear to me why you do not assert, and bail out. Could you explain?
&gt; 
We use this method for 2 different situations. (1) If the container of the node is scrollable, we pass the direction, and we want to know if the node will be offscreen after we scroll (if needed). (2) If the container has overflow:hidden,  we want to know if the node is offscreen without scrolling, because scrolling is not allowed.
I updated the comment to explain that.

&gt; &gt; WebCore/page/SpatialNavigation.cpp:507
&gt; &gt; +    ASSERT(frame &amp;&amp; canScrollInDirection(direction, frame-&gt;document()));
&gt; 
&gt; you should be assert &quot;canScrollInDirection&quot; here. it should actually early return here.
See explanation above :-)

&gt; &gt; WebCore/page/SpatialNavigation.cpp:560
&gt; 
&gt; why do we need the minimal between the scrollable offset available and Scrollbar::pixelPerLineStep ?
&gt; 
&gt; Just do ScrollGranularity line, and the rest will be handled for you.
My testing showed unwanted scrolling of the parent container if I don&apos;t do that. 
 
&gt; &gt; WebCore/page/SpatialNavigation.cpp:567
&gt; &gt; +        container-&gt;renderBox()-&gt;enclosingLayer()-&gt;scrollByRecursively(dx, dy);
&gt; 
&gt; Why not do page()-&gt;eventHandler()-&gt;scrollRecursively( ... , ..., node), where &apos;node&apos; is the &apos;startingNode&apos;. It does that enclosing layer does and more.
Again, my testing show unwanted scrolling of the parent if I do that. We do not want the &quot;more&quot; that it gives :-) This is especially true in nested iframes.

&gt; &gt; WebCore/page/SpatialNavigation.cpp:628
&gt; &gt; +bool isScrollableContainerNode(const Node* node)
&gt; 
&gt; why does it need to be const here and not in the other method we are passing a Node*?
I tried to add const everywhere that the node is not modified. e.g. canScrollInDIrection does not modify the node, so it has a const Node*.
scrollInDirection does modify the node, so it does not have const. since canScrollInDirection calls isScrollableContainerNode, they need to be consistent or they won&apos;t compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311556</commentid>
    <comment_count>31</comment_count>
      <attachid>74401</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-19 10:31:35 -0800</bug_when>
    <thetext>Created attachment 74401
Patch - code only

Addressing comment #29.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311576</commentid>
    <comment_count>32</comment_count>
      <attachid>74401</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-19 11:13:04 -0800</bug_when>
    <thetext>Comment on attachment 74401
Patch - code only

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

&gt; WebCore/page/FocusController.cpp:712
&gt; +        if (!navigateInContainer(frameElement-&gt;contentFrame()-&gt;document(), rect, direction, event))
&gt; +            // The new frame had nothing interesting, need to find another candidate.
&gt; +            return navigateInContainer(container, nodeRectInAbsoluteCoordinates(focusCandidate.node, true), direction, event);

Please lets fix this before landing :)

One-line control clauses should not use braces unless comments are included or a single statement spans multiple lines.
Right:

if (condition) {
    // Some comment
    doIt();
}

Wrong:

if (condition)
    // Some comment
    doIt();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311606</commentid>
    <comment_count>33</comment_count>
      <attachid>74412</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-19 12:08:22 -0800</bug_when>
    <thetext>Created attachment 74412
Patch - code only

Added the braces. check-webkit-style did not complain about them, sorry for getting confused about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312167</commentid>
    <comment_count>34</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-21 14:58:03 -0800</bug_when>
    <thetext>Antonio,
besides the braces (I added them :), did you have more comments? thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312183</commentid>
    <comment_count>35</comment_count>
      <attachid>74412</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-11-21 17:06:22 -0800</bug_when>
    <thetext>Comment on attachment 74412
Patch - code only

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

&gt; WebCore/page/FocusController.cpp:606
&gt; +void updateFocusCandidateIfNeeded(FocusDirection direction, const IntRect&amp; startingRect, FocusCandidate&amp; candidate, FocusCandidate&amp; closest)

As far as I can tell, this function does not modify candidate. Can we make this const?

&gt; WebCore/page/FocusController.cpp:609
&gt; +    if (!candidate.node-&gt;isElementNode() ||!candidate.node-&gt;renderer())
&gt; +        return;

Nit: There should be a space between &apos;||&apos; and &quot;!candidate.node-&gt;renderer()&quot;. The style bot didn&apos;t seem to catch this, we should consider updating our style-checker code.

&gt; WebCore/page/FocusController.cpp:668
&gt; +    for (Node* node = container-&gt;firstChild(); node; node = (node-&gt;isFrameOwnerElement() || canScrollInDirection(direction, node)) ? node-&gt;traverseNextSibling(container) : node-&gt;traverseNextNode(container)) {
&gt; +        if ((!focusedFrame() || !focusedFrame()-&gt;document() || node != focusedFrame()-&gt;document()-&gt;focusedNode()) &amp;&amp; (node-&gt;isKeyboardFocusable(event) || node-&gt;isFrameOwnerElement() || canScrollInDirection(direction, node))) {
&gt; +            if (!node-&gt;renderer())
&gt; +                continue;
&gt; +            FocusCandidate candidate(node);
&gt; +            candidate.enclosingScrollableBox = container;
&gt; +            updateFocusCandidateIfNeeded(direction, startingRect, candidate, closest);
&gt; +        }
&gt; +    }

It is a common convention to write code using early returns/continues/breaks so as to make the code easier to read and follow its flow control.

Additionally, it is unnecessary to re-compute the focused node (i.e. focusedFrame()-&gt;document()-&gt;focusedNode()) for each iteration. Instead, we should compute it once outside of the loop-body. Then I suggest we use an early continue for when &quot;node == focusedFrame()-&gt;document()-&gt;focusedNode()&quot;. We can also further break down the if-condition into additional early continues.

Moreover, we should hoist the early-continue:

if (!node-&gt;renderer())
    continue;

out of the body for the if statement.

On another note, I wish we could simplify and/or shorten the step condition of the for-loop construct. Maybe, we should write this loop using the while-loop construct?

&gt; WebCore/page/FocusController.cpp:713
&gt; +        HTMLFrameOwnerElement* frameElement = static_cast&lt;HTMLFrameOwnerElement*&gt;(focusCandidate.node);
&gt; +        // If we have an iframe without the src attribute, it will not have a contentFrame().
&gt; +        // We should never consider such an iframe as a candidate.
&gt; +        ASSERT(frameElement-&gt;contentFrame());
&gt; +
&gt; +        if (hasOffscreenRect(focusCandidate.node, direction)) {
&gt; +            scrollInDirection(focusCandidate.node-&gt;document(), direction);
&gt; +            return true;
&gt; +        }
&gt; +        // Navigate into a new frame.
&gt; +        IntRect rect;
&gt; +        Node* focusedNode = focusedOrMainFrame()-&gt;document()-&gt;focusedNode();
&gt; +        if (focusedNode &amp;&amp; !hasOffscreenRect(focusedNode))
&gt; +            rect = nodeRectInAbsoluteCoordinates(focusedNode, true /* ignore border */);
&gt; +        frameElement-&gt;contentFrame()-&gt;document()-&gt;updateLayoutIgnorePendingStylesheets();
&gt; +        if (!navigateInContainer(frameElement-&gt;contentFrame()-&gt;document(), rect, direction, event)) {
&gt; +            // The new frame had nothing interesting, need to find another candidate.
&gt; +            return navigateInContainer(container, nodeRectInAbsoluteCoordinates(focusCandidate.node, true), direction, event);
&gt; +        }

I am unclear from the ASSERT(frameElement-&gt;contentFrame()) and the comment above it whether it is possible for frameElement-&gt;contentFrame() to be null. In particular, the second sentence of the comment seems to imply it can happen in practice. So, it seems insufficient to only ASSERT here (which is only useful in a debug build) and subsequently dereference frameElement-&gt;contentFrame(), which could be a null pointer. Can frameElement-&gt;contentFrame() be null given the context?

&gt; WebCore/page/FocusController.cpp:736
&gt; +    // We found a new focus node, navigate to it.
&gt; +    Element* element = static_cast&lt;Element*&gt;(focusCandidate.node);
&gt; +    ASSERT(element);

I suggest we use toElement() (see Element.h) instead of explicitly performing the static_cast and null check here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312193</commentid>
    <comment_count>36</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-21 18:34:26 -0800</bug_when>
    <thetext>(In reply to comment #35)
Thanks for reviewing, Daniel!
I&apos;ll update the patch according to your recommendations, but wanted to explain the ASSERT you pointed out.
It is possible to have an iframe without a src attribute, and that will cause us to have a HTMLFrameOwnerElement without contentFrame().

However, I am handling this situation in the second if in updateFocusCandidateIfNeeded.
The ASSERT you saw is there to make sure that in the future, people will not change the code in a way that will cause us to select an empty iframe as the next focus element.
I hope I was able to explain this properly, if it is still not clear, I am happy to continue discussing this, here or on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312202</commentid>
    <comment_count>37</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-21 19:25:35 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 74412 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74412&amp;action=review
&gt; 
&gt; &gt; WebCore/page/FocusController.cpp:606
&gt; &gt; +void updateFocusCandidateIfNeeded(FocusDirection direction, const IntRect&amp; startingRect, FocusCandidate&amp; candidate, FocusCandidate&amp; closest)
&gt; 
&gt; As far as I can tell, this function does not modify candidate. Can we make this const?
&gt; 
Unfortunately, this causes a chain reaction that does not compile ATM. Mainly because we have 2 copies of the method distanceDataForNode, and that causes the compiler to not be able to convert FocusCandidate to const FocusCandidate.
If you don&apos;t mind, I will defer adding the const to https://bugs.webkit.org/show_bug.cgi?id=49442, in which I am removing code that becomes obsolete after this patch. I split it out because this patch is already huge :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312205</commentid>
    <comment_count>38</comment_count>
      <attachid>74526</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-11-21 19:49:33 -0800</bug_when>
    <thetext>Created attachment 74526
Patch - code only

Address comment #35</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312218</commentid>
    <comment_count>39</comment_count>
      <attachid>74526</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-21 21:24:46 -0800</bug_when>
    <thetext>Comment on attachment 74526
Patch - code only

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

&gt; WebCore/ChangeLog:18
&gt; +        content of such a container. The only exception is if the container has style overflow:hidden. 
&gt; +        We will not scroll in that case.

It would be nice to have a test case for this case. I do not remember if you added it in the other bug.

&gt; WebCore/ChangeLog:21
&gt; +        With this patch, we handle z-index and positioning so that if there are 2 overlapping focusable nodes,
&gt; +        we do a hit test and only the node on top can get focus.

Same here.

&gt; WebCore/page/FocusController.cpp:679
&gt; +bool FocusController::navigateInContainer(Node* container, const IntRect&amp; startingRect, FocusDirection direction, KeyboardEvent* event)

advanceFocusDirectionallyInContainer?

&gt; WebCore/page/FocusController.cpp:687
&gt; +        newStartingRect = virtualStartingRectForDirection(direction, nodeRectInAbsoluteCoordinates(container));

Lets name it virtualRectForDirection.

&gt; WebCore/page/SpatialNavigation.cpp:543
&gt; +    if (!container-&gt;renderBox())

being a renderBox does not necessarily mean it is scrollable. Maybe

toRenderBox(container-&gt;renderer()) &amp;&amp; toRenderBox(container-&gt;renderer())-&gt;canBeScrolledAndHasScrollableArea()

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312219</commentid>
    <comment_count>40</comment_count>
      <attachid>74526</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-11-21 21:28:51 -0800</bug_when>
    <thetext>Comment on attachment 74526
Patch - code only

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

&gt; WebCore/page/FocusController.cpp:670
&gt; +        if (!(node-&gt;isKeyboardFocusable(event) || node-&gt;isFrameOwnerElement() || canScrollInDirection(direction, node)))

Nit: I would suggest pushing the negation through this expression. Then we can remove a pair of parentheses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312306</commentid>
    <comment_count>41</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-22 05:28:25 -0800</bug_when>
    <thetext>(In reply to comment #39)
Hi Antonio, thanks for reviewing (again :)

&gt; (From update of attachment 74526 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74526&amp;action=review
&gt; 
&gt; &gt; WebCore/ChangeLog:18
&gt; &gt; +        content of such a container. The only exception is if the container has style overflow:hidden. 
&gt; &gt; +        We will not scroll in that case.
&gt; 
&gt; It would be nice to have a test case for this case. I do not remember if you added it in the other bug.
&gt; 
&gt; &gt; WebCore/ChangeLog:21
&gt; &gt; +        With this patch, we handle z-index and positioning so that if there are 2 overlapping focusable nodes,
&gt; &gt; +        we do a hit test and only the node on top can get focus.
&gt; 
&gt; Same here.
&gt; 

The 2 tests that you are asking for were added in https://bugs.webkit.org/show_bug.cgi?id=49604. I will set the review flag for those tests after commiting the 2 patches from this bug.


&gt; &gt; WebCore/page/SpatialNavigation.cpp:543
&gt; &gt; +    if (!container-&gt;renderBox())
&gt; 
&gt; being a renderBox does not necessarily mean it is scrollable. Maybe
&gt; 
&gt; toRenderBox(container-&gt;renderer()) &amp;&amp; toRenderBox(container-&gt;renderer())-&gt;canBeScrolledAndHasScrollableArea()
&gt; 
&gt; ?

I call canScrollInDirection() right bellow this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312307</commentid>
    <comment_count>42</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-22 05:50:23 -0800</bug_when>
    <thetext>Committed r72522: &lt;http://trac.webkit.org/changeset/72522&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312323</commentid>
    <comment_count>43</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-22 06:50:53 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 74412 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74412&amp;action=review
&gt; 
&gt; &gt; WebCore/page/FocusController.cpp:606
&gt; &gt; +void updateFocusCandidateIfNeeded(FocusDirection direction, const IntRect&amp; startingRect, FocusCandidate&amp; candidate, FocusCandidate&amp; closest)
&gt; 
&gt; As far as I can tell, this function does not modify candidate. Can we make this const?

I misinterpreted the compile error I received when I tried to add the const. candidate actually is being modified in this function, inside the call to distanceDataForNode. Sorry for not explaining it correctly in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312356</commentid>
    <comment_count>44</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-11-22 08:49:13 -0800</bug_when>
    <thetext>Revision r72522 cherry-picked into qtwebkit-2.1 with commit a55b974 &lt;http://gitorious.org/webkit/qtwebkit/commit/a55b974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312416</commentid>
    <comment_count>45</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-11-22 11:04:48 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; Revision r72522 cherry-picked into qtwebkit-2.1 with commit a55b974 &lt;http://gitorious.org/webkit/qtwebkit/commit/a55b974&gt;

Had to revert it because it doesn&apos;t build in qtwebkit-2.1 (depends on changes from bug 48157). To apply it to qtwebkit-2.1 we&apos;ll need a backported patch. Sorry for the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312418</commentid>
    <comment_count>46</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-22 11:11:28 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; (In reply to comment #44)
&gt; &gt; Revision r72522 cherry-picked into qtwebkit-2.1 with commit a55b974 &lt;http://gitorious.org/webkit/qtwebkit/commit/a55b974&gt;
&gt; 
&gt; Had to revert it because it doesn&apos;t build in qtwebkit-2.1 (depends on changes from bug 48157). To apply it to qtwebkit-2.1 we&apos;ll need a backported patch. Sorry for the noise.

Can you replace FocusController.cpp line 744 
toElement(focusCandidate.node) with 
static_cast&lt;Element*&gt;(focusCandidate.node) ?

After that it should compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312426</commentid>
    <comment_count>47</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-11-22 11:21:03 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; (In reply to comment #44)
&gt; &gt; &gt; Revision r72522 cherry-picked into qtwebkit-2.1 with commit a55b974 &lt;http://gitorious.org/webkit/qtwebkit/commit/a55b974&gt;
&gt; &gt; 
&gt; &gt; Had to revert it because it doesn&apos;t build in qtwebkit-2.1 (depends on changes from bug 48157). To apply it to qtwebkit-2.1 we&apos;ll need a backported patch. Sorry for the noise.
&gt; 
&gt; Can you replace FocusController.cpp line 744 
&gt; toElement(focusCandidate.node) with 
&gt; static_cast&lt;Element*&gt;(focusCandidate.node) ?
&gt; 
&gt; After that it should compile.

That&apos;s the trivial part. The complex part is the requirement of WebCore::FrameView::calculateScrollbarModesForLayout(), which is not on qtwebkit-2.1 (see bug 48157).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312955</commentid>
    <comment_count>48</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-11-23 11:47:17 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; That&apos;s the trivial part. The complex part is the requirement of WebCore::FrameView::calculateScrollbarModesForLayout(), which is not on qtwebkit-2.1 (see bug 48157).

bug 48157, on the other hand requires the changes from bug 47285 and bug 29240... we all know where it ends :-(

That&apos;s of course the view of someone unexperienced with the codebase. I believe a backport of the original patch would be simpler and is the right thing to do (but I&apos;m not the right person to do it at this point).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312956</commentid>
    <comment_count>49</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-11-23 11:51:14 -0800</bug_when>
    <thetext>There could be a patch backported to 2.1 that does not require all this chain of backporting.

Basically, it is because yael addressed a request I made about spatial navigation scrolling content even if the scrollbars were turned off by via QWebFrame API. We could live w/out this in 2.1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312958</commentid>
    <comment_count>50</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-11-23 11:59:03 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; There could be a patch backported to 2.1 that does not require all this chain of backporting.

Yep, that&apos;s exactly what I mean :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313099</commentid>
    <comment_count>51</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-23 18:03:33 -0800</bug_when>
    <thetext>Ademar, can you please take a look at http://gitorious.org/~yael/webkit/yaels-qtwebkit/commit/d7788b5e68b9a6909e4a6c545e4b233729921d38 ?
I ported this patch and https://bugs.webkit.org/show_bug.cgi?id=49442 to the webkit 2.1 branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313422</commentid>
    <comment_count>52</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-11-24 12:14:00 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; Ademar, can you please take a look at http://gitorious.org/~yael/webkit/yaels-qtwebkit/commit/d7788b5e68b9a6909e4a6c545e4b233729921d38 ?
&gt; I ported this patch and https://bugs.webkit.org/show_bug.cgi?id=49442 to the webkit 2.1 branch.

Great! I cherry-picked it (just ammended a more comprehensive git changelog) and pushed it to qtwebkit-2.1:

http://gitorious.org/webkit/qtwebkit/commit/0f2e0cc960f49a04e4bd86a7f36373697b660bda</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314108</commentid>
    <comment_count>53</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-26 18:14:43 -0800</bug_when>
    <thetext>Ossy told me that the patch I posted in gitorious caused 12 layout tests to fail. The patch at the following URL reverts a small part of the previous patch, and it should fix those 12 failures.

http://gitorious.org/webkit/yaels-qtwebkit/commit/00998cc63aeb9ed2e4d979797a8aefa604fa842b

Sorry for the trouble.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314470</commentid>
    <comment_count>54</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-11-29 09:48:16 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; Ossy told me that the patch I posted in gitorious caused 12 layout tests to fail. The patch at the following URL reverts a small part of the previous patch, and it should fix those 12 failures.
&gt; 
&gt; http://gitorious.org/webkit/yaels-qtwebkit/commit/00998cc63aeb9ed2e4d979797a8aefa604fa842b
&gt; 
&gt; Sorry for the trouble.

Done: http://gitorious.org/webkit/qtwebkit/commit/e9227821f63dd1119ee5510e8336d40ef97ee75e</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73612</attachid>
            <date>2010-11-11 07:50:39 -0800</date>
            <delta_ts>2010-11-11 08:05:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>49382.patch</filename>
            <type>text/plain</type>
            <size>44539</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTgxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMTEtMTEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
CisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJv
bGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24pOgorICAgICAgICAqIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZURhdGFGb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFsaWdubWVudEZvclJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OmFyZVJlY3RzVG9v
RmFyQXBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6aGFzT2Zmc2NyZWVuUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppc1Njcm9s
bGFibGVDb250YWluZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVPckZyYW1l
UGFyZW50Rm9yTm9kZUFuZERpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5TY3JvbGxJ
bkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzQ29vcmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZyYW1lUmVjdEluQWJzQ29vcmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlYXJjaFJlY3RGb3JEaXJlY3Rpb25BbmRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjplbnRy
eUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmln
YXRpb24uaDoKKwogMjAxMC0xMS0xMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3MTU1MykKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRn
ZXQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC0xNzUsNyArMTc3LDcg
QEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyhGb2N1cwogICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25SaWdodDoKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CiAgICAgY2FzZSBG
b2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAgIHJldHVybiBhZHZhbmNlRm9jdXNEaXJlY3Rpb25h
bGx5KGRpcmVjdGlvbiwgZXZlbnQpOworICAgICAgICByZXR1cm4gbmF2aWdhdGVJbjRXYXlEaXJl
Y3Rpb24oZGlyZWN0aW9uLCBldmVudCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtNjU4LDQgKzY2MCwxOTAgQEAgdm9pZCBGb2N1c0NvbnRy
b2xsZXI6OnNldEFjdGl2ZShib29sIGFjdAogICAgICAgICBkaXNwYXRjaEV2ZW50c09uV2luZG93
QW5kRm9jdXNlZE5vZGUobV9mb2N1c2VkRnJhbWUtPmRvY3VtZW50KCksIGFjdGl2ZSk7CiB9CiAK
K3ZvaWQgdXBkYXRlRm9jdXNDYW5kaWRhdGVJZk5lZWRlZChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0
ZSwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCit7CisgICAgaWYgKCFjYW5kaWRhdGUubm9kZS0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZ25vcmUgZW1wdHkg
ZnJhbWVzCisgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgJiYg
IXN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGNhbmRpZGF0ZS5ub2RlKS0+Y29u
dGVudEZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElnbm9yZSBvZmYgc2NyZWVu
IGNoaWxkIG5vZGVzIG9mIGNvbnRhaW5lcnMgdGhhdCBkbyBub3Qgc2Nyb2xsIChvdmVyZmxvdzpo
aWRkZW4pCisgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXll
cigpICE9IGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94LT5yZW5kZXJlcigpLT5lbmNs
b3NpbmdMYXllcigpKQorICAgICAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9k
ZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICBkaXN0YW5jZURhdGFGb3JOb2RlKGRpcmVj
dGlvbiwgc3RhcnRpbmdSZWN0LCBjYW5kaWRhdGUpOworICAgIGlmIChjYW5kaWRhdGUuZGlzdGFu
Y2UgPT0gbWF4RGlzdGFuY2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc09mZnNj
cmVlblJlY3QoY2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikgJiYgY2FuZGlkYXRlLmFsaWdubWVu
dCA8IEZ1bGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjbG9zZXN0LmlzTnVsbCgpKSB7
CisgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBJbnRSZWN0IGludGVyc2VjdGlvblJlY3QgPSBpbnRlcnNlY3Rpb24obm9kZVJlY3RJbkFi
c0Nvb3JkcyhjYW5kaWRhdGUubm9kZSksIG5vZGVSZWN0SW5BYnNDb29yZHMoY2xvc2VzdC5ub2Rl
KSk7CisgICAgaWYgKCFpbnRlcnNlY3Rpb25SZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJ
ZiAyIG5vZGVzIGFyZSBpbnRlcnNlY3RpbmcsIGRvIGhpdCB0ZXN0IHRvIGZpbmQgd2hpY2ggbm9k
ZSBpbiBvbiB0b3AuCisgICAgICAgIGludCB4ID0gaW50ZXJzZWN0aW9uUmVjdC54KCkgKyBpbnRl
cnNlY3Rpb25SZWN0LndpZHRoKCkgLyAyOworICAgICAgICBpbnQgeSA9IGludGVyc2VjdGlvblJl
Y3QueSgpICsgaW50ZXJzZWN0aW9uUmVjdC5oZWlnaHQoKSAvIDI7CisgICAgICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gY2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludCh4LCB5
KSwgZmFsc2UsIHRydWUpOworICAgICAgICBpZiAoY2FuZGlkYXRlLm5vZGUtPmNvbnRhaW5zKHJl
c3VsdC5pbm5lck5vZGUoKSkpIHsKKyAgICAgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNsb3Nlc3Qubm9kZS0+
Y29udGFpbnMocmVzdWx0LmlubmVyTm9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoY2FuZGlkYXRlLmFsaWdubWVudCA9PSBjbG9zZXN0LmFsaWdubWVudCkgewor
ICAgICAgICBpZiAoY2FuZGlkYXRlLmRpc3RhbmNlIDwgY2xvc2VzdC5kaXN0YW5jZSkKKyAgICAg
ICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoY2FuZGlkYXRlLmFsaWdubWVudCA+IGNsb3Nlc3QuYWxpZ25tZW50KQorICAgICAgICBj
bG9zZXN0ID0gY2FuZGlkYXRlOworfQorCit2b2lkIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3Vz
Q2FuZGlkYXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFy
dGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQs
IEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KQoreworICAgIEFTU0VSVChjb250YWluZXIpOworICAg
IGZvciAoTm9kZSogbm9kZSA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0g
KG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSB8fCBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJl
Y3Rpb24sIG5vZGUpKSA/IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoY29udGFpbmVyKSA6IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoY29udGFpbmVyKSkgeworICAgICAgICBpZiAoKCFmb2N1c2Vk
RnJhbWUoKSB8fCAhZm9jdXNlZEZyYW1lKCktPmRvY3VtZW50KCkgfHwgbm9kZSAhPSBmb2N1c2Vk
RnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSkgJiYgKG5vZGUtPmlzS2V5Ym9hcmRG
b2N1c2FibGUoZXZlbnQpIHx8IG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSB8fCBjYW5TY3Jv
bGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIG5vZGUpKSkgeworICAgICAgICAgICAgRm9jdXNDYW5k
aWRhdGUgY2FuZGlkYXRlKG5vZGUpOworICAgICAgICAgICAgY2FuZGlkYXRlLmVuY2xvc2luZ1Nj
cm9sbGFibGVCb3ggPSBjb250YWluZXI7CisgICAgICAgICAgICB1cGRhdGVGb2N1c0NhbmRpZGF0
ZUlmTmVlZGVkKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBjYW5kaWRhdGUsIGNsb3Nlc3QpOwor
ICAgICAgICB9CisgICAgfQorfQorCitib29sIEZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbkNv
bnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAo
IWNvbnRhaW5lciB8fCAhY29udGFpbmVyLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBUaGUgc3RhcnRpbmcgcmVjdCBpcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNl
ZCBub2RlLCBpbiBkb2N1bWVudCBjb29yZGluYXRlcy4KKyAgICAvLyBDb21wb3NlIGEgdmlydHVh
bCBzdGFydGluZyByZWN0IGlmIHRoZXJlIGlzIG5vIGZvY3VzZWQgbm9kZSBvciBpZiBpdCBpcyBv
ZmYgc2NyZWVuLgorICAgIC8vIFRoZSB2aXJ0dWFsIHJlY3QgaXMgdGhlIGVkZ2Ugb2YgdGhlIGNv
bnRhaW5lciBvciBmcmFtZS4gV2Ugc2VsZWN0IHdoaWNoCisgICAgLy8gZWRnZSBkZXBlbmRpbmcg
b24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbmF2aWdhdGlvbi4KKyAgICBJbnRSZWN0IG5ld1N0YXJ0
aW5nUmVjdCA9IHN0YXJ0aW5nUmVjdDsKKworICAgIGlmIChzdGFydGluZ1JlY3QuaXNFbXB0eSgp
KSB7CisgICAgICAgIG5ld1N0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNDb29yZHMoY29udGFp
bmVyKTsKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkxlZnQ6CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0WChuZXdTdGFydGlu
Z1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0V2lkdGgoMCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAg
ICAgICAgICAgbmV3U3RhcnRpbmdSZWN0LnNldFkobmV3U3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsK
KyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRIZWlnaHQoMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgbmV3
U3RhcnRpbmdSZWN0LnNldFdpZHRoKDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICAgICAgbmV3U3RhcnRpbmdSZWN0LnNldEhl
aWdodCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaW5k
IHRoZSBjbG9zZXN0IG5vZGUgd2l0aGluIGN1cnJlbnQgY29udGFpbmVyIGluIHRoZSBkaXJlY3Rp
b24gb2YgdGhlIG5hdmlnYXRpb24uCisgICAgRm9jdXNDYW5kaWRhdGUgZm9jdXNDYW5kaWRhdGU7
CisgICAgZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIoY29udGFpbmVyLCBuZXdTdGFydGlu
Z1JlY3QsIGRpcmVjdGlvbiwgZXZlbnQsIGZvY3VzQ2FuZGlkYXRlKTsKKworICAgIGlmIChmb2N1
c0NhbmRpZGF0ZS5pc051bGwoKSkgeworICAgICAgICBpZiAoY2FuU2Nyb2xsSW5EaXJlY3Rpb24o
ZGlyZWN0aW9uLCBjb250YWluZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGZvY3Vz
LCBzY3JvbGwgaWYgcG9zc2libGUuCisgICAgICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihjb250
YWluZXIsIGRpcmVjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBSZXR1cm4gZmFsc2Ugd2lsbCBjYXVzZSBhIHJlLXRyeSwgc2tpcHBpbmcgdGhp
cyBjb250YWluZXIuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKGZvY3Vz
Q2FuZGlkYXRlLm5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkgeworICAgICAgICBpZiAoaGFz
T2Zmc2NyZWVuUmVjdChmb2N1c0NhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24pKSB7CisgICAgICAg
ICAgICBGcmFtZSogZnJhbWUgPSBmb2N1c0NhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT52aWV3
KCktPmZyYW1lKCk7CisgICAgICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihmcmFtZS0+ZG9jdW1l
bnQoKSwgZGlyZWN0aW9uLCBmb2N1c0NhbmRpZGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBOYXZpZ2F0ZSBpbnRvIGEgbmV3IGZyYW1lLgorICAg
ICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZE9y
TWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CisgICAgICAgIGlmIChmb2N1
c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpIHsKKyAgICAgICAgICAg
IHJlY3QgPSBub2RlUmVjdEluQWJzQ29vcmRzKGZvY3VzZWROb2RlLCB0cnVlKTsKKyAgICAgICAg
fQorICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZm9j
dXNDYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZm9jdXNDYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFt
ZSgpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KyAgICAgICAgaWYgKCFuYXZpZ2F0ZUluQ29udGFpbmVyKHN0YXRpY19jYXN0PEhUTUxGcmFtZU93
bmVyRWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKS0+ZG9jdW1l
bnQoKSwgcmVjdCwgZGlyZWN0aW9uLCBldmVudCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBuZXcg
ZnJhbWUgaGFkIG5vdGhpbmcgaW50ZXJlc3RpbmcsIHNraXAgcGFzdCBpdCBhbmQgdHJ5IGFnYWlu
LgorICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRlSW5Db250YWluZXIoY29udGFpbmVyLCBub2Rl
UmVjdEluQWJzQ29vcmRzKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHRydWUpLCBkaXJlY3Rpb24sIGV2
ZW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGNh
blNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUubm9kZSkpIHsKKyAg
ICAgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9u
KSkgeworICAgICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZm9jdXNDYW5kaWRhdGUubm9kZSwg
ZGlyZWN0aW9uLCBmb2N1c0NhbmRpZGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBOYXZpZ2F0ZSBpbnRvIGEgbmV3IHNjcm9sbGFibGUgY29udGFp
bmVyLgorICAgICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIE5vZGUqIGZvY3VzZWROb2RlID0g
Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CisgICAgICAg
IGlmIChmb2N1c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpIHsKKyAg
ICAgICAgICAgIHJlY3QgPSBub2RlUmVjdEluQWJzQ29vcmRzKGZvY3VzZWROb2RlLCB0cnVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmF2aWdhdGVJbkNvbnRhaW5lcihmb2N1c0NhbmRp
ZGF0ZS5ub2RlLCByZWN0LCBkaXJlY3Rpb24sIGV2ZW50KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChmb2N1c0NhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24pKSB7
CisgICAgICAgICAgICBOb2RlKiBjb250YWluZXIgPSBmb2N1c0NhbmRpZGF0ZS5lbmNsb3NpbmdT
Y3JvbGxhYmxlQm94OworICAgICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oY29udGFpbmVyLCBk
aXJlY3Rpb24sIGZvY3VzQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gV2UgZm91bmQgYSBuZXcgZm9jdXMgbm9kZSwgbmF2aWdhdGUg
dG8gaXQuCisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
Zm9jdXNDYW5kaWRhdGUubm9kZSk7CisgICAgICAgIEFTU0VSVChlbGVtZW50KTsKKworICAgICAg
ICBlbGVtZW50LT5mb2N1cyhmYWxzZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluNFdh
eURpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50
KQoreworICAgIEZyYW1lKiBjdXJGcmFtZSA9IGZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEFT
U0VSVChjdXJGcmFtZSk7CisKKyAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50ID0gY3VyRnJh
bWUtPmRvY3VtZW50KCk7CisgICAgaWYgKCFmb2N1c2VkRG9jdW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZERvY3VtZW50LT5mb2N1
c2VkTm9kZSgpOworICAgIE5vZGUqIGNvbnRhaW5lciA9IGZvY3VzZWREb2N1bWVudDsKKworICAg
IC8vIEZpZ3VyZSBvdXQgdGhlIHN0YXJ0aW5nIHJlY3QuCisgICAgSW50UmVjdCBzdGFydGluZ1Jl
Y3Q7CisgICAgaWYgKGZvY3VzZWROb2RlICYmICFoYXNPZmZzY3JlZW5SZWN0KGZvY3VzZWROb2Rl
KSkgeworICAgICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVB
bmREaXJlY3Rpb24oZGlyZWN0aW9uLCBmb2N1c2VkTm9kZSk7CisgICAgICAgIHN0YXJ0aW5nUmVj
dCA9IG5vZGVSZWN0SW5BYnNDb29yZHMoZm9jdXNlZE5vZGUsIHRydWUpOworICAgIH0KKworICAg
IGJvb2wgY29uc3VtZWQgPSBmYWxzZTsKKyAgICBkbyB7CisgICAgICAgIGlmIChjb250YWluZXIt
PmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNv
bnRhaW5lciktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAg
ICBjb25zdW1lZCA9IG5hdmlnYXRlSW5Db250YWluZXIoY29udGFpbmVyLCBzdGFydGluZ1JlY3Qs
IGRpcmVjdGlvbiwgZXZlbnQpOworICAgICAgICBzdGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJz
Q29vcmRzKGNvbnRhaW5lciwgdHJ1ZSk7CisgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVP
ckZyYW1lUGFyZW50Rm9yTm9kZUFuZERpcmVjdGlvbihkaXJlY3Rpb24sIGNvbnRhaW5lcik7Cisg
ICAgfQorICAgIHdoaWxlICghY29uc3VtZWQgJiYgY29udGFpbmVyKTsKKyAgICByZXR1cm4gY29u
c3VtZWQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9G
b2N1c0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9s
bGVyLmgJKHJldmlzaW9uIDcxNTUzKQorKysgV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb2N1c0NhbmRpZGF0ZSYgcGFyZW50Q2Fu
ZGlkYXRlID0gRm9jdXNDYW5kaWRhdGUoKSk7CiAgICAgdm9pZCBkZWVwRmluZEZvY3VzYWJsZU5v
ZGVJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIE5vZGUqIGZvY3VzZWQsIEZvY3VzRGlyZWN0
aW9uLCBLZXlib2FyZEV2ZW50KiwgRm9jdXNDYW5kaWRhdGUmKTsKIAorICAgIGJvb2wgbmF2aWdh
dGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVj
dCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqKTsKKyAgICBib29sIG5hdmlnYXRlSW40
V2F5RGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBm
aW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJl
Y3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0Nh
bmRpZGF0ZSYgY2xvc2VzdCk7CisKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgUmVmUHRyPEZyYW1l
PiBtX2ZvY3VzZWRGcmFtZTsKICAgICBib29sIG1faXNBY3RpdmU7CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TcGF0
aWFsTmF2aWdhdGlvbi5jcHAJKHJldmlzaW9uIDcxNTUzKQorKysgV2ViQ29yZS9wYWdlL1NwYXRp
YWxOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCiAKKyNpbmNsdWRl
ICJBc3NlcnRpb25zLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQzLDkgKzQ0LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIGxvbmcgbG9uZyBzcGF0aWFsRGlzdGFuY2UoRm9jdXNEaXJlY3Rp
b24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0Jik7CiBzdGF0aWMgSW50UmVjdCByZW5k
ZXJSZWN0UmVsYXRpdmVUb1Jvb3REb2N1bWVudChSZW5kZXJPYmplY3QqKTsKLXN0YXRpYyBSZWN0
c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFJlY3QmKTsKK3N0YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JS
ZWN0cyhGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRTaXplJiB2aWV3U2l6ZSk7CiBzdGF0aWMgYm9vbCBhcmVSZWN0c0Z1bGx5QWxpZ25lZChG
b2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKIHN0YXRpYyBi
b29sIGFyZVJlY3RzUGFydGlhbGx5QWxpZ25lZChGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFJlY3QmKTsKK3N0YXRpYyBib29sIGFyZVJlY3RzVG9vRmFyQXBhcnQoRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSk7CiBzdGF0aWMgYm9vbCBp
c1JlY3RJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmKTsKIHN0YXRpYyB2b2lkIGRlZmxhdGVJZk92ZXJsYXBwZWQoSW50UmVjdCYsIEludFJl
Y3QmKTsKIHN0YXRpYyBib29sIGNoZWNrTmVnYXRpdmVDb29yZHNGb3JOb2RlKE5vZGUqLCBjb25z
dCBJbnRSZWN0Jik7CkBAIC0xMDIsNyArMTA0LDggQEAgdm9pZCBkaXN0YW5jZURhdGFGb3JOb2Rl
KEZvY3VzRGlyZWN0aW9uIAogICAgIC8vIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBub2RlcyBp
cyBub3QgdG8gYmUgY29uc2lkZXJlZCBhbG9uZSB3aGVuIGV2YWx1YXRpbmcvbG9va2luZwogICAg
IC8vIGZvciB0aGUgYmVzdCBmb2N1cyBjYW5kaWRhdGUgbm9kZS4gQWxpZ25tZW50IG9mIHJlY3Rz
IGNhbiBiZSBhbHNvIGEgZ29vZCBwb2ludCB0byBiZQogICAgIC8vIGNvbnNpZGVyZWQgaW4gb3Jk
ZXIgdG8gbWFrZSB0aGUgYWxnb3JpdGhtIHRvIGJlaGF2aW9yIGluIGEgbW9yZSBpbnR1aXRpdmUg
d2F5LgotICAgIGNhbmRpZGF0ZS5hbGlnbm1lbnQgPSBhbGlnbm1lbnRGb3JSZWN0cyhkaXJlY3Rp
b24sIGN1clJlY3QsIHRhcmdldFJlY3QpOworICAgIEludFNpemUgdmlld1NpemUgPSBjYW5kaWRh
dGUubm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxl
Q29udGVudFJlY3QoKS5zaXplKCk7CisgICAgY2FuZGlkYXRlLmFsaWdubWVudCA9IGFsaWdubWVu
dEZvclJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCwgdmlld1NpemUpOwogICAg
IGNhbmRpZGF0ZS5kaXN0YW5jZSA9IHNwYXRpYWxEaXN0YW5jZShkaXJlY3Rpb24sIGN1clJlY3Qs
IHRhcmdldFJlY3QpOwogfQogCkBAIC0xMzYsOCArMTM5LDEyIEBAIHN0YXRpYyBJbnRSZWN0IHJl
bmRlclJlY3RSZWxhdGl2ZVRvUm9vdEQKICAgICByZXR1cm4gcmVjdDsKIH0KIAotc3RhdGljIFJl
Y3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwg
Y29uc3QgSW50UmVjdCYgY3VyUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKK3N0YXRp
YyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEludFNpemUmIHZpZXdTaXplKQogeworICAgIC8vIElmIHdlIGZvdW5kIGEgbm9kZSBpbiBm
dWxsIGFsaWdubWVudCwgYnV0IGl0IGlzIHRvbyBmYXIgYXdheSwgaWdub3JlIGl0LgorICAgIGlm
IChhcmVSZWN0c1Rvb0ZhckFwYXJ0KGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCwgdmll
d1NpemUpKQorICAgICAgICByZXR1cm4gTm9uZTsKKwogICAgIGlmIChhcmVSZWN0c0Z1bGx5QWxp
Z25lZChkaXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpKQogICAgICAgICByZXR1cm4gRnVs
bDsKIApAQCAtMjc3LDYgKzI4NCwyMyBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c1BhcnRpYWxseUFs
aWduZWQoRm9jCiAgICAgICAgICAgICB8fCAoYkVuZCA+PSBhU3RhcnQgJiYgYkVuZCA8PSBhRW5k
KSk7CiB9CiAKK3N0YXRpYyBib29sIGFyZVJlY3RzVG9vRmFyQXBhcnQoRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikg
eworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gY3VyUmVjdC54
KCkgPCB0YXJnZXRSZWN0LnJpZ2h0KCkgfHwgY3VyUmVjdC54KCkgLSB0YXJnZXRSZWN0LnJpZ2h0
KCkgPiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAg
ICAgICAgcmV0dXJuIHRhcmdldFJlY3QueCgpIDwgY3VyUmVjdC5yaWdodCgpIHx8IHRhcmdldFJl
Y3QueCgpIC0gY3VyUmVjdC5yaWdodCgpID4gdmlld1NpemUud2lkdGgoKTsKKyAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBjdXJSZWN0LnkoKSA8IHRhcmdldFJlY3Qu
Ym90dG9tKCkgfHwgY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0LmJvdHRvbSgpID4gdmlld1NpemUu
aGVpZ2h0KCk7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHJldHVybiB0
YXJnZXRSZWN0LnkoKSA8IGN1clJlY3QuYm90dG9tKCkgfHwgdGFyZ2V0UmVjdC55KCkgLSBjdXJS
ZWN0LmJvdHRvbSgpID4gdmlld1NpemUuaGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwog
Ly8gUmV0dXJuIHRydWUgaWYgcmVjdCB8YXwgaXMgYmVsb3cgfGJ8LiBGYWxzZSBvdGhlcndpc2Uu
CiBzdGF0aWMgaW5saW5lIGJvb2wgYmVsb3coY29uc3QgSW50UmVjdCYgYSwgY29uc3QgSW50UmVj
dCYgYikKIHsKQEAgLTQyNSw3ICs0NDksNyBAQCBzdGF0aWMgYm9vbCBpc1JlY3RJbkRpcmVjdGlv
bihGb2N1c0RpcmVjCiAvLyBDaGVja3MgaWYgfG5vZGV8IGlzIG9mZnNjcmVlbiB0aGUgdmlzaWJs
ZSBhcmVhICh2aWV3cG9ydCkgb2YgaXRzIGNvbnRhaW5lcgogLy8gZG9jdW1lbnQuIEluIGNhc2Ug
aXQgaXMsIG9uZSBjYW4gc2Nyb2xsIGluIGRpcmVjdGlvbiBvciB0YWtlIGFueSBkaWZmZXJlbnQK
IC8vIGRlc2lyZWQgYWN0aW9uIGxhdGVyIG9uLgotYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUq
IG5vZGUpCitib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSwgRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uKQogewogICAgIC8vIEdldCB0aGUgRnJhbWVWaWV3IGluIHdoaWNoIHxub2RlfCBp
cyAod2hpY2ggbWVhbnMgdGhlIGN1cnJlbnQgdmlld3BvcnQgaWYgfG5vZGV8CiAgICAgLy8gaXMg
bm90IGluIGFuIGlubmVyIGRvY3VtZW50KSwgc28gd2UgY2FuIGNoZWNrIGlmIGl0cyBjb250ZW50
IHJlY3QgaXMgdmlzaWJsZQpAQCAtNDM1LDYgKzQ1OSwyNiBAQCBib29sIGhhc09mZnNjcmVlblJl
Y3QoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBJbnRSZWN0IGNvbnRh
aW5lclZpZXdwb3J0UmVjdCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAg
Ly8gV2Ugd2FudCB0byBzZWxlY3QgYSBub2RlIGlmIGl0IGlzIGN1cnJlbnRseSBvZmYgc2NyZWVu
LCBidXQgd2lsbCBiZQorICAgIC8vIGV4cG9zZWQgYWZ0ZXIgd2Ugc2Nyb2xsLiBBZGp1c3QgdGhl
IHZpZXdwb3J0IHRvIHBvc3Qtc2Nyb2xsaW5nIHBvc2l0aW9uLgorICAgIHN3aXRjaCAoZGlyZWN0
aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGNvbnRhaW5lclZp
ZXdwb3J0UmVjdC5zZXRYKGNvbnRhaW5lclZpZXdwb3J0UmVjdC54KCkgLSBTY3JvbGxiYXI6OnBp
eGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0V2lk
dGgoY29udGFpbmVyVmlld3BvcnRSZWN0LndpZHRoKCkgKyBTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRXaWR0aChjb250YWluZXJWaWV3cG9y
dFJlY3Qud2lkdGgoKSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgY29udGFpbmVyVmll
d3BvcnRSZWN0LnNldFkoY29udGFpbmVyVmlld3BvcnRSZWN0LnkoKSAtIFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRIZWln
aHQoY29udGFpbmVyVmlld3BvcnRSZWN0LmhlaWdodCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246
CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRIZWlnaHQoY29udGFpbmVyVmlld3Bv
cnRSZWN0LmhlaWdodCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyKQpA
QCAtNDQ3LDM2ICs0OTEsNzUgQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCiAg
ICAgcmV0dXJuICFjb250YWluZXJWaWV3cG9ydFJlY3QuaW50ZXJzZWN0cyhyZWN0KTsKIH0KIAot
Ly8gSW4gYSBib3R0b20tdXAgd2F5LCB0aGlzIG1ldGhvZCB0cmllcyB0byBzY3JvbGwgfGZyYW1l
fCBpbiBhIGdpdmVuIGRpcmVjdGlvbgotLy8gfGRpcmVjdGlvbnwsIGdvaW5nIHVwIGluIHRoZSBm
cmFtZSB0cmVlIGhpZXJhcmNoeSBpbiBjYXNlIGl0IGRvZXMgbm90IHN1Y2NlZWQuCi1ib29sIHNj
cm9sbEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBj
b25zdCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlKQorYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihG
cmFtZSogZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRh
dGUmKQogewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NF
UlQoZnJhbWUgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBmcmFtZS0+ZG9jdW1l
bnQoKSkpOwogCi0gICAgU2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbjsKKyAgICBpZiAo
ZnJhbWUgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBmcmFtZS0+ZG9jdW1lbnQo
KSkpIHsKKyAgICAgICAgaW50IGR4ID0gMDsKKyAgICAgICAgaW50IGR5ID0gMDsKKyAgICAgICAg
c3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6Cisg
ICAgICAgICAgICBkeCA9IC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAg
ICAgIGR4ID0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgICAgIGR5ID0gLSBT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgICAgICBkeSA9IFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KIAotICAgIHN3
aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6Ci0gICAgICAg
IHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbExlZnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsUmln
aHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKLSAgICAgICAg
c2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsVXA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25Eb3duOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEb3duOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KEludFNpemUoZHgsIGR5KSk7CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgc2Nyb2xsSW5E
aXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0
IEZvY3VzQ2FuZGlkYXRlJikKK3sKKyAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgp
KQorICAgICAgICByZXR1cm4gc2Nyb2xsSW5EaXJlY3Rpb24oc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
Pihjb250YWluZXIpLT5mcmFtZSgpLCBkaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlKCkpOworCisg
ICAgaWYgKCFjb250YWluZXItPnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoIWNhbmRpZGF0ZS5pc051bGwoKSAmJiBpc1Njcm9sbGFibGVDb250YWluZXJOb2Rl
KGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KSkKLSAgICAgICAgcmV0dXJuIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxCeUxpbmUsIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KTsKKyAgICBpZiAoY29u
dGFpbmVyICYmIGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgY29udGFpbmVyKSkgewor
ICAgICAgICBJbnRSZWN0IHNjcm9sbFJlY3QgPSBjb250YWluZXItPmdldFJlY3QoKTsKKyAgICAg
ICAgc2Nyb2xsUmVjdC5tb3ZlKGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVy
TGVmdFdpZHRoKCksIGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lk
dGgoKSk7CisgICAgICAgIHNjcm9sbFJlY3Quc2V0V2lkdGgoc2Nyb2xsUmVjdC53aWR0aCgpIC0g
KGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgKyBjb250
YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSkpOworICAgICAg
ICBzY3JvbGxSZWN0LnNldEhlaWdodChzY3JvbGxSZWN0LmhlaWdodCgpIC0gKGNvbnRhaW5lci0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSArIGNvbnRhaW5lci0+cmVuZGVy
ZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkpOworICAgICAgICBpbnQgZHggPSAw
OworICAgICAgICBpbnQgZHkgPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAg
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIGR4ID0gLSBtaW4oU2Ny
b2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3Jv
bGxMZWZ0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25SaWdodDoKKyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3Jv
bGxXaWR0aCgpID4gKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNvbnRh
aW5lci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpKTsKKyAgICAgICAgICAgIGR4ID0gbWlu
KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+
c2Nyb2xsV2lkdGgoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxMZWZ0KCkgKyBj
b250YWluZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICAgICAgZHkgPSAtIG1p
bihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+cmVuZGVyQm94KCkt
PnNjcm9sbFRvcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uRG93bjoKKyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXItPnJlbmRlckJveCgpLT5z
Y3JvbGxIZWlnaHQoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSArIGNv
bnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAgICAgICBkeSA9
IG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+cmVuZGVyQm94
KCktPnNjcm9sbEhlaWdodCgpIC0gKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFRvcCgp
ICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKworICAgICAgICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3Np
bmdMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGR4LCBkeSk7CiAKLSAgICByZXR1cm4gZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEJ5TGluZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHZvaWQgc2Nyb2xsSW50b1ZpZXcoRWxlbWVudCogZWxlbWVudCkKQEAgLTUzNCw3
ICs2MTcsNyBAQCBzdGF0aWMgYm9vbCBjaGVja05lZ2F0aXZlQ29vcmRzRm9yTm9kZShOCiAgICAg
cmV0dXJuIGNhbkJlU2Nyb2xsZWQ7CiB9CiAKLWJvb2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9k
ZShOb2RlKiBub2RlKQorYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKGNvbnN0IE5vZGUq
IG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01Njcs
NCArNjUwLDI2OSBAQCBib29sIGlzTm9kZURlZXBEZXNjZW5kYW50T2ZEb2N1bWVudChOb2RlCiAg
ICAgcmV0dXJuIGRlc2NlbmRhbnQ7CiB9CiAKK05vZGUqIHNjcm9sbGFibGVPckZyYW1lUGFyZW50
Rm9yTm9kZUFuZERpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIG5vZGUp
Cit7CisgICAgQVNTRVJUKG5vZGUpOworICAgIE5vZGUqIHBhcmVudCA9IG5vZGU7CisgICAgZG8g
eworICAgICAgICBpZiAocGFyZW50LT5pc0RvY3VtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBw
YXJlbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHBhcmVudCktPmRvY3VtZW50KCktPmZyYW1l
KCktPm93bmVyRWxlbWVudCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFyZW50
ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChwYXJlbnQg
JiYgIWNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgcGFyZW50KSAmJiAhcGFyZW50LT5p
c0RvY3VtZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gcGFyZW50OworfQorCitib29sIGNhblNjcm9s
bEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgTm9kZSogY29udGFp
bmVyKQoreworICAgIEFTU0VSVChjb250YWluZXIpOworICAgIGlmIChjb250YWluZXItPmlzRG9j
dW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rp
b24sIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50Kj4oY29udGFpbmVyKS0+ZnJhbWUoKSk7CisK
KyAgICBpZiAoIWNvbnRhaW5lci0+cmVuZGVyQm94KCkgfHwgIWNvbnRhaW5lci0+cmVuZGVyQm94
KCktPmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25MZWZ0OgorICAgICAgICByZXR1cm4gY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVm
dCgpID4gMDsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBjb250
YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSA+IDA7CisgICAgY2FzZSBGb2N1c0RpcmVj
dGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xs
TGVmdCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSA8IGNvbnRhaW5l
ci0+cmVuZGVyQm94KCktPnNjcm9sbFdpZHRoKCk7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRv
d246CisgICAgICAgIHJldHVybiBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSAr
IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpIDwgY29udGFpbmVyLT5yZW5k
ZXJCb3goKS0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgY2Fu
U2Nyb2xsSW5EaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGcmFtZSog
ZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZS0+dmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25MZWZ0IHx8IGRpcmVjdGlvbiA9
PSBGb2N1c0RpcmVjdGlvblJpZ2h0KSAmJiAhZnJhbWUtPnZpZXcoKS0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKChkaXJlY3Rpb24gPT0gRm9j
dXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Eb3duKSAmJiAhZnJh
bWUtPnZpZXcoKS0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIEludFNpemUgc2l6ZSA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzU2l6ZSgpOworICAgIElu
dFNpemUgb2Zmc2V0ID0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgSW50UmVj
dCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOworCisgICAg
c3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAg
ICAgcmV0dXJuIG9mZnNldC53aWR0aCgpID4gMDsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6
CisgICAgICAgIHJldHVybiBvZmZzZXQuaGVpZ2h0KCkgPiAwOworICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJuIHJlY3Qud2lkdGgoKSArIG9mZnNldC53aWR0aCgp
IDwgc2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBy
ZXR1cm4gcmVjdC5oZWlnaHQoKSArIG9mZnNldC5oZWlnaHQoKSA8IHNpemUuaGVpZ2h0KCk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworSW50UmVjdCBub2RlUmVjdEluQWJzQ29vcmRzKE5vZGUqIG5vZGUs
IGJvb2wgaWdub3JlQm9yZGVyKQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPnJlbmRlcmVy
KCkpOworCisgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBm
cmFtZVJlY3RJbkFic0Nvb3JkcyhzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG5vZGUpLT5mcmFtZSgp
KTsKKyAgICBJbnRSZWN0IHJlY3QgPSBub2RlLT5nZXRSZWN0KCk7CisKKyAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KGZyYW1lLT5vd25lckVsZW1lbnQoKSkpIHsKKyAgICAgICAgICAg
IGRvIHsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUoZWxlbWVudC0+b2Zmc2V0TGVmdCgpLCBl
bGVtZW50LT5vZmZzZXRUb3AoKSk7CisgICAgICAgICAgICB9IHdoaWxlICgoZWxlbWVudCA9IGVs
ZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7CisgICAgICAgICAgICByZWN0Lm1vdmUoKC1mcmFtZS0+
dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRm9y
IGF1dGhvcnMgdGhhdCB1c2UgYm9yZGVyIGluZHRlYWQgb2Ygb3V0bGluZSBpbiB0aGVpciBDU1Ms
IHdlIGNvbXBlbnNhdGUgYnkgaWdub3JpbmcgdGhlIGJvcmRlciB3aGVuIGNhbGN1bGF0aW5nCisg
ICAgLy8gdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgZWxlbWVudC4KKyAgICBpZiAoaWdub3JlQm9y
ZGVyKSB7CisgICAgICAgIHJlY3QubW92ZShub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3Jk
ZXJMZWZ0V2lkdGgoKSwgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgo
KSk7CisgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0gbm9kZS0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgp
LT5ib3JkZXJSaWdodFdpZHRoKCkpOworICAgICAgICByZWN0LnNldEhlaWdodChyZWN0LmhlaWdo
dCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSAtIG5vZGUt
PnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBmcmFtZVJlY3RJbkFic0Nvb3JkcyhGcmFtZSogZnJh
bWUpCit7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCk7CisKKyAgICBmb3IgKDsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50
KCkpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4oZnJhbWUtPm93bmVyRWxlbWVudCgpKSkgeworICAgICAgICAgICAgZG8geworICAgICAgICAg
ICAgICAgIHJlY3QubW92ZShlbGVtZW50LT5vZmZzZXRMZWZ0KCksIGVsZW1lbnQtPm9mZnNldFRv
cCgpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC0+b2Zmc2V0UGFy
ZW50KCkpKTsKKyAgICAgICAgICAgIHJlY3QubW92ZSgoLWZyYW1lLT52aWV3KCktPnNjcm9sbE9m
ZnNldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFJl
Y3Qgc2VhcmNoUmVjdEZvckRpcmVjdGlvbkFuZEZyYW1lKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlv
biwgRnJhbWUqIGZyYW1lLCBGcmFtZSogYWZ0ZXJGcmFtZSkKK3sKKyAgICBJbnRSZWN0IHNlYXJj
aFJlY3QgPSBmcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICBmb3IgKDsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGZy
YW1lLT5vd25lckVsZW1lbnQoKSkgeworICAgICAgICAgICAgc2VhcmNoUmVjdC5tb3ZlKC0gZnJh
bWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkpOworICAgICAgICAgICAgc2VhcmNoUmVjdC5tb3Zl
KGZyYW1lLT5vd25lckVsZW1lbnQoKS0+Z2V0UmVjdCgpLngoKSwgZnJhbWUtPm93bmVyRWxlbWVu
dCgpLT5nZXRSZWN0KCkueSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYWZ0ZXJGcmFt
ZSkgeworICAgICAgICBJbnRSZWN0IGZyYW1lUmVjdCA9IGFmdGVyRnJhbWUtPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICAgICAgc2VhcmNoUmVjdC5zZXRXaWR0
aChmcmFtZVJlY3QueCgpIC0gc2VhcmNoUmVjdC54KCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgICAgIHNlYXJjaFJlY3Quc2V0
SGVpZ2h0KGZyYW1lUmVjdC55KCkgLSBzZWFyY2hSZWN0LnkoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgc2VhcmNo
UmVjdC5zZXRYKGZyYW1lUmVjdC5yaWdodCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgICAgIHNlYXJjaFJlY3Quc2V0WShm
cmFtZVJlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gc2VhcmNoUmVjdDsKK30KKworLy8gRXhpdCBwb2ludCBpcyB0aGUgY2xvc2VzdCBw
b2ludCBpbiB0aGUgc3RhcnRpbmdSZWN0LCBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBvZiB0
aGUgbmF2aWdhdGlvbi4KKy8vIEVudHJ5IHBvaW50IGlzIHRoZSBjbG9zZXN0IHBvaW50IGluIHRo
ZSBjYW5kaWRhdGUgbm9kZSwgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5hdmln
YXRpb24uCit2b2lkIGVudHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1c0RpcmVjdGlv
biBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgY29uc3QgSW50UmVjdCYg
cG90ZW50aWFsUmVjdCwgSW50UG9pbnQmIGV4aXRQb2ludCwgSW50UG9pbnQmIGVudHJ5UG9pbnQp
Cit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVm
dDoKKyAgICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LngoKSk7CisgICAgICAgIGVu
dHJ5UG9pbnQuc2V0WChwb3RlbnRpYWxSZWN0LnJpZ2h0KCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5n
UmVjdC55KCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC5ib3R0b20o
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAg
ICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAgICAgICBlbnRyeVBv
aW50LnNldFgocG90ZW50aWFsUmVjdC54KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LmJv
dHRvbSgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QueSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uTGVmdDoKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGlmIChiZWxv
dyhzdGFydGluZ1JlY3QsIHBvdGVudGlhbFJlY3QpKSB7CisgICAgICAgICAgICBleGl0UG9pbnQu
c2V0WShzdGFydGluZ1JlY3QueSgpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3Rl
bnRpYWxSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChiZWxvdyhwb3RlbnRpYWxS
ZWN0LCBzdGFydGluZ1JlY3QpKSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGlu
Z1JlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJl
Y3QueSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5zZXRZKG1h
eChzdGFydGluZ1JlY3QueSgpLCBwb3RlbnRpYWxSZWN0LnkoKSkpOworICAgICAgICAgICAgZW50
cnlQb2ludC5zZXRZKGV4aXRQb2ludC55KCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoK
KyAgICAgICAgaWYgKHJpZ2h0T2Yoc3RhcnRpbmdSZWN0LCBwb3RlbnRpYWxSZWN0KSkgeworICAg
ICAgICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LngoKSk7CisgICAgICAgICAgICBl
bnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5yaWdodCgpKTsKKyAgICAgICAgfSBlbHNlIGlm
IChyaWdodE9mKHBvdGVudGlhbFJlY3QsIHN0YXJ0aW5nUmVjdCkpIHsKKyAgICAgICAgICAgIGV4
aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgICAgIGVudHJ5UG9p
bnQuc2V0WChwb3RlbnRpYWxSZWN0LngoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBleGl0UG9pbnQuc2V0WChtYXgoc3RhcnRpbmdSZWN0LngoKSwgcG90ZW50aWFsUmVjdC54KCkp
KTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WChleGl0UG9pbnQueCgpKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgZGlzdGFuY2VEYXRhRm9yTm9kZShGb2N1c0RpcmVjdGlv
biBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNDYW5kaWRhdGUm
IGNhbmRpZGF0ZSkKK3sKKyAgICBpZiAoY2FuZGlkYXRlLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCFjYW5kaWRhdGUubm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIEludFJlY3Qgbm9kZVJlY3QgPSBub2RlUmVjdEluQWJzQ29vcmRzKGNhbmRpZGF0ZS5u
b2RlLCB0cnVlKTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkxlZnQ6CisgICAgICAgIGlmIChub2RlUmVjdC5yaWdodCgpID4gc3RhcnRpbmdSZWN0
LngoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1
c0RpcmVjdGlvblVwOgorICAgICAgICBpZiAobm9kZVJlY3QuYm90dG9tKCkgPiBzdGFydGluZ1Jl
Y3QueSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGlmIChub2RlUmVjdC54KCkgPCBzdGFydGluZ1Jl
Y3QucmlnaHQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIGlmIChub2RlUmVjdC55KCkgPCBzdGFydGlu
Z1JlY3QuYm90dG9tKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIElu
dFBvaW50IGV4aXRQb2ludDsKKyAgICBJbnRQb2ludCBlbnRyeVBvaW50OworICAgIGludCBzYW1l
QXhpc0Rpc3Q7CisgICAgaW50IG90aGVyQXhpc0Rpc3Q7CisgICAgZW50cnlBbmRFeGl0UG9pbnRz
Rm9yRGlyZWN0aW9uKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBub2RlUmVjdCwgZXhpdFBvaW50
LCBlbnRyeVBvaW50KTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1
c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIHNhbWVBeGlzRGlzdCA9IGV4aXRQb2ludC54KCkgLSBl
bnRyeVBvaW50LngoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdCA9IGFicyhleGl0UG9pbnQueSgp
IC0gZW50cnlQb2ludC55KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uVXA6CisgICAgICAgIHNhbWVBeGlzRGlzdCA9IGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50
LnkoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdCA9IGFicyhleGl0UG9pbnQueCgpIC0gZW50cnlQ
b2ludC54KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
CisgICAgICAgIHNhbWVBeGlzRGlzdCA9IGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKTsK
KyAgICAgICAgb3RoZXJBeGlzRGlzdCA9IGFicyhlbnRyeVBvaW50LnkoKSAtIGV4aXRQb2ludC55
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAg
ICAgc2FtZUF4aXNEaXN0ID0gZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpOworICAgICAg
ICBvdGhlckF4aXNEaXN0ID0gYWJzKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIGludCB4ID0gKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSkg
KiAoZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpKTsKKyAgICBpbnQgeSA9IChlbnRyeVBv
aW50LnkoKSAtIGV4aXRQb2ludC55KCkpICogKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50Lnko
KSk7CisKKyAgICBmbG9hdCBldWNsaWRpYW5EaXN0YW5jZSA9IHNxcnQoKHggKyB5KSAqIDEuMCk7
CisKKyAgICAvLyBMb29zZWx5IGJhc2VkIG9uIGh0dHA6Ly93d3cudzMub3JnL1RSL1dJQ0QvI2Zv
Y3VzLWhhbmRsaW5nCisgICAgLy8gZGYgPSBkb3REaXN0ICsgZHggKyBkeSArIDIgKiAoeGRpc3Bs
YWNlbWVudCArIHlkaXNwbGFjZW1lbnQpIC0gc3FydChPdmVybGFwKQorCisgICAgZmxvYXQgZGlz
dGFuY2UgPSBldWNsaWRpYW5EaXN0YW5jZSArIHNhbWVBeGlzRGlzdCArIDIgKiBvdGhlckF4aXNE
aXN0OworICAgIGNhbmRpZGF0ZS5kaXN0YW5jZSA9IHJvdW5kZihkaXN0YW5jZSk7CisgICAgSW50
U2l6ZSB2aWV3U2l6ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdlKCktPm1haW5G
cmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKKyAgICBjYW5kaWRh
dGUuYWxpZ25tZW50ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBzdGFydGluZ1JlY3Qs
IG5vZGVSZWN0LCB2aWV3U2l6ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5oCShyZXZpc2lvbiA3MTU1MykKKysrIFdlYkNvcmUvcGFn
ZS9TcGF0aWFsTmF2aWdhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTEgKzEzMSwxOCBA
QCBzdHJ1Y3QgRm9jdXNDYW5kaWRhdGUgewogCiB2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBzdGFydCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRp
ZGF0ZSk7CiBib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiwgRm9jdXNEaXJlY3Rpb24sIGNv
bnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKK2Jvb2wg
c2Nyb2xsSW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiwgY29uc3Qg
Rm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSA9IEZvY3VzQ2FuZGlkYXRlKCkpOwogdm9pZCBzY3Jv
bGxJbnRvVmlldyhFbGVtZW50Kik7Ci1ib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSopOworYm9v
bCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBGb2N1
c0RpcmVjdGlvbk5vbmUpOwogYm9vbCBpc0luUm9vdERvY3VtZW50KE5vZGUqKTsKLWJvb2wgaXNT
Y3JvbGxhYmxlQ29udGFpbmVyTm9kZShOb2RlKik7Citib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5l
ck5vZGUoY29uc3QgTm9kZSopOwogYm9vbCBpc05vZGVEZWVwRGVzY2VuZGFudE9mRG9jdW1lbnQo
Tm9kZSosIERvY3VtZW50Kik7CitOb2RlKiBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVB
bmREaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24sIE5vZGUqIG5vZGUpOworYm9vbCBjYW5TY3JvbGxJ
bkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgY29uc3QgTm9kZSogY29udGFpbmVyKTsKK2Jvb2wg
Y2FuU2Nyb2xsSW5EaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZyYW1lKik7CitJbnRS
ZWN0IG5vZGVSZWN0SW5BYnNDb29yZHMoTm9kZSosIGJvb2wgaWdub3JlQm9yZGVyID0gZmFsc2Up
OworSW50UmVjdCBmcmFtZVJlY3RJbkFic0Nvb3JkcyhGcmFtZSopOwordm9pZCBkaXN0YW5jZURh
dGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZv
Y3VzQ2FuZGlkYXRlJik7CiAKIH0gLy8gbmFtc3BhY2UgV2ViQ29yZQogCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA3MTgxOCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIyIEBACisyMDEwLTExLTExICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lh
LmNvbT4sIENoYW5nIFNodSAgPGNoYW5nLnNodUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BhdGlhbCBOYXZpZ2F0aW9uOiBpc3N1
ZXMgd2l0aCB0aGUgbm9kZSBzZWxlY3Rpb24gYWxnb3JpdGhtLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzODIKKworICAgICAgICBVcGRhdGUgdGhl
IHRlc3RzIGR1ZSB0byBjaGFuZ2UgaW4gYmVoYXZpb3Igb2YgU3BhdGlhbCBOYXZpZ2F0aW9uLgor
ICAgICAgICBDb250YWluZXJzIG5vdyBzY3JvbGwgdG8gcmV2ZWFsIGFsbCBvZiB0aGVpciBjaW50
ZW50LCBldmVuIGlmIHRoZXkgZG8gbm90IGhhdmUgZm9jdXNhYmxlIG5vZGVzLgorCisgICAgICAg
ICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0
LXdpdGhvdXQtZm9jdXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxlLWJ1dC13aXRob3V0
LWZvY3VzYWJsZS1jb250ZW50Lmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1u
YXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8t
Zm9jdXNhYmxlLWNvbnRlbnQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5h
dmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8t
c2Nyb2xsYWJsZS1jb250ZW50Lmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1u
YXZpZ2F0aW9uL3NuYXYtaWZyYW1lLXdpdGgtb2Zmc2NyZWVuLWZvY3VzYWJsZS1lbGVtZW50LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25h
di1pZnJhbWUtd2l0aC1vZmZzY3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQuaHRtbDoKKwogMjAxMC0x
MS0xMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAg
ICBSdWJiZXItc3RhbXBlZCBieSBEaXJrIFNjaHVsemUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1kaXYtc2Nyb2xsYWJsZS1idXQtd2l0aG91
dC1mb2N1c2FibGUtY29udGVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0
LXdpdGhvdXQtZm9jdXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MTU1MykK
KysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1z
Y3JvbGxhYmxlLWJ1dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMjQgQEAgSXQgaGFzIGFsc28gbm8ga2V5Ym9hcmQgZm9j
dXNhYmxlIGVsZW1lbgogLi4uIGFzIHdlbGwgYXMgc2Nyb2xsYmFycyEKIAogZQorUEFTUyBnRm9j
dXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIK
K1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBp
cyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1
dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQu
Z2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3Rp
dmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9j
dW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBn
Rm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFy
dCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQi
KSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1l
bnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0
aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1
bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9j
dXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
ImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgi
aWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0
cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3Rp
dmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgogUEFTUyBnRm9jdXNlZERvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0Igog
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1k
aXYtc2Nyb2xsYWJsZS1idXQtd2l0aG91dC1mb2N1c2FibGUtY29udGVudC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRp
di1zY3JvbGxhYmxlLWJ1dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50Lmh0bWwJKHJldmlzaW9u
IDcxNTUzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3Nu
YXYtZGl2LXNjcm9sbGFibGUtYnV0LXdpdGhvdXQtZm9jdXNhYmxlLWNvbnRlbnQuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsMjUgQEAKICAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0
aW9uL2phdmFzY3JpcHQiPgogCiAgICAgdmFyIHJlc3VsdE1hcCA9IFsKKyAgICAgIFsiRG93biIs
ICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3Rh
cnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0s
CisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAg
ICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKICAgICAgIFsi
RG93biIsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJl
bmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAg
ICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAi
ICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQi
XSwKICAgICAgIFsiVXAiICAsICJzdGFydCJdLAogICAgICAgWyJET05FIiwgIkRPTkUiXQogICAg
IF07CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25h
di1pZnJhbWUtbm8tZm9jdXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1u
by1mb2N1c2FibGUtY29udGVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcxNTUzKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLWZv
Y3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDI4
IEBAIGEKIAogCiBlCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1l
bnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5h
Y3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2Vk
RG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFT
UyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJz
dGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgi
aWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRB
dHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVu
dC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0Igor
UEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlz
ICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0
ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0
QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxl
bWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5h
Y3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdG
b2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIK
K1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBp
cyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRB
dHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVt
ZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFj
dGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1c2VkRG9j
dW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKIFBBU1MgZ0Zv
Y3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQi
CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2
LWlmcmFtZS1uby1mb2N1c2FibGUtY29udGVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2Fi
bGUtY29udGVudC5odG1sCShyZXZpc2lvbiA3MTU1MykKKysrIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2FibGUtY29udGVudC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw3ICsxNywyOSBAQAogICAgIDxzY3JpcHQgdHlwZT0i
YXBwbGljYXRpb24vamF2YXNjcmlwdCI+CiAKICAgICB2YXIgcmVzdWx0TWFwID0gWworICAgICAg
WyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93
biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAi
c3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0
Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAor
ICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKICAgICAg
IFsiRG93biIsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAs
ICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwK
KyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsi
VXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJl
bmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKICAg
ICAgIFsiVXAiICAsICJzdGFydCJdLAogICAgICAgWyJET05FIiwgIkRPTkUiXQogICAgIF07Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJh
bWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Ny
b2xsYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzE1NTMpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xs
YWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBA
QCBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBCiBQQVNTIGdGb2N1c2Vk
RG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjQiCiBQQVNTIGdG
b2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjUiCiBQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
IjYiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlk
IikgaXMgIjMiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1
dGUoImlkIikgaXMgIjciCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRB
dHRyaWJ1dGUoImlkIikgaXMgIjMiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0
aW9uL3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUtY29udGVudC5odG1sCShyZXZpc2lvbiA3MTU1
MykKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlm
cmFtZS1uby1zY3JvbGxhYmxlLWNvbnRlbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogICAgICAgWyJVcCIsICI0Il0sCiAgICAgICBbIlJpZ2h0IiwgIjUiXSwKICAgICAg
IFsiUmlnaHQiLCAiNiJdLAorICAgICAgWyJVcCIsICIzIl0sCiAgICAgICBbIlJpZ2h0IiwgIjci
XSwKICAgICAgIFsiVXAiLCAiMyJdLAogICAgICAgWyJVcCIsICIyIl0sCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtd2l0aC1vZmZz
Y3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9m
ZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcxNTUzKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1l
LXdpdGgtb2Zmc2NyZWVuLWZvY3VzYWJsZS1lbGVtZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNSwxMCArNSwxMiBAQCBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5nZXRBCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUo
ImlkIikgaXMgIjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgIjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxl
bWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0
aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKIFBBU1MgZ0ZvY3VzZWREb2N1
bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKIFBBU1MgZ0ZvY3Vz
ZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKIFBBU1Mg
Z0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIK
IFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBp
cyAiMSIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgi
aWQiKSBpcyAiMSIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJp
YnV0ZSgiaWQiKSBpcyAic3RhcnQiCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Nw
YXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxl
bWVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwt
bmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC5o
dG1sCShyZXZpc2lvbiA3MTU1MykKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwt
bmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTMgQEAKICAgICAgIFsiRG93biIsICIx
Il0sCiAgICAgICBbIkRvd24iLCAiMSJdLAogICAgICAgWyJEb3duIiwgIjIiXSwKKyAgICAgIFsi
RG93biIsICIyIl0sCiAgICAgICBbIkRvd24iLCAiZW5kIl0sCiAgICAgICBbIlVwIiwgIjIiXSwK
ICAgICAgIFsiVXAiLCAiMiJdLAogICAgICAgWyJVcCIsICIyIl0sCiAgICAgICBbIlVwIiwgIjEi
XSwKKyAgICAgIFsiVXAiLCAiMSJdLAogICAgICAgWyJVcCIsICJzdGFydCJdLAogICAgICAgWyJE
T05FIiwgIkRPTkUiXQogICAgIF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73614</attachid>
            <date>2010-11-11 08:05:01 -0800</date>
            <delta_ts>2010-11-11 09:03:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>49382.patch</filename>
            <type>text/plain</type>
            <size>44405</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTgxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMTEtMTEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
CisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJv
bGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24pOgorICAgICAgICAqIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZURhdGFGb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFsaWdubWVudEZvclJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OmFyZVJlY3RzVG9v
RmFyQXBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6aGFzT2Zmc2NyZWVuUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppc1Njcm9s
bGFibGVDb250YWluZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVPckZyYW1l
UGFyZW50Rm9yTm9kZUFuZERpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5TY3JvbGxJ
bkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzQ29vcmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZyYW1lUmVjdEluQWJzQ29vcmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlYXJjaFJlY3RGb3JEaXJlY3Rpb25BbmRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjplbnRy
eUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmln
YXRpb24uaDoKKwogMjAxMC0xMS0xMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3MTU1MykKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRn
ZXQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC0xNzUsNyArMTc3LDcg
QEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyhGb2N1cwogICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25SaWdodDoKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CiAgICAgY2FzZSBG
b2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAgIHJldHVybiBhZHZhbmNlRm9jdXNEaXJlY3Rpb25h
bGx5KGRpcmVjdGlvbiwgZXZlbnQpOworICAgICAgICByZXR1cm4gbmF2aWdhdGVJbjRXYXlEaXJl
Y3Rpb24oZGlyZWN0aW9uLCBldmVudCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtNjU4LDQgKzY2MCwxODYgQEAgdm9pZCBGb2N1c0NvbnRy
b2xsZXI6OnNldEFjdGl2ZShib29sIGFjdAogICAgICAgICBkaXNwYXRjaEV2ZW50c09uV2luZG93
QW5kRm9jdXNlZE5vZGUobV9mb2N1c2VkRnJhbWUtPmRvY3VtZW50KCksIGFjdGl2ZSk7CiB9CiAK
K3ZvaWQgdXBkYXRlRm9jdXNDYW5kaWRhdGVJZk5lZWRlZChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0
ZSwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCit7CisgICAgaWYgKCFjYW5kaWRhdGUubm9kZS0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZ25vcmUgZW1wdHkg
ZnJhbWVzCisgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgJiYg
IXN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGNhbmRpZGF0ZS5ub2RlKS0+Y29u
dGVudEZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElnbm9yZSBvZmYgc2NyZWVu
IGNoaWxkIG5vZGVzIG9mIGNvbnRhaW5lcnMgdGhhdCBkbyBub3Qgc2Nyb2xsIChvdmVyZmxvdzpo
aWRkZW4pCisgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXll
cigpICE9IGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94LT5yZW5kZXJlcigpLT5lbmNs
b3NpbmdMYXllcigpKQorICAgICAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9k
ZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICBkaXN0YW5jZURhdGFGb3JOb2RlKGRpcmVj
dGlvbiwgc3RhcnRpbmdSZWN0LCBjYW5kaWRhdGUpOworICAgIGlmIChjYW5kaWRhdGUuZGlzdGFu
Y2UgPT0gbWF4RGlzdGFuY2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc09mZnNj
cmVlblJlY3QoY2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikgJiYgY2FuZGlkYXRlLmFsaWdubWVu
dCA8IEZ1bGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjbG9zZXN0LmlzTnVsbCgpKSB7
CisgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBJbnRSZWN0IGludGVyc2VjdGlvblJlY3QgPSBpbnRlcnNlY3Rpb24obm9kZVJlY3RJbkFi
c0Nvb3JkcyhjYW5kaWRhdGUubm9kZSksIG5vZGVSZWN0SW5BYnNDb29yZHMoY2xvc2VzdC5ub2Rl
KSk7CisgICAgaWYgKCFpbnRlcnNlY3Rpb25SZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJ
ZiAyIG5vZGVzIGFyZSBpbnRlcnNlY3RpbmcsIGRvIGhpdCB0ZXN0IHRvIGZpbmQgd2hpY2ggbm9k
ZSBpbiBvbiB0b3AuCisgICAgICAgIGludCB4ID0gaW50ZXJzZWN0aW9uUmVjdC54KCkgKyBpbnRl
cnNlY3Rpb25SZWN0LndpZHRoKCkgLyAyOworICAgICAgICBpbnQgeSA9IGludGVyc2VjdGlvblJl
Y3QueSgpICsgaW50ZXJzZWN0aW9uUmVjdC5oZWlnaHQoKSAvIDI7CisgICAgICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gY2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludCh4LCB5
KSwgZmFsc2UsIHRydWUpOworICAgICAgICBpZiAoY2FuZGlkYXRlLm5vZGUtPmNvbnRhaW5zKHJl
c3VsdC5pbm5lck5vZGUoKSkpIHsKKyAgICAgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNsb3Nlc3Qubm9kZS0+
Y29udGFpbnMocmVzdWx0LmlubmVyTm9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoY2FuZGlkYXRlLmFsaWdubWVudCA9PSBjbG9zZXN0LmFsaWdubWVudCkgewor
ICAgICAgICBpZiAoY2FuZGlkYXRlLmRpc3RhbmNlIDwgY2xvc2VzdC5kaXN0YW5jZSkKKyAgICAg
ICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoY2FuZGlkYXRlLmFsaWdubWVudCA+IGNsb3Nlc3QuYWxpZ25tZW50KQorICAgICAgICBj
bG9zZXN0ID0gY2FuZGlkYXRlOworfQorCit2b2lkIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3Vz
Q2FuZGlkYXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFy
dGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQs
IEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KQoreworICAgIEFTU0VSVChjb250YWluZXIpOworICAg
IGZvciAoTm9kZSogbm9kZSA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0g
KG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSB8fCBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJl
Y3Rpb24sIG5vZGUpKSA/IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoY29udGFpbmVyKSA6IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoY29udGFpbmVyKSkgeworICAgICAgICBpZiAoKCFmb2N1c2Vk
RnJhbWUoKSB8fCAhZm9jdXNlZEZyYW1lKCktPmRvY3VtZW50KCkgfHwgbm9kZSAhPSBmb2N1c2Vk
RnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSkgJiYgKG5vZGUtPmlzS2V5Ym9hcmRG
b2N1c2FibGUoZXZlbnQpIHx8IG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSB8fCBjYW5TY3Jv
bGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIG5vZGUpKSkgeworICAgICAgICAgICAgRm9jdXNDYW5k
aWRhdGUgY2FuZGlkYXRlKG5vZGUpOworICAgICAgICAgICAgY2FuZGlkYXRlLmVuY2xvc2luZ1Nj
cm9sbGFibGVCb3ggPSBjb250YWluZXI7CisgICAgICAgICAgICB1cGRhdGVGb2N1c0NhbmRpZGF0
ZUlmTmVlZGVkKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBjYW5kaWRhdGUsIGNsb3Nlc3QpOwor
ICAgICAgICB9CisgICAgfQorfQorCitib29sIEZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbkNv
bnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAo
IWNvbnRhaW5lciB8fCAhY29udGFpbmVyLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBUaGUgc3RhcnRpbmcgcmVjdCBpcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNl
ZCBub2RlLCBpbiBkb2N1bWVudCBjb29yZGluYXRlcy4KKyAgICAvLyBDb21wb3NlIGEgdmlydHVh
bCBzdGFydGluZyByZWN0IGlmIHRoZXJlIGlzIG5vIGZvY3VzZWQgbm9kZSBvciBpZiBpdCBpcyBv
ZmYgc2NyZWVuLgorICAgIC8vIFRoZSB2aXJ0dWFsIHJlY3QgaXMgdGhlIGVkZ2Ugb2YgdGhlIGNv
bnRhaW5lciBvciBmcmFtZS4gV2Ugc2VsZWN0IHdoaWNoCisgICAgLy8gZWRnZSBkZXBlbmRpbmcg
b24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbmF2aWdhdGlvbi4KKyAgICBJbnRSZWN0IG5ld1N0YXJ0
aW5nUmVjdCA9IHN0YXJ0aW5nUmVjdDsKKworICAgIGlmIChzdGFydGluZ1JlY3QuaXNFbXB0eSgp
KSB7CisgICAgICAgIG5ld1N0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNDb29yZHMoY29udGFp
bmVyKTsKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkxlZnQ6CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0WChuZXdTdGFydGlu
Z1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0V2lkdGgoMCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAg
ICAgICAgICAgbmV3U3RhcnRpbmdSZWN0LnNldFkobmV3U3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsK
KyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRIZWlnaHQoMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgbmV3
U3RhcnRpbmdSZWN0LnNldFdpZHRoKDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICAgICAgbmV3U3RhcnRpbmdSZWN0LnNldEhl
aWdodCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaW5k
IHRoZSBjbG9zZXN0IG5vZGUgd2l0aGluIGN1cnJlbnQgY29udGFpbmVyIGluIHRoZSBkaXJlY3Rp
b24gb2YgdGhlIG5hdmlnYXRpb24uCisgICAgRm9jdXNDYW5kaWRhdGUgZm9jdXNDYW5kaWRhdGU7
CisgICAgZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIoY29udGFpbmVyLCBuZXdTdGFydGlu
Z1JlY3QsIGRpcmVjdGlvbiwgZXZlbnQsIGZvY3VzQ2FuZGlkYXRlKTsKKworICAgIGlmIChmb2N1
c0NhbmRpZGF0ZS5pc051bGwoKSkgeworICAgICAgICBpZiAoY2FuU2Nyb2xsSW5EaXJlY3Rpb24o
ZGlyZWN0aW9uLCBjb250YWluZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGZvY3Vz
LCBzY3JvbGwgaWYgcG9zc2libGUuCisgICAgICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihjb250
YWluZXIsIGRpcmVjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBSZXR1cm4gZmFsc2Ugd2lsbCBjYXVzZSBhIHJlLXRyeSwgc2tpcHBpbmcgdGhp
cyBjb250YWluZXIuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZvY3Vz
Q2FuZGlkYXRlLm5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkgeworICAgICAgICBpZiAoaGFz
T2Zmc2NyZWVuUmVjdChmb2N1c0NhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24pKSB7CisgICAgICAg
ICAgICBGcmFtZSogZnJhbWUgPSBmb2N1c0NhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT52aWV3
KCktPmZyYW1lKCk7CisgICAgICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihmcmFtZS0+ZG9jdW1l
bnQoKSwgZGlyZWN0aW9uLCBmb2N1c0NhbmRpZGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBOYXZpZ2F0ZSBpbnRvIGEgbmV3IGZyYW1lLgorICAg
ICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZE9y
TWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CisgICAgICAgIGlmIChmb2N1
c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpCisgICAgICAgICAgICBy
ZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3Jkcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7CisgICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5u
b2RlKS0+Y29udGVudEZyYW1lKCkpOworICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25l
ckVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5ub2RlKS0+Y29udGVudEZyYW1lKCktPmRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICBpZiAo
IW5hdmlnYXRlSW5Db250YWluZXIoc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4o
Zm9jdXNDYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpLT5kb2N1bWVudCgpLCByZWN0LCBk
aXJlY3Rpb24sIGV2ZW50KSkKKyAgICAgICAgICAgIC8vIFRoZSBuZXcgZnJhbWUgaGFkIG5vdGhp
bmcgaW50ZXJlc3RpbmcsIHNraXAgcGFzdCBpdCBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAg
cmV0dXJuIG5hdmlnYXRlSW5Db250YWluZXIoY29udGFpbmVyLCBub2RlUmVjdEluQWJzQ29vcmRz
KGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHRydWUpLCBkaXJlY3Rpb24sIGV2ZW50KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rp
b24sIGZvY3VzQ2FuZGlkYXRlLm5vZGUpKSB7CisgICAgICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0
KGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAgIHNjcm9sbElu
RGlyZWN0aW9uKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gTmF2aWdh
dGUgaW50byBhIG5ldyBzY3JvbGxhYmxlIGNvbnRhaW5lci4KKyAgICAgICAgSW50UmVjdCByZWN0
OworICAgICAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWRPck1haW5GcmFtZSgpLT5kb2N1
bWVudCgpLT5mb2N1c2VkTm9kZSgpOworICAgICAgICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09m
ZnNjcmVlblJlY3QoZm9jdXNlZE5vZGUpKQorICAgICAgICAgICAgcmVjdCA9IG5vZGVSZWN0SW5B
YnNDb29yZHMoZm9jdXNlZE5vZGUsIHRydWUpOworICAgICAgICByZXR1cm4gbmF2aWdhdGVJbkNv
bnRhaW5lcihmb2N1c0NhbmRpZGF0ZS5ub2RlLCByZWN0LCBkaXJlY3Rpb24sIGV2ZW50KTsKKyAg
ICB9CisgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0
aW9uKSkgeworICAgICAgICBOb2RlKiBjb250YWluZXIgPSBmb2N1c0NhbmRpZGF0ZS5lbmNsb3Np
bmdTY3JvbGxhYmxlQm94OworICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihjb250YWluZXIsIGRp
cmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBXZSBmb3VuZCBhIG5ldyBmb2N1cyBub2RlLCBuYXZpZ2F0ZSB0byBpdC4KKyAgICBF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5v
ZGUpOworICAgIEFTU0VSVChlbGVtZW50KTsKKworICAgIGVsZW1lbnQtPmZvY3VzKGZhbHNlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGb2N1c0NvbnRyb2xsZXI6Om5hdmlnYXRlSW40
V2F5RGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZl
bnQpCit7CisgICAgRnJhbWUqIGN1ckZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAg
QVNTRVJUKGN1ckZyYW1lKTsKKworICAgIERvY3VtZW50KiBmb2N1c2VkRG9jdW1lbnQgPSBjdXJG
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWZvY3VzZWREb2N1bWVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkRG9jdW1lbnQtPmZv
Y3VzZWROb2RlKCk7CisgICAgTm9kZSogY29udGFpbmVyID0gZm9jdXNlZERvY3VtZW50OworCisg
ICAgLy8gRmlndXJlIG91dCB0aGUgc3RhcnRpbmcgcmVjdC4KKyAgICBJbnRSZWN0IHN0YXJ0aW5n
UmVjdDsKKyAgICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09mZnNjcmVlblJlY3QoZm9jdXNlZE5v
ZGUpKSB7CisgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVPckZyYW1lUGFyZW50Rm9yTm9k
ZUFuZERpcmVjdGlvbihkaXJlY3Rpb24sIGZvY3VzZWROb2RlKTsKKyAgICAgICAgc3RhcnRpbmdS
ZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3Jkcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7CisgICAgfQorCisg
ICAgYm9vbCBjb25zdW1lZCA9IGZhbHNlOworICAgIGRvIHsKKyAgICAgICAgaWYgKGNvbnRhaW5l
ci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4o
Y29udGFpbmVyKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAg
ICAgIGNvbnN1bWVkID0gbmF2aWdhdGVJbkNvbnRhaW5lcihjb250YWluZXIsIHN0YXJ0aW5nUmVj
dCwgZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAgIHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5B
YnNDb29yZHMoY29udGFpbmVyLCB0cnVlKTsKKyAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJs
ZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKGRpcmVjdGlvbiwgY29udGFpbmVyKTsK
KyAgICB9IHdoaWxlICghY29uc3VtZWQgJiYgY29udGFpbmVyKTsKKyAgICByZXR1cm4gY29uc3Vt
ZWQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmgJKHJldmlzaW9uIDcxNTUzKQorKysgV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb2N1c0NhbmRpZGF0ZSYgcGFyZW50Q2FuZGlk
YXRlID0gRm9jdXNDYW5kaWRhdGUoKSk7CiAgICAgdm9pZCBkZWVwRmluZEZvY3VzYWJsZU5vZGVJ
bkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIE5vZGUqIGZvY3VzZWQsIEZvY3VzRGlyZWN0aW9u
LCBLZXlib2FyZEV2ZW50KiwgRm9jdXNDYW5kaWRhdGUmKTsKIAorICAgIGJvb2wgbmF2aWdhdGVJ
bkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwg
Rm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqKTsKKyAgICBib29sIG5hdmlnYXRlSW40V2F5
RGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBmaW5k
Rm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3Qm
IHN0YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0NhbmRp
ZGF0ZSYgY2xvc2VzdCk7CisKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgUmVmUHRyPEZyYW1lPiBt
X2ZvY3VzZWRGcmFtZTsKICAgICBib29sIG1faXNBY3RpdmU7CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TcGF0aWFs
TmF2aWdhdGlvbi5jcHAJKHJldmlzaW9uIDcxNTUzKQorKysgV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCiAKKyNpbmNsdWRlICJB
c3NlcnRpb25zLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQzLDkgKzQ0LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIGxvbmcgbG9uZyBzcGF0aWFsRGlzdGFuY2UoRm9jdXNEaXJlY3Rpb24s
IGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0Jik7CiBzdGF0aWMgSW50UmVjdCByZW5kZXJS
ZWN0UmVsYXRpdmVUb1Jvb3REb2N1bWVudChSZW5kZXJPYmplY3QqKTsKLXN0YXRpYyBSZWN0c0Fs
aWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFJlY3QmKTsKK3N0YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0
cyhGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRTaXplJiB2aWV3U2l6ZSk7CiBzdGF0aWMgYm9vbCBhcmVSZWN0c0Z1bGx5QWxpZ25lZChGb2N1
c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKIHN0YXRpYyBib29s
IGFyZVJlY3RzUGFydGlhbGx5QWxpZ25lZChGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFJlY3QmKTsKK3N0YXRpYyBib29sIGFyZVJlY3RzVG9vRmFyQXBhcnQoRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSk7CiBzdGF0aWMgYm9vbCBpc1Jl
Y3RJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmKTsKIHN0YXRpYyB2b2lkIGRlZmxhdGVJZk92ZXJsYXBwZWQoSW50UmVjdCYsIEludFJlY3Qm
KTsKIHN0YXRpYyBib29sIGNoZWNrTmVnYXRpdmVDb29yZHNGb3JOb2RlKE5vZGUqLCBjb25zdCBJ
bnRSZWN0Jik7CkBAIC0xMDIsNyArMTA0LDggQEAgdm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZv
Y3VzRGlyZWN0aW9uIAogICAgIC8vIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBub2RlcyBpcyBu
b3QgdG8gYmUgY29uc2lkZXJlZCBhbG9uZSB3aGVuIGV2YWx1YXRpbmcvbG9va2luZwogICAgIC8v
IGZvciB0aGUgYmVzdCBmb2N1cyBjYW5kaWRhdGUgbm9kZS4gQWxpZ25tZW50IG9mIHJlY3RzIGNh
biBiZSBhbHNvIGEgZ29vZCBwb2ludCB0byBiZQogICAgIC8vIGNvbnNpZGVyZWQgaW4gb3JkZXIg
dG8gbWFrZSB0aGUgYWxnb3JpdGhtIHRvIGJlaGF2aW9yIGluIGEgbW9yZSBpbnR1aXRpdmUgd2F5
LgotICAgIGNhbmRpZGF0ZS5hbGlnbm1lbnQgPSBhbGlnbm1lbnRGb3JSZWN0cyhkaXJlY3Rpb24s
IGN1clJlY3QsIHRhcmdldFJlY3QpOworICAgIEludFNpemUgdmlld1NpemUgPSBjYW5kaWRhdGUu
bm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QoKS5zaXplKCk7CisgICAgY2FuZGlkYXRlLmFsaWdubWVudCA9IGFsaWdubWVudEZv
clJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCwgdmlld1NpemUpOwogICAgIGNh
bmRpZGF0ZS5kaXN0YW5jZSA9IHNwYXRpYWxEaXN0YW5jZShkaXJlY3Rpb24sIGN1clJlY3QsIHRh
cmdldFJlY3QpOwogfQogCkBAIC0xMzYsOCArMTM5LDEyIEBAIHN0YXRpYyBJbnRSZWN0IHJlbmRl
clJlY3RSZWxhdGl2ZVRvUm9vdEQKICAgICByZXR1cm4gcmVjdDsKIH0KIAotc3RhdGljIFJlY3Rz
QWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgSW50UmVjdCYgY3VyUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKK3N0YXRpYyBS
ZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24s
IGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IEludFNpemUmIHZpZXdTaXplKQogeworICAgIC8vIElmIHdlIGZvdW5kIGEgbm9kZSBpbiBmdWxs
IGFsaWdubWVudCwgYnV0IGl0IGlzIHRvbyBmYXIgYXdheSwgaWdub3JlIGl0LgorICAgIGlmIChh
cmVSZWN0c1Rvb0ZhckFwYXJ0KGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCwgdmlld1Np
emUpKQorICAgICAgICByZXR1cm4gTm9uZTsKKwogICAgIGlmIChhcmVSZWN0c0Z1bGx5QWxpZ25l
ZChkaXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpKQogICAgICAgICByZXR1cm4gRnVsbDsK
IApAQCAtMjc3LDYgKzI4NCwyMyBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c1BhcnRpYWxseUFsaWdu
ZWQoRm9jCiAgICAgICAgICAgICB8fCAoYkVuZCA+PSBhU3RhcnQgJiYgYkVuZCA8PSBhRW5kKSk7
CiB9CiAKK3N0YXRpYyBib29sIGFyZVJlY3RzVG9vRmFyQXBhcnQoRm9jdXNEaXJlY3Rpb24gZGly
ZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewor
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkg
PCB0YXJnZXRSZWN0LnJpZ2h0KCkgfHwgY3VyUmVjdC54KCkgLSB0YXJnZXRSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAg
ICAgcmV0dXJuIHRhcmdldFJlY3QueCgpIDwgY3VyUmVjdC5yaWdodCgpIHx8IHRhcmdldFJlY3Qu
eCgpIC0gY3VyUmVjdC5yaWdodCgpID4gdmlld1NpemUud2lkdGgoKTsKKyAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBjdXJSZWN0LnkoKSA8IHRhcmdldFJlY3QuYm90
dG9tKCkgfHwgY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0LmJvdHRvbSgpID4gdmlld1NpemUuaGVp
Z2h0KCk7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHJldHVybiB0YXJn
ZXRSZWN0LnkoKSA8IGN1clJlY3QuYm90dG9tKCkgfHwgdGFyZ2V0UmVjdC55KCkgLSBjdXJSZWN0
LmJvdHRvbSgpID4gdmlld1NpemUuaGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogLy8g
UmV0dXJuIHRydWUgaWYgcmVjdCB8YXwgaXMgYmVsb3cgfGJ8LiBGYWxzZSBvdGhlcndpc2UuCiBz
dGF0aWMgaW5saW5lIGJvb2wgYmVsb3coY29uc3QgSW50UmVjdCYgYSwgY29uc3QgSW50UmVjdCYg
YikKIHsKQEAgLTQyNSw3ICs0NDksNyBAQCBzdGF0aWMgYm9vbCBpc1JlY3RJbkRpcmVjdGlvbihG
b2N1c0RpcmVjCiAvLyBDaGVja3MgaWYgfG5vZGV8IGlzIG9mZnNjcmVlbiB0aGUgdmlzaWJsZSBh
cmVhICh2aWV3cG9ydCkgb2YgaXRzIGNvbnRhaW5lcgogLy8gZG9jdW1lbnQuIEluIGNhc2UgaXQg
aXMsIG9uZSBjYW4gc2Nyb2xsIGluIGRpcmVjdGlvbiBvciB0YWtlIGFueSBkaWZmZXJlbnQKIC8v
IGRlc2lyZWQgYWN0aW9uIGxhdGVyIG9uLgotYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5v
ZGUpCitib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSwgRm9jdXNEaXJlY3Rpb24gZGly
ZWN0aW9uKQogewogICAgIC8vIEdldCB0aGUgRnJhbWVWaWV3IGluIHdoaWNoIHxub2RlfCBpcyAo
d2hpY2ggbWVhbnMgdGhlIGN1cnJlbnQgdmlld3BvcnQgaWYgfG5vZGV8CiAgICAgLy8gaXMgbm90
IGluIGFuIGlubmVyIGRvY3VtZW50KSwgc28gd2UgY2FuIGNoZWNrIGlmIGl0cyBjb250ZW50IHJl
Y3QgaXMgdmlzaWJsZQpAQCAtNDM1LDYgKzQ1OSwyNiBAQCBib29sIGhhc09mZnNjcmVlblJlY3Qo
Tm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBJbnRSZWN0IGNvbnRhaW5l
clZpZXdwb3J0UmVjdCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgLy8g
V2Ugd2FudCB0byBzZWxlY3QgYSBub2RlIGlmIGl0IGlzIGN1cnJlbnRseSBvZmYgc2NyZWVuLCBi
dXQgd2lsbCBiZQorICAgIC8vIGV4cG9zZWQgYWZ0ZXIgd2Ugc2Nyb2xsLiBBZGp1c3QgdGhlIHZp
ZXdwb3J0IHRvIHBvc3Qtc2Nyb2xsaW5nIHBvc2l0aW9uLgorICAgIHN3aXRjaCAoZGlyZWN0aW9u
KSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGNvbnRhaW5lclZpZXdw
b3J0UmVjdC5zZXRYKGNvbnRhaW5lclZpZXdwb3J0UmVjdC54KCkgLSBTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCkpOworICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0V2lkdGgo
Y29udGFpbmVyVmlld3BvcnRSZWN0LndpZHRoKCkgKyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6Cisg
ICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRXaWR0aChjb250YWluZXJWaWV3cG9ydFJl
Y3Qud2lkdGgoKSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgY29udGFpbmVyVmlld3Bv
cnRSZWN0LnNldFkoY29udGFpbmVyVmlld3BvcnRSZWN0LnkoKSAtIFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRIZWlnaHQo
Y29udGFpbmVyVmlld3BvcnRSZWN0LmhlaWdodCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Cisg
ICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRIZWlnaHQoY29udGFpbmVyVmlld3BvcnRS
ZWN0LmhlaWdodCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyKQpAQCAt
NDQ3LDM2ICs0OTEsNzUgQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCiAgICAg
cmV0dXJuICFjb250YWluZXJWaWV3cG9ydFJlY3QuaW50ZXJzZWN0cyhyZWN0KTsKIH0KIAotLy8g
SW4gYSBib3R0b20tdXAgd2F5LCB0aGlzIG1ldGhvZCB0cmllcyB0byBzY3JvbGwgfGZyYW1lfCBp
biBhIGdpdmVuIGRpcmVjdGlvbgotLy8gfGRpcmVjdGlvbnwsIGdvaW5nIHVwIGluIHRoZSBmcmFt
ZSB0cmVlIGhpZXJhcmNoeSBpbiBjYXNlIGl0IGRvZXMgbm90IHN1Y2NlZWQuCi1ib29sIHNjcm9s
bEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlKQorYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihGcmFt
ZSogZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRhdGUm
KQogewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQo
ZnJhbWUgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBmcmFtZS0+ZG9jdW1lbnQo
KSkpOwogCi0gICAgU2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbjsKKyAgICBpZiAoZnJh
bWUgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBmcmFtZS0+ZG9jdW1lbnQoKSkp
IHsKKyAgICAgICAgaW50IGR4ID0gMDsKKyAgICAgICAgaW50IGR5ID0gMDsKKyAgICAgICAgc3dp
dGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAg
ICAgICAgICBkeCA9IC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgICAg
IGR4ID0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgICAgIGR5ID0gLSBTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgICAgICBkeSA9IFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KIAotICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6Ci0gICAgICAgIHNj
cm9sbERpcmVjdGlvbiA9IFNjcm9sbExlZnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsUmlnaHQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKLSAgICAgICAgc2Ny
b2xsRGlyZWN0aW9uID0gU2Nyb2xsVXA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25Eb3duOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEb3duOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KEludFNpemUoZHgsIGR5KSk7CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgc2Nyb2xsSW5EaXJl
Y3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZv
Y3VzQ2FuZGlkYXRlJikKK3sKKyAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQor
ICAgICAgICByZXR1cm4gc2Nyb2xsSW5EaXJlY3Rpb24oc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihj
b250YWluZXIpLT5mcmFtZSgpLCBkaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlKCkpOworCisgICAg
aWYgKCFjb250YWluZXItPnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoY29udGFpbmVyICYmIGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgY29udGFp
bmVyKSkgeworICAgICAgICBJbnRSZWN0IHNjcm9sbFJlY3QgPSBjb250YWluZXItPmdldFJlY3Qo
KTsKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlKGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+Ym9yZGVyTGVmdFdpZHRoKCksIGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9y
ZGVyVG9wV2lkdGgoKSk7CisgICAgICAgIHNjcm9sbFJlY3Quc2V0V2lkdGgoc2Nyb2xsUmVjdC53
aWR0aCgpIC0gKGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRo
KCkgKyBjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSkp
OworICAgICAgICBzY3JvbGxSZWN0LnNldEhlaWdodChzY3JvbGxSZWN0LmhlaWdodCgpIC0gKGNv
bnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSArIGNvbnRhaW5l
ci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkpOworICAgICAgICBp
bnQgZHggPSAwOworICAgICAgICBpbnQgZHkgPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlv
bikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIGR4ID0g
LSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJv
eCgpLT5zY3JvbGxMZWZ0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXItPnJlbmRlckJv
eCgpLT5zY3JvbGxXaWR0aCgpID4gKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQo
KSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpKTsKKyAgICAgICAgICAg
IGR4ID0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5k
ZXJCb3goKS0+c2Nyb2xsV2lkdGgoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxM
ZWZ0KCkgKyBjb250YWluZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICAgICAg
ZHkgPSAtIG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+cmVu
ZGVyQm94KCktPnNjcm9sbFRvcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXItPnJlbmRl
ckJveCgpLT5zY3JvbGxIZWlnaHQoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxU
b3AoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAg
ICAgICBkeSA9IG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+
cmVuZGVyQm94KCktPnNjcm9sbEhlaWdodCgpIC0gKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNj
cm9sbFRvcCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KIAotICAgIGlmICghY2FuZGlkYXRlLmlzTnVsbCgpICYm
IGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVC
b3gpKQotICAgICAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNp
dmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgY2FuZGlkYXRlLmVuY2xvc2luZ1Nj
cm9sbGFibGVCb3gpOworICAgICAgICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdM
YXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGR4LCBkeSk7CiAKLSAgICByZXR1cm4gZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEJ5TGluZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHZvaWQgc2Nyb2xsSW50b1ZpZXcoRWxlbWVudCogZWxlbWVudCkKQEAgLTUzNCw3ICs2
MTcsNyBAQCBzdGF0aWMgYm9vbCBjaGVja05lZ2F0aXZlQ29vcmRzRm9yTm9kZShOCiAgICAgcmV0
dXJuIGNhbkJlU2Nyb2xsZWQ7CiB9CiAKLWJvb2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShO
b2RlKiBub2RlKQorYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKGNvbnN0IE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NjcsNCAr
NjUwLDI2OCBAQCBib29sIGlzTm9kZURlZXBEZXNjZW5kYW50T2ZEb2N1bWVudChOb2RlCiAgICAg
cmV0dXJuIGRlc2NlbmRhbnQ7CiB9CiAKK05vZGUqIHNjcm9sbGFibGVPckZyYW1lUGFyZW50Rm9y
Tm9kZUFuZERpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIG5vZGUpCit7
CisgICAgQVNTRVJUKG5vZGUpOworICAgIE5vZGUqIHBhcmVudCA9IG5vZGU7CisgICAgZG8gewor
ICAgICAgICBpZiAocGFyZW50LT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAgICAgcGFyZW50
ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihwYXJlbnQpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5v
d25lckVsZW1lbnQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50
LT5wYXJlbnROb2RlKCk7CisgICAgfSB3aGlsZSAocGFyZW50ICYmICFjYW5TY3JvbGxJbkRpcmVj
dGlvbihkaXJlY3Rpb24sIHBhcmVudCkgJiYgIXBhcmVudC0+aXNEb2N1bWVudE5vZGUoKSk7Cisg
ICAgcmV0dXJuIHBhcmVudDsKK30KKworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihGb2N1c0Rp
cmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IE5vZGUqIGNvbnRhaW5lcikKK3sKKyAgICBBU1NFUlQo
Y29udGFpbmVyKTsKKyAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAg
ICByZXR1cm4gY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBzdGF0aWNfY2FzdDxjb25z
dCBEb2N1bWVudCo+KGNvbnRhaW5lciktPmZyYW1lKCkpOworCisgICAgaWYgKCFjb250YWluZXIt
PnJlbmRlckJveCgpIHx8ICFjb250YWluZXItPnJlbmRlckJveCgpLT5jYW5CZVNjcm9sbGVkQW5k
SGFzU2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNo
IChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgcmV0
dXJuIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSA+IDA7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvblVwOgorICAgICAgICByZXR1cm4gY29udGFpbmVyLT5yZW5kZXJCb3goKS0+
c2Nyb2xsVG9wKCkgPiAwOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAg
cmV0dXJuIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNvbnRhaW5lci0+
cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkgPCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3Jv
bGxXaWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICByZXR1cm4g
Y29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXItPnJlbmRlckJv
eCgpLT5jbGllbnRIZWlnaHQoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbEhlaWdo
dCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZv
Y3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnJhbWUqIGZyYW1lKQoreworICAgIGlmICgh
ZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGlyZWN0aW9u
ID09IEZvY3VzRGlyZWN0aW9uTGVmdCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25SaWdo
dCkgJiYgIWZyYW1lLT52aWV3KCktPmhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICgoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uVXAgfHwgZGly
ZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRG93bikgJiYgIWZyYW1lLT52aWV3KCktPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBJbnRTaXplIHNpemUgPSBm
cmFtZS0+dmlldygpLT5jb250ZW50c1NpemUoKTsKKyAgICBJbnRTaXplIG9mZnNldCA9IGZyYW1l
LT52aWV3KCktPnNjcm9sbE9mZnNldCgpOworICAgIEludFJlY3QgcmVjdCA9IGZyYW1lLT52aWV3
KCktPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7
CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIHJldHVybiBvZmZzZXQud2lk
dGgoKSA+IDA7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICByZXR1cm4gb2Zm
c2V0LmhlaWdodCgpID4gMDsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAg
IHJldHVybiByZWN0LndpZHRoKCkgKyBvZmZzZXQud2lkdGgoKSA8IHNpemUud2lkdGgoKTsKKyAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgcmV0dXJuIHJlY3QuaGVpZ2h0KCkg
KyBvZmZzZXQuaGVpZ2h0KCkgPCBzaXplLmhlaWdodCgpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0lu
dFJlY3Qgbm9kZVJlY3RJbkFic0Nvb3JkcyhOb2RlKiBub2RlLCBib29sIGlnbm9yZUJvcmRlcikK
K3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpKTsKKworICAgIGlmIChub2Rl
LT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gZnJhbWVSZWN0SW5BYnNDb29yZHMo
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKS0+ZnJhbWUoKSk7CisgICAgSW50UmVjdCByZWN0
ID0gbm9kZS0+Z2V0UmVjdCgpOworCisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1
bWVudCgpLT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkg
eworICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihm
cmFtZS0+b3duZXJFbGVtZW50KCkpKSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAg
ICAgcmVjdC5tb3ZlKGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxlbWVudC0+b2Zmc2V0VG9wKCkp
OworICAgICAgICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LT5vZmZzZXRQYXJlbnQo
KSkpOworICAgICAgICAgICAgcmVjdC5tb3ZlKCgtZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0
KCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZvciBhdXRob3JzIHRoYXQgdXNlIGJv
cmRlciBpbmR0ZWFkIG9mIG91dGxpbmUgaW4gdGhlaXIgQ1NTLCB3ZSBjb21wZW5zYXRlIGJ5IGln
bm9yaW5nIHRoZSBib3JkZXIgd2hlbiBjYWxjdWxhdGluZworICAgIC8vIHRoZSByZWN0IG9mIHRo
ZSBmb2N1c2VkIGVsZW1lbnQuCisgICAgaWYgKGlnbm9yZUJvcmRlcikgeworICAgICAgICByZWN0
Lm1vdmUobm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCksIG5vZGUt
PnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkpOworICAgICAgICByZWN0LnNl
dFdpZHRoKHJlY3Qud2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckxl
ZnRXaWR0aCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgp
KTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIG5vZGUtPnJlbmRlcmVy
KCktPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkgLSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgp
LT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0lu
dFJlY3QgZnJhbWVSZWN0SW5BYnNDb29yZHMoRnJhbWUqIGZyYW1lKQoreworICAgIEludFJlY3Qg
cmVjdCA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworCisgICAgZm9yICg7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZyYW1lLT5vd25lckVsZW1l
bnQoKSkpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUoZWxl
bWVudC0+b2Zmc2V0TGVmdCgpLCBlbGVtZW50LT5vZmZzZXRUb3AoKSk7CisgICAgICAgICAgICB9
IHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7CisgICAgICAgICAg
ICByZWN0Lm1vdmUoKC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiByZWN0OworfQorCitJbnRSZWN0IHNlYXJjaFJlY3RGb3JEaXJl
Y3Rpb25BbmRGcmFtZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEZyYW1lKiBmcmFtZSwgRnJh
bWUqIGFmdGVyRnJhbWUpCit7CisgICAgSW50UmVjdCBzZWFyY2hSZWN0ID0gZnJhbWUtPnZpZXco
KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgZm9yICg7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChmcmFtZS0+b3duZXJFbGVtZW50KCkp
IHsKKyAgICAgICAgICAgIHNlYXJjaFJlY3QubW92ZSgtIGZyYW1lLT52aWV3KCktPnNjcm9sbE9m
ZnNldCgpKTsKKyAgICAgICAgICAgIHNlYXJjaFJlY3QubW92ZShmcmFtZS0+b3duZXJFbGVtZW50
KCktPmdldFJlY3QoKS54KCksIGZyYW1lLT5vd25lckVsZW1lbnQoKS0+Z2V0UmVjdCgpLnkoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFmdGVyRnJhbWUpIHsKKyAgICAgICAgSW50UmVj
dCBmcmFtZVJlY3QgPSBhZnRlckZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOwor
ICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
TGVmdDoKKyAgICAgICAgICAgIHNlYXJjaFJlY3Quc2V0V2lkdGgoZnJhbWVSZWN0LngoKSAtIHNl
YXJjaFJlY3QueCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6CisgICAgICAgICAgICBzZWFyY2hSZWN0LnNldEhlaWdodChmcmFtZVJlY3QueSgp
IC0gc2VhcmNoUmVjdC55KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgICAgIHNlYXJjaFJlY3Quc2V0WChmcmFtZVJlY3Qu
cmlnaHQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkRvd246CisgICAgICAgICAgICBzZWFyY2hSZWN0LnNldFkoZnJhbWVSZWN0LmJvdHRvbSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNlYXJjaFJlY3Q7
Cit9CisKKy8vIEV4aXQgcG9pbnQgaXMgdGhlIGNsb3Nlc3QgcG9pbnQgaW4gdGhlIHN0YXJ0aW5n
UmVjdCwgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisvLyBF
bnRyeSBwb2ludCBpcyB0aGUgY2xvc2VzdCBwb2ludCBpbiB0aGUgY2FuZGlkYXRlIG5vZGUsIGRl
cGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uLgordm9pZCBlbnRyeUFu
ZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzdGFydGluZ1JlY3QsIGNvbnN0IEludFJlY3QmIHBvdGVudGlhbFJlY3QsIEludFBv
aW50JiBleGl0UG9pbnQsIEludFBvaW50JiBlbnRyeVBvaW50KQoreworICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGV4aXRQb2lu
dC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50
aWFsUmVjdC5yaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
blVwOgorICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKKyAgICAgICAg
ZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0
YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJl
Y3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Cisg
ICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgIGVu
dHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBpZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBwb3Rl
bnRpYWxSZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0Lnko
KSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC5ib3R0b20oKSk7
CisgICAgICAgIH0gZWxzZSBpZiAoYmVsb3cocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkg
eworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3RhcnRpbmdSZWN0LnkoKSwg
cG90ZW50aWFsUmVjdC55KCkpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShleGl0UG9p
bnQueSgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uVXA6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIGlmIChyaWdodE9m
KHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkpIHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5z
ZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVu
dGlhbFJlY3QucmlnaHQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPZihwb3RlbnRpYWxS
ZWN0LCBzdGFydGluZ1JlY3QpKSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGlu
Z1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVj
dC54KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFgobWF4
KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgpKSk7CisgICAgICAgICAgICBlbnRy
eVBvaW50LnNldFgoZXhpdFBvaW50LngoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2
b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCit7CisgICAg
aWYgKGNhbmRpZGF0ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghY2FuZGlk
YXRlLm5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IG5vZGVS
ZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3JkcyhjYW5kaWRhdGUubm9kZSwgdHJ1ZSk7CisKKyAgICBz
d2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAg
ICBpZiAobm9kZVJlY3QucmlnaHQoKSA+IHN0YXJ0aW5nUmVjdC54KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAg
ICAgaWYgKG5vZGVSZWN0LmJvdHRvbSgpID4gc3RhcnRpbmdSZWN0LnkoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0Ogor
ICAgICAgICBpZiAobm9kZVJlY3QueCgpIDwgc3RhcnRpbmdSZWN0LnJpZ2h0KCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3du
OgorICAgICAgICBpZiAobm9kZVJlY3QueSgpIDwgc3RhcnRpbmdSZWN0LmJvdHRvbSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBJbnRQb2ludCBleGl0UG9pbnQ7Cisg
ICAgSW50UG9pbnQgZW50cnlQb2ludDsKKyAgICBpbnQgc2FtZUF4aXNEaXN0OworICAgIGludCBv
dGhlckF4aXNEaXN0OworICAgIGVudHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihkaXJlY3Rp
b24sIHN0YXJ0aW5nUmVjdCwgbm9kZVJlY3QsIGV4aXRQb2ludCwgZW50cnlQb2ludCk7CisKKyAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAg
ICAgICBzYW1lQXhpc0Rpc3QgPSBleGl0UG9pbnQueCgpIC0gZW50cnlQb2ludC54KCk7CisgICAg
ICAgIG90aGVyQXhpc0Rpc3QgPSBhYnMoZXhpdFBvaW50LnkoKSAtIGVudHJ5UG9pbnQueSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICBzYW1l
QXhpc0Rpc3QgPSBleGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55KCk7CisgICAgICAgIG90aGVy
QXhpc0Rpc3QgPSBhYnMoZXhpdFBvaW50LngoKSAtIGVudHJ5UG9pbnQueCgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBzYW1lQXhpc0Rp
c3QgPSBlbnRyeVBvaW50LngoKSAtIGV4aXRQb2ludC54KCk7CisgICAgICAgIG90aGVyQXhpc0Rp
c3QgPSBhYnMoZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHNhbWVBeGlzRGlzdCA9IGVu
dHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdCA9IGFi
cyhlbnRyeVBvaW50LngoKSAtIGV4aXRQb2ludC54KCkpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpbnQg
eCA9IChlbnRyeVBvaW50LngoKSAtIGV4aXRQb2ludC54KCkpICogKGVudHJ5UG9pbnQueCgpIC0g
ZXhpdFBvaW50LngoKSk7CisgICAgaW50IHkgPSAoZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQu
eSgpKSAqIChlbnRyeVBvaW50LnkoKSAtIGV4aXRQb2ludC55KCkpOworCisgICAgZmxvYXQgZXVj
bGlkaWFuRGlzdGFuY2UgPSBzcXJ0KCh4ICsgeSkgKiAxLjApOworCisgICAgLy8gTG9vc2VseSBi
YXNlZCBvbiBodHRwOi8vd3d3LnczLm9yZy9UUi9XSUNELyNmb2N1cy1oYW5kbGluZworICAgIC8v
IGRmID0gZG90RGlzdCArIGR4ICsgZHkgKyAyICogKHhkaXNwbGFjZW1lbnQgKyB5ZGlzcGxhY2Vt
ZW50KSAtIHNxcnQoT3ZlcmxhcCkKKworICAgIGZsb2F0IGRpc3RhbmNlID0gZXVjbGlkaWFuRGlz
dGFuY2UgKyBzYW1lQXhpc0Rpc3QgKyAyICogb3RoZXJBeGlzRGlzdDsKKyAgICBjYW5kaWRhdGUu
ZGlzdGFuY2UgPSByb3VuZGYoZGlzdGFuY2UpOworICAgIEludFNpemUgdmlld1NpemUgPSBjYW5k
aWRhdGUubm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNp
YmxlQ29udGVudFJlY3QoKS5zaXplKCk7CisgICAgY2FuZGlkYXRlLmFsaWdubWVudCA9IGFsaWdu
bWVudEZvclJlY3RzKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBub2RlUmVjdCwgdmlld1NpemUp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvU3BhdGlh
bE5hdmlnYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRp
b24uaAkocmV2aXNpb24gNzE1NTMpCisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDExICsxMzEsMTggQEAgc3RydWN0IEZvY3VzQ2FuZGlk
YXRlIHsKIAogdm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlv
biwgTm9kZSogc3RhcnQsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpOwogYm9vbCBzY3JvbGxJ
bkRpcmVjdGlvbihGcmFtZSosIEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhbmRpZGF0ZSYg
Y2FuZGlkYXRlID0gRm9jdXNDYW5kaWRhdGUoKSk7Citib29sIHNjcm9sbEluRGlyZWN0aW9uKE5v
ZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5k
aWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKIHZvaWQgc2Nyb2xsSW50b1ZpZXcoRWxlbWVudCop
OwotYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqKTsKK2Jvb2wgaGFzT2Zmc2NyZWVuUmVjdChO
b2RlKiwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gRm9jdXNEaXJlY3Rpb25Ob25lKTsKIGJv
b2wgaXNJblJvb3REb2N1bWVudChOb2RlKik7Ci1ib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5v
ZGUoTm9kZSopOworYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKGNvbnN0IE5vZGUqKTsK
IGJvb2wgaXNOb2RlRGVlcERlc2NlbmRhbnRPZkRvY3VtZW50KE5vZGUqLCBEb2N1bWVudCopOwor
Tm9kZSogc2Nyb2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKEZvY3VzRGly
ZWN0aW9uLCBOb2RlKiBub2RlKTsKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oRm9jdXNEaXJl
Y3Rpb24sIGNvbnN0IE5vZGUqIGNvbnRhaW5lcik7Citib29sIGNhblNjcm9sbEluRGlyZWN0aW9u
KEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGcmFtZSopOworSW50UmVjdCBub2RlUmVjdEluQWJzQ29v
cmRzKE5vZGUqLCBib29sIGlnbm9yZUJvcmRlciA9IGZhbHNlKTsKK0ludFJlY3QgZnJhbWVSZWN0
SW5BYnNDb29yZHMoRnJhbWUqKTsKK3ZvaWQgZGlzdGFuY2VEYXRhRm9yTm9kZShGb2N1c0RpcmVj
dGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0NhbmRpZGF0ZSYpOwogCiB9
IC8vIG5hbXNwYWNlIFdlYkNvcmUKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzE4MTgpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0x
MS0xMSAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+LCBDaGFuZyBTaHUgIDxj
aGFuZy5zaHVAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNwYXRpYWwgTmF2aWdhdGlvbjogaXNzdWVzIHdpdGggdGhlIG5vZGUgc2Vs
ZWN0aW9uIGFsZ29yaXRobS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5MzgyCisKKyAgICAgICAgVXBkYXRlIHRoZSB0ZXN0cyBkdWUgdG8gY2hhbmdl
IGluIGJlaGF2aW9yIG9mIFNwYXRpYWwgTmF2aWdhdGlvbi4KKyAgICAgICAgQ29udGFpbmVycyBu
b3cgc2Nyb2xsIHRvIHJldmVhbCBhbGwgb2YgdGhlaXIgY2ludGVudCwgZXZlbiBpZiB0aGV5IGRv
IG5vdCBoYXZlIGZvY3VzYWJsZSBub2Rlcy4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRp
YWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxlLWJ1dC13aXRob3V0LWZvY3VzYWJsZS1j
b250ZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmln
YXRpb24vc25hdi1kaXYtc2Nyb2xsYWJsZS1idXQtd2l0aG91dC1mb2N1c2FibGUtY29udGVudC5o
dG1sOgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFt
ZS1uby1mb2N1c2FibGUtY29udGVudC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9ldmVu
dHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLWZvY3VzYWJsZS1jb250ZW50Lmh0
bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1l
LW5vLXNjcm9sbGFibGUtY29udGVudC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9ldmVu
dHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUtY29udGVudC5o
dG1sOgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFt
ZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLXdpdGgtb2Zmc2Ny
ZWVuLWZvY3VzYWJsZS1lbGVtZW50Lmh0bWw6CisKIDIwMTAtMTEtMTEgIE5pa29sYXMgWmltbWVy
bWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkg
RGlyayBTY2h1bHplLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZp
Z2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0LXdpdGhvdXQtZm9jdXNhYmxlLWNvbnRlbnQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRp
YWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxlLWJ1dC13aXRob3V0LWZvY3VzYWJsZS1j
b250ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzE1NTMpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1kaXYtc2Nyb2xsYWJsZS1idXQtd2l0aG91
dC1mb2N1c2FibGUtY29udGVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDI0IEBAIEl0IGhhcyBhbHNvIG5vIGtleWJvYXJkIGZvY3VzYWJsZSBlbGVtZW4KIC4uLiBh
cyB3ZWxsIGFzIHNjcm9sbGJhcnMhCiAKIGUKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVF
bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1l
bnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9j
dXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIK
K1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBp
cyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1
dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQu
Z2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3Rp
dmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9j
dW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBn
Rm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFy
dCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQi
KSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVF
bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50
LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2Vk
RG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1Mg
Z0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5k
IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIp
IGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1
dGUoImlkIikgaXMgImVuZCIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50Lmdl
dEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKIApJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0LXdp
dGhvdXQtZm9jdXNhYmxlLWNvbnRlbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1kaXYtc2Nyb2xsYWJsZS1idXQtd2l0
aG91dC1mb2N1c2FibGUtY29udGVudC5odG1sCShyZXZpc2lvbiA3MTU1MykKKysrIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxlLWJ1
dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDI1IEBACiAgICAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KIAog
ICAgIHZhciByZXN1bHRNYXAgPSBbCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsi
RG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24i
LCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0
YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJd
LAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCiAgICAgICBbIkRvd24iLCAiZW5kIl0sCisgICAg
ICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAg
LCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0s
CisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBb
IlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCiAgICAgICBbIlVwIiAgLCAi
c3RhcnQiXSwKICAgICAgIFsiRE9ORSIsICJET05FIl0KICAgICBdOwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLWZvY3VzYWJs
ZS1jb250ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tZm9jdXNhYmxlLWNvbnRlbnQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MTU1MykKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2FibGUtY29udGVudC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiwyOCBAQCBhCiAKIAogZQorUEFTUyBn
Rm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFy
dCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQi
KSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1l
bnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5h
Y3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2Vk
RG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFT
UyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJz
dGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgi
aWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRB
dHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVu
dC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BB
U1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAi
ZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJp
ZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50
LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2
ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1l
bnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3Vz
ZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFT
UyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJl
bmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlk
IikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJp
YnV0ZSgiaWQiKSBpcyAiZW5kIgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQu
Z2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZl
RWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgogCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tZm9jdXNhYmxl
LWNvbnRlbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0
aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tZm9jdXNhYmxlLWNvbnRlbnQuaHRtbAkocmV2
aXNpb24gNzE1NTMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRp
b24vc25hdi1pZnJhbWUtbm8tZm9jdXNhYmxlLWNvbnRlbnQuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMTcsNyArMTcsMjkgQEAKICAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3Jp
cHQiPgogCiAgICAgdmFyIHJlc3VsdE1hcCA9IFsKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAor
ICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAg
IFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRv
d24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwg
InN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFy
dCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCiAgICAgICBbIkRvd24iLCAiZW5kIl0sCisg
ICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVw
IiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5k
Il0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAg
ICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAg
LCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCiAgICAgICBbIlVwIiAgLCAic3RhcnQi
XSwKICAgICAgIFsiRE9ORSIsICJET05FIl0KICAgICBdOwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUtY29u
dGVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
c3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUtY29udGVudC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDcxNTUzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3Bh
dGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUtY29udGVudC1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAgUEFTUyBnRm9jdXNlZERvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QQogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1l
bnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI0IgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2
ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI1IgogUEFTUyBnRm9jdXNlZERvY3VtZW50
LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI2IgorUEFTUyBnRm9jdXNlZERv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICIzIgogUEFTUyBnRm9j
dXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI3IgogUEFT
UyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICIz
IgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIp
IGlzICIyIgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9u
L3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUtY29udGVudC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1z
Y3JvbGxhYmxlLWNvbnRlbnQuaHRtbAkocmV2aXNpb24gNzE1NTMpCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1j
b250ZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICAgICAgIFsiVXAi
LCAiNCJdLAogICAgICAgWyJSaWdodCIsICI1Il0sCiAgICAgICBbIlJpZ2h0IiwgIjYiXSwKKyAg
ICAgIFsiVXAiLCAiMyJdLAogICAgICAgWyJSaWdodCIsICI3Il0sCiAgICAgICBbIlVwIiwgIjMi
XSwKICAgICAgIFsiVXAiLCAiMiJdLApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3Bh
dGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLXdpdGgtb2Zmc2NyZWVuLWZvY3VzYWJsZS1lbGVt
ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9z
cGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtd2l0aC1vZmZzY3JlZW4tZm9jdXNhYmxlLWVs
ZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MTU1MykKKysrIExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1
c2FibGUtZWxlbWVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsMTAgKzUsMTIg
QEAgUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QQogUEFTUyBnRm9jdXNl
ZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICIxIgogUEFTUyBn
Rm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICIxIgog
UEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlz
ICIyIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJp
ZCIpIGlzICIyIgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxl
bWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0
aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCiBQQVNTIGdGb2N1c2VkRG9jdW1l
bnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjEiCitQQVNTIGdGb2N1c2Vk
RG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjEiCiBQQVNTIGdG
b2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0
IgogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25h
di1pZnJhbWUtd2l0aC1vZmZzY3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJh
bWUtd2l0aC1vZmZzY3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQuaHRtbAkocmV2aXNpb24gNzE1NTMp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJh
bWUtd2l0aC1vZmZzY3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMjMsMTEgKzIzLDEzIEBACiAgICAgICBbIkRvd24iLCAiMSJdLAogICAgICAgWyJEb3duIiwg
IjEiXSwKICAgICAgIFsiRG93biIsICIyIl0sCisgICAgICBbIkRvd24iLCAiMiJdLAogICAgICAg
WyJEb3duIiwgImVuZCJdLAogICAgICAgWyJVcCIsICIyIl0sCiAgICAgICBbIlVwIiwgIjIiXSwK
ICAgICAgIFsiVXAiLCAiMiJdLAogICAgICAgWyJVcCIsICIxIl0sCisgICAgICBbIlVwIiwgIjEi
XSwKICAgICAgIFsiVXAiLCAic3RhcnQiXSwKICAgICAgIFsiRE9ORSIsICJET05FIl0KICAgICBd
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73617</attachid>
            <date>2010-11-11 09:03:01 -0800</date>
            <delta_ts>2010-11-11 10:59:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>49382.patch</filename>
            <type>text/plain</type>
            <size>44413</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTgxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMTEtMTEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
CisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJv
bGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24pOgorICAgICAgICAqIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZURhdGFGb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFsaWdubWVudEZvclJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OmFyZVJlY3RzVG9v
RmFyQXBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6aGFzT2Zmc2NyZWVuUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppc1Njcm9s
bGFibGVDb250YWluZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVPckZyYW1l
UGFyZW50Rm9yTm9kZUFuZERpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5TY3JvbGxJ
bkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzQ29vcmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZyYW1lUmVjdEluQWJzQ29vcmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlYXJjaFJlY3RGb3JEaXJlY3Rpb25BbmRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjplbnRy
eUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmln
YXRpb24uaDoKKwogMjAxMC0xMS0xMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3MTU1MykKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRn
ZXQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC0xNzUsNyArMTc3LDcg
QEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyhGb2N1cwogICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25SaWdodDoKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CiAgICAgY2FzZSBG
b2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAgIHJldHVybiBhZHZhbmNlRm9jdXNEaXJlY3Rpb25h
bGx5KGRpcmVjdGlvbiwgZXZlbnQpOworICAgICAgICByZXR1cm4gbmF2aWdhdGVJbjRXYXlEaXJl
Y3Rpb24oZGlyZWN0aW9uLCBldmVudCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtNjU4LDQgKzY2MCwxODYgQEAgdm9pZCBGb2N1c0NvbnRy
b2xsZXI6OnNldEFjdGl2ZShib29sIGFjdAogICAgICAgICBkaXNwYXRjaEV2ZW50c09uV2luZG93
QW5kRm9jdXNlZE5vZGUobV9mb2N1c2VkRnJhbWUtPmRvY3VtZW50KCksIGFjdGl2ZSk7CiB9CiAK
K3ZvaWQgdXBkYXRlRm9jdXNDYW5kaWRhdGVJZk5lZWRlZChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0
ZSwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCit7CisgICAgaWYgKCFjYW5kaWRhdGUubm9kZS0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZ25vcmUgZW1wdHkg
ZnJhbWVzCisgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgJiYg
IXN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGNhbmRpZGF0ZS5ub2RlKS0+Y29u
dGVudEZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElnbm9yZSBvZmYgc2NyZWVu
IGNoaWxkIG5vZGVzIG9mIGNvbnRhaW5lcnMgdGhhdCBkbyBub3Qgc2Nyb2xsIChvdmVyZmxvdzpo
aWRkZW4pCisgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXll
cigpICE9IGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94LT5yZW5kZXJlcigpLT5lbmNs
b3NpbmdMYXllcigpKQorICAgICAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9k
ZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICBkaXN0YW5jZURhdGFGb3JOb2RlKGRpcmVj
dGlvbiwgc3RhcnRpbmdSZWN0LCBjYW5kaWRhdGUpOworICAgIGlmIChjYW5kaWRhdGUuZGlzdGFu
Y2UgPT0gbWF4RGlzdGFuY2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc09mZnNj
cmVlblJlY3QoY2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikgJiYgY2FuZGlkYXRlLmFsaWdubWVu
dCA8IEZ1bGwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjbG9zZXN0LmlzTnVsbCgpKSB7
CisgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBJbnRSZWN0IGludGVyc2VjdGlvblJlY3QgPSBpbnRlcnNlY3Rpb24obm9kZVJlY3RJbkFi
c0Nvb3JkcyhjYW5kaWRhdGUubm9kZSksIG5vZGVSZWN0SW5BYnNDb29yZHMoY2xvc2VzdC5ub2Rl
KSk7CisgICAgaWYgKCFpbnRlcnNlY3Rpb25SZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJ
ZiAyIG5vZGVzIGFyZSBpbnRlcnNlY3RpbmcsIGRvIGhpdCB0ZXN0IHRvIGZpbmQgd2hpY2ggbm9k
ZSBpbiBvbiB0b3AuCisgICAgICAgIGludCB4ID0gaW50ZXJzZWN0aW9uUmVjdC54KCkgKyBpbnRl
cnNlY3Rpb25SZWN0LndpZHRoKCkgLyAyOworICAgICAgICBpbnQgeSA9IGludGVyc2VjdGlvblJl
Y3QueSgpICsgaW50ZXJzZWN0aW9uUmVjdC5oZWlnaHQoKSAvIDI7CisgICAgICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gY2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludCh4LCB5
KSwgZmFsc2UsIHRydWUpOworICAgICAgICBpZiAoY2FuZGlkYXRlLm5vZGUtPmNvbnRhaW5zKHJl
c3VsdC5pbm5lck5vZGUoKSkpIHsKKyAgICAgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNsb3Nlc3Qubm9kZS0+
Y29udGFpbnMocmVzdWx0LmlubmVyTm9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoY2FuZGlkYXRlLmFsaWdubWVudCA9PSBjbG9zZXN0LmFsaWdubWVudCkgewor
ICAgICAgICBpZiAoY2FuZGlkYXRlLmRpc3RhbmNlIDwgY2xvc2VzdC5kaXN0YW5jZSkKKyAgICAg
ICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoY2FuZGlkYXRlLmFsaWdubWVudCA+IGNsb3Nlc3QuYWxpZ25tZW50KQorICAgICAgICBj
bG9zZXN0ID0gY2FuZGlkYXRlOworfQorCit2b2lkIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3Vz
Q2FuZGlkYXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFy
dGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQs
IEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KQoreworICAgIEFTU0VSVChjb250YWluZXIpOworICAg
IGZvciAoTm9kZSogbm9kZSA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0g
KG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSB8fCBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJl
Y3Rpb24sIG5vZGUpKSA/IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoY29udGFpbmVyKSA6IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoY29udGFpbmVyKSkgeworICAgICAgICBpZiAoKCFmb2N1c2Vk
RnJhbWUoKSB8fCAhZm9jdXNlZEZyYW1lKCktPmRvY3VtZW50KCkgfHwgbm9kZSAhPSBmb2N1c2Vk
RnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSkgJiYgKG5vZGUtPmlzS2V5Ym9hcmRG
b2N1c2FibGUoZXZlbnQpIHx8IG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSB8fCBjYW5TY3Jv
bGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIG5vZGUpKSkgeworICAgICAgICAgICAgRm9jdXNDYW5k
aWRhdGUgY2FuZGlkYXRlKG5vZGUpOworICAgICAgICAgICAgY2FuZGlkYXRlLmVuY2xvc2luZ1Nj
cm9sbGFibGVCb3ggPSBjb250YWluZXI7CisgICAgICAgICAgICB1cGRhdGVGb2N1c0NhbmRpZGF0
ZUlmTmVlZGVkKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBjYW5kaWRhdGUsIGNsb3Nlc3QpOwor
ICAgICAgICB9CisgICAgfQorfQorCitib29sIEZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbkNv
bnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAo
IWNvbnRhaW5lciB8fCAhY29udGFpbmVyLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBUaGUgc3RhcnRpbmcgcmVjdCBpcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNl
ZCBub2RlLCBpbiBkb2N1bWVudCBjb29yZGluYXRlcy4KKyAgICAvLyBDb21wb3NlIGEgdmlydHVh
bCBzdGFydGluZyByZWN0IGlmIHRoZXJlIGlzIG5vIGZvY3VzZWQgbm9kZSBvciBpZiBpdCBpcyBv
ZmYgc2NyZWVuLgorICAgIC8vIFRoZSB2aXJ0dWFsIHJlY3QgaXMgdGhlIGVkZ2Ugb2YgdGhlIGNv
bnRhaW5lciBvciBmcmFtZS4gV2Ugc2VsZWN0IHdoaWNoCisgICAgLy8gZWRnZSBkZXBlbmRpbmcg
b24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbmF2aWdhdGlvbi4KKyAgICBJbnRSZWN0IG5ld1N0YXJ0
aW5nUmVjdCA9IHN0YXJ0aW5nUmVjdDsKKworICAgIGlmIChzdGFydGluZ1JlY3QuaXNFbXB0eSgp
KSB7CisgICAgICAgIG5ld1N0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNDb29yZHMoY29udGFp
bmVyKTsKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkxlZnQ6CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0WChuZXdTdGFydGlu
Z1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0V2lkdGgoMCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAg
ICAgICAgICAgbmV3U3RhcnRpbmdSZWN0LnNldFkobmV3U3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsK
KyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRIZWlnaHQoMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgbmV3
U3RhcnRpbmdSZWN0LnNldFdpZHRoKDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICAgICAgbmV3U3RhcnRpbmdSZWN0LnNldEhl
aWdodCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaW5k
IHRoZSBjbG9zZXN0IG5vZGUgd2l0aGluIGN1cnJlbnQgY29udGFpbmVyIGluIHRoZSBkaXJlY3Rp
b24gb2YgdGhlIG5hdmlnYXRpb24uCisgICAgRm9jdXNDYW5kaWRhdGUgZm9jdXNDYW5kaWRhdGU7
CisgICAgZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIoY29udGFpbmVyLCBuZXdTdGFydGlu
Z1JlY3QsIGRpcmVjdGlvbiwgZXZlbnQsIGZvY3VzQ2FuZGlkYXRlKTsKKworICAgIGlmIChmb2N1
c0NhbmRpZGF0ZS5pc051bGwoKSkgeworICAgICAgICBpZiAoY2FuU2Nyb2xsSW5EaXJlY3Rpb24o
ZGlyZWN0aW9uLCBjb250YWluZXIpKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGZvY3Vz
LCBzY3JvbGwgaWYgcG9zc2libGUuCisgICAgICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihjb250
YWluZXIsIGRpcmVjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBSZXR1cm4gZmFsc2Ugd2lsbCBjYXVzZSBhIHJlLXRyeSwgc2tpcHBpbmcgdGhp
cyBjb250YWluZXIuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGZvY3Vz
Q2FuZGlkYXRlLm5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkgeworICAgICAgICBpZiAoaGFz
T2Zmc2NyZWVuUmVjdChmb2N1c0NhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24pKSB7CisgICAgICAg
ICAgICBGcmFtZSogZnJhbWUgPSBmb2N1c0NhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT52aWV3
KCktPmZyYW1lKCk7CisgICAgICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihmcmFtZS0+ZG9jdW1l
bnQoKSwgZGlyZWN0aW9uLCBmb2N1c0NhbmRpZGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBOYXZpZ2F0ZSBpbnRvIGEgbmV3IGZyYW1lLgorICAg
ICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZE9y
TWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CisgICAgICAgIGlmIChmb2N1
c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpCisgICAgICAgICAgICBy
ZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3Jkcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7CisgICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5u
b2RlKS0+Y29udGVudEZyYW1lKCkpOworICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25l
ckVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5ub2RlKS0+Y29udGVudEZyYW1lKCktPmRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICBpZiAo
IW5hdmlnYXRlSW5Db250YWluZXIoc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4o
Zm9jdXNDYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpLT5kb2N1bWVudCgpLCByZWN0LCBk
aXJlY3Rpb24sIGV2ZW50KSkKKyAgICAgICAgICAgIC8vIFRoZSBuZXcgZnJhbWUgaGFkIG5vdGhp
bmcgaW50ZXJlc3RpbmcsIHNraXAgcGFzdCBpdCBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAg
cmV0dXJuIG5hdmlnYXRlSW5Db250YWluZXIoY29udGFpbmVyLCBub2RlUmVjdEluQWJzQ29vcmRz
KGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHRydWUpLCBkaXJlY3Rpb24sIGV2ZW50KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rp
b24sIGZvY3VzQ2FuZGlkYXRlLm5vZGUpKSB7CisgICAgICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0
KGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAgIHNjcm9sbElu
RGlyZWN0aW9uKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gTmF2aWdh
dGUgaW50byBhIG5ldyBzY3JvbGxhYmxlIGNvbnRhaW5lci4KKyAgICAgICAgSW50UmVjdCByZWN0
OworICAgICAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWRPck1haW5GcmFtZSgpLT5kb2N1
bWVudCgpLT5mb2N1c2VkTm9kZSgpOworICAgICAgICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09m
ZnNjcmVlblJlY3QoZm9jdXNlZE5vZGUpKQorICAgICAgICAgICAgcmVjdCA9IG5vZGVSZWN0SW5B
YnNDb29yZHMoZm9jdXNlZE5vZGUsIHRydWUpOworICAgICAgICByZXR1cm4gbmF2aWdhdGVJbkNv
bnRhaW5lcihmb2N1c0NhbmRpZGF0ZS5ub2RlLCByZWN0LCBkaXJlY3Rpb24sIGV2ZW50KTsKKyAg
ICB9CisgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0
aW9uKSkgeworICAgICAgICBOb2RlKiBjb250YWluZXIgPSBmb2N1c0NhbmRpZGF0ZS5lbmNsb3Np
bmdTY3JvbGxhYmxlQm94OworICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihjb250YWluZXIsIGRp
cmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBXZSBmb3VuZCBhIG5ldyBmb2N1cyBub2RlLCBuYXZpZ2F0ZSB0byBpdC4KKyAgICBF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5v
ZGUpOworICAgIEFTU0VSVChlbGVtZW50KTsKKworICAgIGVsZW1lbnQtPmZvY3VzKGZhbHNlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGb2N1c0NvbnRyb2xsZXI6Om5hdmlnYXRlSW40
V2F5RGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZl
bnQpCit7CisgICAgRnJhbWUqIGN1ckZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAg
QVNTRVJUKGN1ckZyYW1lKTsKKworICAgIERvY3VtZW50KiBmb2N1c2VkRG9jdW1lbnQgPSBjdXJG
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWZvY3VzZWREb2N1bWVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkRG9jdW1lbnQtPmZv
Y3VzZWROb2RlKCk7CisgICAgTm9kZSogY29udGFpbmVyID0gZm9jdXNlZERvY3VtZW50OworCisg
ICAgLy8gRmlndXJlIG91dCB0aGUgc3RhcnRpbmcgcmVjdC4KKyAgICBJbnRSZWN0IHN0YXJ0aW5n
UmVjdDsKKyAgICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09mZnNjcmVlblJlY3QoZm9jdXNlZE5v
ZGUpKSB7CisgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVPckZyYW1lUGFyZW50Rm9yTm9k
ZUFuZERpcmVjdGlvbihkaXJlY3Rpb24sIGZvY3VzZWROb2RlKTsKKyAgICAgICAgc3RhcnRpbmdS
ZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3Jkcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7CisgICAgfQorCisg
ICAgYm9vbCBjb25zdW1lZCA9IGZhbHNlOworICAgIGRvIHsKKyAgICAgICAgaWYgKGNvbnRhaW5l
ci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4o
Y29udGFpbmVyKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAg
ICAgIGNvbnN1bWVkID0gbmF2aWdhdGVJbkNvbnRhaW5lcihjb250YWluZXIsIHN0YXJ0aW5nUmVj
dCwgZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAgIHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5B
YnNDb29yZHMoY29udGFpbmVyLCB0cnVlKTsKKyAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJs
ZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKGRpcmVjdGlvbiwgY29udGFpbmVyKTsK
KyAgICB9IHdoaWxlICghY29uc3VtZWQgJiYgY29udGFpbmVyKTsKKyAgICByZXR1cm4gY29uc3Vt
ZWQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmgJKHJldmlzaW9uIDcxNTUzKQorKysgV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb2N1c0NhbmRpZGF0ZSYgcGFyZW50Q2FuZGlk
YXRlID0gRm9jdXNDYW5kaWRhdGUoKSk7CiAgICAgdm9pZCBkZWVwRmluZEZvY3VzYWJsZU5vZGVJ
bkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIE5vZGUqIGZvY3VzZWQsIEZvY3VzRGlyZWN0aW9u
LCBLZXlib2FyZEV2ZW50KiwgRm9jdXNDYW5kaWRhdGUmKTsKIAorICAgIGJvb2wgbmF2aWdhdGVJ
bkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwg
Rm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqKTsKKyAgICBib29sIG5hdmlnYXRlSW40V2F5
RGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBmaW5k
Rm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3Qm
IHN0YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0NhbmRp
ZGF0ZSYgY2xvc2VzdCk7CisKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgUmVmUHRyPEZyYW1lPiBt
X2ZvY3VzZWRGcmFtZTsKICAgICBib29sIG1faXNBY3RpdmU7CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TcGF0aWFs
TmF2aWdhdGlvbi5jcHAJKHJldmlzaW9uIDcxNTUzKQorKysgV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCiAKKyNpbmNsdWRlICJB
c3NlcnRpb25zLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQzLDkgKzQ0LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIGxvbmcgbG9uZyBzcGF0aWFsRGlzdGFuY2UoRm9jdXNEaXJlY3Rpb24s
IGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0Jik7CiBzdGF0aWMgSW50UmVjdCByZW5kZXJS
ZWN0UmVsYXRpdmVUb1Jvb3REb2N1bWVudChSZW5kZXJPYmplY3QqKTsKLXN0YXRpYyBSZWN0c0Fs
aWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFJlY3QmKTsKK3N0YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0
cyhGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRTaXplJiB2aWV3U2l6ZSk7CiBzdGF0aWMgYm9vbCBhcmVSZWN0c0Z1bGx5QWxpZ25lZChGb2N1
c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKIHN0YXRpYyBib29s
IGFyZVJlY3RzUGFydGlhbGx5QWxpZ25lZChGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFJlY3QmKTsKK3N0YXRpYyBib29sIGFyZVJlY3RzVG9vRmFyQXBhcnQoRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSk7CiBzdGF0aWMgYm9vbCBpc1Jl
Y3RJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmKTsKIHN0YXRpYyB2b2lkIGRlZmxhdGVJZk92ZXJsYXBwZWQoSW50UmVjdCYsIEludFJlY3Qm
KTsKIHN0YXRpYyBib29sIGNoZWNrTmVnYXRpdmVDb29yZHNGb3JOb2RlKE5vZGUqLCBjb25zdCBJ
bnRSZWN0Jik7CkBAIC0xMDIsNyArMTA0LDggQEAgdm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZv
Y3VzRGlyZWN0aW9uIAogICAgIC8vIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBub2RlcyBpcyBu
b3QgdG8gYmUgY29uc2lkZXJlZCBhbG9uZSB3aGVuIGV2YWx1YXRpbmcvbG9va2luZwogICAgIC8v
IGZvciB0aGUgYmVzdCBmb2N1cyBjYW5kaWRhdGUgbm9kZS4gQWxpZ25tZW50IG9mIHJlY3RzIGNh
biBiZSBhbHNvIGEgZ29vZCBwb2ludCB0byBiZQogICAgIC8vIGNvbnNpZGVyZWQgaW4gb3JkZXIg
dG8gbWFrZSB0aGUgYWxnb3JpdGhtIHRvIGJlaGF2aW9yIGluIGEgbW9yZSBpbnR1aXRpdmUgd2F5
LgotICAgIGNhbmRpZGF0ZS5hbGlnbm1lbnQgPSBhbGlnbm1lbnRGb3JSZWN0cyhkaXJlY3Rpb24s
IGN1clJlY3QsIHRhcmdldFJlY3QpOworICAgIEludFNpemUgdmlld1NpemUgPSBjYW5kaWRhdGUu
bm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QoKS5zaXplKCk7CisgICAgY2FuZGlkYXRlLmFsaWdubWVudCA9IGFsaWdubWVudEZv
clJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCwgdmlld1NpemUpOwogICAgIGNh
bmRpZGF0ZS5kaXN0YW5jZSA9IHNwYXRpYWxEaXN0YW5jZShkaXJlY3Rpb24sIGN1clJlY3QsIHRh
cmdldFJlY3QpOwogfQogCkBAIC0xMzYsOCArMTM5LDEyIEBAIHN0YXRpYyBJbnRSZWN0IHJlbmRl
clJlY3RSZWxhdGl2ZVRvUm9vdEQKICAgICByZXR1cm4gcmVjdDsKIH0KIAotc3RhdGljIFJlY3Rz
QWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgSW50UmVjdCYgY3VyUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKK3N0YXRpYyBS
ZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24s
IGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IEludFNpemUmIHZpZXdTaXplKQogeworICAgIC8vIElmIHdlIGZvdW5kIGEgbm9kZSBpbiBmdWxs
IGFsaWdubWVudCwgYnV0IGl0IGlzIHRvbyBmYXIgYXdheSwgaWdub3JlIGl0LgorICAgIGlmIChh
cmVSZWN0c1Rvb0ZhckFwYXJ0KGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCwgdmlld1Np
emUpKQorICAgICAgICByZXR1cm4gTm9uZTsKKwogICAgIGlmIChhcmVSZWN0c0Z1bGx5QWxpZ25l
ZChkaXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpKQogICAgICAgICByZXR1cm4gRnVsbDsK
IApAQCAtMjc3LDYgKzI4NCwyMyBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c1BhcnRpYWxseUFsaWdu
ZWQoRm9jCiAgICAgICAgICAgICB8fCAoYkVuZCA+PSBhU3RhcnQgJiYgYkVuZCA8PSBhRW5kKSk7
CiB9CiAKK3N0YXRpYyBib29sIGFyZVJlY3RzVG9vRmFyQXBhcnQoRm9jdXNEaXJlY3Rpb24gZGly
ZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewor
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkg
PCB0YXJnZXRSZWN0LnJpZ2h0KCkgfHwgY3VyUmVjdC54KCkgLSB0YXJnZXRSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAg
ICAgcmV0dXJuIHRhcmdldFJlY3QueCgpIDwgY3VyUmVjdC5yaWdodCgpIHx8IHRhcmdldFJlY3Qu
eCgpIC0gY3VyUmVjdC5yaWdodCgpID4gdmlld1NpemUud2lkdGgoKTsKKyAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBjdXJSZWN0LnkoKSA8IHRhcmdldFJlY3QuYm90
dG9tKCkgfHwgY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0LmJvdHRvbSgpID4gdmlld1NpemUuaGVp
Z2h0KCk7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHJldHVybiB0YXJn
ZXRSZWN0LnkoKSA8IGN1clJlY3QuYm90dG9tKCkgfHwgdGFyZ2V0UmVjdC55KCkgLSBjdXJSZWN0
LmJvdHRvbSgpID4gdmlld1NpemUuaGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogLy8g
UmV0dXJuIHRydWUgaWYgcmVjdCB8YXwgaXMgYmVsb3cgfGJ8LiBGYWxzZSBvdGhlcndpc2UuCiBz
dGF0aWMgaW5saW5lIGJvb2wgYmVsb3coY29uc3QgSW50UmVjdCYgYSwgY29uc3QgSW50UmVjdCYg
YikKIHsKQEAgLTQyNSw3ICs0NDksNyBAQCBzdGF0aWMgYm9vbCBpc1JlY3RJbkRpcmVjdGlvbihG
b2N1c0RpcmVjCiAvLyBDaGVja3MgaWYgfG5vZGV8IGlzIG9mZnNjcmVlbiB0aGUgdmlzaWJsZSBh
cmVhICh2aWV3cG9ydCkgb2YgaXRzIGNvbnRhaW5lcgogLy8gZG9jdW1lbnQuIEluIGNhc2UgaXQg
aXMsIG9uZSBjYW4gc2Nyb2xsIGluIGRpcmVjdGlvbiBvciB0YWtlIGFueSBkaWZmZXJlbnQKIC8v
IGRlc2lyZWQgYWN0aW9uIGxhdGVyIG9uLgotYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5v
ZGUpCitib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSwgRm9jdXNEaXJlY3Rpb24gZGly
ZWN0aW9uKQogewogICAgIC8vIEdldCB0aGUgRnJhbWVWaWV3IGluIHdoaWNoIHxub2RlfCBpcyAo
d2hpY2ggbWVhbnMgdGhlIGN1cnJlbnQgdmlld3BvcnQgaWYgfG5vZGV8CiAgICAgLy8gaXMgbm90
IGluIGFuIGlubmVyIGRvY3VtZW50KSwgc28gd2UgY2FuIGNoZWNrIGlmIGl0cyBjb250ZW50IHJl
Y3QgaXMgdmlzaWJsZQpAQCAtNDM1LDYgKzQ1OSwyNiBAQCBib29sIGhhc09mZnNjcmVlblJlY3Qo
Tm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBJbnRSZWN0IGNvbnRhaW5l
clZpZXdwb3J0UmVjdCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgLy8g
V2Ugd2FudCB0byBzZWxlY3QgYSBub2RlIGlmIGl0IGlzIGN1cnJlbnRseSBvZmYgc2NyZWVuLCBi
dXQgd2lsbCBiZQorICAgIC8vIGV4cG9zZWQgYWZ0ZXIgd2Ugc2Nyb2xsLiBBZGp1c3QgdGhlIHZp
ZXdwb3J0IHRvIHBvc3Qtc2Nyb2xsaW5nIHBvc2l0aW9uLgorICAgIHN3aXRjaCAoZGlyZWN0aW9u
KSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGNvbnRhaW5lclZpZXdw
b3J0UmVjdC5zZXRYKGNvbnRhaW5lclZpZXdwb3J0UmVjdC54KCkgLSBTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCkpOworICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0V2lkdGgo
Y29udGFpbmVyVmlld3BvcnRSZWN0LndpZHRoKCkgKyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6Cisg
ICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRXaWR0aChjb250YWluZXJWaWV3cG9ydFJl
Y3Qud2lkdGgoKSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgY29udGFpbmVyVmlld3Bv
cnRSZWN0LnNldFkoY29udGFpbmVyVmlld3BvcnRSZWN0LnkoKSAtIFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRIZWlnaHQo
Y29udGFpbmVyVmlld3BvcnRSZWN0LmhlaWdodCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Cisg
ICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRIZWlnaHQoY29udGFpbmVyVmlld3BvcnRS
ZWN0LmhlaWdodCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyKQpAQCAt
NDQ3LDM2ICs0OTEsNzUgQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCiAgICAg
cmV0dXJuICFjb250YWluZXJWaWV3cG9ydFJlY3QuaW50ZXJzZWN0cyhyZWN0KTsKIH0KIAotLy8g
SW4gYSBib3R0b20tdXAgd2F5LCB0aGlzIG1ldGhvZCB0cmllcyB0byBzY3JvbGwgfGZyYW1lfCBp
biBhIGdpdmVuIGRpcmVjdGlvbgotLy8gfGRpcmVjdGlvbnwsIGdvaW5nIHVwIGluIHRoZSBmcmFt
ZSB0cmVlIGhpZXJhcmNoeSBpbiBjYXNlIGl0IGRvZXMgbm90IHN1Y2NlZWQuCi1ib29sIHNjcm9s
bEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlKQorYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihGcmFt
ZSogZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRhdGUm
KQogewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQo
ZnJhbWUgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBmcmFtZS0+ZG9jdW1lbnQo
KSkpOwogCi0gICAgU2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbjsKKyAgICBpZiAoZnJh
bWUgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBmcmFtZS0+ZG9jdW1lbnQoKSkp
IHsKKyAgICAgICAgaW50IGR4ID0gMDsKKyAgICAgICAgaW50IGR5ID0gMDsKKyAgICAgICAgc3dp
dGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAg
ICAgICAgICBkeCA9IC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgICAg
IGR4ID0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgICAgIGR5ID0gLSBTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgICAgICBkeSA9IFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KIAotICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6Ci0gICAgICAgIHNj
cm9sbERpcmVjdGlvbiA9IFNjcm9sbExlZnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsUmlnaHQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKLSAgICAgICAgc2Ny
b2xsRGlyZWN0aW9uID0gU2Nyb2xsVXA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25Eb3duOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEb3duOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KEludFNpemUoZHgsIGR5KSk7CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgc2Nyb2xsSW5EaXJl
Y3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZv
Y3VzQ2FuZGlkYXRlJikKK3sKKyAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQor
ICAgICAgICByZXR1cm4gc2Nyb2xsSW5EaXJlY3Rpb24oc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihj
b250YWluZXIpLT5mcmFtZSgpLCBkaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlKCkpOworCisgICAg
aWYgKCFjb250YWluZXItPnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoY29udGFpbmVyICYmIGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgY29udGFp
bmVyKSkgeworICAgICAgICBJbnRSZWN0IHNjcm9sbFJlY3QgPSBjb250YWluZXItPmdldFJlY3Qo
KTsKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlKGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+Ym9yZGVyTGVmdFdpZHRoKCksIGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9y
ZGVyVG9wV2lkdGgoKSk7CisgICAgICAgIHNjcm9sbFJlY3Quc2V0V2lkdGgoc2Nyb2xsUmVjdC53
aWR0aCgpIC0gKGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRo
KCkgKyBjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSkp
OworICAgICAgICBzY3JvbGxSZWN0LnNldEhlaWdodChzY3JvbGxSZWN0LmhlaWdodCgpIC0gKGNv
bnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSArIGNvbnRhaW5l
ci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkpOworICAgICAgICBp
bnQgZHggPSAwOworICAgICAgICBpbnQgZHkgPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlv
bikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIGR4ID0g
LSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJv
eCgpLT5zY3JvbGxMZWZ0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXItPnJlbmRlckJv
eCgpLT5zY3JvbGxXaWR0aCgpID4gKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQo
KSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpKTsKKyAgICAgICAgICAg
IGR4ID0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5k
ZXJCb3goKS0+c2Nyb2xsV2lkdGgoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxM
ZWZ0KCkgKyBjb250YWluZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICAgICAg
ZHkgPSAtIG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+cmVu
ZGVyQm94KCktPnNjcm9sbFRvcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXItPnJlbmRl
ckJveCgpLT5zY3JvbGxIZWlnaHQoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxU
b3AoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAg
ICAgICBkeSA9IG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+
cmVuZGVyQm94KCktPnNjcm9sbEhlaWdodCgpIC0gKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNj
cm9sbFRvcCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KIAotICAgIGlmICghY2FuZGlkYXRlLmlzTnVsbCgpICYm
IGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVC
b3gpKQotICAgICAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNp
dmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgY2FuZGlkYXRlLmVuY2xvc2luZ1Nj
cm9sbGFibGVCb3gpOworICAgICAgICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdM
YXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGR4LCBkeSk7CiAKLSAgICByZXR1cm4gZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEJ5TGluZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHZvaWQgc2Nyb2xsSW50b1ZpZXcoRWxlbWVudCogZWxlbWVudCkKQEAgLTUzNCw3ICs2
MTcsNyBAQCBzdGF0aWMgYm9vbCBjaGVja05lZ2F0aXZlQ29vcmRzRm9yTm9kZShOCiAgICAgcmV0
dXJuIGNhbkJlU2Nyb2xsZWQ7CiB9CiAKLWJvb2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShO
b2RlKiBub2RlKQorYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKGNvbnN0IE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NjcsNCAr
NjUwLDI2OCBAQCBib29sIGlzTm9kZURlZXBEZXNjZW5kYW50T2ZEb2N1bWVudChOb2RlCiAgICAg
cmV0dXJuIGRlc2NlbmRhbnQ7CiB9CiAKK05vZGUqIHNjcm9sbGFibGVPckZyYW1lUGFyZW50Rm9y
Tm9kZUFuZERpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIG5vZGUpCit7
CisgICAgQVNTRVJUKG5vZGUpOworICAgIE5vZGUqIHBhcmVudCA9IG5vZGU7CisgICAgZG8gewor
ICAgICAgICBpZiAocGFyZW50LT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAgICAgcGFyZW50
ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihwYXJlbnQpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5v
d25lckVsZW1lbnQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50
LT5wYXJlbnROb2RlKCk7CisgICAgfSB3aGlsZSAocGFyZW50ICYmICFjYW5TY3JvbGxJbkRpcmVj
dGlvbihkaXJlY3Rpb24sIHBhcmVudCkgJiYgIXBhcmVudC0+aXNEb2N1bWVudE5vZGUoKSk7Cisg
ICAgcmV0dXJuIHBhcmVudDsKK30KKworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihGb2N1c0Rp
cmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IE5vZGUqIGNvbnRhaW5lcikKK3sKKyAgICBBU1NFUlQo
Y29udGFpbmVyKTsKKyAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAg
ICByZXR1cm4gY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBzdGF0aWNfY2FzdDxjb25z
dCBEb2N1bWVudCo+KGNvbnRhaW5lciktPmZyYW1lKCkpOworCisgICAgaWYgKCFjb250YWluZXIt
PnJlbmRlckJveCgpIHx8ICFjb250YWluZXItPnJlbmRlckJveCgpLT5jYW5CZVNjcm9sbGVkQW5k
SGFzU2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNo
IChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgcmV0
dXJuIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSA+IDA7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvblVwOgorICAgICAgICByZXR1cm4gY29udGFpbmVyLT5yZW5kZXJCb3goKS0+
c2Nyb2xsVG9wKCkgPiAwOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAg
cmV0dXJuIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNvbnRhaW5lci0+
cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkgPCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3Jv
bGxXaWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICByZXR1cm4g
Y29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXItPnJlbmRlckJv
eCgpLT5jbGllbnRIZWlnaHQoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbEhlaWdo
dCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZv
Y3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnJhbWUqIGZyYW1lKQoreworICAgIGlmICgh
ZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGlyZWN0aW9u
ID09IEZvY3VzRGlyZWN0aW9uTGVmdCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25SaWdo
dCkgJiYgIWZyYW1lLT52aWV3KCktPmhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICgoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uVXAgfHwgZGly
ZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRG93bikgJiYgIWZyYW1lLT52aWV3KCktPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBJbnRTaXplIHNpemUgPSBm
cmFtZS0+dmlldygpLT5jb250ZW50c1NpemUoKTsKKyAgICBJbnRTaXplIG9mZnNldCA9IGZyYW1l
LT52aWV3KCktPnNjcm9sbE9mZnNldCgpOworICAgIEludFJlY3QgcmVjdCA9IGZyYW1lLT52aWV3
KCktPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7
CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIHJldHVybiBvZmZzZXQud2lk
dGgoKSA+IDA7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICByZXR1cm4gb2Zm
c2V0LmhlaWdodCgpID4gMDsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAg
IHJldHVybiByZWN0LndpZHRoKCkgKyBvZmZzZXQud2lkdGgoKSA8IHNpemUud2lkdGgoKTsKKyAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgcmV0dXJuIHJlY3QuaGVpZ2h0KCkg
KyBvZmZzZXQuaGVpZ2h0KCkgPCBzaXplLmhlaWdodCgpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0lu
dFJlY3Qgbm9kZVJlY3RJbkFic0Nvb3JkcyhOb2RlKiBub2RlLCBib29sIGlnbm9yZUJvcmRlcikK
K3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpKTsKKworICAgIGlmIChub2Rl
LT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gZnJhbWVSZWN0SW5BYnNDb29yZHMo
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKS0+ZnJhbWUoKSk7CisgICAgSW50UmVjdCByZWN0
ID0gbm9kZS0+Z2V0UmVjdCgpOworCisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1
bWVudCgpLT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkg
eworICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihm
cmFtZS0+b3duZXJFbGVtZW50KCkpKSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAg
ICAgcmVjdC5tb3ZlKGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxlbWVudC0+b2Zmc2V0VG9wKCkp
OworICAgICAgICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LT5vZmZzZXRQYXJlbnQo
KSkpOworICAgICAgICAgICAgcmVjdC5tb3ZlKCgtZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0
KCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZvciBhdXRob3JzIHRoYXQgdXNlIGJv
cmRlciBpbmR0ZWFkIG9mIG91dGxpbmUgaW4gdGhlaXIgQ1NTLCB3ZSBjb21wZW5zYXRlIGJ5IGln
bm9yaW5nIHRoZSBib3JkZXIgd2hlbiBjYWxjdWxhdGluZworICAgIC8vIHRoZSByZWN0IG9mIHRo
ZSBmb2N1c2VkIGVsZW1lbnQuCisgICAgaWYgKGlnbm9yZUJvcmRlcikgeworICAgICAgICByZWN0
Lm1vdmUobm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCksIG5vZGUt
PnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkpOworICAgICAgICByZWN0LnNl
dFdpZHRoKHJlY3Qud2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckxl
ZnRXaWR0aCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgp
KTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIG5vZGUtPnJlbmRlcmVy
KCktPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkgLSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgp
LT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0lu
dFJlY3QgZnJhbWVSZWN0SW5BYnNDb29yZHMoRnJhbWUqIGZyYW1lKQoreworICAgIEludFJlY3Qg
cmVjdCA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworCisgICAgZm9yICg7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZyYW1lLT5vd25lckVsZW1l
bnQoKSkpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUoZWxl
bWVudC0+b2Zmc2V0TGVmdCgpLCBlbGVtZW50LT5vZmZzZXRUb3AoKSk7CisgICAgICAgICAgICB9
IHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7CisgICAgICAgICAg
ICByZWN0Lm1vdmUoKC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiByZWN0OworfQorCitJbnRSZWN0IHNlYXJjaFJlY3RGb3JEaXJl
Y3Rpb25BbmRGcmFtZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEZyYW1lKiBmcmFtZSwgRnJh
bWUqIGFmdGVyRnJhbWUpCit7CisgICAgSW50UmVjdCBzZWFyY2hSZWN0ID0gZnJhbWUtPnZpZXco
KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgZm9yICg7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChmcmFtZS0+b3duZXJFbGVtZW50KCkp
IHsKKyAgICAgICAgICAgIHNlYXJjaFJlY3QubW92ZSgtIGZyYW1lLT52aWV3KCktPnNjcm9sbE9m
ZnNldCgpKTsKKyAgICAgICAgICAgIHNlYXJjaFJlY3QubW92ZShmcmFtZS0+b3duZXJFbGVtZW50
KCktPmdldFJlY3QoKS54KCksIGZyYW1lLT5vd25lckVsZW1lbnQoKS0+Z2V0UmVjdCgpLnkoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFmdGVyRnJhbWUpIHsKKyAgICAgICAgSW50UmVj
dCBmcmFtZVJlY3QgPSBhZnRlckZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOwor
ICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
TGVmdDoKKyAgICAgICAgICAgIHNlYXJjaFJlY3Quc2V0V2lkdGgoZnJhbWVSZWN0LngoKSAtIHNl
YXJjaFJlY3QueCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6CisgICAgICAgICAgICBzZWFyY2hSZWN0LnNldEhlaWdodChmcmFtZVJlY3QueSgp
IC0gc2VhcmNoUmVjdC55KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgICAgIHNlYXJjaFJlY3Quc2V0WChmcmFtZVJlY3Qu
cmlnaHQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkRvd246CisgICAgICAgICAgICBzZWFyY2hSZWN0LnNldFkoZnJhbWVSZWN0LmJvdHRvbSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNlYXJjaFJlY3Q7
Cit9CisKKy8vIEV4aXQgcG9pbnQgaXMgdGhlIGNsb3Nlc3QgcG9pbnQgaW4gdGhlIHN0YXJ0aW5n
UmVjdCwgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisvLyBF
bnRyeSBwb2ludCBpcyB0aGUgY2xvc2VzdCBwb2ludCBpbiB0aGUgY2FuZGlkYXRlIG5vZGUsIGRl
cGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uLgordm9pZCBlbnRyeUFu
ZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzdGFydGluZ1JlY3QsIGNvbnN0IEludFJlY3QmIHBvdGVudGlhbFJlY3QsIEludFBv
aW50JiBleGl0UG9pbnQsIEludFBvaW50JiBlbnRyeVBvaW50KQoreworICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGV4aXRQb2lu
dC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50
aWFsUmVjdC5yaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
blVwOgorICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKKyAgICAgICAg
ZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0
YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJl
Y3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Cisg
ICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgIGVu
dHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBpZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBwb3Rl
bnRpYWxSZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0Lnko
KSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC5ib3R0b20oKSk7
CisgICAgICAgIH0gZWxzZSBpZiAoYmVsb3cocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkg
eworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3RhcnRpbmdSZWN0LnkoKSwg
cG90ZW50aWFsUmVjdC55KCkpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShleGl0UG9p
bnQueSgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uVXA6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIGlmIChyaWdodE9m
KHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkpIHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5z
ZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVu
dGlhbFJlY3QucmlnaHQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPZihwb3RlbnRpYWxS
ZWN0LCBzdGFydGluZ1JlY3QpKSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGlu
Z1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVj
dC54KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFgobWF4
KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgpKSk7CisgICAgICAgICAgICBlbnRy
eVBvaW50LnNldFgoZXhpdFBvaW50LngoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2
b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCit7CisgICAg
aWYgKGNhbmRpZGF0ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghY2FuZGlk
YXRlLm5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IG5vZGVS
ZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3JkcyhjYW5kaWRhdGUubm9kZSwgdHJ1ZSk7CisKKyAgICBz
d2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAg
ICBpZiAobm9kZVJlY3QucmlnaHQoKSA+IHN0YXJ0aW5nUmVjdC54KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAg
ICAgaWYgKG5vZGVSZWN0LmJvdHRvbSgpID4gc3RhcnRpbmdSZWN0LnkoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0Ogor
ICAgICAgICBpZiAobm9kZVJlY3QueCgpIDwgc3RhcnRpbmdSZWN0LnJpZ2h0KCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3du
OgorICAgICAgICBpZiAobm9kZVJlY3QueSgpIDwgc3RhcnRpbmdSZWN0LmJvdHRvbSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBJbnRQb2ludCBleGl0UG9pbnQ7Cisg
ICAgSW50UG9pbnQgZW50cnlQb2ludDsKKyAgICBpbnQgc2FtZUF4aXNEaXN0ID0gMDsKKyAgICBp
bnQgb3RoZXJBeGlzRGlzdCA9IDA7CisgICAgZW50cnlBbmRFeGl0UG9pbnRzRm9yRGlyZWN0aW9u
KGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBub2RlUmVjdCwgZXhpdFBvaW50LCBlbnRyeVBvaW50
KTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxl
ZnQ6CisgICAgICAgIHNhbWVBeGlzRGlzdCA9IGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50Lngo
KTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdCA9IGFicyhleGl0UG9pbnQueSgpIC0gZW50cnlQb2lu
dC55KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAg
ICAgIHNhbWVBeGlzRGlzdCA9IGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKTsKKyAgICAg
ICAgb3RoZXJBeGlzRGlzdCA9IGFicyhleGl0UG9pbnQueCgpIC0gZW50cnlQb2ludC54KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIHNh
bWVBeGlzRGlzdCA9IGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKTsKKyAgICAgICAgb3Ro
ZXJBeGlzRGlzdCA9IGFicyhlbnRyeVBvaW50LnkoKSAtIGV4aXRQb2ludC55KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgc2FtZUF4aXNE
aXN0ID0gZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpOworICAgICAgICBvdGhlckF4aXNE
aXN0ID0gYWJzKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIGludCB4ID0gKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSkgKiAoZW50cnlQb2lu
dC54KCkgLSBleGl0UG9pbnQueCgpKTsKKyAgICBpbnQgeSA9IChlbnRyeVBvaW50LnkoKSAtIGV4
aXRQb2ludC55KCkpICogKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7CisKKyAgICBm
bG9hdCBldWNsaWRpYW5EaXN0YW5jZSA9IHNxcnQoKHggKyB5KSAqIDEuMCk7CisKKyAgICAvLyBM
b29zZWx5IGJhc2VkIG9uIGh0dHA6Ly93d3cudzMub3JnL1RSL1dJQ0QvI2ZvY3VzLWhhbmRsaW5n
CisgICAgLy8gZGYgPSBkb3REaXN0ICsgZHggKyBkeSArIDIgKiAoeGRpc3BsYWNlbWVudCArIHlk
aXNwbGFjZW1lbnQpIC0gc3FydChPdmVybGFwKQorCisgICAgZmxvYXQgZGlzdGFuY2UgPSBldWNs
aWRpYW5EaXN0YW5jZSArIHNhbWVBeGlzRGlzdCArIDIgKiBvdGhlckF4aXNEaXN0OworICAgIGNh
bmRpZGF0ZS5kaXN0YW5jZSA9IHJvdW5kZihkaXN0YW5jZSk7CisgICAgSW50U2l6ZSB2aWV3U2l6
ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKKyAgICBjYW5kaWRhdGUuYWxpZ25tZW50
ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBzdGFydGluZ1JlY3QsIG5vZGVSZWN0LCB2
aWV3U2l6ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9TcGF0aWFsTmF2aWdhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TcGF0aWFs
TmF2aWdhdGlvbi5oCShyZXZpc2lvbiA3MTU1MykKKysrIFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2
aWdhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTEgKzEzMSwxOCBAQCBzdHJ1Y3QgRm9j
dXNDYW5kaWRhdGUgewogCiB2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBOb2RlKiBzdGFydCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSk7CiBib29s
IHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiwgRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2Fu
ZGlkYXRlJiBjYW5kaWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKK2Jvb2wgc2Nyb2xsSW5EaXJl
Y3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRh
dGUmIGNhbmRpZGF0ZSA9IEZvY3VzQ2FuZGlkYXRlKCkpOwogdm9pZCBzY3JvbGxJbnRvVmlldyhF
bGVtZW50Kik7Ci1ib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSopOworYm9vbCBoYXNPZmZzY3Jl
ZW5SZWN0KE5vZGUqLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBGb2N1c0RpcmVjdGlvbk5v
bmUpOwogYm9vbCBpc0luUm9vdERvY3VtZW50KE5vZGUqKTsKLWJvb2wgaXNTY3JvbGxhYmxlQ29u
dGFpbmVyTm9kZShOb2RlKik7Citib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoY29uc3Qg
Tm9kZSopOwogYm9vbCBpc05vZGVEZWVwRGVzY2VuZGFudE9mRG9jdW1lbnQoTm9kZSosIERvY3Vt
ZW50Kik7CitOb2RlKiBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVBbmREaXJlY3Rpb24o
Rm9jdXNEaXJlY3Rpb24sIE5vZGUqIG5vZGUpOworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihG
b2N1c0RpcmVjdGlvbiwgY29uc3QgTm9kZSogY29udGFpbmVyKTsKK2Jvb2wgY2FuU2Nyb2xsSW5E
aXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZyYW1lKik7CitJbnRSZWN0IG5vZGVSZWN0
SW5BYnNDb29yZHMoTm9kZSosIGJvb2wgaWdub3JlQm9yZGVyID0gZmFsc2UpOworSW50UmVjdCBm
cmFtZVJlY3RJbkFic0Nvb3JkcyhGcmFtZSopOwordm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRl
Jik7CiAKIH0gLy8gbmFtc3BhY2UgV2ViQ29yZQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MTgxOCkK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDEwLTExLTExICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4sIENoYW5n
IFNodSAgPGNoYW5nLnNodUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BhdGlhbCBOYXZpZ2F0aW9uOiBpc3N1ZXMgd2l0aCB0aGUg
bm9kZSBzZWxlY3Rpb24gYWxnb3JpdGhtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDkzODIKKworICAgICAgICBVcGRhdGUgdGhlIHRlc3RzIGR1ZSB0
byBjaGFuZ2UgaW4gYmVoYXZpb3Igb2YgU3BhdGlhbCBOYXZpZ2F0aW9uLgorICAgICAgICBDb250
YWluZXJzIG5vdyBzY3JvbGwgdG8gcmV2ZWFsIGFsbCBvZiB0aGVpciBjaW50ZW50LCBldmVuIGlm
IHRoZXkgZG8gbm90IGhhdmUgZm9jdXNhYmxlIG5vZGVzLgorCisgICAgICAgICogZmFzdC9ldmVu
dHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0LXdpdGhvdXQtZm9j
dXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRp
YWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxlLWJ1dC13aXRob3V0LWZvY3VzYWJsZS1j
b250ZW50Lmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3Nu
YXYtaWZyYW1lLW5vLWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tZm9jdXNhYmxlLWNv
bnRlbnQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25h
di1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1j
b250ZW50Lmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3Nu
YXYtaWZyYW1lLXdpdGgtb2Zmc2NyZWVuLWZvY3VzYWJsZS1lbGVtZW50LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtd2l0
aC1vZmZzY3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQuaHRtbDoKKwogMjAxMC0xMS0xMSAgTmlrb2xh
cyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSdWJiZXItc3Rh
bXBlZCBieSBEaXJrIFNjaHVsemUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0
aWFsLW5hdmlnYXRpb24vc25hdi1kaXYtc2Nyb2xsYWJsZS1idXQtd2l0aG91dC1mb2N1c2FibGUt
Y29udGVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0LXdpdGhvdXQtZm9j
dXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MTU1MykKKysrIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxlLWJ1
dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsMjQgQEAgSXQgaGFzIGFsc28gbm8ga2V5Ym9hcmQgZm9jdXNhYmxlIGVsZW1l
bgogLi4uIGFzIHdlbGwgYXMgc2Nyb2xsYmFycyEKIAogZQorUEFTUyBnRm9jdXNlZERvY3VtZW50
LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3Vz
ZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
InN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50Lmdl
dEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZl
RWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0Zv
Y3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQi
CitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikg
aXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVF
bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50
LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2Vk
RG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1Mg
Z0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5k
IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIp
IGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1
dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50Lmdl
dEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQu
YWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgogCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1kaXYtc2Nyb2xsYWJs
ZS1idXQtd2l0aG91dC1mb2N1c2FibGUtY29udGVudC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxl
LWJ1dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50Lmh0bWwJKHJldmlzaW9uIDcxNTUzKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9s
bGFibGUtYnV0LXdpdGhvdXQtZm9jdXNhYmxlLWNvbnRlbnQuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsMjUgQEAKICAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3Jp
cHQiPgogCiAgICAgdmFyIHJlc3VsdE1hcCA9IFsKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAor
ICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAg
IFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRv
d24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwg
InN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKICAgICAgIFsiRG93biIsICJlbmQi
XSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAg
IFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAs
ICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwK
KyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKICAgICAgIFsi
VXAiICAsICJzdGFydCJdLAogICAgICAgWyJET05FIiwgIkRPTkUiXQogICAgIF07CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8t
Zm9jdXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2FibGUt
Y29udGVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcxNTUzKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLWZvY3VzYWJsZS1jb250
ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDI4IEBAIGEKIAogCiBl
CitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikg
aXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50
LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0
aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1Mg
Z0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3Rh
cnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlk
IikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0
cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVt
ZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQu
YWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNl
ZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BB
U1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAi
ZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJp
ZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50
LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2
ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1l
bnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3Vz
ZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFT
UyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJl
bmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlk
IikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJp
YnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQu
Z2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZl
RWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVu
dC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCiAKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1m
b2N1c2FibGUtY29udGVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2FibGUtY29udGVudC5o
dG1sCShyZXZpc2lvbiA3MTU1MykKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwt
bmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2FibGUtY29udGVudC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xNyw3ICsxNywyOSBAQAogICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24v
amF2YXNjcmlwdCI+CiAKICAgICB2YXIgcmVzdWx0TWFwID0gWworICAgICAgWyJEb3duIiwgInN0
YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJd
LAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAg
ICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBb
IkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3du
IiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKICAgICAgIFsiRG93biIsICJl
bmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAg
ICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAi
ICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQi
XSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAg
IFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKICAgICAgIFsiVXAiICAs
ICJzdGFydCJdLAogICAgICAgWyJET05FIiwgIkRPTkUiXQogICAgIF07CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xs
YWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250
ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzE1NTMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQCBQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0
aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjQiCiBQQVNTIGdGb2N1c2VkRG9jdW1l
bnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjUiCiBQQVNTIGdGb2N1c2Vk
RG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjYiCitQQVNTIGdG
b2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjMiCiBQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
IjciCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlk
IikgaXMgIjMiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1
dGUoImlkIikgaXMgIjIiCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5h
dmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZy
YW1lLW5vLXNjcm9sbGFibGUtY29udGVudC5odG1sCShyZXZpc2lvbiA3MTU1MykKKysrIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1zY3Jv
bGxhYmxlLWNvbnRlbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogICAg
ICAgWyJVcCIsICI0Il0sCiAgICAgICBbIlJpZ2h0IiwgIjUiXSwKICAgICAgIFsiUmlnaHQiLCAi
NiJdLAorICAgICAgWyJVcCIsICIzIl0sCiAgICAgICBbIlJpZ2h0IiwgIjciXSwKICAgICAgIFsi
VXAiLCAiMyJdLAogICAgICAgWyJVcCIsICIyIl0sCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtd2l0aC1vZmZzY3JlZW4tZm9jdXNh
YmxlLWVsZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1
c2FibGUtZWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcxNTUzKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLXdpdGgtb2Zmc2Ny
ZWVuLWZvY3VzYWJsZS1lbGVtZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNSwx
MCArNSwxMiBAQCBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBCiBQQVNT
IGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjEi
CiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikg
aXMgIjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUo
ImlkIikgaXMgIjIiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgIjIiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVF
bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5h
Y3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKIFBBU1MgZ0ZvY3VzZWREb2N1
bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKIFBBU1MgZ0ZvY3Vz
ZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMSIKK1BBU1Mg
Z0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMSIK
IFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBp
cyAic3RhcnQiCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdh
dGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9z
bmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC5odG1sCShyZXZpc2lv
biA3MTU1MykKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9z
bmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0yMywxMSArMjMsMTMgQEAKICAgICAgIFsiRG93biIsICIxIl0sCiAgICAgICBb
IkRvd24iLCAiMSJdLAogICAgICAgWyJEb3duIiwgIjIiXSwKKyAgICAgIFsiRG93biIsICIyIl0s
CiAgICAgICBbIkRvd24iLCAiZW5kIl0sCiAgICAgICBbIlVwIiwgIjIiXSwKICAgICAgIFsiVXAi
LCAiMiJdLAogICAgICAgWyJVcCIsICIyIl0sCiAgICAgICBbIlVwIiwgIjEiXSwKKyAgICAgIFsi
VXAiLCAiMSJdLAogICAgICAgWyJVcCIsICJzdGFydCJdLAogICAgICAgWyJET05FIiwgIkRPTkUi
XQogICAgIF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73627</attachid>
            <date>2010-11-11 10:59:29 -0800</date>
            <delta_ts>2010-11-11 12:54:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>49382.patch</filename>
            <type>text/plain</type>
            <size>43789</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTgxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMTEtMTEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
CisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJv
bGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24pOgorICAgICAgICAqIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZURhdGFGb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFsaWdubWVudEZvclJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OmFyZVJlY3RzVG9v
RmFyQXBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6aGFzT2Zmc2NyZWVuUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppc1Njcm9s
bGFibGVDb250YWluZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVPckZyYW1l
UGFyZW50Rm9yTm9kZUFuZERpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5TY3JvbGxJ
bkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzQ29vcmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZyYW1lUmVjdEluQWJzQ29vcmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlYXJjaFJlY3RGb3JEaXJlY3Rpb25BbmRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjplbnRy
eUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmln
YXRpb24uaDoKKwogMjAxMC0xMS0xMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3MTU1MykKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRn
ZXQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC01Nyw2ICs1OSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCitzdGF0aWMgdm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVk
KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBG
b2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCk7CiBzdGF0
aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hFdmVudHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBmb2N1c2VkKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBmb2N1
c2VkIG5vZGUgd2Ugc2hvdWxkIGRpc3BhdGNoIGJsdXIgb24gaXQgYmVmb3JlIHdlIGJsdXIgdGhl
IHdpbmRvdy4KQEAgLTE3NSw3ICsxNzgsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5j
ZUZvY3VzKEZvY3VzCiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25VcDoKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0
dXJuIGFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkoZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAg
IHJldHVybiBuYXZpZ2F0ZUluNFdheURpcmVjdGlvbihkaXJlY3Rpb24sIGV2ZW50KTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC02NTgsNCAr
NjYxLDE4NiBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0QWN0aXZlKGJvb2wgYWN0CiAgICAg
ICAgIGRpc3BhdGNoRXZlbnRzT25XaW5kb3dBbmRGb2N1c2VkTm9kZShtX2ZvY3VzZWRGcmFtZS0+
ZG9jdW1lbnQoKSwgYWN0aXZlKTsKIH0KIAordm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVl
ZGVkKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0
LCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCkKK3sK
KyAgICBpZiAoIWNhbmRpZGF0ZS5ub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIElnbm9yZSBlbXB0eSBmcmFtZXMKKyAgICBpZiAoY2FuZGlkYXRlLm5vZGUt
PmlzRnJhbWVPd25lckVsZW1lbnQoKSAmJiAhc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVt
ZW50Kj4oY2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gSWdub3JlIG9mZiBzY3JlZW4gY2hpbGQgbm9kZXMgb2YgY29udGFpbmVycyB0aGF0
IGRvIG5vdCBzY3JvbGwgKG92ZXJmbG93OmhpZGRlbikKKyAgICBpZiAoY2FuZGlkYXRlLm5vZGUt
PnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkgIT0gY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9s
bGFibGVCb3gtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpCisgICAgICAgIGlmIChoYXNP
ZmZzY3JlZW5SZWN0KGNhbmRpZGF0ZS5ub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
IGRpc3RhbmNlRGF0YUZvck5vZGUoZGlyZWN0aW9uLCBzdGFydGluZ1JlY3QsIGNhbmRpZGF0ZSk7
CisgICAgaWYgKGNhbmRpZGF0ZS5kaXN0YW5jZSA9PSBtYXhEaXN0YW5jZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9kZSwgZGlyZWN0
aW9uKSAmJiBjYW5kaWRhdGUuYWxpZ25tZW50IDwgRnVsbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGNsb3Nlc3QuaXNOdWxsKCkpIHsKKyAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgaW50ZXJzZWN0aW9uUmVjdCA9
IGludGVyc2VjdGlvbihub2RlUmVjdEluQWJzQ29vcmRzKGNhbmRpZGF0ZS5ub2RlKSwgbm9kZVJl
Y3RJbkFic0Nvb3JkcyhjbG9zZXN0Lm5vZGUpKTsKKyAgICBpZiAoIWludGVyc2VjdGlvblJlY3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIDIgbm9kZXMgYXJlIGludGVyc2VjdGluZywgZG8g
aGl0IHRlc3QgdG8gZmluZCB3aGljaCBub2RlIGluIG9uIHRvcC4KKyAgICAgICAgaW50IHggPSBp
bnRlcnNlY3Rpb25SZWN0LngoKSArIGludGVyc2VjdGlvblJlY3Qud2lkdGgoKSAvIDI7CisgICAg
ICAgIGludCB5ID0gaW50ZXJzZWN0aW9uUmVjdC55KCkgKyBpbnRlcnNlY3Rpb25SZWN0LmhlaWdo
dCgpIC8gMjsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBjYW5kaWRhdGUubm9kZS0+
ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RS
ZXN1bHRBdFBvaW50KEludFBvaW50KHgsIHkpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGlmIChj
YW5kaWRhdGUubm9kZS0+Y29udGFpbnMocmVzdWx0LmlubmVyTm9kZSgpKSkgeworICAgICAgICAg
ICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoY2xvc2VzdC5ub2RlLT5jb250YWlucyhyZXN1bHQuaW5uZXJOb2RlKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjYW5kaWRhdGUuYWxpZ25tZW50
ID09IGNsb3Nlc3QuYWxpZ25tZW50KSB7CisgICAgICAgIGlmIChjYW5kaWRhdGUuZGlzdGFuY2Ug
PCBjbG9zZXN0LmRpc3RhbmNlKQorICAgICAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjYW5kaWRhdGUuYWxpZ25tZW50ID4gY2xv
c2VzdC5hbGlnbm1lbnQpCisgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7Cit9CisKK3ZvaWQg
Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250
YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCit7Cisg
ICAgQVNTRVJUKGNvbnRhaW5lcik7CisgICAgZm9yIChOb2RlKiBub2RlID0gY29udGFpbmVyLT5m
aXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8
IGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgbm9kZSkpID8gbm9kZS0+dHJhdmVyc2VO
ZXh0U2libGluZyhjb250YWluZXIpIDogbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShjb250YWluZXIp
KSB7CisgICAgICAgIGlmICgoIWZvY3VzZWRGcmFtZSgpIHx8ICFmb2N1c2VkRnJhbWUoKS0+ZG9j
dW1lbnQoKSB8fCBub2RlICE9IGZvY3VzZWRGcmFtZSgpLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpKSAmJiAobm9kZS0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgfHwgbm9kZS0+aXNGcmFt
ZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgbm9kZSkp
KSB7CisgICAgICAgICAgICBGb2N1c0NhbmRpZGF0ZSBjYW5kaWRhdGUobm9kZSk7CisgICAgICAg
ICAgICBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCA9IGNvbnRhaW5lcjsKKyAgICAg
ICAgICAgIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoZGlyZWN0aW9uLCBzdGFydGluZ1Jl
Y3QsIGNhbmRpZGF0ZSwgY2xvc2VzdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRm9j
dXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3Qg
SW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQoreworICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXItPmRvY3Vt
ZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBzdGFydGluZyByZWN0
IGlzIHRoZSByZWN0IG9mIHRoZSBmb2N1c2VkIG5vZGUsIGluIGRvY3VtZW50IGNvb3JkaW5hdGVz
LgorICAgIC8vIENvbXBvc2UgYSB2aXJ0dWFsIHN0YXJ0aW5nIHJlY3QgaWYgdGhlcmUgaXMgbm8g
Zm9jdXNlZCBub2RlIG9yIGlmIGl0IGlzIG9mZiBzY3JlZW4uCisgICAgLy8gVGhlIHZpcnR1YWwg
cmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIG9yIGZyYW1lLiBXZSBzZWxlY3Qgd2hp
Y2gKKyAgICAvLyBlZGdlIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0
aW9uLgorICAgIEludFJlY3QgbmV3U3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0OworCisgICAg
aWYgKHN0YXJ0aW5nUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbmV3U3RhcnRpbmdSZWN0ID0g
bm9kZVJlY3RJbkFic0Nvb3Jkcyhjb250YWluZXIpOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlv
bikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIG5ld1N0
YXJ0aW5nUmVjdC5zZXRYKG5ld1N0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgICAgIG5l
d1N0YXJ0aW5nUmVjdC5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0WShu
ZXdTdGFydGluZ1JlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgbmV3U3RhcnRpbmdSZWN0LnNl
dEhlaWdodCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uUmlnaHQ6CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0V2lkdGgoMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAg
ICAgICBuZXdTdGFydGluZ1JlY3Quc2V0SGVpZ2h0KDApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgbm9kZSB3aXRoaW4gY3VycmVu
dCBjb250YWluZXIgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbmF2aWdhdGlvbi4KKyAgICBGb2N1
c0NhbmRpZGF0ZSBmb2N1c0NhbmRpZGF0ZTsKKyAgICBmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRh
aW5lcihjb250YWluZXIsIG5ld1N0YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBldmVudCwgZm9jdXND
YW5kaWRhdGUpOworCisgICAgaWYgKGZvY3VzQ2FuZGlkYXRlLmlzTnVsbCgpKSB7CisgICAgICAg
IGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGNvbnRhaW5lcikpIHsKKyAgICAg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZm9jdXMsIHNjcm9sbCBpZiBwb3NzaWJsZS4KKyAgICAgICAg
ICAgIHNjcm9sbEluRGlyZWN0aW9uKGNvbnRhaW5lciwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFJldHVybiBmYWxzZSB3aWxsIGNh
dXNlIGEgcmUtdHJ5LCBza2lwcGluZyB0aGlzIGNvbnRhaW5lci4KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoZm9jdXNDYW5kaWRhdGUubm9kZS0+aXNGcmFtZU93bmVyRWxl
bWVudCgpKSB7CisgICAgICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0KGZvY3VzQ2FuZGlkYXRlLm5v
ZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzQ2FuZGlk
YXRlLm5vZGUtPmRvY3VtZW50KCktPnZpZXcoKS0+ZnJhbWUoKTsKKyAgICAgICAgICAgIHNjcm9s
bEluRGlyZWN0aW9uKGZyYW1lLT5kb2N1bWVudCgpLCBkaXJlY3Rpb24sIGZvY3VzQ2FuZGlkYXRl
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIE5hdmln
YXRlIGludG8gYSBuZXcgZnJhbWUuCisgICAgICAgIEludFJlY3QgcmVjdDsKKyAgICAgICAgTm9k
ZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNl
ZE5vZGUoKTsKKyAgICAgICAgaWYgKGZvY3VzZWROb2RlICYmICFoYXNPZmZzY3JlZW5SZWN0KGZv
Y3VzZWROb2RlKSkKKyAgICAgICAgICAgIHJlY3QgPSBub2RlUmVjdEluQWJzQ29vcmRzKGZvY3Vz
ZWROb2RlLCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVy
RWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKSk7CisgICAgICAg
IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUp
LT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CisgICAgICAgIGlmICghbmF2aWdhdGVJbkNvbnRhaW5lcihzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5ub2RlKS0+Y29udGVudEZy
YW1lKCktPmRvY3VtZW50KCksIHJlY3QsIGRpcmVjdGlvbiwgZXZlbnQpKQorICAgICAgICAgICAg
Ly8gVGhlIG5ldyBmcmFtZSBoYWQgbm90aGluZyBpbnRlcmVzdGluZywgc2tpcCBwYXN0IGl0IGFu
ZCB0cnkgYWdhaW4uCisgICAgICAgICAgICByZXR1cm4gbmF2aWdhdGVJbkNvbnRhaW5lcihjb250
YWluZXIsIG5vZGVSZWN0SW5BYnNDb29yZHMoZm9jdXNDYW5kaWRhdGUubm9kZSwgdHJ1ZSksIGRp
cmVjdGlvbiwgZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNh
blNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUubm9kZSkpIHsKKyAg
ICAgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9u
KSkgeworICAgICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZm9jdXNDYW5kaWRhdGUubm9kZSwg
ZGlyZWN0aW9uLCBmb2N1c0NhbmRpZGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBOYXZpZ2F0ZSBpbnRvIGEgbmV3IHNjcm9sbGFibGUgY29udGFp
bmVyLgorICAgICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIE5vZGUqIGZvY3VzZWROb2RlID0g
Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CisgICAgICAg
IGlmIChmb2N1c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpCisgICAg
ICAgICAgICByZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3Jkcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7Cisg
ICAgICAgIHJldHVybiBuYXZpZ2F0ZUluQ29udGFpbmVyKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHJl
Y3QsIGRpcmVjdGlvbiwgZXZlbnQpOworICAgIH0KKyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChm
b2N1c0NhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24pKSB7CisgICAgICAgIE5vZGUqIGNvbnRhaW5l
ciA9IGZvY3VzQ2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3g7CisgICAgICAgIHNjcm9s
bEluRGlyZWN0aW9uKGNvbnRhaW5lciwgZGlyZWN0aW9uLCBmb2N1c0NhbmRpZGF0ZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFdlIGZvdW5kIGEgbmV3IGZvY3VzIG5v
ZGUsIG5hdmlnYXRlIHRvIGl0LgorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4oZm9jdXNDYW5kaWRhdGUubm9kZSk7CisgICAgQVNTRVJUKGVsZW1lbnQpOworCisg
ICAgZWxlbWVudC0+Zm9jdXMoZmFsc2UpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZv
Y3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGly
ZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBGcmFtZSogY3VyRnJhbWUgPSBm
b2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBBU1NFUlQoY3VyRnJhbWUpOworCisgICAgRG9jdW1l
bnQqIGZvY3VzZWREb2N1bWVudCA9IGN1ckZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZm9j
dXNlZERvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOb2RlKiBmb2N1c2Vk
Tm9kZSA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNlZE5vZGUoKTsKKyAgICBOb2RlKiBjb250YWlu
ZXIgPSBmb2N1c2VkRG9jdW1lbnQ7CisKKyAgICAvLyBGaWd1cmUgb3V0IHRoZSBzdGFydGluZyBy
ZWN0LgorICAgIEludFJlY3Qgc3RhcnRpbmdSZWN0OworICAgIGlmIChmb2N1c2VkTm9kZSAmJiAh
aGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpIHsKKyAgICAgICAgY29udGFpbmVyID0gc2Ny
b2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNl
ZE5vZGUpOworICAgICAgICBzdGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJzQ29vcmRzKGZvY3Vz
ZWROb2RlLCB0cnVlKTsKKyAgICB9CisKKyAgICBib29sIGNvbnN1bWVkID0gZmFsc2U7CisgICAg
ZG8geworICAgICAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250YWluZXIpLT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgY29uc3VtZWQgPSBuYXZpZ2F0ZUluQ29udGFp
bmVyKGNvbnRhaW5lciwgc3RhcnRpbmdSZWN0LCBkaXJlY3Rpb24sIGV2ZW50KTsKKyAgICAgICAg
c3RhcnRpbmdSZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3Jkcyhjb250YWluZXIsIHRydWUpOworICAg
ICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVBbmREaXJlY3Rp
b24oZGlyZWN0aW9uLCBjb250YWluZXIpOworICAgIH0gd2hpbGUgKCFjb25zdW1lZCAmJiBjb250
YWluZXIpOworICAgIHJldHVybiBjb25zdW1lZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAkocmV2aXNpb24gNzE1NTMpCisrKyBXZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZv
Y3VzQ2FuZGlkYXRlJiBwYXJlbnRDYW5kaWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKICAgICB2
b2lkIGRlZXBGaW5kRm9jdXNhYmxlTm9kZUluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgTm9k
ZSogZm9jdXNlZCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0NhbmRpZGF0
ZSYpOwogCisgICAgYm9vbCBuYXZpZ2F0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29u
c3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCop
OworICAgIGJvb2wgbmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24sIEtleWJv
YXJkRXZlbnQqKTsKKyAgICB2b2lkIGZpbmRGb2N1c0NhbmRpZGF0ZUluQ29udGFpbmVyKE5vZGUq
IGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwg
S2V5Ym9hcmRFdmVudCosIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KTsKKwogICAgIFBhZ2UqIG1f
cGFnZTsKICAgICBSZWZQdHI8RnJhbWU+IG1fZm9jdXNlZEZyYW1lOwogICAgIGJvb2wgbV9pc0Fj
dGl2ZTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNzE1NTMp
CisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MywxMiArNDMsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgbG9uZyBsb25n
IHNwYXRpYWxEaXN0YW5jZShGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmKTsKIHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRvUm9vdERvY3VtZW50
KFJlbmRlck9iamVjdCopOwotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3Rz
KEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGlj
IFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKTsKIHN0YXRp
YyBib29sIGFyZVJlY3RzRnVsbHlBbGlnbmVkKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIGJvb2wgYXJlUmVjdHNQYXJ0aWFsbHlBbGlnbmVk
KEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGlj
IGJvb2wgYXJlUmVjdHNUb29GYXJBcGFydChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0
IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNp
emUmIHZpZXdTaXplKTsKIHN0YXRpYyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0
aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIHZvaWQgZGVmbGF0
ZUlmT3ZlcmxhcHBlZChJbnRSZWN0JiwgSW50UmVjdCYpOwogc3RhdGljIGJvb2wgY2hlY2tOZWdh
dGl2ZUNvb3Jkc0Zvck5vZGUoTm9kZSosIGNvbnN0IEludFJlY3QmKTsKK3N0YXRpYyB2b2lkIGVu
dHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNv
bnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgY29uc3QgSW50UmVjdCYgcG90ZW50aWFsUmVjdCwg
SW50UG9pbnQmIGV4aXRQb2ludCwgSW50UG9pbnQmIGVudHJ5UG9pbnQpOwogCiBib29sIGlzU3Bh
dGlhbE5hdmlnYXRpb25FbmFibGVkKGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKQEAgLTEwMiw3ICsx
MDQsOCBAQCB2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gCiAgICAgLy8g
VGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIG5vZGVzIGlzIG5vdCB0byBiZSBjb25zaWRlcmVkIGFs
b25lIHdoZW4gZXZhbHVhdGluZy9sb29raW5nCiAgICAgLy8gZm9yIHRoZSBiZXN0IGZvY3VzIGNh
bmRpZGF0ZSBub2RlLiBBbGlnbm1lbnQgb2YgcmVjdHMgY2FuIGJlIGFsc28gYSBnb29kIHBvaW50
IHRvIGJlCiAgICAgLy8gY29uc2lkZXJlZCBpbiBvcmRlciB0byBtYWtlIHRoZSBhbGdvcml0aG0g
dG8gYmVoYXZpb3IgaW4gYSBtb3JlIGludHVpdGl2ZSB3YXkuCi0gICAgY2FuZGlkYXRlLmFsaWdu
bWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCk7
CisgICAgSW50U2l6ZSB2aWV3U2l6ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdl
KCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKKyAg
ICBjYW5kaWRhdGUuYWxpZ25tZW50ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBjdXJS
ZWN0LCB0YXJnZXRSZWN0LCB2aWV3U2l6ZSk7CiAgICAgY2FuZGlkYXRlLmRpc3RhbmNlID0gc3Bh
dGlhbERpc3RhbmNlKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCk7CiB9CiAKQEAgLTEz
Niw4ICsxMzksMTIgQEAgc3RhdGljIEludFJlY3QgcmVuZGVyUmVjdFJlbGF0aXZlVG9Sb290RAog
ICAgIHJldHVybiByZWN0OwogfQogCi1zdGF0aWMgUmVjdHNBbGlnbm1lbnQgYWxpZ25tZW50Rm9y
UmVjdHMoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQorc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVu
dEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVj
dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50U2l6ZSYgdmlld1NpemUpCiB7
CisgICAgLy8gSWYgd2UgZm91bmQgYSBub2RlIGluIGZ1bGwgYWxpZ25tZW50LCBidXQgaXQgaXMg
dG9vIGZhciBhd2F5LCBpZ25vcmUgaXQuCisgICAgaWYgKGFyZVJlY3RzVG9vRmFyQXBhcnQoZGly
ZWN0aW9uLCBjdXJSZWN0LCB0YXJnZXRSZWN0LCB2aWV3U2l6ZSkpCisgICAgICAgIHJldHVybiBO
b25lOworCiAgICAgaWYgKGFyZVJlY3RzRnVsbHlBbGlnbmVkKGRpcmVjdGlvbiwgY3VyUmVjdCwg
dGFyZ2V0UmVjdCkpCiAgICAgICAgIHJldHVybiBGdWxsOwogCkBAIC0yNzcsNiArMjg0LDIzIEBA
IHN0YXRpYyBib29sIGFyZVJlY3RzUGFydGlhbGx5QWxpZ25lZChGb2MKICAgICAgICAgICAgIHx8
IChiRW5kID49IGFTdGFydCAmJiBiRW5kIDw9IGFFbmQpKTsKIH0KIAorc3RhdGljIGJvb2wgYXJl
UmVjdHNUb29GYXJBcGFydChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3Qm
IGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNpemUmIHZpZXdT
aXplKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkxlZnQ6CisgICAgICAgIHJldHVybiBjdXJSZWN0LngoKSA8IHRhcmdldFJlY3QucmlnaHQoKSB8
fCBjdXJSZWN0LngoKSAtIHRhcmdldFJlY3QucmlnaHQoKSA+IHZpZXdTaXplLndpZHRoKCk7Cisg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54
KCkgPCBjdXJSZWN0LnJpZ2h0KCkgfHwgdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAg
cmV0dXJuIGN1clJlY3QueSgpIDwgdGFyZ2V0UmVjdC5ib3R0b20oKSB8fCBjdXJSZWN0LnkoKSAt
IHRhcmdldFJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKKyAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uRG93bjoKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIDwgY3VyUmVjdC5i
b3R0b20oKSB8fCB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5o
ZWlnaHQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCiAvLyBSZXR1cm4gdHJ1ZSBpZiByZWN0IHxh
fCBpcyBiZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9vbCBiZWxv
dyhjb25zdCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewpAQCAtNDI1LDcgKzQ0OSw3
IEBAIHN0YXRpYyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZvY3VzRGlyZWMKIC8vIENoZWNrcyBp
ZiB8bm9kZXwgaXMgb2Zmc2NyZWVuIHRoZSB2aXNpYmxlIGFyZWEgKHZpZXdwb3J0KSBvZiBpdHMg
Y29udGFpbmVyCiAvLyBkb2N1bWVudC4gSW4gY2FzZSBpdCBpcywgb25lIGNhbiBzY3JvbGwgaW4g
ZGlyZWN0aW9uIG9yIHRha2UgYW55IGRpZmZlcmVudAogLy8gZGVzaXJlZCBhY3Rpb24gbGF0ZXIg
b24uCi1ib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSkKK2Jvb2wgaGFzT2Zmc2NyZWVu
UmVjdChOb2RlKiBub2RlLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgLy8gR2V0
IHRoZSBGcmFtZVZpZXcgaW4gd2hpY2ggfG5vZGV8IGlzICh3aGljaCBtZWFucyB0aGUgY3VycmVu
dCB2aWV3cG9ydCBpZiB8bm9kZXwKICAgICAvLyBpcyBub3QgaW4gYW4gaW5uZXIgZG9jdW1lbnQp
LCBzbyB3ZSBjYW4gY2hlY2sgaWYgaXRzIGNvbnRlbnQgcmVjdCBpcyB2aXNpYmxlCkBAIC00MzUs
NiArNDU5LDI2IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgY29udGFpbmVyVmlld3BvcnRSZWN0ID0gZnJhbWVW
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAvLyBXZSB3YW50IHRvIHNlbGVjdCBhIG5v
ZGUgaWYgaXQgaXMgY3VycmVudGx5IG9mZiBzY3JlZW4sIGJ1dCB3aWxsIGJlCisgICAgLy8gZXhw
b3NlZCBhZnRlciB3ZSBzY3JvbGwuIEFkanVzdCB0aGUgdmlld3BvcnQgdG8gcG9zdC1zY3JvbGxp
bmcgcG9zaXRpb24uCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uTGVmdDoKKyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldFgoY29udGFpbmVy
Vmlld3BvcnRSZWN0LngoKSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAg
ICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRXaWR0aChjb250YWluZXJWaWV3cG9ydFJlY3Qu
d2lkdGgoKSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgY29udGFpbmVyVmlld3Bv
cnRSZWN0LnNldFdpZHRoKGNvbnRhaW5lclZpZXdwb3J0UmVjdC53aWR0aCgpICsgU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvblVwOgorICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0WShjb250YWluZXJW
aWV3cG9ydFJlY3QueSgpIC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAg
ICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldEhlaWdodChjb250YWluZXJWaWV3cG9ydFJlY3Qu
aGVpZ2h0KCkgKyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgY29udGFpbmVyVmlld3Bv
cnRSZWN0LnNldEhlaWdodChjb250YWluZXJWaWV3cG9ydFJlY3QuaGVpZ2h0KCkgKyBTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlciA9IG5vZGUt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXIpCkBAIC00NDcsMzYgKzQ5MSw3NSBAQCBib29s
IGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSkKICAgICByZXR1cm4gIWNvbnRhaW5lclZpZXdw
b3J0UmVjdC5pbnRlcnNlY3RzKHJlY3QpOwogfQogCi0vLyBJbiBhIGJvdHRvbS11cCB3YXksIHRo
aXMgbWV0aG9kIHRyaWVzIHRvIHNjcm9sbCB8ZnJhbWV8IGluIGEgZ2l2ZW4gZGlyZWN0aW9uCi0v
LyB8ZGlyZWN0aW9ufCwgZ29pbmcgdXAgaW4gdGhlIGZyYW1lIHRyZWUgaGllcmFyY2h5IGluIGNh
c2UgaXQgZG9lcyBub3Qgc3VjY2VlZC4KLWJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZy
YW1lLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5k
aWRhdGUpCitib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhbmRpZGF0ZSYpCiB7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChmcmFtZSAmJiBjYW5TY3JvbGxJbkRp
cmVjdGlvbihkaXJlY3Rpb24sIGZyYW1lLT5kb2N1bWVudCgpKSk7CiAKLSAgICBTY3JvbGxEaXJl
Y3Rpb24gc2Nyb2xsRGlyZWN0aW9uOworICAgIGlmIChmcmFtZSAmJiBjYW5TY3JvbGxJbkRpcmVj
dGlvbihkaXJlY3Rpb24sIGZyYW1lLT5kb2N1bWVudCgpKSkgeworICAgICAgICBpbnQgZHggPSAw
OworICAgICAgICBpbnQgZHkgPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAg
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIGR4ID0gLSBTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgZHggPSBTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvblVwOgorICAgICAgICAgICAgZHkgPSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93
bjoKKyAgICAgICAgICAgIGR5ID0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQogCi0gICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xs
TGVmdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgotICAg
ICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb2N1c0RpcmVjdGlvblVwOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxV
cDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAg
IHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xs
QnkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KIAotICAgIGlmICghY2FuZGlkYXRlLmlzTnVsbCgpICYmIGlzU2Nyb2xs
YWJsZUNvbnRhaW5lck5vZGUoY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3gpKQotICAg
ICAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShzY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVC
b3gpOworYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRhdGUmKQoreworICAgIGlmIChjb250YWlu
ZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxJbkRpcmVjdGlvbihz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRhaW5lciktPmZyYW1lKCksIGRpcmVjdGlvbiwgRm9j
dXNDYW5kaWRhdGUoKSk7CisKKyAgICBpZiAoIWNvbnRhaW5lci0+cmVuZGVyQm94KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb250YWluZXIgJiYgY2FuU2Nyb2xsSW5EaXJl
Y3Rpb24oZGlyZWN0aW9uLCBjb250YWluZXIpKSB7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsUmVj
dCA9IGNvbnRhaW5lci0+Z2V0UmVjdCgpOworICAgICAgICBzY3JvbGxSZWN0Lm1vdmUoY29udGFp
bmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwgY29udGFpbmVyLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpKTsKKyAgICAgICAgc2Nyb2xsUmVj
dC5zZXRXaWR0aChzY3JvbGxSZWN0LndpZHRoKCkgLSAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSArIGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+Ym9yZGVyUmlnaHRXaWR0aCgpKSk7CisgICAgICAgIHNjcm9sbFJlY3Quc2V0SGVpZ2h0KHNj
cm9sbFJlY3QuaGVpZ2h0KCkgLSAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3Jk
ZXJUb3BXaWR0aCgpICsgY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0
b21XaWR0aCgpKSk7CisgICAgICAgIGludCBkeCA9IDA7CisgICAgICAgIGludCBkeSA9IDA7Cisg
ICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25M
ZWZ0OgorICAgICAgICAgICAgZHggPSAtIG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVw
KCksIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgQVNT
RVJUKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdpZHRoKCkgPiAoY29udGFpbmVyLT5y
ZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50
V2lkdGgoKSkpOworICAgICAgICAgICAgZHggPSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxXaWR0aCgpIC0gKGNvbnRhaW5l
ci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNs
aWVudFdpZHRoKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6CisgICAgICAgICAgICBkeSA9IC0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICAgICAg
QVNTRVJUKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbEhlaWdodCgpIC0gKGNvbnRhaW5l
ci0+cmVuZGVyQm94KCktPnNjcm9sbFRvcCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xp
ZW50SGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGR5ID0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVpZ2h0KCkgLSAoY29u
dGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXItPnJlbmRlckJveCgp
LT5jbGllbnRIZWlnaHQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogCi0gICAgcmV0
dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0
aW9uLCBTY3JvbGxCeUxpbmUpOworICAgICAgICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNs
b3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGR4LCBkeSk7CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBzY3JvbGxJbnRv
VmlldyhFbGVtZW50KiBlbGVtZW50KQpAQCAtNTM0LDcgKzYxNyw3IEBAIHN0YXRpYyBib29sIGNo
ZWNrTmVnYXRpdmVDb29yZHNGb3JOb2RlKE4KICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZDsKIH0K
IAotYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKE5vZGUqIG5vZGUpCitib29sIGlzU2Ny
b2xsYWJsZUNvbnRhaW5lck5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU2Nyw0ICs2NTAsMjM3IEBAIGJvb2wgaXNOb2Rl
RGVlcERlc2NlbmRhbnRPZkRvY3VtZW50KE5vZGUKICAgICByZXR1cm4gZGVzY2VuZGFudDsKIH0K
IAorTm9kZSogc2Nyb2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7Cisg
ICAgTm9kZSogcGFyZW50ID0gbm9kZTsKKyAgICBkbyB7CisgICAgICAgIGlmIChwYXJlbnQtPmlz
RG9jdW1lbnROb2RlKCkpCisgICAgICAgICAgICBwYXJlbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KHBhcmVudCktPmRvY3VtZW50KCktPmZyYW1lKCktPm93bmVyRWxlbWVudCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICB9
IHdoaWxlIChwYXJlbnQgJiYgIWNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgcGFyZW50
KSAmJiAhcGFyZW50LT5pc0RvY3VtZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gcGFyZW50OworfQor
Citib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgTm9kZSogY29udGFpbmVyKQoreworICAgIEFTU0VSVChjb250YWluZXIpOworICAgIGlmIChj
b250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBjYW5TY3JvbGxJbkRp
cmVjdGlvbihkaXJlY3Rpb24sIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50Kj4oY29udGFpbmVy
KS0+ZnJhbWUoKSk7CisKKyAgICBpZiAoIWNvbnRhaW5lci0+cmVuZGVyQm94KCkgfHwgIWNvbnRh
aW5lci0+cmVuZGVyQm94KCktPmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gY29udGFpbmVyLT5yZW5kZXJC
b3goKS0+c2Nyb2xsTGVmdCgpID4gMDsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAg
ICAgIHJldHVybiBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSA+IDA7CisgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gY29udGFpbmVyLT5yZW5k
ZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lk
dGgoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdpZHRoKCk7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHJldHVybiBjb250YWluZXItPnJlbmRlckJveCgp
LT5zY3JvbGxUb3AoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpIDwg
Y29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9u
LCBjb25zdCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZS0+dmlldygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25MZWZ0
IHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblJpZ2h0KSAmJiAhZnJhbWUtPnZpZXcoKS0+
aG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKChk
aXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rp
b25Eb3duKSAmJiAhZnJhbWUtPnZpZXcoKS0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEludFNpemUgc2l6ZSA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRz
U2l6ZSgpOworICAgIEludFNpemUgb2Zmc2V0ID0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0
KCk7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0
KHRydWUpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uTGVmdDoKKyAgICAgICAgcmV0dXJuIG9mZnNldC53aWR0aCgpID4gMDsKKyAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBvZmZzZXQuaGVpZ2h0KCkgPiAwOworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJuIHJlY3Qud2lkdGgoKSAr
IG9mZnNldC53aWR0aCgpIDwgc2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25E
b3duOgorICAgICAgICByZXR1cm4gcmVjdC5oZWlnaHQoKSArIG9mZnNldC5oZWlnaHQoKSA8IHNp
emUuaGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworSW50UmVjdCBub2RlUmVjdEluQWJzQ29v
cmRzKE5vZGUqIG5vZGUsIGJvb2wgaWdub3JlQm9yZGVyKQoreworICAgIEFTU0VSVChub2RlICYm
IG5vZGUtPnJlbmRlcmVyKCkpOworCisgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCisg
ICAgICAgIHJldHVybiBmcmFtZVJlY3RJbkFic0Nvb3JkcyhzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KG5vZGUpLT5mcmFtZSgpKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBub2RlLT5nZXRSZWN0KCk7CisK
KyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZyYW1lLT5vd25lckVsZW1lbnQoKSkp
IHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUoZWxlbWVudC0+
b2Zmc2V0TGVmdCgpLCBlbGVtZW50LT5vZmZzZXRUb3AoKSk7CisgICAgICAgICAgICB9IHdoaWxl
ICgoZWxlbWVudCA9IGVsZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7CisgICAgICAgICAgICByZWN0
Lm1vdmUoKC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gRm9yIGF1dGhvcnMgdGhhdCB1c2UgYm9yZGVyIGluZHRlYWQgb2Ygb3V0bGlu
ZSBpbiB0aGVpciBDU1MsIHdlIGNvbXBlbnNhdGUgYnkgaWdub3JpbmcgdGhlIGJvcmRlciB3aGVu
IGNhbGN1bGF0aW5nCisgICAgLy8gdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgZWxlbWVudC4KKyAg
ICBpZiAoaWdub3JlQm9yZGVyKSB7CisgICAgICAgIHJlY3QubW92ZShub2RlLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
Ym9yZGVyVG9wV2lkdGgoKSk7CisgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0g
bm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBub2RlLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCkpOworICAgICAgICByZWN0LnNldEhl
aWdodChyZWN0LmhlaWdodCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9w
V2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCkp
OworICAgIH0KKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBmcmFtZVJlY3RJbkFic0Nv
b3JkcyhGcmFtZSogZnJhbWUpCit7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+
dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAgICBmb3IgKDsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWUtPm93bmVyRWxlbWVudCgpKSkgeworICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgIHJlY3QubW92ZShlbGVtZW50LT5vZmZzZXRMZWZ0KCksIGVs
ZW1lbnQtPm9mZnNldFRvcCgpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKChlbGVtZW50ID0gZWxl
bWVudC0+b2Zmc2V0UGFyZW50KCkpKTsKKyAgICAgICAgICAgIHJlY3QubW92ZSgoLWZyYW1lLT52
aWV3KCktPnNjcm9sbE9mZnNldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJl
Y3Q7Cit9CisKKy8vIEV4aXQgcG9pbnQgaXMgdGhlIGNsb3Nlc3QgcG9pbnQgaW4gdGhlIHN0YXJ0
aW5nUmVjdCwgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisv
LyBFbnRyeSBwb2ludCBpcyB0aGUgY2xvc2VzdCBwb2ludCBpbiB0aGUgY2FuZGlkYXRlIG5vZGUs
IGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uLgordm9pZCBlbnRy
eUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIGNvbnN0IEludFJlY3QmIHBvdGVudGlhbFJlY3QsIElu
dFBvaW50JiBleGl0UG9pbnQsIEludFBvaW50JiBlbnRyeVBvaW50KQoreworICAgIHN3aXRjaCAo
ZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGV4aXRQ
b2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFgocG90
ZW50aWFsUmVjdC5yaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVj
dGlvblVwOgorICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKKyAgICAg
ICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGV4aXRQb2ludC5zZXRY
KHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlh
bFJlY3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246
CisgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAg
IGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHN3
aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBpZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBw
b3RlbnRpYWxSZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0
LnkoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC5ib3R0b20o
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoYmVsb3cocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0
KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsK
KyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3RhcnRpbmdSZWN0Lnko
KSwgcG90ZW50aWFsUmVjdC55KCkpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShleGl0
UG9pbnQueSgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIGlmIChyaWdo
dE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkpIHsKKyAgICAgICAgICAgIGV4aXRQb2lu
dC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBv
dGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPZihwb3RlbnRp
YWxSZWN0LCBzdGFydGluZ1JlY3QpKSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFy
dGluZ1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFs
UmVjdC54KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFgo
bWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgpKSk7CisgICAgICAgICAgICBl
bnRyeVBvaW50LnNldFgoZXhpdFBvaW50LngoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCit7Cisg
ICAgaWYgKGNhbmRpZGF0ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghY2Fu
ZGlkYXRlLm5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IG5v
ZGVSZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3JkcyhjYW5kaWRhdGUubm9kZSwgdHJ1ZSk7CisKKyAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAg
ICAgICBpZiAobm9kZVJlY3QucmlnaHQoKSA+IHN0YXJ0aW5nUmVjdC54KCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAg
ICAgICAgaWYgKG5vZGVSZWN0LmJvdHRvbSgpID4gc3RhcnRpbmdSZWN0LnkoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0
OgorICAgICAgICBpZiAobm9kZVJlY3QueCgpIDwgc3RhcnRpbmdSZWN0LnJpZ2h0KCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25E
b3duOgorICAgICAgICBpZiAobm9kZVJlY3QueSgpIDwgc3RhcnRpbmdSZWN0LmJvdHRvbSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBJbnRQb2ludCBleGl0UG9pbnQ7
CisgICAgSW50UG9pbnQgZW50cnlQb2ludDsKKyAgICBpbnQgc2FtZUF4aXNEaXN0ID0gMDsKKyAg
ICBpbnQgb3RoZXJBeGlzRGlzdCA9IDA7CisgICAgZW50cnlBbmRFeGl0UG9pbnRzRm9yRGlyZWN0
aW9uKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBub2RlUmVjdCwgZXhpdFBvaW50LCBlbnRyeVBv
aW50KTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkxlZnQ6CisgICAgICAgIHNhbWVBeGlzRGlzdCA9IGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50
LngoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdCA9IGFicyhleGl0UG9pbnQueSgpIC0gZW50cnlQ
b2ludC55KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6Cisg
ICAgICAgIHNhbWVBeGlzRGlzdCA9IGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKTsKKyAg
ICAgICAgb3RoZXJBeGlzRGlzdCA9IGFicyhleGl0UG9pbnQueCgpIC0gZW50cnlQb2ludC54KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAg
IHNhbWVBeGlzRGlzdCA9IGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKTsKKyAgICAgICAg
b3RoZXJBeGlzRGlzdCA9IGFicyhlbnRyeVBvaW50LnkoKSAtIGV4aXRQb2ludC55KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgc2FtZUF4
aXNEaXN0ID0gZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpOworICAgICAgICBvdGhlckF4
aXNEaXN0ID0gYWJzKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIGludCB4ID0gKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSkgKiAoZW50cnlQ
b2ludC54KCkgLSBleGl0UG9pbnQueCgpKTsKKyAgICBpbnQgeSA9IChlbnRyeVBvaW50LnkoKSAt
IGV4aXRQb2ludC55KCkpICogKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7CisKKyAg
ICBmbG9hdCBldWNsaWRpYW5EaXN0YW5jZSA9IHNxcnQoKHggKyB5KSAqIDEuMCk7CisKKyAgICAv
LyBMb29zZWx5IGJhc2VkIG9uIGh0dHA6Ly93d3cudzMub3JnL1RSL1dJQ0QvI2ZvY3VzLWhhbmRs
aW5nCisgICAgLy8gZGYgPSBkb3REaXN0ICsgZHggKyBkeSArIDIgKiAoeGRpc3BsYWNlbWVudCAr
IHlkaXNwbGFjZW1lbnQpIC0gc3FydChPdmVybGFwKQorCisgICAgZmxvYXQgZGlzdGFuY2UgPSBl
dWNsaWRpYW5EaXN0YW5jZSArIHNhbWVBeGlzRGlzdCArIDIgKiBvdGhlckF4aXNEaXN0OworICAg
IGNhbmRpZGF0ZS5kaXN0YW5jZSA9IHJvdW5kZihkaXN0YW5jZSk7CisgICAgSW50U2l6ZSB2aWV3
U2l6ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT52
aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKKyAgICBjYW5kaWRhdGUuYWxpZ25t
ZW50ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBzdGFydGluZ1JlY3QsIG5vZGVSZWN0
LCB2aWV3U2l6ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TcGF0
aWFsTmF2aWdhdGlvbi5oCShyZXZpc2lvbiA3MTU1MykKKysrIFdlYkNvcmUvcGFnZS9TcGF0aWFs
TmF2aWdhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTEgKzEzMSwxOCBAQCBzdHJ1Y3Qg
Rm9jdXNDYW5kaWRhdGUgewogCiB2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uLCBOb2RlKiBzdGFydCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSk7CiBi
b29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiwgRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZvY3Vz
Q2FuZGlkYXRlJiBjYW5kaWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKK2Jvb2wgc2Nyb2xsSW5E
aXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5k
aWRhdGUmIGNhbmRpZGF0ZSA9IEZvY3VzQ2FuZGlkYXRlKCkpOwogdm9pZCBzY3JvbGxJbnRvVmll
dyhFbGVtZW50Kik7Ci1ib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSopOworYm9vbCBoYXNPZmZz
Y3JlZW5SZWN0KE5vZGUqLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBGb2N1c0RpcmVjdGlv
bk5vbmUpOwogYm9vbCBpc0luUm9vdERvY3VtZW50KE5vZGUqKTsKLWJvb2wgaXNTY3JvbGxhYmxl
Q29udGFpbmVyTm9kZShOb2RlKik7Citib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoY29u
c3QgTm9kZSopOwogYm9vbCBpc05vZGVEZWVwRGVzY2VuZGFudE9mRG9jdW1lbnQoTm9kZSosIERv
Y3VtZW50Kik7CitOb2RlKiBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVBbmREaXJlY3Rp
b24oRm9jdXNEaXJlY3Rpb24sIE5vZGUqIG5vZGUpOworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlv
bihGb2N1c0RpcmVjdGlvbiwgY29uc3QgTm9kZSogY29udGFpbmVyKTsKK2Jvb2wgY2FuU2Nyb2xs
SW5EaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZyYW1lKik7CitJbnRSZWN0IG5vZGVS
ZWN0SW5BYnNDb29yZHMoTm9kZSosIGJvb2wgaWdub3JlQm9yZGVyID0gZmFsc2UpOworSW50UmVj
dCBmcmFtZVJlY3RJbkFic0Nvb3JkcyhGcmFtZSopOwordm9pZCBkaXN0YW5jZURhdGFGb3JOb2Rl
KEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlk
YXRlJik7CiAKIH0gLy8gbmFtc3BhY2UgV2ViQ29yZQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MTgx
OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIy
IEBACisyMDEwLTExLTExICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4sIENo
YW5nIFNodSAgPGNoYW5nLnNodUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU3BhdGlhbCBOYXZpZ2F0aW9uOiBpc3N1ZXMgd2l0aCB0
aGUgbm9kZSBzZWxlY3Rpb24gYWxnb3JpdGhtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzODIKKworICAgICAgICBVcGRhdGUgdGhlIHRlc3RzIGR1
ZSB0byBjaGFuZ2UgaW4gYmVoYXZpb3Igb2YgU3BhdGlhbCBOYXZpZ2F0aW9uLgorICAgICAgICBD
b250YWluZXJzIG5vdyBzY3JvbGwgdG8gcmV2ZWFsIGFsbCBvZiB0aGVpciBjaW50ZW50LCBldmVu
IGlmIHRoZXkgZG8gbm90IGhhdmUgZm9jdXNhYmxlIG5vZGVzLgorCisgICAgICAgICogZmFzdC9l
dmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0LXdpdGhvdXQt
Zm9jdXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Nw
YXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxlLWJ1dC13aXRob3V0LWZvY3VzYWJs
ZS1jb250ZW50Lmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9u
L3NuYXYtaWZyYW1lLW5vLWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tZm9jdXNhYmxl
LWNvbnRlbnQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24v
c25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJs
ZS1jb250ZW50Lmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9u
L3NuYXYtaWZyYW1lLXdpdGgtb2Zmc2NyZWVuLWZvY3VzYWJsZS1lbGVtZW50LWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUt
d2l0aC1vZmZzY3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQuaHRtbDoKKwogMjAxMC0xMS0xMSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSdWJiZXIt
c3RhbXBlZCBieSBEaXJrIFNjaHVsemUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9z
cGF0aWFsLW5hdmlnYXRpb24vc25hdi1kaXYtc2Nyb2xsYWJsZS1idXQtd2l0aG91dC1mb2N1c2Fi
bGUtY29udGVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0LXdpdGhvdXQt
Zm9jdXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MTU1MykKKysrIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxl
LWJ1dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsMjQgQEAgSXQgaGFzIGFsc28gbm8ga2V5Ym9hcmQgZm9jdXNhYmxlIGVs
ZW1lbgogLi4uIGFzIHdlbGwgYXMgc2Nyb2xsYmFycyEKIAogZQorUEFTUyBnRm9jdXNlZERvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0Zv
Y3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQi
CitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikg
aXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50
LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0
aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1Mg
Z0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3Rh
cnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlk
IikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0
cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3Rp
dmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BB
U1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAi
ZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJp
ZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50
LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2
ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1c2VkRG9jdW1l
bnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgogCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1kaXYtc2Nyb2xs
YWJsZS1idXQtd2l0aG91dC1mb2N1c2FibGUtY29udGVudC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxh
YmxlLWJ1dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50Lmh0bWwJKHJldmlzaW9uIDcxNTUzKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNj
cm9sbGFibGUtYnV0LXdpdGhvdXQtZm9jdXNhYmxlLWNvbnRlbnQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsMjUgQEAKICAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQiPgogCiAgICAgdmFyIHJlc3VsdE1hcCA9IFsKKyAgICAgIFsiRG93biIsICJzdGFydCJd
LAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAg
ICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBb
IkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3du
IiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKICAgICAgIFsiRG93biIsICJl
bmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAg
ICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAi
ICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQi
XSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKICAgICAg
IFsiVXAiICAsICJzdGFydCJdLAogICAgICAgWyJET05FIiwgIkRPTkUiXQogICAgIF07CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUt
bm8tZm9jdXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2Fi
bGUtY29udGVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcxNTUzKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLWZvY3VzYWJsZS1j
b250ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDI4IEBAIGEKIAog
CiBlCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlk
IikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0
cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVt
ZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQu
YWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNl
ZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BB
U1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAi
c3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUo
ImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0
QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVF
bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1l
bnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9j
dXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIK
K1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBp
cyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRB
dHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVt
ZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFj
dGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9j
dW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0Zv
Y3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgor
UEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlz
ICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUo
ImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0
dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1l
bnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0
aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKIFBBU1MgZ0ZvY3VzZWREb2N1
bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCiAKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1u
by1mb2N1c2FibGUtY29udGVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2FibGUtY29udGVu
dC5odG1sCShyZXZpc2lvbiA3MTU1MykKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRp
YWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2FibGUtY29udGVudC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNyw3ICsxNywyOSBAQAogICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRp
b24vamF2YXNjcmlwdCI+CiAKICAgICB2YXIgcmVzdWx0TWFwID0gWworICAgICAgWyJEb3duIiwg
InN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFy
dCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwK
KyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAg
ICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJE
b3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKICAgICAgIFsiRG93biIs
ICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwK
KyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsi
VXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJl
bmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKKyAg
ICAgIFsiVXAiICAsICJlbmQiXSwKKyAgICAgIFsiVXAiICAsICJlbmQiXSwKICAgICAgIFsiVXAi
ICAsICJzdGFydCJdLAogICAgICAgWyJET05FIiwgIkRPTkUiXQogICAgIF07CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Ny
b2xsYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1j
b250ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzE1NTMpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250
ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQCBQQVNTIGdG
b2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQu
YWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjQiCiBQQVNTIGdGb2N1c2VkRG9j
dW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjUiCiBQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjYiCitQQVNT
IGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjMi
CiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikg
aXMgIjciCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUo
ImlkIikgaXMgIjMiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgIjIiCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFs
LW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50Lmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYt
aWZyYW1lLW5vLXNjcm9sbGFibGUtY29udGVudC5odG1sCShyZXZpc2lvbiA3MTU1MykKKysrIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1z
Y3JvbGxhYmxlLWNvbnRlbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
ICAgICAgWyJVcCIsICI0Il0sCiAgICAgICBbIlJpZ2h0IiwgIjUiXSwKICAgICAgIFsiUmlnaHQi
LCAiNiJdLAorICAgICAgWyJVcCIsICIzIl0sCiAgICAgICBbIlJpZ2h0IiwgIjciXSwKICAgICAg
IFsiVXAiLCAiMyJdLAogICAgICAgWyJVcCIsICIyIl0sCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtd2l0aC1vZmZzY3JlZW4tZm9j
dXNhYmxlLWVsZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1m
b2N1c2FibGUtZWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcxNTUzKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLXdpdGgtb2Zm
c2NyZWVuLWZvY3VzYWJsZS1lbGVtZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NSwxMCArNSwxMiBAQCBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBCiBQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
IjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlk
IikgaXMgIjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1
dGUoImlkIikgaXMgIjIiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRB
dHRyaWJ1dGUoImlkIikgaXMgIjIiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3Rp
dmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVu
dC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKIFBBU1MgZ0ZvY3VzZWRE
b2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKIFBBU1MgZ0Zv
Y3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMSIKK1BB
U1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAi
MSIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQi
KSBpcyAic3RhcnQiCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2
aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlv
bi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC5odG1sCShyZXZp
c2lvbiA3MTU1MykKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlv
bi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywxMSArMjMsMTMgQEAKICAgICAgIFsiRG93biIsICIxIl0sCiAgICAg
ICBbIkRvd24iLCAiMSJdLAogICAgICAgWyJEb3duIiwgIjIiXSwKKyAgICAgIFsiRG93biIsICIy
Il0sCiAgICAgICBbIkRvd24iLCAiZW5kIl0sCiAgICAgICBbIlVwIiwgIjIiXSwKICAgICAgIFsi
VXAiLCAiMiJdLAogICAgICAgWyJVcCIsICIyIl0sCiAgICAgICBbIlVwIiwgIjEiXSwKKyAgICAg
IFsiVXAiLCAiMSJdLAogICAgICAgWyJVcCIsICJzdGFydCJdLAogICAgICAgWyJET05FIiwgIkRP
TkUiXQogICAgIF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73639</attachid>
            <date>2010-11-11 12:54:05 -0800</date>
            <delta_ts>2010-11-15 20:01:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>49382.patch</filename>
            <type>text/plain</type>
            <size>43790</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTgxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMTEtMTEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
CisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJv
bGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24pOgorICAgICAgICAqIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZURhdGFGb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFsaWdubWVudEZvclJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OmFyZVJlY3RzVG9v
RmFyQXBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6aGFzT2Zmc2NyZWVuUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppc1Njcm9s
bGFibGVDb250YWluZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVPckZyYW1l
UGFyZW50Rm9yTm9kZUFuZERpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5TY3JvbGxJ
bkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzQ29vcmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZyYW1lUmVjdEluQWJzQ29vcmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlYXJjaFJlY3RGb3JEaXJlY3Rpb25BbmRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjplbnRy
eUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmln
YXRpb24uaDoKKwogMjAxMC0xMS0xMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3MTU1MykKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRn
ZXQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC01Nyw2ICs1OSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCitzdGF0aWMgdm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVk
KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBG
b2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCk7CiBzdGF0
aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hFdmVudHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBmb2N1c2VkKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBmb2N1
c2VkIG5vZGUgd2Ugc2hvdWxkIGRpc3BhdGNoIGJsdXIgb24gaXQgYmVmb3JlIHdlIGJsdXIgdGhl
IHdpbmRvdy4KQEAgLTE3NSw3ICsxNzgsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5j
ZUZvY3VzKEZvY3VzCiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25VcDoKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0
dXJuIGFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkoZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAg
IHJldHVybiBuYXZpZ2F0ZUluNFdheURpcmVjdGlvbihkaXJlY3Rpb24sIGV2ZW50KTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC02NTgsNCAr
NjYxLDE4NiBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0QWN0aXZlKGJvb2wgYWN0CiAgICAg
ICAgIGRpc3BhdGNoRXZlbnRzT25XaW5kb3dBbmRGb2N1c2VkTm9kZShtX2ZvY3VzZWRGcmFtZS0+
ZG9jdW1lbnQoKSwgYWN0aXZlKTsKIH0KIAordm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVl
ZGVkKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0
LCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCkKK3sK
KyAgICBpZiAoIWNhbmRpZGF0ZS5ub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIElnbm9yZSBlbXB0eSBmcmFtZXMKKyAgICBpZiAoY2FuZGlkYXRlLm5vZGUt
PmlzRnJhbWVPd25lckVsZW1lbnQoKSAmJiAhc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVt
ZW50Kj4oY2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gSWdub3JlIG9mZiBzY3JlZW4gY2hpbGQgbm9kZXMgb2YgY29udGFpbmVycyB0aGF0
IGRvIG5vdCBzY3JvbGwgKG92ZXJmbG93OmhpZGRlbikKKyAgICBpZiAoY2FuZGlkYXRlLm5vZGUt
PnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkgIT0gY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9s
bGFibGVCb3gtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpCisgICAgICAgIGlmIChoYXNP
ZmZzY3JlZW5SZWN0KGNhbmRpZGF0ZS5ub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
IGRpc3RhbmNlRGF0YUZvck5vZGUoZGlyZWN0aW9uLCBzdGFydGluZ1JlY3QsIGNhbmRpZGF0ZSk7
CisgICAgaWYgKGNhbmRpZGF0ZS5kaXN0YW5jZSA9PSBtYXhEaXN0YW5jZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9kZSwgZGlyZWN0
aW9uKSAmJiBjYW5kaWRhdGUuYWxpZ25tZW50IDwgRnVsbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGNsb3Nlc3QuaXNOdWxsKCkpIHsKKyAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgaW50ZXJzZWN0aW9uUmVjdCA9
IGludGVyc2VjdGlvbihub2RlUmVjdEluQWJzQ29vcmRzKGNhbmRpZGF0ZS5ub2RlKSwgbm9kZVJl
Y3RJbkFic0Nvb3JkcyhjbG9zZXN0Lm5vZGUpKTsKKyAgICBpZiAoIWludGVyc2VjdGlvblJlY3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIDIgbm9kZXMgYXJlIGludGVyc2VjdGluZywgZG8g
aGl0IHRlc3QgdG8gZmluZCB3aGljaCBub2RlIGluIG9uIHRvcC4KKyAgICAgICAgaW50IHggPSBp
bnRlcnNlY3Rpb25SZWN0LngoKSArIGludGVyc2VjdGlvblJlY3Qud2lkdGgoKSAvIDI7CisgICAg
ICAgIGludCB5ID0gaW50ZXJzZWN0aW9uUmVjdC55KCkgKyBpbnRlcnNlY3Rpb25SZWN0LmhlaWdo
dCgpIC8gMjsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBjYW5kaWRhdGUubm9kZS0+
ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RS
ZXN1bHRBdFBvaW50KEludFBvaW50KHgsIHkpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGlmIChj
YW5kaWRhdGUubm9kZS0+Y29udGFpbnMocmVzdWx0LmlubmVyTm9kZSgpKSkgeworICAgICAgICAg
ICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoY2xvc2VzdC5ub2RlLT5jb250YWlucyhyZXN1bHQuaW5uZXJOb2RlKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjYW5kaWRhdGUuYWxpZ25tZW50
ID09IGNsb3Nlc3QuYWxpZ25tZW50KSB7CisgICAgICAgIGlmIChjYW5kaWRhdGUuZGlzdGFuY2Ug
PCBjbG9zZXN0LmRpc3RhbmNlKQorICAgICAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjYW5kaWRhdGUuYWxpZ25tZW50ID4gY2xv
c2VzdC5hbGlnbm1lbnQpCisgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7Cit9CisKK3ZvaWQg
Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250
YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCit7Cisg
ICAgQVNTRVJUKGNvbnRhaW5lcik7CisgICAgZm9yIChOb2RlKiBub2RlID0gY29udGFpbmVyLT5m
aXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8
IGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgbm9kZSkpID8gbm9kZS0+dHJhdmVyc2VO
ZXh0U2libGluZyhjb250YWluZXIpIDogbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShjb250YWluZXIp
KSB7CisgICAgICAgIGlmICgoIWZvY3VzZWRGcmFtZSgpIHx8ICFmb2N1c2VkRnJhbWUoKS0+ZG9j
dW1lbnQoKSB8fCBub2RlICE9IGZvY3VzZWRGcmFtZSgpLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpKSAmJiAobm9kZS0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgfHwgbm9kZS0+aXNGcmFt
ZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgbm9kZSkp
KSB7CisgICAgICAgICAgICBGb2N1c0NhbmRpZGF0ZSBjYW5kaWRhdGUobm9kZSk7CisgICAgICAg
ICAgICBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCA9IGNvbnRhaW5lcjsKKyAgICAg
ICAgICAgIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoZGlyZWN0aW9uLCBzdGFydGluZ1Jl
Y3QsIGNhbmRpZGF0ZSwgY2xvc2VzdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRm9j
dXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3Qg
SW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQoreworICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXItPmRvY3Vt
ZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBzdGFydGluZyByZWN0
IGlzIHRoZSByZWN0IG9mIHRoZSBmb2N1c2VkIG5vZGUsIGluIGRvY3VtZW50IGNvb3JkaW5hdGVz
LgorICAgIC8vIENvbXBvc2UgYSB2aXJ0dWFsIHN0YXJ0aW5nIHJlY3QgaWYgdGhlcmUgaXMgbm8g
Zm9jdXNlZCBub2RlIG9yIGlmIGl0IGlzIG9mZiBzY3JlZW4uCisgICAgLy8gVGhlIHZpcnR1YWwg
cmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIG9yIGZyYW1lLiBXZSBzZWxlY3Qgd2hp
Y2gKKyAgICAvLyBlZGdlIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0
aW9uLgorICAgIEludFJlY3QgbmV3U3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0OworCisgICAg
aWYgKHN0YXJ0aW5nUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbmV3U3RhcnRpbmdSZWN0ID0g
bm9kZVJlY3RJbkFic0Nvb3Jkcyhjb250YWluZXIpOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlv
bikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIG5ld1N0
YXJ0aW5nUmVjdC5zZXRYKG5ld1N0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgICAgIG5l
d1N0YXJ0aW5nUmVjdC5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0WShu
ZXdTdGFydGluZ1JlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgbmV3U3RhcnRpbmdSZWN0LnNl
dEhlaWdodCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uUmlnaHQ6CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0V2lkdGgoMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAg
ICAgICBuZXdTdGFydGluZ1JlY3Quc2V0SGVpZ2h0KDApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgbm9kZSB3aXRoaW4gY3VycmVu
dCBjb250YWluZXIgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbmF2aWdhdGlvbi4KKyAgICBGb2N1
c0NhbmRpZGF0ZSBmb2N1c0NhbmRpZGF0ZTsKKyAgICBmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRh
aW5lcihjb250YWluZXIsIG5ld1N0YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBldmVudCwgZm9jdXND
YW5kaWRhdGUpOworCisgICAgaWYgKGZvY3VzQ2FuZGlkYXRlLmlzTnVsbCgpKSB7CisgICAgICAg
IGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGNvbnRhaW5lcikpIHsKKyAgICAg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZm9jdXMsIHNjcm9sbCBpZiBwb3NzaWJsZS4KKyAgICAgICAg
ICAgIHNjcm9sbEluRGlyZWN0aW9uKGNvbnRhaW5lciwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFJldHVybiBmYWxzZSB3aWxsIGNh
dXNlIGEgcmUtdHJ5LCBza2lwcGluZyB0aGlzIGNvbnRhaW5lci4KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoZm9jdXNDYW5kaWRhdGUubm9kZS0+aXNGcmFtZU93bmVyRWxl
bWVudCgpKSB7CisgICAgICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0KGZvY3VzQ2FuZGlkYXRlLm5v
ZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzQ2FuZGlk
YXRlLm5vZGUtPmRvY3VtZW50KCktPnZpZXcoKS0+ZnJhbWUoKTsKKyAgICAgICAgICAgIHNjcm9s
bEluRGlyZWN0aW9uKGZyYW1lLT5kb2N1bWVudCgpLCBkaXJlY3Rpb24sIGZvY3VzQ2FuZGlkYXRl
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIE5hdmln
YXRlIGludG8gYSBuZXcgZnJhbWUuCisgICAgICAgIEludFJlY3QgcmVjdDsKKyAgICAgICAgTm9k
ZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNl
ZE5vZGUoKTsKKyAgICAgICAgaWYgKGZvY3VzZWROb2RlICYmICFoYXNPZmZzY3JlZW5SZWN0KGZv
Y3VzZWROb2RlKSkKKyAgICAgICAgICAgIHJlY3QgPSBub2RlUmVjdEluQWJzQ29vcmRzKGZvY3Vz
ZWROb2RlLCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVy
RWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKSk7CisgICAgICAg
IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUp
LT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CisgICAgICAgIGlmICghbmF2aWdhdGVJbkNvbnRhaW5lcihzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5ub2RlKS0+Y29udGVudEZy
YW1lKCktPmRvY3VtZW50KCksIHJlY3QsIGRpcmVjdGlvbiwgZXZlbnQpKQorICAgICAgICAgICAg
Ly8gVGhlIG5ldyBmcmFtZSBoYWQgbm90aGluZyBpbnRlcmVzdGluZywgc2tpcCBwYXN0IGl0IGFu
ZCB0cnkgYWdhaW4uCisgICAgICAgICAgICByZXR1cm4gbmF2aWdhdGVJbkNvbnRhaW5lcihjb250
YWluZXIsIG5vZGVSZWN0SW5BYnNDb29yZHMoZm9jdXNDYW5kaWRhdGUubm9kZSwgdHJ1ZSksIGRp
cmVjdGlvbiwgZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNh
blNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUubm9kZSkpIHsKKyAg
ICAgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9u
KSkgeworICAgICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZm9jdXNDYW5kaWRhdGUubm9kZSwg
ZGlyZWN0aW9uLCBmb2N1c0NhbmRpZGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBOYXZpZ2F0ZSBpbnRvIGEgbmV3IHNjcm9sbGFibGUgY29udGFp
bmVyLgorICAgICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIE5vZGUqIGZvY3VzZWROb2RlID0g
Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CisgICAgICAg
IGlmIChmb2N1c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpCisgICAg
ICAgICAgICByZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3Jkcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7Cisg
ICAgICAgIHJldHVybiBuYXZpZ2F0ZUluQ29udGFpbmVyKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHJl
Y3QsIGRpcmVjdGlvbiwgZXZlbnQpOworICAgIH0KKyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChm
b2N1c0NhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24pKSB7CisgICAgICAgIE5vZGUqIGNvbnRhaW5l
ciA9IGZvY3VzQ2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3g7CisgICAgICAgIHNjcm9s
bEluRGlyZWN0aW9uKGNvbnRhaW5lciwgZGlyZWN0aW9uLCBmb2N1c0NhbmRpZGF0ZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFdlIGZvdW5kIGEgbmV3IGZvY3VzIG5v
ZGUsIG5hdmlnYXRlIHRvIGl0LgorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4oZm9jdXNDYW5kaWRhdGUubm9kZSk7CisgICAgQVNTRVJUKGVsZW1lbnQpOworCisg
ICAgZWxlbWVudC0+Zm9jdXMoZmFsc2UpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZv
Y3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGly
ZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBGcmFtZSogY3VyRnJhbWUgPSBm
b2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBBU1NFUlQoY3VyRnJhbWUpOworCisgICAgRG9jdW1l
bnQqIGZvY3VzZWREb2N1bWVudCA9IGN1ckZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZm9j
dXNlZERvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOb2RlKiBmb2N1c2Vk
Tm9kZSA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNlZE5vZGUoKTsKKyAgICBOb2RlKiBjb250YWlu
ZXIgPSBmb2N1c2VkRG9jdW1lbnQ7CisKKyAgICAvLyBGaWd1cmUgb3V0IHRoZSBzdGFydGluZyBy
ZWN0LgorICAgIEludFJlY3Qgc3RhcnRpbmdSZWN0OworICAgIGlmIChmb2N1c2VkTm9kZSAmJiAh
aGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpIHsKKyAgICAgICAgY29udGFpbmVyID0gc2Ny
b2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNl
ZE5vZGUpOworICAgICAgICBzdGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJzQ29vcmRzKGZvY3Vz
ZWROb2RlLCB0cnVlKTsKKyAgICB9CisKKyAgICBib29sIGNvbnN1bWVkID0gZmFsc2U7CisgICAg
ZG8geworICAgICAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250YWluZXIpLT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgY29uc3VtZWQgPSBuYXZpZ2F0ZUluQ29udGFp
bmVyKGNvbnRhaW5lciwgc3RhcnRpbmdSZWN0LCBkaXJlY3Rpb24sIGV2ZW50KTsKKyAgICAgICAg
c3RhcnRpbmdSZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3Jkcyhjb250YWluZXIsIHRydWUpOworICAg
ICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVBbmREaXJlY3Rp
b24oZGlyZWN0aW9uLCBjb250YWluZXIpOworICAgIH0gd2hpbGUgKCFjb25zdW1lZCAmJiBjb250
YWluZXIpOworICAgIHJldHVybiBjb25zdW1lZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAkocmV2aXNpb24gNzE1NTMpCisrKyBXZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZv
Y3VzQ2FuZGlkYXRlJiBwYXJlbnRDYW5kaWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKICAgICB2
b2lkIGRlZXBGaW5kRm9jdXNhYmxlTm9kZUluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgTm9k
ZSogZm9jdXNlZCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0NhbmRpZGF0
ZSYpOwogCisgICAgYm9vbCBuYXZpZ2F0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29u
c3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCop
OworICAgIGJvb2wgbmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24sIEtleWJv
YXJkRXZlbnQqKTsKKyAgICB2b2lkIGZpbmRGb2N1c0NhbmRpZGF0ZUluQ29udGFpbmVyKE5vZGUq
IGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwg
S2V5Ym9hcmRFdmVudCosIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KTsKKwogICAgIFBhZ2UqIG1f
cGFnZTsKICAgICBSZWZQdHI8RnJhbWU+IG1fZm9jdXNlZEZyYW1lOwogICAgIGJvb2wgbV9pc0Fj
dGl2ZTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNzE1NTMp
CisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MywxMiArNDMsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgbG9uZyBsb25n
IHNwYXRpYWxEaXN0YW5jZShGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmKTsKIHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRvUm9vdERvY3VtZW50
KFJlbmRlck9iamVjdCopOwotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3Rz
KEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGlj
IFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKTsKIHN0YXRp
YyBib29sIGFyZVJlY3RzRnVsbHlBbGlnbmVkKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIGJvb2wgYXJlUmVjdHNQYXJ0aWFsbHlBbGlnbmVk
KEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGlj
IGJvb2wgYXJlUmVjdHNUb29GYXJBcGFydChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0
IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNp
emUmIHZpZXdTaXplKTsKIHN0YXRpYyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0
aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIHZvaWQgZGVmbGF0
ZUlmT3ZlcmxhcHBlZChJbnRSZWN0JiwgSW50UmVjdCYpOwogc3RhdGljIGJvb2wgY2hlY2tOZWdh
dGl2ZUNvb3Jkc0Zvck5vZGUoTm9kZSosIGNvbnN0IEludFJlY3QmKTsKK3N0YXRpYyB2b2lkIGVu
dHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNv
bnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgY29uc3QgSW50UmVjdCYgcG90ZW50aWFsUmVjdCwg
SW50UG9pbnQmIGV4aXRQb2ludCwgSW50UG9pbnQmIGVudHJ5UG9pbnQpOwogCiBib29sIGlzU3Bh
dGlhbE5hdmlnYXRpb25FbmFibGVkKGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKQEAgLTEwMiw3ICsx
MDQsOCBAQCB2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gCiAgICAgLy8g
VGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIG5vZGVzIGlzIG5vdCB0byBiZSBjb25zaWRlcmVkIGFs
b25lIHdoZW4gZXZhbHVhdGluZy9sb29raW5nCiAgICAgLy8gZm9yIHRoZSBiZXN0IGZvY3VzIGNh
bmRpZGF0ZSBub2RlLiBBbGlnbm1lbnQgb2YgcmVjdHMgY2FuIGJlIGFsc28gYSBnb29kIHBvaW50
IHRvIGJlCiAgICAgLy8gY29uc2lkZXJlZCBpbiBvcmRlciB0byBtYWtlIHRoZSBhbGdvcml0aG0g
dG8gYmVoYXZpb3IgaW4gYSBtb3JlIGludHVpdGl2ZSB3YXkuCi0gICAgY2FuZGlkYXRlLmFsaWdu
bWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCk7
CisgICAgSW50U2l6ZSB2aWV3U2l6ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdl
KCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKKyAg
ICBjYW5kaWRhdGUuYWxpZ25tZW50ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBjdXJS
ZWN0LCB0YXJnZXRSZWN0LCB2aWV3U2l6ZSk7CiAgICAgY2FuZGlkYXRlLmRpc3RhbmNlID0gc3Bh
dGlhbERpc3RhbmNlKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCk7CiB9CiAKQEAgLTEz
Niw4ICsxMzksMTIgQEAgc3RhdGljIEludFJlY3QgcmVuZGVyUmVjdFJlbGF0aXZlVG9Sb290RAog
ICAgIHJldHVybiByZWN0OwogfQogCi1zdGF0aWMgUmVjdHNBbGlnbm1lbnQgYWxpZ25tZW50Rm9y
UmVjdHMoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQorc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVu
dEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVj
dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50U2l6ZSYgdmlld1NpemUpCiB7
CisgICAgLy8gSWYgd2UgZm91bmQgYSBub2RlIGluIGZ1bGwgYWxpZ25tZW50LCBidXQgaXQgaXMg
dG9vIGZhciBhd2F5LCBpZ25vcmUgaXQuCisgICAgaWYgKGFyZVJlY3RzVG9vRmFyQXBhcnQoZGly
ZWN0aW9uLCBjdXJSZWN0LCB0YXJnZXRSZWN0LCB2aWV3U2l6ZSkpCisgICAgICAgIHJldHVybiBO
b25lOworCiAgICAgaWYgKGFyZVJlY3RzRnVsbHlBbGlnbmVkKGRpcmVjdGlvbiwgY3VyUmVjdCwg
dGFyZ2V0UmVjdCkpCiAgICAgICAgIHJldHVybiBGdWxsOwogCkBAIC0yNzcsNiArMjg0LDIzIEBA
IHN0YXRpYyBib29sIGFyZVJlY3RzUGFydGlhbGx5QWxpZ25lZChGb2MKICAgICAgICAgICAgIHx8
IChiRW5kID49IGFTdGFydCAmJiBiRW5kIDw9IGFFbmQpKTsKIH0KIAorc3RhdGljIGJvb2wgYXJl
UmVjdHNUb29GYXJBcGFydChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3Qm
IGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNpemUmIHZpZXdT
aXplKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkxlZnQ6CisgICAgICAgIHJldHVybiBjdXJSZWN0LngoKSA8IHRhcmdldFJlY3QucmlnaHQoKSB8
fCBjdXJSZWN0LngoKSAtIHRhcmdldFJlY3QucmlnaHQoKSA+IHZpZXdTaXplLndpZHRoKCk7Cisg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54
KCkgPCBjdXJSZWN0LnJpZ2h0KCkgfHwgdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAg
cmV0dXJuIGN1clJlY3QueSgpIDwgdGFyZ2V0UmVjdC5ib3R0b20oKSB8fCBjdXJSZWN0LnkoKSAt
IHRhcmdldFJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKKyAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uRG93bjoKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIDwgY3VyUmVjdC5i
b3R0b20oKSB8fCB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5o
ZWlnaHQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCiAvLyBSZXR1cm4gdHJ1ZSBpZiByZWN0IHxh
fCBpcyBiZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9vbCBiZWxv
dyhjb25zdCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewpAQCAtNDI1LDcgKzQ0OSw3
IEBAIHN0YXRpYyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZvY3VzRGlyZWMKIC8vIENoZWNrcyBp
ZiB8bm9kZXwgaXMgb2Zmc2NyZWVuIHRoZSB2aXNpYmxlIGFyZWEgKHZpZXdwb3J0KSBvZiBpdHMg
Y29udGFpbmVyCiAvLyBkb2N1bWVudC4gSW4gY2FzZSBpdCBpcywgb25lIGNhbiBzY3JvbGwgaW4g
ZGlyZWN0aW9uIG9yIHRha2UgYW55IGRpZmZlcmVudAogLy8gZGVzaXJlZCBhY3Rpb24gbGF0ZXIg
b24uCi1ib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSkKK2Jvb2wgaGFzT2Zmc2NyZWVu
UmVjdChOb2RlKiBub2RlLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgLy8gR2V0
IHRoZSBGcmFtZVZpZXcgaW4gd2hpY2ggfG5vZGV8IGlzICh3aGljaCBtZWFucyB0aGUgY3VycmVu
dCB2aWV3cG9ydCBpZiB8bm9kZXwKICAgICAvLyBpcyBub3QgaW4gYW4gaW5uZXIgZG9jdW1lbnQp
LCBzbyB3ZSBjYW4gY2hlY2sgaWYgaXRzIGNvbnRlbnQgcmVjdCBpcyB2aXNpYmxlCkBAIC00MzUs
NiArNDU5LDI2IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgY29udGFpbmVyVmlld3BvcnRSZWN0ID0gZnJhbWVW
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAvLyBXZSB3YW50IHRvIHNlbGVjdCBhIG5v
ZGUgaWYgaXQgaXMgY3VycmVudGx5IG9mZiBzY3JlZW4sIGJ1dCB3aWxsIGJlCisgICAgLy8gZXhw
b3NlZCBhZnRlciB3ZSBzY3JvbGwuIEFkanVzdCB0aGUgdmlld3BvcnQgdG8gcG9zdC1zY3JvbGxp
bmcgcG9zaXRpb24uCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uTGVmdDoKKyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldFgoY29udGFpbmVy
Vmlld3BvcnRSZWN0LngoKSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAg
ICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRXaWR0aChjb250YWluZXJWaWV3cG9ydFJlY3Qu
d2lkdGgoKSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgY29udGFpbmVyVmlld3Bv
cnRSZWN0LnNldFdpZHRoKGNvbnRhaW5lclZpZXdwb3J0UmVjdC53aWR0aCgpICsgU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvblVwOgorICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0WShjb250YWluZXJW
aWV3cG9ydFJlY3QueSgpIC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAg
ICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldEhlaWdodChjb250YWluZXJWaWV3cG9ydFJlY3Qu
aGVpZ2h0KCkgKyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgY29udGFpbmVyVmlld3Bv
cnRSZWN0LnNldEhlaWdodChjb250YWluZXJWaWV3cG9ydFJlY3QuaGVpZ2h0KCkgKyBTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlciA9IG5vZGUt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXIpCkBAIC00NDcsMzYgKzQ5MSw3NSBAQCBib29s
IGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSkKICAgICByZXR1cm4gIWNvbnRhaW5lclZpZXdw
b3J0UmVjdC5pbnRlcnNlY3RzKHJlY3QpOwogfQogCi0vLyBJbiBhIGJvdHRvbS11cCB3YXksIHRo
aXMgbWV0aG9kIHRyaWVzIHRvIHNjcm9sbCB8ZnJhbWV8IGluIGEgZ2l2ZW4gZGlyZWN0aW9uCi0v
LyB8ZGlyZWN0aW9ufCwgZ29pbmcgdXAgaW4gdGhlIGZyYW1lIHRyZWUgaGllcmFyY2h5IGluIGNh
c2UgaXQgZG9lcyBub3Qgc3VjY2VlZC4KLWJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZy
YW1lLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5k
aWRhdGUpCitib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhbmRpZGF0ZSYpCiB7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChmcmFtZSAmJiBjYW5TY3JvbGxJbkRp
cmVjdGlvbihkaXJlY3Rpb24sIGZyYW1lLT5kb2N1bWVudCgpKSk7CiAKLSAgICBTY3JvbGxEaXJl
Y3Rpb24gc2Nyb2xsRGlyZWN0aW9uOworICAgIGlmIChmcmFtZSAmJiBjYW5TY3JvbGxJbkRpcmVj
dGlvbihkaXJlY3Rpb24sIGZyYW1lLT5kb2N1bWVudCgpKSkgeworICAgICAgICBpbnQgZHggPSAw
OworICAgICAgICBpbnQgZHkgPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAg
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIGR4ID0gLSBTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgZHggPSBTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvblVwOgorICAgICAgICAgICAgZHkgPSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93
bjoKKyAgICAgICAgICAgIGR5ID0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQogCi0gICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xs
TGVmdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgotICAg
ICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb2N1c0RpcmVjdGlvblVwOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxV
cDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAg
IHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xs
QnkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KIAotICAgIGlmICghY2FuZGlkYXRlLmlzTnVsbCgpICYmIGlzU2Nyb2xs
YWJsZUNvbnRhaW5lck5vZGUoY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3gpKQotICAg
ICAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShzY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVC
b3gpOworYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRhdGUmKQoreworICAgIGlmIChjb250YWlu
ZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxJbkRpcmVjdGlvbihz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRhaW5lciktPmZyYW1lKCksIGRpcmVjdGlvbiwgRm9j
dXNDYW5kaWRhdGUoKSk7CisKKyAgICBpZiAoIWNvbnRhaW5lci0+cmVuZGVyQm94KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb250YWluZXIgJiYgY2FuU2Nyb2xsSW5EaXJl
Y3Rpb24oZGlyZWN0aW9uLCBjb250YWluZXIpKSB7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsUmVj
dCA9IGNvbnRhaW5lci0+Z2V0UmVjdCgpOworICAgICAgICBzY3JvbGxSZWN0Lm1vdmUoY29udGFp
bmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwgY29udGFpbmVyLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpKTsKKyAgICAgICAgc2Nyb2xsUmVj
dC5zZXRXaWR0aChzY3JvbGxSZWN0LndpZHRoKCkgLSAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSArIGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+Ym9yZGVyUmlnaHRXaWR0aCgpKSk7CisgICAgICAgIHNjcm9sbFJlY3Quc2V0SGVpZ2h0KHNj
cm9sbFJlY3QuaGVpZ2h0KCkgLSAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3Jk
ZXJUb3BXaWR0aCgpICsgY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0
b21XaWR0aCgpKSk7CisgICAgICAgIGludCBkeCA9IDA7CisgICAgICAgIGludCBkeSA9IDA7Cisg
ICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25M
ZWZ0OgorICAgICAgICAgICAgZHggPSAtIG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVw
KCksIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgQVNT
RVJUKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdpZHRoKCkgPiAoY29udGFpbmVyLT5y
ZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50
V2lkdGgoKSkpOworICAgICAgICAgICAgZHggPSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxXaWR0aCgpIC0gKGNvbnRhaW5l
ci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNs
aWVudFdpZHRoKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6CisgICAgICAgICAgICBkeSA9IC0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICAgICAg
QVNTRVJUKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbEhlaWdodCgpIC0gKGNvbnRhaW5l
ci0+cmVuZGVyQm94KCktPnNjcm9sbFRvcCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xp
ZW50SGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGR5ID0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVpZ2h0KCkgLSAoY29u
dGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXItPnJlbmRlckJveCgp
LT5jbGllbnRIZWlnaHQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogCi0gICAgcmV0
dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0
aW9uLCBTY3JvbGxCeUxpbmUpOworICAgICAgICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNs
b3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGR4LCBkeSk7CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBzY3JvbGxJbnRv
VmlldyhFbGVtZW50KiBlbGVtZW50KQpAQCAtNTM0LDcgKzYxNyw3IEBAIHN0YXRpYyBib29sIGNo
ZWNrTmVnYXRpdmVDb29yZHNGb3JOb2RlKE4KICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZDsKIH0K
IAotYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKE5vZGUqIG5vZGUpCitib29sIGlzU2Ny
b2xsYWJsZUNvbnRhaW5lck5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU2Nyw0ICs2NTAsMjM3IEBAIGJvb2wgaXNOb2Rl
RGVlcERlc2NlbmRhbnRPZkRvY3VtZW50KE5vZGUKICAgICByZXR1cm4gZGVzY2VuZGFudDsKIH0K
IAorTm9kZSogc2Nyb2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7Cisg
ICAgTm9kZSogcGFyZW50ID0gbm9kZTsKKyAgICBkbyB7CisgICAgICAgIGlmIChwYXJlbnQtPmlz
RG9jdW1lbnROb2RlKCkpCisgICAgICAgICAgICBwYXJlbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KHBhcmVudCktPmRvY3VtZW50KCktPmZyYW1lKCktPm93bmVyRWxlbWVudCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICB9
IHdoaWxlIChwYXJlbnQgJiYgIWNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgcGFyZW50
KSAmJiAhcGFyZW50LT5pc0RvY3VtZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gcGFyZW50OworfQor
Citib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgTm9kZSogY29udGFpbmVyKQoreworICAgIEFTU0VSVChjb250YWluZXIpOworICAgIGlmIChj
b250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBjYW5TY3JvbGxJbkRp
cmVjdGlvbihkaXJlY3Rpb24sIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50Kj4oY29udGFpbmVy
KS0+ZnJhbWUoKSk7CisKKyAgICBpZiAoIWNvbnRhaW5lci0+cmVuZGVyQm94KCkgfHwgIWNvbnRh
aW5lci0+cmVuZGVyQm94KCktPmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gY29udGFpbmVyLT5yZW5kZXJC
b3goKS0+c2Nyb2xsTGVmdCgpID4gMDsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAg
ICAgIHJldHVybiBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSA+IDA7CisgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gY29udGFpbmVyLT5yZW5k
ZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lk
dGgoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdpZHRoKCk7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHJldHVybiBjb250YWluZXItPnJlbmRlckJveCgp
LT5zY3JvbGxUb3AoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpIDwg
Y29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9u
LCBjb25zdCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZS0+dmlldygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25MZWZ0
IHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblJpZ2h0KSAmJiAhZnJhbWUtPnZpZXcoKS0+
aG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKChk
aXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rp
b25Eb3duKSAmJiAhZnJhbWUtPnZpZXcoKS0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEludFNpemUgc2l6ZSA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRz
U2l6ZSgpOworICAgIEludFNpemUgb2Zmc2V0ID0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0
KCk7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0
KHRydWUpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uTGVmdDoKKyAgICAgICAgcmV0dXJuIG9mZnNldC53aWR0aCgpID4gMDsKKyAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBvZmZzZXQuaGVpZ2h0KCkgPiAwOworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJuIHJlY3Qud2lkdGgoKSAr
IG9mZnNldC53aWR0aCgpIDwgc2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25E
b3duOgorICAgICAgICByZXR1cm4gcmVjdC5oZWlnaHQoKSArIG9mZnNldC5oZWlnaHQoKSA8IHNp
emUuaGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworSW50UmVjdCBub2RlUmVjdEluQWJzQ29v
cmRzKE5vZGUqIG5vZGUsIGJvb2wgaWdub3JlQm9yZGVyKQoreworICAgIEFTU0VSVChub2RlICYm
IG5vZGUtPnJlbmRlcmVyKCkpOworCisgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCisg
ICAgICAgIHJldHVybiBmcmFtZVJlY3RJbkFic0Nvb3JkcyhzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KG5vZGUpLT5mcmFtZSgpKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBub2RlLT5nZXRSZWN0KCk7CisK
KyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZyYW1lLT5vd25lckVsZW1lbnQoKSkp
IHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUoZWxlbWVudC0+
b2Zmc2V0TGVmdCgpLCBlbGVtZW50LT5vZmZzZXRUb3AoKSk7CisgICAgICAgICAgICB9IHdoaWxl
ICgoZWxlbWVudCA9IGVsZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7CisgICAgICAgICAgICByZWN0
Lm1vdmUoKC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gRm9yIGF1dGhvcnMgdGhhdCB1c2UgYm9yZGVyIGluZHRlYWQgb2Ygb3V0bGlu
ZSBpbiB0aGVpciBDU1MsIHdlIGNvbXBlbnNhdGUgYnkgaWdub3JpbmcgdGhlIGJvcmRlciB3aGVu
IGNhbGN1bGF0aW5nCisgICAgLy8gdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgZWxlbWVudC4KKyAg
ICBpZiAoaWdub3JlQm9yZGVyKSB7CisgICAgICAgIHJlY3QubW92ZShub2RlLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
Ym9yZGVyVG9wV2lkdGgoKSk7CisgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0g
bm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBub2RlLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCkpOworICAgICAgICByZWN0LnNldEhl
aWdodChyZWN0LmhlaWdodCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9w
V2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCkp
OworICAgIH0KKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBmcmFtZVJlY3RJbkFic0Nv
b3JkcyhGcmFtZSogZnJhbWUpCit7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+
dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAgICBmb3IgKDsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWUtPm93bmVyRWxlbWVudCgpKSkgeworICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgIHJlY3QubW92ZShlbGVtZW50LT5vZmZzZXRMZWZ0KCksIGVs
ZW1lbnQtPm9mZnNldFRvcCgpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKChlbGVtZW50ID0gZWxl
bWVudC0+b2Zmc2V0UGFyZW50KCkpKTsKKyAgICAgICAgICAgIHJlY3QubW92ZSgoLWZyYW1lLT52
aWV3KCktPnNjcm9sbE9mZnNldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJl
Y3Q7Cit9CisKKy8vIEV4aXQgcG9pbnQgaXMgdGhlIGNsb3Nlc3QgcG9pbnQgaW4gdGhlIHN0YXJ0
aW5nUmVjdCwgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisv
LyBFbnRyeSBwb2ludCBpcyB0aGUgY2xvc2VzdCBwb2ludCBpbiB0aGUgY2FuZGlkYXRlIG5vZGUs
IGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uLgordm9pZCBlbnRy
eUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIGNvbnN0IEludFJlY3QmIHBvdGVudGlhbFJlY3QsIElu
dFBvaW50JiBleGl0UG9pbnQsIEludFBvaW50JiBlbnRyeVBvaW50KQoreworICAgIHN3aXRjaCAo
ZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGV4aXRQ
b2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFgocG90
ZW50aWFsUmVjdC5yaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVj
dGlvblVwOgorICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKKyAgICAg
ICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGV4aXRQb2ludC5zZXRY
KHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlh
bFJlY3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246
CisgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAg
IGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHN3
aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBpZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBw
b3RlbnRpYWxSZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0
LnkoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC5ib3R0b20o
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoYmVsb3cocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0
KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsK
KyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3RhcnRpbmdSZWN0Lnko
KSwgcG90ZW50aWFsUmVjdC55KCkpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShleGl0
UG9pbnQueSgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIGlmIChyaWdo
dE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkpIHsKKyAgICAgICAgICAgIGV4aXRQb2lu
dC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBv
dGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPZihwb3RlbnRp
YWxSZWN0LCBzdGFydGluZ1JlY3QpKSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFy
dGluZ1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFs
UmVjdC54KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFgo
bWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgpKSk7CisgICAgICAgICAgICBl
bnRyeVBvaW50LnNldFgoZXhpdFBvaW50LngoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCit7Cisg
ICAgaWYgKGNhbmRpZGF0ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghY2Fu
ZGlkYXRlLm5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IG5v
ZGVSZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3JkcyhjYW5kaWRhdGUubm9kZSwgdHJ1ZSk7CisKKyAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAg
ICAgICBpZiAobm9kZVJlY3QucmlnaHQoKSA+IHN0YXJ0aW5nUmVjdC54KCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAg
ICAgICAgaWYgKG5vZGVSZWN0LmJvdHRvbSgpID4gc3RhcnRpbmdSZWN0LnkoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0
OgorICAgICAgICBpZiAobm9kZVJlY3QueCgpIDwgc3RhcnRpbmdSZWN0LnJpZ2h0KCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25E
b3duOgorICAgICAgICBpZiAobm9kZVJlY3QueSgpIDwgc3RhcnRpbmdSZWN0LmJvdHRvbSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBJbnRQb2ludCBleGl0UG9pbnQ7
CisgICAgSW50UG9pbnQgZW50cnlQb2ludDsKKyAgICBpbnQgc2FtZUF4aXNEaXN0ID0gMDsKKyAg
ICBpbnQgb3RoZXJBeGlzRGlzdCA9IDA7CisgICAgZW50cnlBbmRFeGl0UG9pbnRzRm9yRGlyZWN0
aW9uKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBub2RlUmVjdCwgZXhpdFBvaW50LCBlbnRyeVBv
aW50KTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkxlZnQ6CisgICAgICAgIHNhbWVBeGlzRGlzdCA9IGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50
LngoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdCA9IGFicyhleGl0UG9pbnQueSgpIC0gZW50cnlQ
b2ludC55KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6Cisg
ICAgICAgIHNhbWVBeGlzRGlzdCA9IGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKTsKKyAg
ICAgICAgb3RoZXJBeGlzRGlzdCA9IGFicyhleGl0UG9pbnQueCgpIC0gZW50cnlQb2ludC54KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAg
IHNhbWVBeGlzRGlzdCA9IGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKTsKKyAgICAgICAg
b3RoZXJBeGlzRGlzdCA9IGFicyhlbnRyeVBvaW50LnkoKSAtIGV4aXRQb2ludC55KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgc2FtZUF4
aXNEaXN0ID0gZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpOworICAgICAgICBvdGhlckF4
aXNEaXN0ID0gYWJzKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIGludCB4ID0gKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSkgKiAoZW50cnlQ
b2ludC54KCkgLSBleGl0UG9pbnQueCgpKTsKKyAgICBpbnQgeSA9IChlbnRyeVBvaW50LnkoKSAt
IGV4aXRQb2ludC55KCkpICogKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7CisKKyAg
ICBmbG9hdCBldWNsaWRpYW5EaXN0YW5jZSA9IHNxcnQoKHggKyB5KSAqIDEuMGYpOworCisgICAg
Ly8gTG9vc2VseSBiYXNlZCBvbiBodHRwOi8vd3d3LnczLm9yZy9UUi9XSUNELyNmb2N1cy1oYW5k
bGluZworICAgIC8vIGRmID0gZG90RGlzdCArIGR4ICsgZHkgKyAyICogKHhkaXNwbGFjZW1lbnQg
KyB5ZGlzcGxhY2VtZW50KSAtIHNxcnQoT3ZlcmxhcCkKKworICAgIGZsb2F0IGRpc3RhbmNlID0g
ZXVjbGlkaWFuRGlzdGFuY2UgKyBzYW1lQXhpc0Rpc3QgKyAyICogb3RoZXJBeGlzRGlzdDsKKyAg
ICBjYW5kaWRhdGUuZGlzdGFuY2UgPSByb3VuZGYoZGlzdGFuY2UpOworICAgIEludFNpemUgdmll
d1NpemUgPSBjYW5kaWRhdGUubm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+
dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7CisgICAgY2FuZGlkYXRlLmFsaWdu
bWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBub2RlUmVj
dCwgdmlld1NpemUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU3Bh
dGlhbE5hdmlnYXRpb24uaAkocmV2aXNpb24gNzE1NTMpCisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlh
bE5hdmlnYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDExICsxMzEsMTggQEAgc3RydWN0
IEZvY3VzQ2FuZGlkYXRlIHsKIAogdm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbiwgTm9kZSogc3RhcnQsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpOwog
Ym9vbCBzY3JvbGxJbkRpcmVjdGlvbihGcmFtZSosIEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGb2N1
c0NhbmRpZGF0ZSYgY2FuZGlkYXRlID0gRm9jdXNDYW5kaWRhdGUoKSk7Citib29sIHNjcm9sbElu
RGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2Fu
ZGlkYXRlJiBjYW5kaWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKIHZvaWQgc2Nyb2xsSW50b1Zp
ZXcoRWxlbWVudCopOwotYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqKTsKK2Jvb2wgaGFzT2Zm
c2NyZWVuUmVjdChOb2RlKiwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gRm9jdXNEaXJlY3Rp
b25Ob25lKTsKIGJvb2wgaXNJblJvb3REb2N1bWVudChOb2RlKik7Ci1ib29sIGlzU2Nyb2xsYWJs
ZUNvbnRhaW5lck5vZGUoTm9kZSopOworYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKGNv
bnN0IE5vZGUqKTsKIGJvb2wgaXNOb2RlRGVlcERlc2NlbmRhbnRPZkRvY3VtZW50KE5vZGUqLCBE
b2N1bWVudCopOworTm9kZSogc2Nyb2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0
aW9uKEZvY3VzRGlyZWN0aW9uLCBOb2RlKiBub2RlKTsKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rp
b24oRm9jdXNEaXJlY3Rpb24sIGNvbnN0IE5vZGUqIGNvbnRhaW5lcik7Citib29sIGNhblNjcm9s
bEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGcmFtZSopOworSW50UmVjdCBub2Rl
UmVjdEluQWJzQ29vcmRzKE5vZGUqLCBib29sIGlnbm9yZUJvcmRlciA9IGZhbHNlKTsKK0ludFJl
Y3QgZnJhbWVSZWN0SW5BYnNDb29yZHMoRnJhbWUqKTsKK3ZvaWQgZGlzdGFuY2VEYXRhRm9yTm9k
ZShGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0NhbmRp
ZGF0ZSYpOwogCiB9IC8vIG5hbXNwYWNlIFdlYkNvcmUKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzE4
MTgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MiBAQAorMjAxMC0xMS0xMSAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+LCBD
aGFuZyBTaHUgIDxjaGFuZy5zaHVAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwYXRpYWwgTmF2aWdhdGlvbjogaXNzdWVzIHdpdGgg
dGhlIG5vZGUgc2VsZWN0aW9uIGFsZ29yaXRobS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MzgyCisKKyAgICAgICAgVXBkYXRlIHRoZSB0ZXN0cyBk
dWUgdG8gY2hhbmdlIGluIGJlaGF2aW9yIG9mIFNwYXRpYWwgTmF2aWdhdGlvbi4KKyAgICAgICAg
Q29udGFpbmVycyBub3cgc2Nyb2xsIHRvIHJldmVhbCBhbGwgb2YgdGhlaXIgY2ludGVudCwgZXZl
biBpZiB0aGV5IGRvIG5vdCBoYXZlIGZvY3VzYWJsZSBub2Rlcy4KKworICAgICAgICAqIGZhc3Qv
ZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxlLWJ1dC13aXRob3V0
LWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9z
cGF0aWFsLW5hdmlnYXRpb24vc25hdi1kaXYtc2Nyb2xsYWJsZS1idXQtd2l0aG91dC1mb2N1c2Fi
bGUtY29udGVudC5odG1sOgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlv
bi9zbmF2LWlmcmFtZS1uby1mb2N1c2FibGUtY29udGVudC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLWZvY3VzYWJs
ZS1jb250ZW50Lmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9u
L3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUtY29udGVudC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFi
bGUtY29udGVudC5odG1sOgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlv
bi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1l
LXdpdGgtb2Zmc2NyZWVuLWZvY3VzYWJsZS1lbGVtZW50Lmh0bWw6CisKIDIwMTAtMTEtMTEgIE5p
a29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgRGlyayBTY2h1bHplLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
c3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0LXdpdGhvdXQtZm9jdXNh
YmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxlLWJ1dC13aXRob3V0
LWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzE1NTMpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1kaXYtc2Nyb2xsYWJs
ZS1idXQtd2l0aG91dC1mb2N1c2FibGUtY29udGVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDI0IEBAIEl0IGhhcyBhbHNvIG5vIGtleWJvYXJkIGZvY3VzYWJsZSBl
bGVtZW4KIC4uLiBhcyB3ZWxsIGFzIHNjcm9sbGJhcnMhCiAKIGUKK1BBU1MgZ0ZvY3VzZWREb2N1
bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdG
b2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0
IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIp
IGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJp
YnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFj
dGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWRE
b2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNT
IGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0
YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJp
ZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0
dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1l
bnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0
aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1
bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9j
dXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
ImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgi
aWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0
cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3Rp
dmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgogUEFTUyBnRm9jdXNlZERvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKIApJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9s
bGFibGUtYnV0LXdpdGhvdXQtZm9jdXNhYmxlLWNvbnRlbnQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1kaXYtc2Nyb2xs
YWJsZS1idXQtd2l0aG91dC1mb2N1c2FibGUtY29udGVudC5odG1sCShyZXZpc2lvbiA3MTU1MykK
KysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1z
Y3JvbGxhYmxlLWJ1dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50Lmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDI1IEBACiAgICAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9qYXZh
c2NyaXB0Ij4KIAogICAgIHZhciByZXN1bHRNYXAgPSBbCisgICAgICBbIkRvd24iLCAic3RhcnQi
XSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisg
ICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAg
WyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93
biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCiAgICAgICBbIkRvd24iLCAi
ZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisg
ICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVw
IiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5k
Il0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCiAgICAg
ICBbIlVwIiAgLCAic3RhcnQiXSwKICAgICAgIFsiRE9ORSIsICJET05FIl0KICAgICBdOwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1l
LW5vLWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tZm9jdXNh
YmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MTU1MykKKysrIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2FibGUt
Y29udGVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiwyOCBAQCBhCiAK
IAogZQorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJp
ZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0
dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxl
bWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50
LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3Vz
ZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
InN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50Lmdl
dEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZl
RWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0Zv
Y3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQi
CitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikg
aXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0
ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0
QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxl
bWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5h
Y3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdG
b2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIK
K1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBp
cyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRB
dHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVt
ZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFj
dGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1c2VkRG9j
dW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgogCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUt
bm8tZm9jdXNhYmxlLWNvbnRlbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tZm9jdXNhYmxlLWNvbnRl
bnQuaHRtbAkocmV2aXNpb24gNzE1NTMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0
aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tZm9jdXNhYmxlLWNvbnRlbnQuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMTcsNyArMTcsMjkgQEAKICAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0
aW9uL2phdmFzY3JpcHQiPgogCiAgICAgdmFyIHJlc3VsdE1hcCA9IFsKKyAgICAgIFsiRG93biIs
ICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3Rh
cnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0s
CisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAg
ICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsi
RG93biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCiAgICAgICBbIkRvd24i
LCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0s
CisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBb
IlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAi
ZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisg
ICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCiAgICAgICBbIlVw
IiAgLCAic3RhcnQiXSwKICAgICAgIFsiRE9ORSIsICJET05FIl0KICAgICBdOwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLXNj
cm9sbGFibGUtY29udGVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUt
Y29udGVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcxNTUzKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUtY29u
dGVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAgUEFTUyBn
Rm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QQogUEFTUyBnRm9jdXNlZERvY3VtZW50
LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI0IgogUEFTUyBnRm9jdXNlZERv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI1IgogUEFTUyBnRm9j
dXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICI2IgorUEFT
UyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICIz
IgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIp
IGlzICI3IgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJpZCIpIGlzICIzIgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0
cmlidXRlKCJpZCIpIGlzICIyIgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlh
bC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUtY29udGVudC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2
LWlmcmFtZS1uby1zY3JvbGxhYmxlLWNvbnRlbnQuaHRtbAkocmV2aXNpb24gNzE1NTMpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8t
c2Nyb2xsYWJsZS1jb250ZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICAgICAgIFsiVXAiLCAiNCJdLAogICAgICAgWyJSaWdodCIsICI1Il0sCiAgICAgICBbIlJpZ2h0
IiwgIjYiXSwKKyAgICAgIFsiVXAiLCAiMyJdLAogICAgICAgWyJSaWdodCIsICI3Il0sCiAgICAg
ICBbIlVwIiwgIjMiXSwKICAgICAgIFsiVXAiLCAiMiJdLApJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLXdpdGgtb2Zmc2NyZWVuLWZv
Y3VzYWJsZS1lbGVtZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtd2l0aC1vZmZzY3JlZW4t
Zm9jdXNhYmxlLWVsZW1lbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MTU1MykKKysrIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9m
ZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTUsMTAgKzUsMTIgQEAgUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QQog
UEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlz
ICIxIgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJp
ZCIpIGlzICIxIgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJpZCIpIGlzICIyIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0
QXR0cmlidXRlKCJpZCIpIGlzICIyIgogUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1l
bnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0
aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCiBQQVNTIGdGb2N1c2VkRG9jdW1l
bnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCiBQQVNTIGdGb2N1c2Vk
RG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCiBQQVNTIGdG
b2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjEiCitQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
IjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlk
IikgaXMgInN0YXJ0IgogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5h
dmlnYXRpb24vc25hdi1pZnJhbWUtd2l0aC1vZmZzY3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRp
b24vc25hdi1pZnJhbWUtd2l0aC1vZmZzY3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQuaHRtbAkocmV2
aXNpb24gNzE1NTMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRp
b24vc25hdi1pZnJhbWUtd2l0aC1vZmZzY3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDEzIEBACiAgICAgICBbIkRvd24iLCAiMSJdLAogICAg
ICAgWyJEb3duIiwgIjEiXSwKICAgICAgIFsiRG93biIsICIyIl0sCisgICAgICBbIkRvd24iLCAi
MiJdLAogICAgICAgWyJEb3duIiwgImVuZCJdLAogICAgICAgWyJVcCIsICIyIl0sCiAgICAgICBb
IlVwIiwgIjIiXSwKICAgICAgIFsiVXAiLCAiMiJdLAogICAgICAgWyJVcCIsICIxIl0sCisgICAg
ICBbIlVwIiwgIjEiXSwKICAgICAgIFsiVXAiLCAic3RhcnQiXSwKICAgICAgIFsiRE9ORSIsICJE
T05FIl0KICAgICBdOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73729</attachid>
            <date>2010-11-12 05:05:07 -0800</date>
            <delta_ts>2010-11-15 20:01:17 -0800</delta_ts>
            <desc>Patch including code and no tests</desc>
            <filename>49382.patch</filename>
            <type>text/plain</type>
            <size>33096</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTgxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMTEtMTEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
CisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJv
bGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24pOgorICAgICAgICAqIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZURhdGFGb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OmFsaWdubWVudEZvclJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OmFyZVJlY3RzVG9v
RmFyQXBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6aGFzT2Zmc2NyZWVuUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppc1Njcm9s
bGFibGVDb250YWluZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVPckZyYW1l
UGFyZW50Rm9yTm9kZUFuZERpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5TY3JvbGxJ
bkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzQ29vcmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZyYW1lUmVjdEluQWJzQ29vcmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlYXJjaFJlY3RGb3JEaXJlY3Rpb25BbmRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjplbnRy
eUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmln
YXRpb24uaDoKKwogMjAxMC0xMS0xMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3MTU1MykKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRn
ZXQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC01Nyw2ICs1OSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCitzdGF0aWMgdm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVk
KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBG
b2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCk7CiBzdGF0
aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hFdmVudHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBmb2N1c2VkKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBmb2N1
c2VkIG5vZGUgd2Ugc2hvdWxkIGRpc3BhdGNoIGJsdXIgb24gaXQgYmVmb3JlIHdlIGJsdXIgdGhl
IHdpbmRvdy4KQEAgLTE3NSw3ICsxNzgsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5j
ZUZvY3VzKEZvY3VzCiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25VcDoKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0
dXJuIGFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkoZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAg
IHJldHVybiBuYXZpZ2F0ZUluNFdheURpcmVjdGlvbihkaXJlY3Rpb24sIGV2ZW50KTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC02NTgsNCAr
NjYxLDE4NiBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0QWN0aXZlKGJvb2wgYWN0CiAgICAg
ICAgIGRpc3BhdGNoRXZlbnRzT25XaW5kb3dBbmRGb2N1c2VkTm9kZShtX2ZvY3VzZWRGcmFtZS0+
ZG9jdW1lbnQoKSwgYWN0aXZlKTsKIH0KIAordm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVl
ZGVkKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0
LCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCkKK3sK
KyAgICBpZiAoIWNhbmRpZGF0ZS5ub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIElnbm9yZSBlbXB0eSBmcmFtZXMKKyAgICBpZiAoY2FuZGlkYXRlLm5vZGUt
PmlzRnJhbWVPd25lckVsZW1lbnQoKSAmJiAhc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVt
ZW50Kj4oY2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gSWdub3JlIG9mZiBzY3JlZW4gY2hpbGQgbm9kZXMgb2YgY29udGFpbmVycyB0aGF0
IGRvIG5vdCBzY3JvbGwgKG92ZXJmbG93OmhpZGRlbikKKyAgICBpZiAoY2FuZGlkYXRlLm5vZGUt
PnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkgIT0gY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9s
bGFibGVCb3gtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpCisgICAgICAgIGlmIChoYXNP
ZmZzY3JlZW5SZWN0KGNhbmRpZGF0ZS5ub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
IGRpc3RhbmNlRGF0YUZvck5vZGUoZGlyZWN0aW9uLCBzdGFydGluZ1JlY3QsIGNhbmRpZGF0ZSk7
CisgICAgaWYgKGNhbmRpZGF0ZS5kaXN0YW5jZSA9PSBtYXhEaXN0YW5jZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9kZSwgZGlyZWN0
aW9uKSAmJiBjYW5kaWRhdGUuYWxpZ25tZW50IDwgRnVsbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGNsb3Nlc3QuaXNOdWxsKCkpIHsKKyAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgaW50ZXJzZWN0aW9uUmVjdCA9
IGludGVyc2VjdGlvbihub2RlUmVjdEluQWJzQ29vcmRzKGNhbmRpZGF0ZS5ub2RlKSwgbm9kZVJl
Y3RJbkFic0Nvb3JkcyhjbG9zZXN0Lm5vZGUpKTsKKyAgICBpZiAoIWludGVyc2VjdGlvblJlY3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIDIgbm9kZXMgYXJlIGludGVyc2VjdGluZywgZG8g
aGl0IHRlc3QgdG8gZmluZCB3aGljaCBub2RlIGluIG9uIHRvcC4KKyAgICAgICAgaW50IHggPSBp
bnRlcnNlY3Rpb25SZWN0LngoKSArIGludGVyc2VjdGlvblJlY3Qud2lkdGgoKSAvIDI7CisgICAg
ICAgIGludCB5ID0gaW50ZXJzZWN0aW9uUmVjdC55KCkgKyBpbnRlcnNlY3Rpb25SZWN0LmhlaWdo
dCgpIC8gMjsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBjYW5kaWRhdGUubm9kZS0+
ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RS
ZXN1bHRBdFBvaW50KEludFBvaW50KHgsIHkpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGlmIChj
YW5kaWRhdGUubm9kZS0+Y29udGFpbnMocmVzdWx0LmlubmVyTm9kZSgpKSkgeworICAgICAgICAg
ICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoY2xvc2VzdC5ub2RlLT5jb250YWlucyhyZXN1bHQuaW5uZXJOb2RlKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjYW5kaWRhdGUuYWxpZ25tZW50
ID09IGNsb3Nlc3QuYWxpZ25tZW50KSB7CisgICAgICAgIGlmIChjYW5kaWRhdGUuZGlzdGFuY2Ug
PCBjbG9zZXN0LmRpc3RhbmNlKQorICAgICAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjYW5kaWRhdGUuYWxpZ25tZW50ID4gY2xv
c2VzdC5hbGlnbm1lbnQpCisgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7Cit9CisKK3ZvaWQg
Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250
YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCit7Cisg
ICAgQVNTRVJUKGNvbnRhaW5lcik7CisgICAgZm9yIChOb2RlKiBub2RlID0gY29udGFpbmVyLT5m
aXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8
IGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgbm9kZSkpID8gbm9kZS0+dHJhdmVyc2VO
ZXh0U2libGluZyhjb250YWluZXIpIDogbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShjb250YWluZXIp
KSB7CisgICAgICAgIGlmICgoIWZvY3VzZWRGcmFtZSgpIHx8ICFmb2N1c2VkRnJhbWUoKS0+ZG9j
dW1lbnQoKSB8fCBub2RlICE9IGZvY3VzZWRGcmFtZSgpLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpKSAmJiAobm9kZS0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgfHwgbm9kZS0+aXNGcmFt
ZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgbm9kZSkp
KSB7CisgICAgICAgICAgICBGb2N1c0NhbmRpZGF0ZSBjYW5kaWRhdGUobm9kZSk7CisgICAgICAg
ICAgICBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCA9IGNvbnRhaW5lcjsKKyAgICAg
ICAgICAgIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoZGlyZWN0aW9uLCBzdGFydGluZ1Jl
Y3QsIGNhbmRpZGF0ZSwgY2xvc2VzdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRm9j
dXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3Qg
SW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQoreworICAgIGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXItPmRvY3Vt
ZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBzdGFydGluZyByZWN0
IGlzIHRoZSByZWN0IG9mIHRoZSBmb2N1c2VkIG5vZGUsIGluIGRvY3VtZW50IGNvb3JkaW5hdGVz
LgorICAgIC8vIENvbXBvc2UgYSB2aXJ0dWFsIHN0YXJ0aW5nIHJlY3QgaWYgdGhlcmUgaXMgbm8g
Zm9jdXNlZCBub2RlIG9yIGlmIGl0IGlzIG9mZiBzY3JlZW4uCisgICAgLy8gVGhlIHZpcnR1YWwg
cmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIG9yIGZyYW1lLiBXZSBzZWxlY3Qgd2hp
Y2gKKyAgICAvLyBlZGdlIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0
aW9uLgorICAgIEludFJlY3QgbmV3U3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0OworCisgICAg
aWYgKHN0YXJ0aW5nUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbmV3U3RhcnRpbmdSZWN0ID0g
bm9kZVJlY3RJbkFic0Nvb3Jkcyhjb250YWluZXIpOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlv
bikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIG5ld1N0
YXJ0aW5nUmVjdC5zZXRYKG5ld1N0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgICAgIG5l
d1N0YXJ0aW5nUmVjdC5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0WShu
ZXdTdGFydGluZ1JlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgbmV3U3RhcnRpbmdSZWN0LnNl
dEhlaWdodCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uUmlnaHQ6CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0V2lkdGgoMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAg
ICAgICBuZXdTdGFydGluZ1JlY3Quc2V0SGVpZ2h0KDApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgbm9kZSB3aXRoaW4gY3VycmVu
dCBjb250YWluZXIgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbmF2aWdhdGlvbi4KKyAgICBGb2N1
c0NhbmRpZGF0ZSBmb2N1c0NhbmRpZGF0ZTsKKyAgICBmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRh
aW5lcihjb250YWluZXIsIG5ld1N0YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBldmVudCwgZm9jdXND
YW5kaWRhdGUpOworCisgICAgaWYgKGZvY3VzQ2FuZGlkYXRlLmlzTnVsbCgpKSB7CisgICAgICAg
IGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGNvbnRhaW5lcikpIHsKKyAgICAg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZm9jdXMsIHNjcm9sbCBpZiBwb3NzaWJsZS4KKyAgICAgICAg
ICAgIHNjcm9sbEluRGlyZWN0aW9uKGNvbnRhaW5lciwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFJldHVybiBmYWxzZSB3aWxsIGNh
dXNlIGEgcmUtdHJ5LCBza2lwcGluZyB0aGlzIGNvbnRhaW5lci4KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBpZiAoZm9jdXNDYW5kaWRhdGUubm9kZS0+aXNGcmFtZU93bmVyRWxl
bWVudCgpKSB7CisgICAgICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0KGZvY3VzQ2FuZGlkYXRlLm5v
ZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzQ2FuZGlk
YXRlLm5vZGUtPmRvY3VtZW50KCktPnZpZXcoKS0+ZnJhbWUoKTsKKyAgICAgICAgICAgIHNjcm9s
bEluRGlyZWN0aW9uKGZyYW1lLT5kb2N1bWVudCgpLCBkaXJlY3Rpb24sIGZvY3VzQ2FuZGlkYXRl
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIE5hdmln
YXRlIGludG8gYSBuZXcgZnJhbWUuCisgICAgICAgIEludFJlY3QgcmVjdDsKKyAgICAgICAgTm9k
ZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNl
ZE5vZGUoKTsKKyAgICAgICAgaWYgKGZvY3VzZWROb2RlICYmICFoYXNPZmZzY3JlZW5SZWN0KGZv
Y3VzZWROb2RlKSkKKyAgICAgICAgICAgIHJlY3QgPSBub2RlUmVjdEluQWJzQ29vcmRzKGZvY3Vz
ZWROb2RlLCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVy
RWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKSk7CisgICAgICAg
IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUp
LT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CisgICAgICAgIGlmICghbmF2aWdhdGVJbkNvbnRhaW5lcihzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5ub2RlKS0+Y29udGVudEZy
YW1lKCktPmRvY3VtZW50KCksIHJlY3QsIGRpcmVjdGlvbiwgZXZlbnQpKQorICAgICAgICAgICAg
Ly8gVGhlIG5ldyBmcmFtZSBoYWQgbm90aGluZyBpbnRlcmVzdGluZywgc2tpcCBwYXN0IGl0IGFu
ZCB0cnkgYWdhaW4uCisgICAgICAgICAgICByZXR1cm4gbmF2aWdhdGVJbkNvbnRhaW5lcihjb250
YWluZXIsIG5vZGVSZWN0SW5BYnNDb29yZHMoZm9jdXNDYW5kaWRhdGUubm9kZSwgdHJ1ZSksIGRp
cmVjdGlvbiwgZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNh
blNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUubm9kZSkpIHsKKyAg
ICAgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9u
KSkgeworICAgICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZm9jdXNDYW5kaWRhdGUubm9kZSwg
ZGlyZWN0aW9uLCBmb2N1c0NhbmRpZGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBOYXZpZ2F0ZSBpbnRvIGEgbmV3IHNjcm9sbGFibGUgY29udGFp
bmVyLgorICAgICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIE5vZGUqIGZvY3VzZWROb2RlID0g
Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CisgICAgICAg
IGlmIChmb2N1c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpCisgICAg
ICAgICAgICByZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3Jkcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7Cisg
ICAgICAgIHJldHVybiBuYXZpZ2F0ZUluQ29udGFpbmVyKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHJl
Y3QsIGRpcmVjdGlvbiwgZXZlbnQpOworICAgIH0KKyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChm
b2N1c0NhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24pKSB7CisgICAgICAgIE5vZGUqIGNvbnRhaW5l
ciA9IGZvY3VzQ2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3g7CisgICAgICAgIHNjcm9s
bEluRGlyZWN0aW9uKGNvbnRhaW5lciwgZGlyZWN0aW9uLCBmb2N1c0NhbmRpZGF0ZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFdlIGZvdW5kIGEgbmV3IGZvY3VzIG5v
ZGUsIG5hdmlnYXRlIHRvIGl0LgorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4oZm9jdXNDYW5kaWRhdGUubm9kZSk7CisgICAgQVNTRVJUKGVsZW1lbnQpOworCisg
ICAgZWxlbWVudC0+Zm9jdXMoZmFsc2UpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZv
Y3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGly
ZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBGcmFtZSogY3VyRnJhbWUgPSBm
b2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBBU1NFUlQoY3VyRnJhbWUpOworCisgICAgRG9jdW1l
bnQqIGZvY3VzZWREb2N1bWVudCA9IGN1ckZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZm9j
dXNlZERvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOb2RlKiBmb2N1c2Vk
Tm9kZSA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNlZE5vZGUoKTsKKyAgICBOb2RlKiBjb250YWlu
ZXIgPSBmb2N1c2VkRG9jdW1lbnQ7CisKKyAgICAvLyBGaWd1cmUgb3V0IHRoZSBzdGFydGluZyBy
ZWN0LgorICAgIEludFJlY3Qgc3RhcnRpbmdSZWN0OworICAgIGlmIChmb2N1c2VkTm9kZSAmJiAh
aGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpIHsKKyAgICAgICAgY29udGFpbmVyID0gc2Ny
b2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNl
ZE5vZGUpOworICAgICAgICBzdGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJzQ29vcmRzKGZvY3Vz
ZWROb2RlLCB0cnVlKTsKKyAgICB9CisKKyAgICBib29sIGNvbnN1bWVkID0gZmFsc2U7CisgICAg
ZG8geworICAgICAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250YWluZXIpLT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgY29uc3VtZWQgPSBuYXZpZ2F0ZUluQ29udGFp
bmVyKGNvbnRhaW5lciwgc3RhcnRpbmdSZWN0LCBkaXJlY3Rpb24sIGV2ZW50KTsKKyAgICAgICAg
c3RhcnRpbmdSZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3Jkcyhjb250YWluZXIsIHRydWUpOworICAg
ICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVBbmREaXJlY3Rp
b24oZGlyZWN0aW9uLCBjb250YWluZXIpOworICAgIH0gd2hpbGUgKCFjb25zdW1lZCAmJiBjb250
YWluZXIpOworICAgIHJldHVybiBjb25zdW1lZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAkocmV2aXNpb24gNzE1NTMpCisrKyBXZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZv
Y3VzQ2FuZGlkYXRlJiBwYXJlbnRDYW5kaWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKICAgICB2
b2lkIGRlZXBGaW5kRm9jdXNhYmxlTm9kZUluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgTm9k
ZSogZm9jdXNlZCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0NhbmRpZGF0
ZSYpOwogCisgICAgYm9vbCBuYXZpZ2F0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29u
c3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCop
OworICAgIGJvb2wgbmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24sIEtleWJv
YXJkRXZlbnQqKTsKKyAgICB2b2lkIGZpbmRGb2N1c0NhbmRpZGF0ZUluQ29udGFpbmVyKE5vZGUq
IGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwg
S2V5Ym9hcmRFdmVudCosIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KTsKKwogICAgIFBhZ2UqIG1f
cGFnZTsKICAgICBSZWZQdHI8RnJhbWU+IG1fZm9jdXNlZEZyYW1lOwogICAgIGJvb2wgbV9pc0Fj
dGl2ZTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNzE1NTMp
CisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MywxMiArNDMsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgbG9uZyBsb25n
IHNwYXRpYWxEaXN0YW5jZShGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmKTsKIHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRvUm9vdERvY3VtZW50
KFJlbmRlck9iamVjdCopOwotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3Rz
KEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGlj
IFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKTsKIHN0YXRp
YyBib29sIGFyZVJlY3RzRnVsbHlBbGlnbmVkKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIGJvb2wgYXJlUmVjdHNQYXJ0aWFsbHlBbGlnbmVk
KEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGlj
IGJvb2wgYXJlUmVjdHNUb29GYXJBcGFydChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0
IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNp
emUmIHZpZXdTaXplKTsKIHN0YXRpYyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0
aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIHZvaWQgZGVmbGF0
ZUlmT3ZlcmxhcHBlZChJbnRSZWN0JiwgSW50UmVjdCYpOwogc3RhdGljIGJvb2wgY2hlY2tOZWdh
dGl2ZUNvb3Jkc0Zvck5vZGUoTm9kZSosIGNvbnN0IEludFJlY3QmKTsKK3N0YXRpYyB2b2lkIGVu
dHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNv
bnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgY29uc3QgSW50UmVjdCYgcG90ZW50aWFsUmVjdCwg
SW50UG9pbnQmIGV4aXRQb2ludCwgSW50UG9pbnQmIGVudHJ5UG9pbnQpOwogCiBib29sIGlzU3Bh
dGlhbE5hdmlnYXRpb25FbmFibGVkKGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKQEAgLTEwMiw3ICsx
MDQsOCBAQCB2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gCiAgICAgLy8g
VGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIG5vZGVzIGlzIG5vdCB0byBiZSBjb25zaWRlcmVkIGFs
b25lIHdoZW4gZXZhbHVhdGluZy9sb29raW5nCiAgICAgLy8gZm9yIHRoZSBiZXN0IGZvY3VzIGNh
bmRpZGF0ZSBub2RlLiBBbGlnbm1lbnQgb2YgcmVjdHMgY2FuIGJlIGFsc28gYSBnb29kIHBvaW50
IHRvIGJlCiAgICAgLy8gY29uc2lkZXJlZCBpbiBvcmRlciB0byBtYWtlIHRoZSBhbGdvcml0aG0g
dG8gYmVoYXZpb3IgaW4gYSBtb3JlIGludHVpdGl2ZSB3YXkuCi0gICAgY2FuZGlkYXRlLmFsaWdu
bWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCk7
CisgICAgSW50U2l6ZSB2aWV3U2l6ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdl
KCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKKyAg
ICBjYW5kaWRhdGUuYWxpZ25tZW50ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBjdXJS
ZWN0LCB0YXJnZXRSZWN0LCB2aWV3U2l6ZSk7CiAgICAgY2FuZGlkYXRlLmRpc3RhbmNlID0gc3Bh
dGlhbERpc3RhbmNlKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCk7CiB9CiAKQEAgLTEz
Niw4ICsxMzksMTIgQEAgc3RhdGljIEludFJlY3QgcmVuZGVyUmVjdFJlbGF0aXZlVG9Sb290RAog
ICAgIHJldHVybiByZWN0OwogfQogCi1zdGF0aWMgUmVjdHNBbGlnbm1lbnQgYWxpZ25tZW50Rm9y
UmVjdHMoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQorc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVu
dEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVj
dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50U2l6ZSYgdmlld1NpemUpCiB7
CisgICAgLy8gSWYgd2UgZm91bmQgYSBub2RlIGluIGZ1bGwgYWxpZ25tZW50LCBidXQgaXQgaXMg
dG9vIGZhciBhd2F5LCBpZ25vcmUgaXQuCisgICAgaWYgKGFyZVJlY3RzVG9vRmFyQXBhcnQoZGly
ZWN0aW9uLCBjdXJSZWN0LCB0YXJnZXRSZWN0LCB2aWV3U2l6ZSkpCisgICAgICAgIHJldHVybiBO
b25lOworCiAgICAgaWYgKGFyZVJlY3RzRnVsbHlBbGlnbmVkKGRpcmVjdGlvbiwgY3VyUmVjdCwg
dGFyZ2V0UmVjdCkpCiAgICAgICAgIHJldHVybiBGdWxsOwogCkBAIC0yNzcsNiArMjg0LDIzIEBA
IHN0YXRpYyBib29sIGFyZVJlY3RzUGFydGlhbGx5QWxpZ25lZChGb2MKICAgICAgICAgICAgIHx8
IChiRW5kID49IGFTdGFydCAmJiBiRW5kIDw9IGFFbmQpKTsKIH0KIAorc3RhdGljIGJvb2wgYXJl
UmVjdHNUb29GYXJBcGFydChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3Qm
IGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNpemUmIHZpZXdT
aXplKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkxlZnQ6CisgICAgICAgIHJldHVybiBjdXJSZWN0LngoKSA8IHRhcmdldFJlY3QucmlnaHQoKSB8
fCBjdXJSZWN0LngoKSAtIHRhcmdldFJlY3QucmlnaHQoKSA+IHZpZXdTaXplLndpZHRoKCk7Cisg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54
KCkgPCBjdXJSZWN0LnJpZ2h0KCkgfHwgdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAg
cmV0dXJuIGN1clJlY3QueSgpIDwgdGFyZ2V0UmVjdC5ib3R0b20oKSB8fCBjdXJSZWN0LnkoKSAt
IHRhcmdldFJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKKyAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uRG93bjoKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIDwgY3VyUmVjdC5i
b3R0b20oKSB8fCB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5o
ZWlnaHQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCiAvLyBSZXR1cm4gdHJ1ZSBpZiByZWN0IHxh
fCBpcyBiZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9vbCBiZWxv
dyhjb25zdCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewpAQCAtNDI1LDcgKzQ0OSw3
IEBAIHN0YXRpYyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZvY3VzRGlyZWMKIC8vIENoZWNrcyBp
ZiB8bm9kZXwgaXMgb2Zmc2NyZWVuIHRoZSB2aXNpYmxlIGFyZWEgKHZpZXdwb3J0KSBvZiBpdHMg
Y29udGFpbmVyCiAvLyBkb2N1bWVudC4gSW4gY2FzZSBpdCBpcywgb25lIGNhbiBzY3JvbGwgaW4g
ZGlyZWN0aW9uIG9yIHRha2UgYW55IGRpZmZlcmVudAogLy8gZGVzaXJlZCBhY3Rpb24gbGF0ZXIg
b24uCi1ib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSkKK2Jvb2wgaGFzT2Zmc2NyZWVu
UmVjdChOb2RlKiBub2RlLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgLy8gR2V0
IHRoZSBGcmFtZVZpZXcgaW4gd2hpY2ggfG5vZGV8IGlzICh3aGljaCBtZWFucyB0aGUgY3VycmVu
dCB2aWV3cG9ydCBpZiB8bm9kZXwKICAgICAvLyBpcyBub3QgaW4gYW4gaW5uZXIgZG9jdW1lbnQp
LCBzbyB3ZSBjYW4gY2hlY2sgaWYgaXRzIGNvbnRlbnQgcmVjdCBpcyB2aXNpYmxlCkBAIC00MzUs
NiArNDU5LDI2IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgY29udGFpbmVyVmlld3BvcnRSZWN0ID0gZnJhbWVW
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAvLyBXZSB3YW50IHRvIHNlbGVjdCBhIG5v
ZGUgaWYgaXQgaXMgY3VycmVudGx5IG9mZiBzY3JlZW4sIGJ1dCB3aWxsIGJlCisgICAgLy8gZXhw
b3NlZCBhZnRlciB3ZSBzY3JvbGwuIEFkanVzdCB0aGUgdmlld3BvcnQgdG8gcG9zdC1zY3JvbGxp
bmcgcG9zaXRpb24uCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uTGVmdDoKKyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldFgoY29udGFpbmVy
Vmlld3BvcnRSZWN0LngoKSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAg
ICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRXaWR0aChjb250YWluZXJWaWV3cG9ydFJlY3Qu
d2lkdGgoKSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgY29udGFpbmVyVmlld3Bv
cnRSZWN0LnNldFdpZHRoKGNvbnRhaW5lclZpZXdwb3J0UmVjdC53aWR0aCgpICsgU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvblVwOgorICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0WShjb250YWluZXJW
aWV3cG9ydFJlY3QueSgpIC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAg
ICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldEhlaWdodChjb250YWluZXJWaWV3cG9ydFJlY3Qu
aGVpZ2h0KCkgKyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgY29udGFpbmVyVmlld3Bv
cnRSZWN0LnNldEhlaWdodChjb250YWluZXJWaWV3cG9ydFJlY3QuaGVpZ2h0KCkgKyBTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlciA9IG5vZGUt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXIpCkBAIC00NDcsMzYgKzQ5MSw3NSBAQCBib29s
IGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSkKICAgICByZXR1cm4gIWNvbnRhaW5lclZpZXdw
b3J0UmVjdC5pbnRlcnNlY3RzKHJlY3QpOwogfQogCi0vLyBJbiBhIGJvdHRvbS11cCB3YXksIHRo
aXMgbWV0aG9kIHRyaWVzIHRvIHNjcm9sbCB8ZnJhbWV8IGluIGEgZ2l2ZW4gZGlyZWN0aW9uCi0v
LyB8ZGlyZWN0aW9ufCwgZ29pbmcgdXAgaW4gdGhlIGZyYW1lIHRyZWUgaGllcmFyY2h5IGluIGNh
c2UgaXQgZG9lcyBub3Qgc3VjY2VlZC4KLWJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZy
YW1lLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5k
aWRhdGUpCitib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhbmRpZGF0ZSYpCiB7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChmcmFtZSAmJiBjYW5TY3JvbGxJbkRp
cmVjdGlvbihkaXJlY3Rpb24sIGZyYW1lLT5kb2N1bWVudCgpKSk7CiAKLSAgICBTY3JvbGxEaXJl
Y3Rpb24gc2Nyb2xsRGlyZWN0aW9uOworICAgIGlmIChmcmFtZSAmJiBjYW5TY3JvbGxJbkRpcmVj
dGlvbihkaXJlY3Rpb24sIGZyYW1lLT5kb2N1bWVudCgpKSkgeworICAgICAgICBpbnQgZHggPSAw
OworICAgICAgICBpbnQgZHkgPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAg
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIGR4ID0gLSBTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgZHggPSBTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvblVwOgorICAgICAgICAgICAgZHkgPSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93
bjoKKyAgICAgICAgICAgIGR5ID0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQogCi0gICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xs
TGVmdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgotICAg
ICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGb2N1c0RpcmVjdGlvblVwOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxV
cDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAg
IHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xs
QnkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KIAotICAgIGlmICghY2FuZGlkYXRlLmlzTnVsbCgpICYmIGlzU2Nyb2xs
YWJsZUNvbnRhaW5lck5vZGUoY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3gpKQotICAg
ICAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShzY3Jv
bGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVC
b3gpOworYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRhdGUmKQoreworICAgIGlmIChjb250YWlu
ZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxJbkRpcmVjdGlvbihz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRhaW5lciktPmZyYW1lKCksIGRpcmVjdGlvbiwgRm9j
dXNDYW5kaWRhdGUoKSk7CisKKyAgICBpZiAoIWNvbnRhaW5lci0+cmVuZGVyQm94KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb250YWluZXIgJiYgY2FuU2Nyb2xsSW5EaXJl
Y3Rpb24oZGlyZWN0aW9uLCBjb250YWluZXIpKSB7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsUmVj
dCA9IGNvbnRhaW5lci0+Z2V0UmVjdCgpOworICAgICAgICBzY3JvbGxSZWN0Lm1vdmUoY29udGFp
bmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwgY29udGFpbmVyLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpKTsKKyAgICAgICAgc2Nyb2xsUmVj
dC5zZXRXaWR0aChzY3JvbGxSZWN0LndpZHRoKCkgLSAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSArIGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+Ym9yZGVyUmlnaHRXaWR0aCgpKSk7CisgICAgICAgIHNjcm9sbFJlY3Quc2V0SGVpZ2h0KHNj
cm9sbFJlY3QuaGVpZ2h0KCkgLSAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3Jk
ZXJUb3BXaWR0aCgpICsgY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0
b21XaWR0aCgpKSk7CisgICAgICAgIGludCBkeCA9IDA7CisgICAgICAgIGludCBkeSA9IDA7Cisg
ICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25M
ZWZ0OgorICAgICAgICAgICAgZHggPSAtIG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVw
KCksIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgQVNT
RVJUKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdpZHRoKCkgPiAoY29udGFpbmVyLT5y
ZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50
V2lkdGgoKSkpOworICAgICAgICAgICAgZHggPSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxXaWR0aCgpIC0gKGNvbnRhaW5l
ci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNs
aWVudFdpZHRoKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6CisgICAgICAgICAgICBkeSA9IC0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICAgICAg
QVNTRVJUKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbEhlaWdodCgpIC0gKGNvbnRhaW5l
ci0+cmVuZGVyQm94KCktPnNjcm9sbFRvcCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xp
ZW50SGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGR5ID0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVpZ2h0KCkgLSAoY29u
dGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXItPnJlbmRlckJveCgp
LT5jbGllbnRIZWlnaHQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQogCi0gICAgcmV0
dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0
aW9uLCBTY3JvbGxCeUxpbmUpOworICAgICAgICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNs
b3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGR4LCBkeSk7CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBzY3JvbGxJbnRv
VmlldyhFbGVtZW50KiBlbGVtZW50KQpAQCAtNTM0LDcgKzYxNyw3IEBAIHN0YXRpYyBib29sIGNo
ZWNrTmVnYXRpdmVDb29yZHNGb3JOb2RlKE4KICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZDsKIH0K
IAotYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKE5vZGUqIG5vZGUpCitib29sIGlzU2Ny
b2xsYWJsZUNvbnRhaW5lck5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU2Nyw0ICs2NTAsMjM3IEBAIGJvb2wgaXNOb2Rl
RGVlcERlc2NlbmRhbnRPZkRvY3VtZW50KE5vZGUKICAgICByZXR1cm4gZGVzY2VuZGFudDsKIH0K
IAorTm9kZSogc2Nyb2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7Cisg
ICAgTm9kZSogcGFyZW50ID0gbm9kZTsKKyAgICBkbyB7CisgICAgICAgIGlmIChwYXJlbnQtPmlz
RG9jdW1lbnROb2RlKCkpCisgICAgICAgICAgICBwYXJlbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KHBhcmVudCktPmRvY3VtZW50KCktPmZyYW1lKCktPm93bmVyRWxlbWVudCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICB9
IHdoaWxlIChwYXJlbnQgJiYgIWNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgcGFyZW50
KSAmJiAhcGFyZW50LT5pc0RvY3VtZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gcGFyZW50OworfQor
Citib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgTm9kZSogY29udGFpbmVyKQoreworICAgIEFTU0VSVChjb250YWluZXIpOworICAgIGlmIChj
b250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBjYW5TY3JvbGxJbkRp
cmVjdGlvbihkaXJlY3Rpb24sIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50Kj4oY29udGFpbmVy
KS0+ZnJhbWUoKSk7CisKKyAgICBpZiAoIWNvbnRhaW5lci0+cmVuZGVyQm94KCkgfHwgIWNvbnRh
aW5lci0+cmVuZGVyQm94KCktPmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gY29udGFpbmVyLT5yZW5kZXJC
b3goKS0+c2Nyb2xsTGVmdCgpID4gMDsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAg
ICAgIHJldHVybiBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSA+IDA7CisgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gY29udGFpbmVyLT5yZW5k
ZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lk
dGgoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdpZHRoKCk7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHJldHVybiBjb250YWluZXItPnJlbmRlckJveCgp
LT5zY3JvbGxUb3AoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpIDwg
Y29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9u
LCBjb25zdCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZS0+dmlldygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25MZWZ0
IHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblJpZ2h0KSAmJiAhZnJhbWUtPnZpZXcoKS0+
aG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKChk
aXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rp
b25Eb3duKSAmJiAhZnJhbWUtPnZpZXcoKS0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEludFNpemUgc2l6ZSA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRz
U2l6ZSgpOworICAgIEludFNpemUgb2Zmc2V0ID0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0
KCk7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0
KHRydWUpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uTGVmdDoKKyAgICAgICAgcmV0dXJuIG9mZnNldC53aWR0aCgpID4gMDsKKyAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBvZmZzZXQuaGVpZ2h0KCkgPiAwOworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJuIHJlY3Qud2lkdGgoKSAr
IG9mZnNldC53aWR0aCgpIDwgc2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25E
b3duOgorICAgICAgICByZXR1cm4gcmVjdC5oZWlnaHQoKSArIG9mZnNldC5oZWlnaHQoKSA8IHNp
emUuaGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworSW50UmVjdCBub2RlUmVjdEluQWJzQ29v
cmRzKE5vZGUqIG5vZGUsIGJvb2wgaWdub3JlQm9yZGVyKQoreworICAgIEFTU0VSVChub2RlICYm
IG5vZGUtPnJlbmRlcmVyKCkpOworCisgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCisg
ICAgICAgIHJldHVybiBmcmFtZVJlY3RJbkFic0Nvb3JkcyhzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KG5vZGUpLT5mcmFtZSgpKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBub2RlLT5nZXRSZWN0KCk7CisK
KyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZyYW1lLT5vd25lckVsZW1lbnQoKSkp
IHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUoZWxlbWVudC0+
b2Zmc2V0TGVmdCgpLCBlbGVtZW50LT5vZmZzZXRUb3AoKSk7CisgICAgICAgICAgICB9IHdoaWxl
ICgoZWxlbWVudCA9IGVsZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7CisgICAgICAgICAgICByZWN0
Lm1vdmUoKC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gRm9yIGF1dGhvcnMgdGhhdCB1c2UgYm9yZGVyIGluZHRlYWQgb2Ygb3V0bGlu
ZSBpbiB0aGVpciBDU1MsIHdlIGNvbXBlbnNhdGUgYnkgaWdub3JpbmcgdGhlIGJvcmRlciB3aGVu
IGNhbGN1bGF0aW5nCisgICAgLy8gdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgZWxlbWVudC4KKyAg
ICBpZiAoaWdub3JlQm9yZGVyKSB7CisgICAgICAgIHJlY3QubW92ZShub2RlLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
Ym9yZGVyVG9wV2lkdGgoKSk7CisgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0g
bm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBub2RlLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCkpOworICAgICAgICByZWN0LnNldEhl
aWdodChyZWN0LmhlaWdodCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9w
V2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCkp
OworICAgIH0KKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBmcmFtZVJlY3RJbkFic0Nv
b3JkcyhGcmFtZSogZnJhbWUpCit7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+
dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAgICBmb3IgKDsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWUtPm93bmVyRWxlbWVudCgpKSkgeworICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgIHJlY3QubW92ZShlbGVtZW50LT5vZmZzZXRMZWZ0KCksIGVs
ZW1lbnQtPm9mZnNldFRvcCgpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKChlbGVtZW50ID0gZWxl
bWVudC0+b2Zmc2V0UGFyZW50KCkpKTsKKyAgICAgICAgICAgIHJlY3QubW92ZSgoLWZyYW1lLT52
aWV3KCktPnNjcm9sbE9mZnNldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJl
Y3Q7Cit9CisKKy8vIEV4aXQgcG9pbnQgaXMgdGhlIGNsb3Nlc3QgcG9pbnQgaW4gdGhlIHN0YXJ0
aW5nUmVjdCwgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisv
LyBFbnRyeSBwb2ludCBpcyB0aGUgY2xvc2VzdCBwb2ludCBpbiB0aGUgY2FuZGlkYXRlIG5vZGUs
IGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uLgordm9pZCBlbnRy
eUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIGNvbnN0IEludFJlY3QmIHBvdGVudGlhbFJlY3QsIElu
dFBvaW50JiBleGl0UG9pbnQsIEludFBvaW50JiBlbnRyeVBvaW50KQoreworICAgIHN3aXRjaCAo
ZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGV4aXRQ
b2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFgocG90
ZW50aWFsUmVjdC5yaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVj
dGlvblVwOgorICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKKyAgICAg
ICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGV4aXRQb2ludC5zZXRY
KHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlh
bFJlY3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246
CisgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAg
IGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHN3
aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBpZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBw
b3RlbnRpYWxSZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0
LnkoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC5ib3R0b20o
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoYmVsb3cocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0
KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsK
KyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3RhcnRpbmdSZWN0Lnko
KSwgcG90ZW50aWFsUmVjdC55KCkpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShleGl0
UG9pbnQueSgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIGlmIChyaWdo
dE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkpIHsKKyAgICAgICAgICAgIGV4aXRQb2lu
dC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBv
dGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPZihwb3RlbnRp
YWxSZWN0LCBzdGFydGluZ1JlY3QpKSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFy
dGluZ1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFs
UmVjdC54KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFgo
bWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgpKSk7CisgICAgICAgICAgICBl
bnRyeVBvaW50LnNldFgoZXhpdFBvaW50LngoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCit7Cisg
ICAgaWYgKGNhbmRpZGF0ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghY2Fu
ZGlkYXRlLm5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IG5v
ZGVSZWN0ID0gbm9kZVJlY3RJbkFic0Nvb3JkcyhjYW5kaWRhdGUubm9kZSwgdHJ1ZSk7CisKKyAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAg
ICAgICBpZiAobm9kZVJlY3QucmlnaHQoKSA+IHN0YXJ0aW5nUmVjdC54KCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAg
ICAgICAgaWYgKG5vZGVSZWN0LmJvdHRvbSgpID4gc3RhcnRpbmdSZWN0LnkoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0
OgorICAgICAgICBpZiAobm9kZVJlY3QueCgpIDwgc3RhcnRpbmdSZWN0LnJpZ2h0KCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25E
b3duOgorICAgICAgICBpZiAobm9kZVJlY3QueSgpIDwgc3RhcnRpbmdSZWN0LmJvdHRvbSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBJbnRQb2ludCBleGl0UG9pbnQ7
CisgICAgSW50UG9pbnQgZW50cnlQb2ludDsKKyAgICBpbnQgc2FtZUF4aXNEaXN0ID0gMDsKKyAg
ICBpbnQgb3RoZXJBeGlzRGlzdCA9IDA7CisgICAgZW50cnlBbmRFeGl0UG9pbnRzRm9yRGlyZWN0
aW9uKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBub2RlUmVjdCwgZXhpdFBvaW50LCBlbnRyeVBv
aW50KTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkxlZnQ6CisgICAgICAgIHNhbWVBeGlzRGlzdCA9IGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50
LngoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdCA9IGFicyhleGl0UG9pbnQueSgpIC0gZW50cnlQ
b2ludC55KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6Cisg
ICAgICAgIHNhbWVBeGlzRGlzdCA9IGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKTsKKyAg
ICAgICAgb3RoZXJBeGlzRGlzdCA9IGFicyhleGl0UG9pbnQueCgpIC0gZW50cnlQb2ludC54KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAg
IHNhbWVBeGlzRGlzdCA9IGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKTsKKyAgICAgICAg
b3RoZXJBeGlzRGlzdCA9IGFicyhlbnRyeVBvaW50LnkoKSAtIGV4aXRQb2ludC55KCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgc2FtZUF4
aXNEaXN0ID0gZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpOworICAgICAgICBvdGhlckF4
aXNEaXN0ID0gYWJzKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIGludCB4ID0gKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSkgKiAoZW50cnlQ
b2ludC54KCkgLSBleGl0UG9pbnQueCgpKTsKKyAgICBpbnQgeSA9IChlbnRyeVBvaW50LnkoKSAt
IGV4aXRQb2ludC55KCkpICogKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7CisKKyAg
ICBmbG9hdCBldWNsaWRpYW5EaXN0YW5jZSA9IHNxcnQoKHggKyB5KSAqIDEuMGYpOworCisgICAg
Ly8gTG9vc2VseSBiYXNlZCBvbiBodHRwOi8vd3d3LnczLm9yZy9UUi9XSUNELyNmb2N1cy1oYW5k
bGluZworICAgIC8vIGRmID0gZG90RGlzdCArIGR4ICsgZHkgKyAyICogKHhkaXNwbGFjZW1lbnQg
KyB5ZGlzcGxhY2VtZW50KSAtIHNxcnQoT3ZlcmxhcCkKKworICAgIGZsb2F0IGRpc3RhbmNlID0g
ZXVjbGlkaWFuRGlzdGFuY2UgKyBzYW1lQXhpc0Rpc3QgKyAyICogb3RoZXJBeGlzRGlzdDsKKyAg
ICBjYW5kaWRhdGUuZGlzdGFuY2UgPSByb3VuZGYoZGlzdGFuY2UpOworICAgIEludFNpemUgdmll
d1NpemUgPSBjYW5kaWRhdGUubm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+
dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7CisgICAgY2FuZGlkYXRlLmFsaWdu
bWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBub2RlUmVj
dCwgdmlld1NpemUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU3Bh
dGlhbE5hdmlnYXRpb24uaAkocmV2aXNpb24gNzE1NTMpCisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlh
bE5hdmlnYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDExICsxMzEsMTggQEAgc3RydWN0
IEZvY3VzQ2FuZGlkYXRlIHsKIAogdm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbiwgTm9kZSogc3RhcnQsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpOwog
Ym9vbCBzY3JvbGxJbkRpcmVjdGlvbihGcmFtZSosIEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGb2N1
c0NhbmRpZGF0ZSYgY2FuZGlkYXRlID0gRm9jdXNDYW5kaWRhdGUoKSk7Citib29sIHNjcm9sbElu
RGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2Fu
ZGlkYXRlJiBjYW5kaWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKIHZvaWQgc2Nyb2xsSW50b1Zp
ZXcoRWxlbWVudCopOwotYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqKTsKK2Jvb2wgaGFzT2Zm
c2NyZWVuUmVjdChOb2RlKiwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gRm9jdXNEaXJlY3Rp
b25Ob25lKTsKIGJvb2wgaXNJblJvb3REb2N1bWVudChOb2RlKik7Ci1ib29sIGlzU2Nyb2xsYWJs
ZUNvbnRhaW5lck5vZGUoTm9kZSopOworYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKGNv
bnN0IE5vZGUqKTsKIGJvb2wgaXNOb2RlRGVlcERlc2NlbmRhbnRPZkRvY3VtZW50KE5vZGUqLCBE
b2N1bWVudCopOworTm9kZSogc2Nyb2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0
aW9uKEZvY3VzRGlyZWN0aW9uLCBOb2RlKiBub2RlKTsKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rp
b24oRm9jdXNEaXJlY3Rpb24sIGNvbnN0IE5vZGUqIGNvbnRhaW5lcik7Citib29sIGNhblNjcm9s
bEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGcmFtZSopOworSW50UmVjdCBub2Rl
UmVjdEluQWJzQ29vcmRzKE5vZGUqLCBib29sIGlnbm9yZUJvcmRlciA9IGZhbHNlKTsKK0ludFJl
Y3QgZnJhbWVSZWN0SW5BYnNDb29yZHMoRnJhbWUqKTsKK3ZvaWQgZGlzdGFuY2VEYXRhRm9yTm9k
ZShGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0NhbmRp
ZGF0ZSYpOwogCiB9IC8vIG5hbXNwYWNlIFdlYkNvcmUKIAoK
</data>
<flag name="review"
          id="64360"
          type_id="1"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73954</attachid>
            <date>2010-11-15 20:01:17 -0800</date>
            <delta_ts>2010-11-16 07:06:35 -0800</delta_ts>
            <desc>Patch - code only</desc>
            <filename>49382_code.patch</filename>
            <type>text/plain</type>
            <size>36737</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjA1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMTAtMTEtMTUgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
CisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1
c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0RpcmVjdGlvbmFsbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6dXBkYXRlRm9jdXNDYW5kaWRhdGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1
c0NvbnRyb2xsZXI6OmZpbmRGb2N1c0NhbmRpZGF0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbkNvbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6Om5hdmlnYXRlSW40V2F5RGlyZWN0aW9uKToKKyAgICAg
ICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6
CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb2N1c0NhbmRpZGF0ZTo6Rm9jdXNDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6ZGlz
dGFuY2VEYXRhRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjphbGlnbm1lbnRGb3JSZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjphcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwYXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6Omhhc09mZnNjcmVlblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2Ny
b2xsSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxhYmxlQ29udGFpbmVy
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVB
bmREaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2FuU2Nyb2xsSW5EaXJlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6cmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZW50
cnlBbmRFeGl0UG9pbnRzRm9yRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkJlU2Ny
b2xsZWRJbnRvVmlldyk6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5oOgorCiAy
MDEwLTExLTE1ICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiA3MTk2MCkKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRl
ICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC01Nyw2ICs1OSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CitzdGF0aWMgdm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0NhbmRpZGF0ZSYg
Y2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCk7CiBzdGF0aWMgaW5saW5lIHZvaWQg
ZGlzcGF0Y2hFdmVudHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKERvY3VtZW50KiBkb2N1bWVudCwg
Ym9vbCBmb2N1c2VkKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBmb2N1c2VkIG5vZGUgd2Ugc2hv
dWxkIGRpc3BhdGNoIGJsdXIgb24gaXQgYmVmb3JlIHdlIGJsdXIgdGhlIHdpbmRvdy4KQEAgLTE3
NSw3ICsxNzgsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzKEZvY3VzCiAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoK
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0dXJuIGFkdmFuY2VGb2N1
c0RpcmVjdGlvbmFsbHkoZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAgIHJldHVybiBuYXZpZ2F0
ZUluNFdheURpcmVjdGlvbihkaXJlY3Rpb24sIGV2ZW50KTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zMjUsNyArMzI4LDcgQEAgYm9vbCBG
b2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0RpcmVjdAogICAgIC8vIGlmIHxub2RlfCBlbGVt
ZW50IGlzIG5vdCBpbiB0aGUgdmlld3BvcnQuCiAgICAgaWYgKGhhc09mZnNjcmVlblJlY3Qobm9k
ZSkpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpLT5m
cmFtZSgpOwotICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihmcmFtZSwgZGlyZWN0aW9uLCBmb2N1
c0NhbmRpZGF0ZSk7CisgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLCBkaXJlY3Rpb24p
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY1OCw0ICs2NjEsMTg3IEBAIHZv
aWQgRm9jdXNDb250cm9sbGVyOjpzZXRBY3RpdmUoYm9vbCBhY3QKICAgICAgICAgZGlzcGF0Y2hF
dmVudHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKG1fZm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpLCBh
Y3RpdmUpOwogfQogCit2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoRm9jdXNEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlk
YXRlJiBjYW5kaWRhdGUsIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KQoreworICAgIGlmICghY2Fu
ZGlkYXRlLm5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCFjYW5kaWRhdGUubm9kZS0+cmVuZGVyZXIo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIGVtcHR5IGZyYW1lcworICAgIGlm
IChjYW5kaWRhdGUubm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpICYmICFzdGF0aWNfY2FzdDxI
VE1MRnJhbWVPd25lckVsZW1lbnQqPihjYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZ25vcmUgb2ZmIHNjcmVlbiBjaGlsZCBub2RlcyBv
ZiBjb250YWluZXJzIHRoYXQgZG8gbm90IHNjcm9sbCAob3ZlcmZsb3c6aGlkZGVuKQorICAgIGlm
IChoYXNPZmZzY3JlZW5SZWN0KGNhbmRpZGF0ZS5ub2RlKSAmJiAhY2FuQmVTY3JvbGxlZEludG9W
aWV3KGRpcmVjdGlvbiwgY2FuZGlkYXRlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRm9jdXND
YW5kaWRhdGUgY3VycmVudDsKKyAgICBjdXJyZW50LnJlY3QgPSBzdGFydGluZ1JlY3Q7CisgICAg
ZGlzdGFuY2VEYXRhRm9yTm9kZShkaXJlY3Rpb24sIGN1cnJlbnQsIGNhbmRpZGF0ZSk7CisgICAg
aWYgKGNhbmRpZGF0ZS5kaXN0YW5jZSA9PSBtYXhEaXN0YW5jZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9uKSAm
JiBjYW5kaWRhdGUuYWxpZ25tZW50IDwgRnVsbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGNsb3Nlc3QuaXNOdWxsKCkpIHsKKyAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgaW50ZXJzZWN0aW9uUmVjdCA9IGludGVy
c2VjdGlvbihub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjYW5kaWRhdGUubm9kZSwgdHJ1
ZSksIG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGNsb3Nlc3Qubm9kZSwgdHJ1ZSkpOwor
ICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSWYgMiBu
b2RlcyBhcmUgaW50ZXJzZWN0aW5nLCBkbyBoaXQgdGVzdCB0byBmaW5kIHdoaWNoIG5vZGUgaW4g
b24gdG9wLgorICAgICAgICBpbnQgeCA9IGludGVyc2VjdGlvblJlY3QueCgpICsgaW50ZXJzZWN0
aW9uUmVjdC53aWR0aCgpIC8gMjsKKyAgICAgICAgaW50IHkgPSBpbnRlcnNlY3Rpb25SZWN0Lnko
KSArIGludGVyc2VjdGlvblJlY3QuaGVpZ2h0KCkgLyAyOworICAgICAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdCA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQoeCwgeSksIGZh
bHNlLCB0cnVlKTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5jb250YWlucyhyZXN1bHQu
aW5uZXJOb2RlKCkpKSB7CisgICAgICAgICAgICBjbG9zZXN0ID0gY2FuZGlkYXRlOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChjbG9zZXN0Lm5vZGUtPmNvbnRh
aW5zKHJlc3VsdC5pbm5lck5vZGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGNhbmRpZGF0ZS5hbGlnbm1lbnQgPT0gY2xvc2VzdC5hbGlnbm1lbnQpIHsKKyAgICAg
ICAgaWYgKGNhbmRpZGF0ZS5kaXN0YW5jZSA8IGNsb3Nlc3QuZGlzdGFuY2UpCisgICAgICAgICAg
ICBjbG9zZXN0ID0gY2FuZGlkYXRlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGNhbmRpZGF0ZS5hbGlnbm1lbnQgPiBjbG9zZXN0LmFsaWdubWVudCkKKyAgICAgICAgY2xvc2Vz
dCA9IGNhbmRpZGF0ZTsKK30KKwordm9pZCBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c0NhbmRp
ZGF0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdS
ZWN0LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50LCBGb2N1
c0NhbmRpZGF0ZSYgY2xvc2VzdCkKK3sKKyAgICBBU1NFUlQoY29udGFpbmVyKTsKKyAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBjb250YWluZXItPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IChub2Rl
LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9u
LCBub2RlKSkgPyBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnRhaW5lcikgOiBub2RlLT50
cmF2ZXJzZU5leHROb2RlKGNvbnRhaW5lcikpIHsKKyAgICAgICAgaWYgKCghZm9jdXNlZEZyYW1l
KCkgfHwgIWZvY3VzZWRGcmFtZSgpLT5kb2N1bWVudCgpIHx8IG5vZGUgIT0gZm9jdXNlZEZyYW1l
KCktPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkpICYmIChub2RlLT5pc0tleWJvYXJkRm9jdXNh
YmxlKGV2ZW50KSB8fCBub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5E
aXJlY3Rpb24oZGlyZWN0aW9uLCBub2RlKSkpIHsKKyAgICAgICAgICAgIEZvY3VzQ2FuZGlkYXRl
IGNhbmRpZGF0ZShub2RlKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxh
YmxlQm94ID0gY29udGFpbmVyOworICAgICAgICAgICAgdXBkYXRlRm9jdXNDYW5kaWRhdGVJZk5l
ZWRlZChkaXJlY3Rpb24sIHN0YXJ0aW5nUmVjdCwgY2FuZGlkYXRlLCBjbG9zZXN0KTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworYm9vbCBGb2N1c0NvbnRyb2xsZXI6Om5hdmlnYXRlSW5Db250YWlu
ZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFjb250
YWluZXIgfHwgIWNvbnRhaW5lci0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gVGhlIHN0YXJ0aW5nIHJlY3QgaXMgdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgbm9k
ZSwgaW4gZG9jdW1lbnQgY29vcmRpbmF0ZXMuCisgICAgLy8gQ29tcG9zZSBhIHZpcnR1YWwgc3Rh
cnRpbmcgcmVjdCBpZiB0aGVyZSBpcyBubyBmb2N1c2VkIG5vZGUgb3IgaWYgaXQgaXMgb2ZmIHNj
cmVlbi4KKyAgICAvLyBUaGUgdmlydHVhbCByZWN0IGlzIHRoZSBlZGdlIG9mIHRoZSBjb250YWlu
ZXIgb3IgZnJhbWUuIFdlIHNlbGVjdCB3aGljaAorICAgIC8vIGVkZ2UgZGVwZW5kaW5nIG9uIHRo
ZSBkaXJlY3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisgICAgSW50UmVjdCBuZXdTdGFydGluZ1Jl
Y3QgPSBzdGFydGluZ1JlY3Q7CisKKyAgICBpZiAoc3RhcnRpbmdSZWN0LmlzRW1wdHkoKSkgewor
ICAgICAgICBuZXdTdGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhj
b250YWluZXIpOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRYKG5ld1N0
YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRXaWR0
aCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6
CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0WShuZXdTdGFydGluZ1JlY3QuYm90dG9t
KCkpOworICAgICAgICAgICAgbmV3U3RhcnRpbmdSZWN0LnNldEhlaWdodCgwKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgICAg
ICBuZXdTdGFydGluZ1JlY3Quc2V0V2lkdGgoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Qu
c2V0SGVpZ2h0KDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IEZpbmQgdGhlIGNsb3Nlc3Qgbm9kZSB3aXRoaW4gY3VycmVudCBjb250YWluZXIgaW4gdGhlIGRp
cmVjdGlvbiBvZiB0aGUgbmF2aWdhdGlvbi4KKyAgICBGb2N1c0NhbmRpZGF0ZSBmb2N1c0NhbmRp
ZGF0ZTsKKyAgICBmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihjb250YWluZXIsIG5ld1N0
YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBldmVudCwgZm9jdXNDYW5kaWRhdGUpOworCisgICAgaWYg
KGZvY3VzQ2FuZGlkYXRlLmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChjYW5TY3JvbGxJbkRpcmVj
dGlvbihkaXJlY3Rpb24sIGNvbnRhaW5lcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8g
Zm9jdXMsIHNjcm9sbCBpZiBwb3NzaWJsZS4KKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9u
KGNvbnRhaW5lciwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIC8vIFJldHVybiBmYWxzZSB3aWxsIGNhdXNlIGEgcmUtdHJ5LCBza2lwcGlu
ZyB0aGlzIGNvbnRhaW5lci4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
Zm9jdXNDYW5kaWRhdGUubm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIGlm
IChoYXNPZmZzY3JlZW5SZWN0KGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikpIHsKKyAg
ICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzQ2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCkt
PnZpZXcoKS0+ZnJhbWUoKTsKKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLT5k
b2N1bWVudCgpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgLy8gTmF2aWdhdGUgaW50byBhIG5ldyBmcmFtZS4KKyAgICAgICAgSW50UmVj
dCByZWN0OworICAgICAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWRPck1haW5GcmFtZSgp
LT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOworICAgICAgICBpZiAoZm9jdXNlZE5vZGUgJiYg
IWhhc09mZnNjcmVlblJlY3QoZm9jdXNlZE5vZGUpKQorICAgICAgICAgICAgcmVjdCA9IG5vZGVS
ZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGZvY3VzZWROb2RlLCB0cnVlKTsKKyAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5v
ZGUpLT5jb250ZW50RnJhbWUoKSk7CisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVy
RWxlbWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQo
KS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgIGlmICgh
bmF2aWdhdGVJbkNvbnRhaW5lcihzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihm
b2N1c0NhbmRpZGF0ZS5ub2RlKS0+Y29udGVudEZyYW1lKCktPmRvY3VtZW50KCksIHJlY3QsIGRp
cmVjdGlvbiwgZXZlbnQpKQorICAgICAgICAgICAgLy8gVGhlIG5ldyBmcmFtZSBoYWQgbm90aGlu
ZyBpbnRlcmVzdGluZywgc2tpcCBwYXN0IGl0IGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICBy
ZXR1cm4gbmF2aWdhdGVJbkNvbnRhaW5lcihjb250YWluZXIsIG5vZGVSZWN0SW5BYnNvbHV0ZUNv
b3JkaW5hdGVzKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHRydWUpLCBkaXJlY3Rpb24sIGV2ZW50KTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChjYW5TY3JvbGxJbkRpcmVjdGlv
bihkaXJlY3Rpb24sIGZvY3VzQ2FuZGlkYXRlLm5vZGUpKSB7CisgICAgICAgIGlmIChoYXNPZmZz
Y3JlZW5SZWN0KGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAg
IHNjcm9sbEluRGlyZWN0aW9uKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBOYXZpZ2F0ZSBpbnRv
IGEgbmV3IHNjcm9sbGFibGUgY29udGFpbmVyLgorICAgICAgICBJbnRSZWN0IHJlY3Q7CisgICAg
ICAgIE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZE9yTWFpbkZyYW1lKCktPmRvY3VtZW50KCkt
PmZvY3VzZWROb2RlKCk7CisgICAgICAgIGlmIChmb2N1c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVu
UmVjdChmb2N1c2VkTm9kZSkpCisgICAgICAgICAgICByZWN0ID0gbm9kZVJlY3RJbkFic29sdXRl
Q29vcmRpbmF0ZXMoZm9jdXNlZE5vZGUsIHRydWUpOworICAgICAgICByZXR1cm4gbmF2aWdhdGVJ
bkNvbnRhaW5lcihmb2N1c0NhbmRpZGF0ZS5ub2RlLCByZWN0LCBkaXJlY3Rpb24sIGV2ZW50KTsK
KyAgICB9CisgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwgZGly
ZWN0aW9uKSkgeworICAgICAgICBOb2RlKiBjb250YWluZXIgPSBmb2N1c0NhbmRpZGF0ZS5lbmNs
b3NpbmdTY3JvbGxhYmxlQm94OworICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihjb250YWluZXIs
IGRpcmVjdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFdlIGZv
dW5kIGEgbmV3IGZvY3VzIG5vZGUsIG5hdmlnYXRlIHRvIGl0LgorICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZm9jdXNDYW5kaWRhdGUubm9kZSk7CisgICAgQVNT
RVJUKGVsZW1lbnQpOworCisgICAgZWxlbWVudC0+Zm9jdXMoZmFsc2UpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEZvY3VzQ29udHJvbGxlcjo6bmF2aWdhdGVJbjRXYXlEaXJlY3Rpb24o
Rm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBG
cmFtZSogY3VyRnJhbWUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBBU1NFUlQoY3VyRnJh
bWUpOworCisgICAgRG9jdW1lbnQqIGZvY3VzZWREb2N1bWVudCA9IGN1ckZyYW1lLT5kb2N1bWVu
dCgpOworICAgIGlmICghZm9jdXNlZERvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNlZE5vZGUoKTsK
KyAgICBOb2RlKiBjb250YWluZXIgPSBmb2N1c2VkRG9jdW1lbnQ7CisKKyAgICAvLyBGaWd1cmUg
b3V0IHRoZSBzdGFydGluZyByZWN0LgorICAgIEludFJlY3Qgc3RhcnRpbmdSZWN0OworICAgIGlm
IChmb2N1c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpIHsKKyAgICAg
ICAgY29udGFpbmVyID0gc2Nyb2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9u
KGRpcmVjdGlvbiwgZm9jdXNlZE5vZGUpOworICAgICAgICBzdGFydGluZ1JlY3QgPSBub2RlUmVj
dEluQWJzb2x1dGVDb29yZGluYXRlcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7CisgICAgfQorCisgICAg
Ym9vbCBjb25zdW1lZCA9IGZhbHNlOworICAgIGRvIHsKKyAgICAgICAgaWYgKGNvbnRhaW5lci0+
aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29u
dGFpbmVyKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAg
IGNvbnN1bWVkID0gbmF2aWdhdGVJbkNvbnRhaW5lcihjb250YWluZXIsIHN0YXJ0aW5nUmVjdCwg
ZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAgIHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNv
bHV0ZUNvb3JkaW5hdGVzKGNvbnRhaW5lciwgdHJ1ZSk7CisgICAgICAgIGNvbnRhaW5lciA9IHNj
cm9sbGFibGVPckZyYW1lUGFyZW50Rm9yTm9kZUFuZERpcmVjdGlvbihkaXJlY3Rpb24sIGNvbnRh
aW5lcik7CisgICAgfSB3aGlsZSAoIWNvbnN1bWVkICYmIGNvbnRhaW5lcik7CisgICAgcmV0dXJu
IGNvbnN1bWVkOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRm9jdXNDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5oCShyZXZpc2lvbiA3MTk2MCkKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9jdXNDYW5kaWRhdGUmIHBhcmVu
dENhbmRpZGF0ZSA9IEZvY3VzQ2FuZGlkYXRlKCkpOwogICAgIHZvaWQgZGVlcEZpbmRGb2N1c2Fi
bGVOb2RlSW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBOb2RlKiBmb2N1c2VkLCBGb2N1c0Rp
cmVjdGlvbiwgS2V5Ym9hcmRFdmVudCosIEZvY3VzQ2FuZGlkYXRlJik7CiAKKyAgICBib29sIG5h
dmlnYXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGlu
Z1JlY3QsIEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CisgICAgYm9vbCBuYXZpZ2F0
ZUluNFdheURpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCopOworICAgIHZv
aWQgZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJ
bnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiwgRm9j
dXNDYW5kaWRhdGUmIGNsb3Nlc3QpOworCiAgICAgUGFnZSogbV9wYWdlOwogICAgIFJlZlB0cjxG
cmFtZT4gbV9mb2N1c2VkRnJhbWU7CiAgICAgYm9vbCBtX2lzQWN0aXZlOwpJbmRleDogV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aAkocmV2aXNpb24gNzE5NjApCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzNSw2ICsyMzUsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZyYW1lVmlld1Nj
cm9sbENvcm5lcihSZW5kZXJTY3JvbGxiYXJQYXJ0KiBzY3JvbGxDb3JuZXIpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsQ29ybmVyID09IHNjcm9sbENvcm5lcjsgfQogICAgIHZvaWQgaW52YWxpZGF0
ZVNjcm9sbENvcm5lcigpOwogCisgICAgdm9pZCBjYWxjdWxhdGVTY3JvbGxiYXJNb2Rlc0Zvckxh
eW91dChTY3JvbGxiYXJNb2RlJiBoTW9kZSwgU2Nyb2xsYmFyTW9kZSYgdk1vZGUpOworCiAgICAg
Ly8gTm9ybWFsIGRlbGF5CiAgICAgc3RhdGljIHZvaWQgc2V0UmVwYWludFRocm90dGxpbmdEZWZl
cnJlZFJlcGFpbnREZWxheShkb3VibGUgcCk7CiAgICAgLy8gTmVnYXRpdmUgdmFsdWUgd291bGQg
bWVhbiB0aGF0IGZpcnN0IGZldyByZXBhaW50cyBoYXBwZW4gd2l0aG91dCBhIGRlbGF5CkBAIC0y
NjQsNyArMjY2LDYgQEAgcHJpdmF0ZToKICAgICBib29sIGhhc0ZpeGVkT2JqZWN0cygpIGNvbnN0
IHsgcmV0dXJuIG1fZml4ZWRPYmplY3RDb3VudCA+IDA7IH0KIAogICAgIHZvaWQgYXBwbHlPdmVy
Zmxvd1RvVmlld3BvcnQoUmVuZGVyT2JqZWN0KiwgU2Nyb2xsYmFyTW9kZSYgaE1vZGUsIFNjcm9s
bGJhck1vZGUmIHZNb2RlKTsKLSAgICB2b2lkIGNhbGN1bGF0ZVNjcm9sbGJhck1vZGVzRm9yTGF5
b3V0KFNjcm9sbGJhck1vZGUmIGhNb2RlLCBTY3JvbGxiYXJNb2RlJiB2TW9kZSk7CiAKICAgICB2
b2lkIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBib29sIHZl
cnRpY2FsT3ZlcmZsb3cpOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAJKHJl
dmlzaW9uIDcxOTYwKQorKysgV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIGxvbmcgbG9uZyBzcGF0aWFsRGlzdGFuY2UoRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEludFJl
Y3QmLCBjb25zdCBJbnRSZWN0Jik7CiBzdGF0aWMgSW50UmVjdCByZW5kZXJSZWN0UmVsYXRpdmVU
b1Jvb3REb2N1bWVudChSZW5kZXJPYmplY3QqKTsKLXN0YXRpYyBSZWN0c0FsaWdubWVudCBhbGln
bm1lbnRGb3JSZWN0cyhGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmKTsKK3N0YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1c0RpcmVj
dGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB2aWV3
U2l6ZSk7CiBzdGF0aWMgYm9vbCBhcmVSZWN0c0Z1bGx5QWxpZ25lZChGb2N1c0RpcmVjdGlvbiwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKIHN0YXRpYyBib29sIGFyZVJlY3RzUGFy
dGlhbGx5QWxpZ25lZChGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmKTsKK3N0YXRpYyBib29sIGFyZVJlY3RzTW9yZVRoYW5GdWxsU2NyZWVuQXBhcnQoRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSk7CiBzdGF0aWMgYm9vbCBpc1Jl
Y3RJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmKTsKIHN0YXRpYyB2b2lkIGRlZmxhdGVJZk92ZXJsYXBwZWQoSW50UmVjdCYsIEludFJlY3Qm
KTsKIHN0YXRpYyBib29sIGNoZWNrTmVnYXRpdmVDb29yZHNGb3JOb2RlKE5vZGUqLCBjb25zdCBJ
bnRSZWN0Jik7CitzdGF0aWMgSW50UmVjdCByZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKEZyYW1l
KiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJlY3QmIHJlY3QpOworc3RhdGljIHZvaWQgZW50cnlB
bmRFeGl0UG9pbnRzRm9yRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3Qg
SW50UmVjdCYgc3RhcnRpbmdSZWN0LCBjb25zdCBJbnRSZWN0JiBwb3RlbnRpYWxSZWN0LCBJbnRQ
b2ludCYgZXhpdFBvaW50LCBJbnRQb2ludCYgZW50cnlQb2ludCk7CisKKworRm9jdXNDYW5kaWRh
dGU6OkZvY3VzQ2FuZGlkYXRlKE5vZGUqIG4pCisgICAgOiBub2RlKG4pCisgICAgLCBlbmNsb3Np
bmdTY3JvbGxhYmxlQm94KDApCisgICAgLCBkaXN0YW5jZShtYXhEaXN0YW5jZSgpKQorICAgICwg
cGFyZW50RGlzdGFuY2UobWF4RGlzdGFuY2UoKSkKKyAgICAsIGFsaWdubWVudChOb25lKQorICAg
ICwgcGFyZW50QWxpZ25tZW50KE5vbmUpCisgICAgLCByZWN0KG5vZGVSZWN0SW5BYnNvbHV0ZUNv
b3JkaW5hdGVzKG4sIHRydWUpKQoreworfQogCiBib29sIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkKGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKQEAgLTEwMiw3ICsxMTcsOCBAQCB2b2lkIGRpc3Rh
bmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gCiAgICAgLy8gVGhlIGRpc3RhbmNlIGJldHdl
ZW4gdHdvIG5vZGVzIGlzIG5vdCB0byBiZSBjb25zaWRlcmVkIGFsb25lIHdoZW4gZXZhbHVhdGlu
Zy9sb29raW5nCiAgICAgLy8gZm9yIHRoZSBiZXN0IGZvY3VzIGNhbmRpZGF0ZSBub2RlLiBBbGln
bm1lbnQgb2YgcmVjdHMgY2FuIGJlIGFsc28gYSBnb29kIHBvaW50IHRvIGJlCiAgICAgLy8gY29u
c2lkZXJlZCBpbiBvcmRlciB0byBtYWtlIHRoZSBhbGdvcml0aG0gdG8gYmVoYXZpb3IgaW4gYSBt
b3JlIGludHVpdGl2ZSB3YXkuCi0gICAgY2FuZGlkYXRlLmFsaWdubWVudCA9IGFsaWdubWVudEZv
clJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCk7CisgICAgSW50U2l6ZSB2aWV3
U2l6ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT52
aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKKyAgICBjYW5kaWRhdGUuYWxpZ25t
ZW50ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBjdXJSZWN0LCB0YXJnZXRSZWN0LCB2
aWV3U2l6ZSk7CiAgICAgY2FuZGlkYXRlLmRpc3RhbmNlID0gc3BhdGlhbERpc3RhbmNlKGRpcmVj
dGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCk7CiB9CiAKQEAgLTEzNiw4ICsxNTIsMTIgQEAgc3Rh
dGljIEludFJlY3QgcmVuZGVyUmVjdFJlbGF0aXZlVG9Sb290RAogICAgIHJldHVybiByZWN0Owog
fQogCi1zdGF0aWMgUmVjdHNBbGlnbm1lbnQgYWxpZ25tZW50Rm9yUmVjdHMoRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXRSZWN0KQorc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVjdCwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgSW50U2l6ZSYgdmlld1NpemUpCiB7CisgICAgLy8gSWYgd2UgZm91
bmQgYSBub2RlIGluIGZ1bGwgYWxpZ25tZW50LCBidXQgaXQgaXMgdG9vIGZhciBhd2F5LCBpZ25v
cmUgaXQuCisgICAgaWYgKGFyZVJlY3RzTW9yZVRoYW5GdWxsU2NyZWVuQXBhcnQoZGlyZWN0aW9u
LCBjdXJSZWN0LCB0YXJnZXRSZWN0LCB2aWV3U2l6ZSkpCisgICAgICAgIHJldHVybiBOb25lOwor
CiAgICAgaWYgKGFyZVJlY3RzRnVsbHlBbGlnbmVkKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0
UmVjdCkpCiAgICAgICAgIHJldHVybiBGdWxsOwogCkBAIC0yNzcsNiArMjk3LDIzIEBAIHN0YXRp
YyBib29sIGFyZVJlY3RzUGFydGlhbGx5QWxpZ25lZChGb2MKICAgICAgICAgICAgIHx8IChiRW5k
ID49IGFTdGFydCAmJiBiRW5kIDw9IGFFbmQpKTsKIH0KIAorc3RhdGljIGJvb2wgYXJlUmVjdHNN
b3JlVGhhbkZ1bGxTY3JlZW5BcGFydChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IElu
dFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNpemUm
IHZpZXdTaXplKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkxlZnQ6CisgICAgICAgIHJldHVybiBjdXJSZWN0LngoKSA8IHRhcmdldFJlY3Qucmln
aHQoKSB8fCBjdXJSZWN0LngoKSAtIHRhcmdldFJlY3QucmlnaHQoKSA+IHZpZXdTaXplLndpZHRo
KCk7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gdGFyZ2V0
UmVjdC54KCkgPCBjdXJSZWN0LnJpZ2h0KCkgfHwgdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0LnJp
Z2h0KCkgPiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAg
ICAgICAgcmV0dXJuIGN1clJlY3QueSgpIDwgdGFyZ2V0UmVjdC5ib3R0b20oKSB8fCBjdXJSZWN0
LnkoKSAtIHRhcmdldFJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIDwgY3Vy
UmVjdC5ib3R0b20oKSB8fCB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3
U2l6ZS5oZWlnaHQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCiAvLyBSZXR1cm4gdHJ1ZSBpZiBy
ZWN0IHxhfCBpcyBiZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9v
bCBiZWxvdyhjb25zdCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewpAQCAtNDI1LDcg
KzQ2Miw3IEBAIHN0YXRpYyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZvY3VzRGlyZWMKIC8vIENo
ZWNrcyBpZiB8bm9kZXwgaXMgb2Zmc2NyZWVuIHRoZSB2aXNpYmxlIGFyZWEgKHZpZXdwb3J0KSBv
ZiBpdHMgY29udGFpbmVyCiAvLyBkb2N1bWVudC4gSW4gY2FzZSBpdCBpcywgb25lIGNhbiBzY3Jv
bGwgaW4gZGlyZWN0aW9uIG9yIHRha2UgYW55IGRpZmZlcmVudAogLy8gZGVzaXJlZCBhY3Rpb24g
bGF0ZXIgb24uCi1ib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSkKK2Jvb2wgaGFzT2Zm
c2NyZWVuUmVjdChOb2RlKiBub2RlLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAg
Ly8gR2V0IHRoZSBGcmFtZVZpZXcgaW4gd2hpY2ggfG5vZGV8IGlzICh3aGljaCBtZWFucyB0aGUg
Y3VycmVudCB2aWV3cG9ydCBpZiB8bm9kZXwKICAgICAvLyBpcyBub3QgaW4gYW4gaW5uZXIgZG9j
dW1lbnQpLCBzbyB3ZSBjYW4gY2hlY2sgaWYgaXRzIGNvbnRlbnQgcmVjdCBpcyB2aXNpYmxlCkBA
IC00MzUsNiArNDcyLDI2IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgY29udGFpbmVyVmlld3BvcnRSZWN0ID0g
ZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAvLyBXZSB3YW50IHRvIHNlbGVj
dCBhIG5vZGUgaWYgaXQgaXMgY3VycmVudGx5IG9mZiBzY3JlZW4sIGJ1dCB3aWxsIGJlCisgICAg
Ly8gZXhwb3NlZCBhZnRlciB3ZSBzY3JvbGwuIEFkanVzdCB0aGUgdmlld3BvcnQgdG8gcG9zdC1z
Y3JvbGxpbmcgcG9zaXRpb24uCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldFgoY29u
dGFpbmVyVmlld3BvcnRSZWN0LngoKSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7
CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRXaWR0aChjb250YWluZXJWaWV3cG9y
dFJlY3Qud2lkdGgoKSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgY29udGFpbmVy
Vmlld3BvcnRSZWN0LnNldFdpZHRoKGNvbnRhaW5lclZpZXdwb3J0UmVjdC53aWR0aCgpICsgU2Ny
b2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvblVwOgorICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0WShjb250
YWluZXJWaWV3cG9ydFJlY3QueSgpIC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsK
KyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldEhlaWdodChjb250YWluZXJWaWV3cG9y
dFJlY3QuaGVpZ2h0KCkgKyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgY29udGFpbmVy
Vmlld3BvcnRSZWN0LnNldEhlaWdodChjb250YWluZXJWaWV3cG9ydFJlY3QuaGVpZ2h0KCkgKyBT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlciA9
IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXIpCkBAIC00NDcsMzYgKzUwNCw3MSBA
QCBib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSkKICAgICByZXR1cm4gIWNvbnRhaW5l
clZpZXdwb3J0UmVjdC5pbnRlcnNlY3RzKHJlY3QpOwogfQogCi0vLyBJbiBhIGJvdHRvbS11cCB3
YXksIHRoaXMgbWV0aG9kIHRyaWVzIHRvIHNjcm9sbCB8ZnJhbWV8IGluIGEgZ2l2ZW4gZGlyZWN0
aW9uCi0vLyB8ZGlyZWN0aW9ufCwgZ29pbmcgdXAgaW4gdGhlIGZyYW1lIHRyZWUgaGllcmFyY2h5
IGluIGNhc2UgaXQgZG9lcyBub3Qgc3VjY2VlZC4KLWJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJh
bWUqIGZyYW1lLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2FuZGlkYXRl
JiBjYW5kaWRhdGUpCitib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBBU1NFUlQoZnJhbWUgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9u
LCBmcmFtZS0+ZG9jdW1lbnQoKSkpOwogCi0gICAgU2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVj
dGlvbjsKKyAgICBpZiAoZnJhbWUgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBm
cmFtZS0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgaW50IGR4ID0gMDsKKyAgICAgICAgaW50IGR5
ID0gMDsKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkxlZnQ6CisgICAgICAgICAgICBkeCA9IC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25S
aWdodDoKKyAgICAgICAgICAgIGR4ID0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAg
ICAgICAgIGR5ID0gLSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgICAgICBk
eSA9IFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KIAotICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkxlZnQ6Ci0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbExlZnQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0
aW9uID0gU2Nyb2xsUmlnaHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsVXA7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24g
PSBTY3JvbGxEb3duOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KEludFNpemUoZHgsIGR5
KSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBk
aXJlY3Rpb24pCit7CisgICAgaWYgKGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbEluRGlyZWN0aW9uKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGFp
bmVyKS0+ZnJhbWUoKSwgZGlyZWN0aW9uKTsKIAotICAgIGlmICghY2FuZGlkYXRlLmlzTnVsbCgp
ICYmIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFi
bGVCb3gpKQotICAgICAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1
cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgY2FuZGlkYXRlLmVuY2xvc2lu
Z1Njcm9sbGFibGVCb3gpOworICAgIGlmICghY29udGFpbmVyLT5yZW5kZXJCb3goKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Ny
b2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxCeUxpbmUpOworICAgIGlmIChj
b250YWluZXIgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBjb250YWluZXIpKSB7
CisgICAgICAgIGludCBkeCA9IDA7CisgICAgICAgIGludCBkeSA9IDA7CisgICAgICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAg
ICAgICAgZHggPSAtIG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5l
ci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgQVNTRVJUKGNvbnRhaW5l
ci0+cmVuZGVyQm94KCktPnNjcm9sbFdpZHRoKCkgPiAoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+
c2Nyb2xsTGVmdCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkpOwor
ICAgICAgICAgICAgZHggPSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250
YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxXaWR0aCgpIC0gKGNvbnRhaW5lci0+cmVuZGVyQm94
KCktPnNjcm9sbExlZnQoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6Cisg
ICAgICAgICAgICBkeSA9IC0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgY29u
dGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICAgICAgQVNTRVJUKGNvbnRh
aW5lci0+cmVuZGVyQm94KCktPnNjcm9sbEhlaWdodCgpIC0gKGNvbnRhaW5lci0+cmVuZGVyQm94
KCktPnNjcm9sbFRvcCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkp
KTsKKyAgICAgICAgICAgIGR5ID0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwg
Y29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVpZ2h0KCkgLSAoY29udGFpbmVyLT5yZW5k
ZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXItPnJlbmRlckJveCgpLT5jbGllbnRIZWln
aHQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRhaW5lci0+
cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoZHgsIGR5
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB2b2lkIHNjcm9sbEludG9WaWV3KEVsZW1lbnQqIGVsZW1lbnQpCkBAIC01MzQsNyArNjI2LDcg
QEAgc3RhdGljIGJvb2wgY2hlY2tOZWdhdGl2ZUNvb3Jkc0Zvck5vZGUoTgogICAgIHJldHVybiBj
YW5CZVNjcm9sbGVkOwogfQogCi1ib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoTm9kZSog
bm9kZSkKK2Jvb2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShjb25zdCBOb2RlKiBub2RlKQog
ewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTY3LDQgKzY1OSwy
NTQgQEAgYm9vbCBpc05vZGVEZWVwRGVzY2VuZGFudE9mRG9jdW1lbnQoTm9kZQogICAgIHJldHVy
biBkZXNjZW5kYW50OwogfQogCitOb2RlKiBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVB
bmREaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBub2RlKQoreworICAg
IEFTU0VSVChub2RlKTsKKyAgICBOb2RlKiBwYXJlbnQgPSBub2RlOworICAgIGRvIHsKKyAgICAg
ICAgaWYgKHBhcmVudC0+aXNEb2N1bWVudE5vZGUoKSkgLy8gVGhpcyBpcyB0cnVlIG9ubHkgaWYg
bm9kZSBpcyBhIGRvY3VtZW50IG5vZGUuCisgICAgICAgICAgICBwYXJlbnQgPSBzdGF0aWNfY2Fz
dDxEb2N1bWVudCo+KHBhcmVudCktPmRvY3VtZW50KCktPmZyYW1lKCktPm93bmVyRWxlbWVudCgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUo
KTsKKyAgICB9IHdoaWxlIChwYXJlbnQgJiYgIWNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlv
biwgcGFyZW50KSAmJiAhcGFyZW50LT5pc0RvY3VtZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gcGFy
ZW50OworfQorCitib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVj
dGlvbiwgY29uc3QgTm9kZSogY29udGFpbmVyKQoreworICAgIEFTU0VSVChjb250YWluZXIpOwor
ICAgIGlmIChjb250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBjYW5T
Y3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50Kj4o
Y29udGFpbmVyKS0+ZnJhbWUoKSk7CisKKyAgICBpZiAoIWlzU2Nyb2xsYWJsZUNvbnRhaW5lck5v
ZGUoY29udGFpbmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChkaXJl
Y3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgcmV0dXJuIChj
b250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9ISURERU4gJiYg
Y29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpID4gMCk7CisgICAgY2FzZSBGb2N1
c0RpcmVjdGlvblVwOgorICAgICAgICByZXR1cm4gKGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+b3ZlcmZsb3dZKCkgIT0gT0hJRERFTiAmJiBjb250YWluZXItPnJlbmRlckJveCgpLT5z
Y3JvbGxUb3AoKSA+IDApOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAg
cmV0dXJuIChjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9I
SURERU4gJiYgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVy
LT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNj
cm9sbFdpZHRoKCkpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICByZXR1
cm4gKGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dZKCkgIT0gT0hJRERF
TiAmJiBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSArIGNvbnRhaW5lci0+cmVu
ZGVyQm94KCktPmNsaWVudEhlaWdodCgpIDwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xs
SGVpZ2h0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIGNhblNjcm9sbEluRGlyZWN0
aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnJhbWUqIGZyYW1lKQoreworICAg
IGlmICghZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFNjcm9sbGJh
ck1vZGUgdmVydGljYWxNb2RlOworICAgIFNjcm9sbGJhck1vZGUgaG9yaXpvbnRhbE1vZGU7Cisg
ICAgZnJhbWUtPnZpZXcoKS0+Y2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNGb3JMYXlvdXQoaG9yaXpv
bnRhbE1vZGUsIHZlcnRpY2FsTW9kZSk7CisgICAgaWYgKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJl
Y3Rpb25MZWZ0IHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblJpZ2h0KSAmJiBTY3JvbGxi
YXJBbHdheXNPZmYgPT0gaG9yaXpvbnRhbE1vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblVwIHx8IGRpcmVjdGlvbiA9PSBGb2N1
c0RpcmVjdGlvbkRvd24pICYmICBTY3JvbGxiYXJBbHdheXNPZmYgPT0gdmVydGljYWxNb2RlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW50U2l6ZSBzaXplID0gZnJhbWUtPnZpZXcoKS0+
Y29udGVudHNTaXplKCk7CisgICAgSW50U2l6ZSBvZmZzZXQgPSBmcmFtZS0+dmlldygpLT5zY3Jv
bGxPZmZzZXQoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS0+dmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QodHJ1ZSk7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gb2Zmc2V0LndpZHRoKCkgPiAwOworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgcmV0dXJuIG9mZnNldC5oZWlnaHQoKSA+
IDA7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gcmVjdC53
aWR0aCgpICsgb2Zmc2V0LndpZHRoKCkgPCBzaXplLndpZHRoKCk7CisgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkRvd246CisgICAgICAgIHJldHVybiByZWN0LmhlaWdodCgpICsgb2Zmc2V0LmhlaWdo
dCgpIDwgc2l6ZS5oZWlnaHQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgSW50UmVjdCBy
ZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKEZyYW1lKiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJl
Y3QmIGluaXRpYWxSZWN0KQoreworICAgIEludFJlY3QgcmVjdCA9IGluaXRpYWxSZWN0OworICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gaW5pdGlhbEZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihmcmFtZS0+b3duZXJFbGVtZW50KCkpKSB7CisgICAgICAgICAgICBk
byB7CisgICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxl
bWVudC0+b2Zmc2V0VG9wKCkpOworICAgICAgICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVt
ZW50LT5vZmZzZXRQYXJlbnQoKSkpOworICAgICAgICAgICAgcmVjdC5tb3ZlKCgtZnJhbWUtPnZp
ZXcoKS0+c2Nyb2xsT2Zmc2V0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVj
dDsKK30KKworSW50UmVjdCBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhOb2RlKiBub2Rl
LCBib29sIGlnbm9yZUJvcmRlcikKK3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJl
cigpKTsKKworICAgIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4g
ZnJhbWVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKHN0YXRpY19jYXN0PERvY3VtZW50Kj4obm9k
ZSktPmZyYW1lKCkpOworICAgIEludFJlY3QgcmVjdCA9IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0
ZXMobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSwgbm9kZS0+Z2V0UmVjdCgpKTsKKworICAgIC8v
IEZvciBhdXRob3JzIHRoYXQgdXNlIGJvcmRlciBpbnN0ZWFkIG9mIG91dGxpbmUgaW4gdGhlaXIg
Q1NTLCB3ZSBjb21wZW5zYXRlIGJ5IGlnbm9yaW5nIHRoZSBib3JkZXIgd2hlbiBjYWxjdWxhdGlu
ZworICAgIC8vIHRoZSByZWN0IG9mIHRoZSBmb2N1c2VkIGVsZW1lbnQuCisgICAgaWYgKGlnbm9y
ZUJvcmRlcikgeworICAgICAgICByZWN0Lm1vdmUobm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
Ym9yZGVyTGVmdFdpZHRoKCksIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclRvcFdp
ZHRoKCkpOworICAgICAgICByZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgoKSAtIG5vZGUtPnJlbmRl
cmVyKCktPnN0eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5o
ZWlnaHQoKSAtIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkgLSBu
b2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFJlY3QgZnJhbWVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5h
dGVzKEZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gcmVjdFRvQWJzb2x1dGVDb29yZGluYXRl
cyhmcmFtZSwgZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkpOworfQorCisvLyBF
eGl0IHBvaW50IGlzIHRoZSBjbG9zZXN0IHBvaW50IGluIHRoZSBzdGFydGluZ1JlY3QsIGRlcGVu
ZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uLgorLy8gRW50cnkgcG9pbnQg
aXMgdGhlIGNsb3Nlc3QgcG9pbnQgaW4gdGhlIGNhbmRpZGF0ZSBub2RlLCBkZXBlbmRpbmcgb24g
dGhlIGRpcmVjdGlvbiBvZiB0aGUgbmF2aWdhdGlvbi4KK3ZvaWQgZW50cnlBbmRFeGl0UG9pbnRz
Rm9yRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3Rh
cnRpbmdSZWN0LCBjb25zdCBJbnRSZWN0JiBwb3RlbnRpYWxSZWN0LCBJbnRQb2ludCYgZXhpdFBv
aW50LCBJbnRQb2ludCYgZW50cnlQb2ludCkKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewor
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFy
dGluZ1JlY3QueCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3Qucmln
aHQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAg
ICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LnkoKSk7CisgICAgICAgIGVudHJ5UG9pbnQu
c2V0WShwb3RlbnRpYWxSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGluZ1JlY3Qu
cmlnaHQoKSk7CisgICAgICAgIGVudHJ5UG9pbnQuc2V0WChwb3RlbnRpYWxSZWN0LngoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBleGl0
UG9pbnQuc2V0WShzdGFydGluZ1JlY3QuYm90dG9tKCkpOworICAgICAgICBlbnRyeVBvaW50LnNl
dFkocG90ZW50aWFsUmVjdC55KCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlv
bikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25SaWdodDoKKyAgICAgICAgaWYgKGJlbG93KHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkp
IHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5nUmVjdC55KCkpOworICAgICAg
ICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICB9
IGVsc2UgaWYgKGJlbG93KHBvdGVudGlhbFJlY3QsIHN0YXJ0aW5nUmVjdCkpIHsKKyAgICAgICAg
ICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBl
bnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC55KCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZXhpdFBvaW50LnNldFkobWF4KHN0YXJ0aW5nUmVjdC55KCksIHBvdGVudGlhbFJl
Y3QueSgpKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkoZXhpdFBvaW50LnkoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBpZiAocmlnaHRPZihzdGFydGluZ1Jl
Y3QsIHBvdGVudGlhbFJlY3QpKSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGlu
Z1JlY3QueCgpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WChwb3RlbnRpYWxSZWN0LnJp
Z2h0KCkpOworICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0T2YocG90ZW50aWFsUmVjdCwgc3RhcnRp
bmdSZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0
KCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QueCgpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5zZXRYKG1heChzdGFydGluZ1Jl
Y3QueCgpLCBwb3RlbnRpYWxSZWN0LngoKSkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRY
KGV4aXRQb2ludC54KCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBkaXN0YW5j
ZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9jdXNDYW5kaWRhdGUmIGN1
cnJlbnQsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCit7CisgICAgaWYgKGNhbmRpZGF0ZS5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghY2FuZGlkYXRlLm5vZGUtPnJlbmRl
cmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IG5vZGVSZWN0ID0gbm9kZVJlY3RJ
bkFic29sdXRlQ29vcmRpbmF0ZXMoY2FuZGlkYXRlLm5vZGUsIHRydWUpOworICAgIEludFJlY3Qg
Y3VycmVudFJlY3QgPSBjdXJyZW50LnJlY3Q7CisgICAgZGVmbGF0ZUlmT3ZlcmxhcHBlZChjdXJy
ZW50UmVjdCwgbm9kZVJlY3QpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgaWYgKG5vZGVSZWN0LnJpZ2h0KCkgPiBjdXJy
ZW50UmVjdC54KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgaWYgKG5vZGVSZWN0LmJvdHRvbSgpID4gY3Vy
cmVudFJlY3QueSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGlmIChub2RlUmVjdC54KCkgPCBjdXJy
ZW50UmVjdC5yaWdodCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgaWYgKG5vZGVSZWN0LnkoKSA8IGN1
cnJlbnRSZWN0LmJvdHRvbSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICBJbnRQb2ludCBleGl0UG9pbnQ7CisgICAgSW50UG9pbnQgZW50cnlQb2ludDsKKyAgICBpbnQg
c2FtZUF4aXNEaXN0ID0gMDsKKyAgICBpbnQgb3RoZXJBeGlzRGlzdCA9IDA7CisgICAgZW50cnlB
bmRFeGl0UG9pbnRzRm9yRGlyZWN0aW9uKGRpcmVjdGlvbiwgY3VycmVudFJlY3QsIG5vZGVSZWN0
LCBleGl0UG9pbnQsIGVudHJ5UG9pbnQpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgc2FtZUF4aXNEaXN0ID0gZXhpdFBv
aW50LngoKSAtIGVudHJ5UG9pbnQueCgpOworICAgICAgICBvdGhlckF4aXNEaXN0ID0gYWJzKGV4
aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgc2FtZUF4aXNEaXN0ID0gZXhpdFBvaW50LnkoKSAt
IGVudHJ5UG9pbnQueSgpOworICAgICAgICBvdGhlckF4aXNEaXN0ID0gYWJzKGV4aXRQb2ludC54
KCkgLSBlbnRyeVBvaW50LngoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25SaWdodDoKKyAgICAgICAgc2FtZUF4aXNEaXN0ID0gZW50cnlQb2ludC54KCkgLSBleGl0
UG9pbnQueCgpOworICAgICAgICBvdGhlckF4aXNEaXN0ID0gYWJzKGVudHJ5UG9pbnQueSgpIC0g
ZXhpdFBvaW50LnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25E
b3duOgorICAgICAgICBzYW1lQXhpc0Rpc3QgPSBlbnRyeVBvaW50LnkoKSAtIGV4aXRQb2ludC55
KCk7CisgICAgICAgIG90aGVyQXhpc0Rpc3QgPSBhYnMoZW50cnlQb2ludC54KCkgLSBleGl0UG9p
bnQueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaW50IHggPSAoZW50cnlQb2ludC54KCkgLSBleGl0
UG9pbnQueCgpKSAqIChlbnRyeVBvaW50LngoKSAtIGV4aXRQb2ludC54KCkpOworICAgIGludCB5
ID0gKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSkgKiAoZW50cnlQb2ludC55KCkgLSBl
eGl0UG9pbnQueSgpKTsKKworICAgIGZsb2F0IGV1Y2xpZGlhbkRpc3RhbmNlID0gc3FydCgoeCAr
IHkpICogMS4wZik7CisKKyAgICAvLyBMb29zZWx5IGJhc2VkIG9uIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1dJQ0QvI2ZvY3VzLWhhbmRsaW5nCisgICAgLy8gZGYgPSBkb3REaXN0ICsgZHggKyBkeSAr
IDIgKiAoeGRpc3BsYWNlbWVudCArIHlkaXNwbGFjZW1lbnQpIC0gc3FydChPdmVybGFwKQorCisg
ICAgZmxvYXQgZGlzdGFuY2UgPSBldWNsaWRpYW5EaXN0YW5jZSArIHNhbWVBeGlzRGlzdCArIDIg
KiBvdGhlckF4aXNEaXN0OworICAgIGNhbmRpZGF0ZS5kaXN0YW5jZSA9IHJvdW5kZihkaXN0YW5j
ZSk7CisgICAgSW50U2l6ZSB2aWV3U2l6ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5w
YWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsK
KyAgICBjYW5kaWRhdGUuYWxpZ25tZW50ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBj
dXJyZW50UmVjdCwgbm9kZVJlY3QsIHZpZXdTaXplKTsKK30KKworYm9vbCBjYW5CZVNjcm9sbGVk
SW50b1ZpZXcoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlk
YXRlKQoreworICAgIEFTU0VSVChjYW5kaWRhdGUubm9kZSAmJiBoYXNPZmZzY3JlZW5SZWN0KGNh
bmRpZGF0ZS5ub2RlKSk7CisgICAgSW50UmVjdCBjYW5kaWRhdGVSZWN0ID0gbm9kZVJlY3RJbkFi
c29sdXRlQ29vcmRpbmF0ZXMoY2FuZGlkYXRlLm5vZGUpOworICAgIGZvciAoTm9kZSogcGFyZW50
Tm9kZSA9IGNhbmRpZGF0ZS5ub2RlLT5wYXJlbnQoKTsgcGFyZW50Tm9kZTsgcGFyZW50Tm9kZSA9
IHBhcmVudE5vZGUtPnBhcmVudCgpKSB7CisgICAgICAgIEludFJlY3QgcGFyZW50UmVjdCA9IG5v
ZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKHBhcmVudE5vZGUpOworICAgICAgICBpZiAoIWNh
bmRpZGF0ZVJlY3QuaW50ZXJzZWN0cyhwYXJlbnRSZWN0KSkgeworICAgICAgICAgICAgaWYgKCgo
ZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uTGVmdCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJl
Y3Rpb25SaWdodCkgJiYgcGFyZW50Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dY
KCkgPT0gT0hJRERFTikKKyAgICAgICAgICAgICAgICB8fCAoKGRpcmVjdGlvbiA9PSBGb2N1c0Rp
cmVjdGlvblVwIHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkRvd24pICYmIHBhcmVudE5v
ZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WSgpID09IE9ISURERU4pKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyZW50Tm9k
ZSA9PSBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCkKKyAgICAgICAgICAgIHJldHVy
biBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIHBhcmVudE5vZGUpOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmgJKHJldmlzaW9uIDcxOTYwKQorKysgV2ViQ29yZS9wYWdlL1NwYXRp
YWxOYXZpZ2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUg
U3BhdGlhbE5hdmlnYXRpb25faAogCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCiAjaW5jbHVkZSA8bGltaXRzPgpA
QCAtMTA3LDE2ICsxMDgsNyBAQCBzdHJ1Y3QgRm9jdXNDYW5kaWRhdGUgewogICAgIHsKICAgICB9
CiAKLSAgICBGb2N1c0NhbmRpZGF0ZShOb2RlKiBuKQotICAgICAgICA6IG5vZGUobikKLSAgICAg
ICAgLCBlbmNsb3NpbmdTY3JvbGxhYmxlQm94KDApCi0gICAgICAgICwgZGlzdGFuY2UobWF4RGlz
dGFuY2UoKSkKLSAgICAgICAgLCBwYXJlbnREaXN0YW5jZShtYXhEaXN0YW5jZSgpKQotICAgICAg
ICAsIGFsaWdubWVudChOb25lKQotICAgICAgICAsIHBhcmVudEFsaWdubWVudChOb25lKQotICAg
IHsKLSAgICB9Ci0KKyAgICBGb2N1c0NhbmRpZGF0ZShOb2RlKiBuKTsKICAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuICFub2RlOyB9CiAgICAgYm9vbCBpblNjcm9sbGFibGVDb250YWlu
ZXIoKSBjb25zdCB7IHJldHVybiBub2RlICYmIGVuY2xvc2luZ1Njcm9sbGFibGVCb3g7IH0KICAg
ICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBub2RlID8gbm9kZS0+ZG9jdW1l
bnQoKSA6IDA7IH0KQEAgLTEyNywxNiArMTE5LDI0IEBAIHN0cnVjdCBGb2N1c0NhbmRpZGF0ZSB7
CiAgICAgbG9uZyBsb25nIHBhcmVudERpc3RhbmNlOwogICAgIFJlY3RzQWxpZ25tZW50IGFsaWdu
bWVudDsKICAgICBSZWN0c0FsaWdubWVudCBwYXJlbnRBbGlnbm1lbnQ7CisgICAgSW50UmVjdCBy
ZWN0OwogfTsKIAogdm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVj
dGlvbiwgTm9kZSogc3RhcnQsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpOwotYm9vbCBzY3Jv
bGxJbkRpcmVjdGlvbihGcmFtZSosIEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhbmRpZGF0
ZSYgY2FuZGlkYXRlID0gRm9jdXNDYW5kaWRhdGUoKSk7Citib29sIHNjcm9sbEluRGlyZWN0aW9u
KEZyYW1lKiwgRm9jdXNEaXJlY3Rpb24pOworYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBj
b250YWluZXIsIEZvY3VzRGlyZWN0aW9uKTsKIHZvaWQgc2Nyb2xsSW50b1ZpZXcoRWxlbWVudCop
OwotYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqKTsKK2Jvb2wgaGFzT2Zmc2NyZWVuUmVjdChO
b2RlKiwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gRm9jdXNEaXJlY3Rpb25Ob25lKTsKIGJv
b2wgaXNJblJvb3REb2N1bWVudChOb2RlKik7Ci1ib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5v
ZGUoTm9kZSopOworYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKGNvbnN0IE5vZGUqKTsK
IGJvb2wgaXNOb2RlRGVlcERlc2NlbmRhbnRPZkRvY3VtZW50KE5vZGUqLCBEb2N1bWVudCopOwot
CitOb2RlKiBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVBbmREaXJlY3Rpb24oRm9jdXNE
aXJlY3Rpb24sIE5vZGUqIG5vZGUpOworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihGb2N1c0Rp
cmVjdGlvbiwgY29uc3QgTm9kZSogY29udGFpbmVyKTsKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rp
b24oRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZyYW1lKik7CitJbnRSZWN0IG5vZGVSZWN0SW5BYnNv
bHV0ZUNvb3JkaW5hdGVzKE5vZGUqLCBib29sIGlnbm9yZUJvcmRlciA9IGZhbHNlKTsKK0ludFJl
Y3QgZnJhbWVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKEZyYW1lKik7Cit2b2lkIGRpc3RhbmNl
RGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlJiBjdXJyZW50LCBGb2N1
c0NhbmRpZGF0ZSYgY2FuZGlkYXRlKTsKK2Jvb2wgY2FuQmVTY3JvbGxlZEludG9WaWV3KEZvY3Vz
RGlyZWN0aW9uLCBGb2N1c0NhbmRpZGF0ZSYpOwogfSAvLyBuYW1zcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBTcGF0aWFsTmF2aWdhdGlvbl9oCgo=
</data>
<flag name="review"
          id="64489"
          type_id="1"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73955</attachid>
            <date>2010-11-15 20:02:44 -0800</date>
            <delta_ts>2010-11-15 22:19:44 -0800</delta_ts>
            <desc>Patch - tests changes only.</desc>
            <filename>49382_tests.patch</filename>
            <type>text/plain</type>
            <size>15360</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDcyMDUzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMTEtMTUgIFlhZWwgQWhhcm9uICA8eWFl
bC5haGFyb25Abm9raWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5h
dmlnYXRpb246IGlzc3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAg
ICAgIFJlcGxhY2VkIHRleHQgaW4gdGVzdHMgd2l0aCBpbWFnZXMgd2l0aCBmaXhlZCBzaXplIHRv
IG1ha2UgdGhlbSBtb3JlIGNyb3NzIHBsYXRmb3JtIGFuZCBtb2RpZmllZAorICAgICAgICB0ZXN0
IHJlc3VsdHMgdG8gcmVmbGVjdCB0aGF0IHdlIGNhbiBzY3JvbGwgY29udGFpbmVyIHRoYXQgZG8g
bm90IGluY2x1ZGUgZm9jdXNhYmxlIGNvbnRlbnQuIAorCisgICAgICAgICogZmFzdC9ldmVudHMv
c3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtY2xpcHBlZC1vdmVyZmxvd2VkLWNvbnRlbnQtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWNs
aXBwZWQtb3ZlcmZsb3dlZC1jb250ZW50Lmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3Bh
dGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0LXdpdGhvdXQtZm9jdXNhYmxl
LWNvbnRlbnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NwYXRpYWwtbmF2
aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxlLWJ1dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50
Lmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZy
YW1lLW5vLWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2V2
ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tZm9jdXNhYmxlLWNvbnRlbnQu
aHRtbDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJh
bWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2V2
ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50
Lmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZy
YW1lLXdpdGgtb2Zmc2NyZWVuLWZvY3VzYWJsZS1lbGVtZW50LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtd2l0aC1vZmZz
Y3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQuaHRtbDoKKwogMjAxMC0xMS0xNSAgS2VudCBUYW11cmEg
IDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgdGVzdCBleHBlY3Rh
dGlvbiB1cGRhdGUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmln
YXRpb24vc25hdi1jbGlwcGVkLW92ZXJmbG93ZWQtY29udGVudC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYt
Y2xpcHBlZC1vdmVyZmxvd2VkLWNvbnRlbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MTk2MCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWNsaXBw
ZWQtb3ZlcmZsb3dlZC1jb250ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNiw5
ICs2LDEzIEBACiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1
dGUoImlkIikgaXMgIjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRB
dHRyaWJ1dGUoImlkIikgaXMgIjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZl
RWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQu
YWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCiBQQVNTIGdGb2N1c2VkRG9j
dW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjMiCiBQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCiBQQVNT
IGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIi
CitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikg
aXMgIjIiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUo
ImlkIikgaXMgIjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgIjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgogVGhpcyB0ZXN0IHRlc3RzIHRoYXQgYSBkaXYg
d2l0aCBjc3Mgb3ZlcmZsb3c6YXV0byB3aWxsIHNjcm9sbCB0byByZXZlYWwgaXRzIGZvY3VzYWJs
ZSBlbGVtZW50cwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0
aW9uL3NuYXYtY2xpcHBlZC1vdmVyZmxvd2VkLWNvbnRlbnQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1jbGlwcGVkLW92
ZXJmbG93ZWQtY29udGVudC5odG1sCShyZXZpc2lvbiA3MTk2MCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWNsaXBwZWQtb3ZlcmZsb3dlZC1jb250
ZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDEzIEBACiAgICAgICBbIkRvd24i
LCAiMSJdLAogICAgICAgWyJEb3duIiwgIjEiXSwKICAgICAgIFsiRG93biIsICIyIl0sCisgICAg
ICBbIkRvd24iLCAiMiJdLAorICAgICAgWyJEb3duIiwgIjIiXSwKICAgICAgIFsiRG93biIsICIz
Il0sCiAgICAgICBbIlVwIiwgIjIiXSwKICAgICAgIFsiVXAiLCAiMiJdLAorICAgICAgWyJVcCIs
ICIyIl0sCisgICAgICBbIlVwIiwgIjEiXSwKICAgICAgIFsiVXAiLCAiMSJdLAogICAgICAgWyJV
cCIsICJzdGFydCJdLAogICAgICAgWyJET05FIiwgIkRPTkUiXQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9sbGFibGUtYnV0LXdp
dGhvdXQtZm9jdXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3JvbGxhYmxl
LWJ1dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzE5
NjApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1k
aXYtc2Nyb2xsYWJsZS1idXQtd2l0aG91dC1mb2N1c2FibGUtY29udGVudC1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzUgKzEsMTkgQEAKLWEKLVRoaXMgaXMgYSBzY3JvbGxhYmxl
IERpdiBjcmVhdGVkIHdpdGggdGhlIENTUyBwcm9wZXJ0eSBvdmVyZmxvdy4KIAotSXQgaGFzIG5v
IGtleWJvYXJkIGZvY3VzYWJsZSBlbGVtZW50cyAuLi4uCiAKIAogCi0KLQotCi0KLQotCi0KLQot
Ci0KLS4uLiBhbmQgc2Nyb2xsYmFycyEKLQotVGhpcyBpcyBhbm90aGVyIHNjcm9sbGFibGUgZGl2
IGNyZWF0ZWQgd2l0aCB0aGUgQ1NTIHByb3BlcnR5IG92ZXJmbG93LgotCi1JdCBoYXMgYWxzbyBu
byBrZXlib2FyZCBmb2N1c2FibGUgZWxlbWVudHMgLi4uLgotCi0KLQotCi0KLQotCi0uLi4gYXMg
d2VsbCBhcyBzY3JvbGxiYXJzIQotCi1lCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxl
bWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50
LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3Vz
ZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
InN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRl
KCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50Lmdl
dEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZl
RWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVu
dC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNl
ZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNT
IGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVu
ZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQi
KSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJpZCIpIGlzICJlbmQiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVF
bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCi0KK1RoaXMgdGVzdCBpcyB0byB0
ZXN0IHRoYXQgYSBzY3JvbGxhYmxlIGRpdiBjYW4gc2Nyb2xsIGFuZCByZXZlYWwgaXRzIGNvbnRl
bnQgZXZlbiBpZiBpdCBkb2VzIG5vdCBoYXZlIGFueSBmb2N1c2FibGUgY29udGVudC4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWRpdi1zY3Jv
bGxhYmxlLWJ1dC13aXRob3V0LWZvY3VzYWJsZS1jb250ZW50Lmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtZGl2LXNjcm9s
bGFibGUtYnV0LXdpdGhvdXQtZm9jdXNhYmxlLWNvbnRlbnQuaHRtbAkocmV2aXNpb24gNzE5NjAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1kaXYt
c2Nyb2xsYWJsZS1idXQtd2l0aG91dC1mb2N1c2FibGUtY29udGVudC5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCwxOSBAQAogICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vamF2
YXNjcmlwdCI+CiAKICAgICB2YXIgcmVzdWx0TWFwID0gWworICAgICAgWyJEb3duIiwgInN0YXJ0
Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAor
ICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAg
IFsiRG93biIsICJzdGFydCJdLAogICAgICAgWyJEb3duIiwgImVuZCJdLAorICAgICAgWyJVcCIg
ICwgImVuZCJdLAorICAgICAgWyJVcCIgICwgImVuZCJdLAorICAgICAgWyJVcCIgICwgImVuZCJd
LAorICAgICAgWyJVcCIgICwgImVuZCJdLAorICAgICAgWyJVcCIgICwgImVuZCJdLAorICAgICAg
WyJVcCIgICwgImVuZCJdLAogICAgICAgWyJVcCIgICwgInN0YXJ0Il0sCiAgICAgICBbIkRPTkUi
LCAiRE9ORSJdCiAgICAgXTsKQEAgLTU5LDIyICs3MSwxNiBAQAogICAgIDxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KICAgPC9oZWFkPgogICA8
Ym9keSBpZD0ic29tZS1jb250ZW50IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCI+Ci0gICAgPGRpdj48YSBpZD0ic3RhcnQiIGhyZWY9ImEiPmE8L2E+PC9kaXY+CisgICAgPGRp
dj48YSBpZD0ic3RhcnQiIGhyZWY9ImEiPjxpbWcgc3JjPSJyZXNvdXJjZXMvZ3JlZW4ucG5nIiB3
aWR0aD0zMCBoZWlnaHQ9MzA+PC9hPjwvZGl2PgogICAgIDxkaXYgY2xhc3M9InNjcm9sbCI+Ci0g
ICAgICA8cD5UaGlzIGlzIGEgc2Nyb2xsYWJsZSBEaXYgY3JlYXRlZCB3aXRoIHRoZSBDU1MgcHJv
cGVydHkgb3ZlcmZsb3cuPC9wPgotICAgICAgPHA+SXQgaGFzIG5vIGtleWJvYXJkIGZvY3VzYWJs
ZSBlbGVtZW50cyAuLi4uPC9wPgotICAgICAgPGJyPjxicj48YnI+PGJyPjxicj48YnI+Ci0gICAg
ICA8YnI+PGJyPjxicj48YnI+PGJyPjxicj4KLSAgICAgIDxwPi4uLiBhbmQgc2Nyb2xsYmFycyE8
L3A+CisgICAgICA8aW1nIHNyYz0icmVzb3VyY2VzL2dyZWVuLnBuZyIgd2lkdGg9MjQwIGhlaWdo
dD0zMDA+CiAgICAgPC9kaXY+CiAKICAgICA8ZGl2IGNsYXNzPSJzY3JvbGwiPgotICAgICAgPHA+
VGhpcyBpcyBhbm90aGVyIHNjcm9sbGFibGUgZGl2IGNyZWF0ZWQgd2l0aCB0aGUgQ1NTIHByb3Bl
cnR5IG92ZXJmbG93LjwvcD4KLSAgICAgIDxwPkl0IGhhcyBhbHNvIG5vIGtleWJvYXJkIGZvY3Vz
YWJsZSBlbGVtZW50cyAuLi4uPC9wPgotICAgICAgPGJyPjxicj48YnI+PGJyPjxicj48YnI+Ci0g
ICAgICA8cD4uLi4gYXMgd2VsbCBhcyBzY3JvbGxiYXJzITwvcD4KKyAgICAgIDxpbWcgc3JjPSJy
ZXNvdXJjZXMvZ3JlZW4ucG5nIiB3aWR0aD0yNDAgaGVpZ2h0PTMwMD4KICAgICA8L2Rpdj4KLSAg
ICA8ZGl2PjxhIGlkPSJlbmQiIGhyZWY9ImEiPmU8L2E+PC9kaXY+CisgICAgPGRpdj48YSBpZD0i
ZW5kIiBocmVmPSJhIj48aW1nIHNyYz0icmVzb3VyY2VzL2dyZWVuLnBuZyIgd2lkdGg9MzAgaGVp
Z2h0PTMwPjwvYT48L2Rpdj4KICAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICBUaGlz
IHRlc3QgaXMgdG8gdGVzdCB0aGF0IGEgc2Nyb2xsYWJsZSBkaXYgY2FuIHNjcm9sbCBhbmQgcmV2
ZWFsIGl0cyBjb250ZW50IGV2ZW4gaWYgaXQgZG9lcyBub3QgaGF2ZSBhbnkgZm9jdXNhYmxlIGNv
bnRlbnQuCiAgIDwvYm9keT4KIDwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS1uby1mb2N1c2FibGUtY29udGVudC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1u
YXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLWZvY3VzYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gNzE5NjApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmln
YXRpb24vc25hdi1pZnJhbWUtbm8tZm9jdXNhYmxlLWNvbnRlbnQtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yLDYgKzIsMTggQEAgYQogCiAKIGUKK1BBU1MgZ0ZvY3VzZWREb2N1bWVu
dC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0Igor
UEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlz
ICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0
ZSgiaWQiKSBpcyAic3RhcnQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgInN0YXJ0IgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2
ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKK1BBU1MgZ0ZvY3VzZWREb2N1
bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgorUEFTUyBnRm9j
dXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJlbmQiCitQ
QVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMg
ImVuZCIKK1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgi
aWQiKSBpcyAiZW5kIgorUEFTUyBnRm9jdXNlZERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0
cmlidXRlKCJpZCIpIGlzICJlbmQiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgImVuZCIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3Rp
dmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiZW5kIgogUEFTUyBnRm9jdXNlZERvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpIGlzICJzdGFydCIKLQorVGhpcyBp
cyB0byB0ZXN0IHRoYXQgYW4gaWZyYW1lIHdpdGggbm8gZm9jdXNhYmxlIGNvbnRlbnQgc3RpbGwg
c2Nyb2xscwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9u
L3NuYXYtaWZyYW1lLW5vLWZvY3VzYWJsZS1jb250ZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLWZv
Y3VzYWJsZS1jb250ZW50Lmh0bWwJKHJldmlzaW9uIDcxOTYwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLW5vLWZvY3VzYWJsZS1jb250
ZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE3LDcgKzE3LDE5IEBACiAgICAgPHNjcmlwdCB0
eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Ij4KIAogICAgIHZhciByZXN1bHRNYXAgPSBbCisg
ICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93biIsICJzdGFydCJdLAorICAgICAg
WyJEb3duIiwgInN0YXJ0Il0sCisgICAgICBbIkRvd24iLCAic3RhcnQiXSwKKyAgICAgIFsiRG93
biIsICJzdGFydCJdLAorICAgICAgWyJEb3duIiwgInN0YXJ0Il0sCiAgICAgICBbIkRvd24iLCAi
ZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisg
ICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCisgICAgICBbIlVw
IiAgLCAiZW5kIl0sCisgICAgICBbIlVwIiAgLCAiZW5kIl0sCiAgICAgICBbIlVwIiAgLCAic3Rh
cnQiXSwKICAgICAgIFsiRE9ORSIsICJET05FIl0KICAgICBdOwpAQCAtNTIsMjMgKzY0LDE4IEBA
CiAKICAgICA8aWZyYW1lIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgc2Nyb2xsaW5nPSJhdXRvIiBz
cmM9ImRhdGE6dGV4dC9odG1sLAogICAgICAgPGJvZHk+Ci0gICAgICAgIDxkaXYgc3R5bGU9J21h
cmdpbi10b3A6MTIwcHgnPgotICAgICAgICAgIDxwPlRoaXMgZnJhbWUgaGFzIHNvbWUgdGV4dCBh
bmQgbm8gZm9jdXNhYmxlIGVsZW1lbnQgLi4uPC9hPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAg
PHA+Li4uIGFuZCBzb21lIG1vcmUgdGV4dCAuLi48L2E+CisgICAgICAgIDxpbWcgd2lkdGg9MTIw
IGhlaWdodD0yMDAgc3JjPSdyZXNvdXJjZXMvZ3JlZW4ucG5nJz4KICAgICAgIDwvYm9keT4KICAg
ICAiPjwvaWZyYW1lPjxicj4KIAogICAgIDxpZnJhbWUgc2Nyb2xsaW5nPSJhdXRvIiBzcmM9ImRh
dGE6dGV4dC9odG1sLAogICAgICAgPGJvZHk+Ci0gICAgICAgIDxkaXYgc3R5bGU9J21hcmdpbi10
b3A6MTIwcHgnPgotICAgICAgICAgIDxwPlRoaXMgZnJhbWUgaGFzIHNvbWUgdGV4dCBhbmQgbm8g
Zm9jdXNhYmxlIGVsZW1lbnQgLi4uPC9hPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgPHA+Li4u
IGFuZCBzb21lIG1vcmUgdGV4dCAuLi48L2E+CisgICAgICAgIDxpbWcgd2lkdGg9MTIwIGhlaWdo
dD0yMDAgc3JjPSdyZXNvdXJjZXMvZ3JlZW4ucG5nJz4KICAgICAgIDwvYm9keT4KICAgICAiPjwv
aWZyYW1lPjxicj4KIAogICAgIDxhIGlkPSJlbmQiIGhyZWY9ImEiPmU8L2E+CiAgICAgPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+CisgICAgVGhpcyBpcyB0byB0ZXN0IHRoYXQgYW4gaWZyYW1lIHdp
dGggbm8gZm9jdXNhYmxlIGNvbnRlbnQgc3RpbGwgc2Nyb2xscwogICA8L2JvZHk+CiA8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1p
ZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8t
c2Nyb2xsYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzE5NjApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Ny
b2xsYWJsZS1jb250ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEs
NyBAQCBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBCiBQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjQiCiBQQVNT
IGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjUi
CiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikg
aXMgIjYiCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUo
ImlkIikgaXMgIjMiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgIjciCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5n
ZXRBdHRyaWJ1dGUoImlkIikgaXMgIjMiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxl
bWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjIiCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtbm8tc2Nyb2xsYWJsZS1jb250ZW50
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZp
Z2F0aW9uL3NuYXYtaWZyYW1lLW5vLXNjcm9sbGFibGUtY29udGVudC5odG1sCShyZXZpc2lvbiA3
MTk2MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2
LWlmcmFtZS1uby1zY3JvbGxhYmxlLWNvbnRlbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogICAgICAgWyJVcCIsICI0Il0sCiAgICAgICBbIlJpZ2h0IiwgIjUiXSwKICAg
ICAgIFsiUmlnaHQiLCAiNiJdLAorICAgICAgWyJVcCIsICIzIl0sCiAgICAgICBbIlJpZ2h0Iiwg
IjciXSwKICAgICAgIFsiVXAiLCAiMyJdLAogICAgICAgWyJVcCIsICIyIl0sCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9zcGF0aWFsLW5hdmlnYXRpb24vc25hdi1pZnJhbWUtd2l0aC1v
ZmZzY3JlZW4tZm9jdXNhYmxlLWVsZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRo
LW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcxOTYw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZy
YW1lLXdpdGgtb2Zmc2NyZWVuLWZvY3VzYWJsZS1lbGVtZW50LWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDkgQEAKLWEKIAotZQorCitQQVNTIGdGb2N1c2VkRG9jdW1lbnQu
YWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjEiCitQQVNTIGdGb2N1c2VkRG9j
dW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjEiCitQQVNTIGdGb2N1
c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjEiCitQQVNT
IGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikgaXMgIjEi
CiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIikg
aXMgIjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUo
ImlkIikgaXMgIjEiCiBQQVNTIGdGb2N1c2VkRG9jdW1lbnQuYWN0aXZlRWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikgaXMgIjEiCkBAIC05LDYgKzEyLDEwIEBAIFBBU1MgZ0ZvY3VzZWREb2N1bWVu
dC5hY3RpdmVFbGVtZW50LmdldEEKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50
LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVF
bGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5h
Y3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKK1BBU1MgZ0ZvY3VzZWREb2N1
bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKK1BBU1MgZ0ZvY3Vz
ZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIKK1BBU1Mg
Z0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBpcyAiMiIK
K1BBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSBp
cyAiMiIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgi
aWQiKSBpcyAiMSIKIFBBU1MgZ0ZvY3VzZWREb2N1bWVudC5hY3RpdmVFbGVtZW50LmdldEF0dHJp
YnV0ZSgiaWQiKSBpcyAic3RhcnQiCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3Nw
YXRpYWwtbmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxl
bWVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwt
bmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC5o
dG1sCShyZXZpc2lvbiA3MTk2MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NwYXRpYWwt
bmF2aWdhdGlvbi9zbmF2LWlmcmFtZS13aXRoLW9mZnNjcmVlbi1mb2N1c2FibGUtZWxlbWVudC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMSArMjIsMTkgQEAKICAgICAgIFsiRG93biIsICIx
Il0sCiAgICAgICBbIkRvd24iLCAiMSJdLAogICAgICAgWyJEb3duIiwgIjEiXSwKKyAgICAgIFsi
RG93biIsICIxIl0sCisgICAgICBbIkRvd24iLCAiMSJdLAorICAgICAgWyJEb3duIiwgIjEiXSwK
KyAgICAgIFsiRG93biIsICIxIl0sCiAgICAgICBbIkRvd24iLCAiMiJdLAogICAgICAgWyJEb3du
IiwgImVuZCJdLAogICAgICAgWyJVcCIsICIyIl0sCiAgICAgICBbIlVwIiwgIjIiXSwKICAgICAg
IFsiVXAiLCAiMiJdLAorICAgICAgWyJVcCIsICIyIl0sCisgICAgICBbIlVwIiwgIjIiXSwKKyAg
ICAgIFsiVXAiLCAiMiJdLAorICAgICAgWyJVcCIsICIyIl0sCiAgICAgICBbIlVwIiwgIjEiXSwK
ICAgICAgIFsiVXAiLCAic3RhcnQiXSwKICAgICAgIFsiRE9ORSIsICJET05FIl0KQEAgLTU4LDE4
ICs2NiwxOSBAQAogICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KICAgPC9oZWFkPgogICA8Ym9keSBpZD0ic29tZS1jb250ZW50IiB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci0gICAgPGRpdj48YSBpZD0ic3RhcnQi
IGhyZWY9ImEiPmE8L2E+PC9kaXY+CisgICAgPGRpdj48YSBpZD0ic3RhcnQiIGhyZWY9ImEiPjxp
bWcgc3JjPSJyZXNvdXJjZXMvZ3JlZW4ucG5nIiB3aWR0aD0zMCBoZWlnaHQ9MzA+PC9hPjwvZGl2
PgogCiAgICAgPGlmcmFtZSB3aWR0aD0iODAiIGhlaWdodD0iODAiIHNjcm9sbGluZz0iYXV0byIg
c3JjPSJkYXRhOnRleHQvaHRtbCwKICAgICAgIDxib2R5PgotICAgICAgICA8YSBpZD0nMScgaHJl
Zj0nYSc+YjwvYT4KLSAgICAgICAgPGRpdiBzdHlsZT0nbWFyZ2luLXRvcDoxMjBweCc+Ci0gICAg
ICAgICAgPGEgaWQ9JzInIGhyZWY9J2EnPmQ8L2E+CisgICAgICAgIDxhIGlkPScxJyBocmVmPSdh
Jz48aW1nIHNyYz0nbm9faW1hZ2UnIHdpZHRoPTMwIGhlaWdodD0zMD48L2E+CisgICAgICAgIDxk
aXY+CisgICAgICAgICAgPGltZyBzcmM9J25vX2ltYWdlJyB3aWR0aD01MCBoZWlnaHQ9MzAwPgor
ICAgICAgICAgIDxhIGlkPScyJyBocmVmPSdhJz48aW1nIHNyYz0nbm9faW1hZ2UnIHdpZHRoPTMw
IGhlaWdodD0zMD48L2E+CiAgICAgICAgIDwvZGl2PgogICAgICAgPC9ib2R5PgogICAgICI+PC9p
ZnJhbWU+PGJyPgogCi0gICAgPGRpdj48YSBpZD0iZW5kIiBocmVmPSJhIj5lPC9hPjwvZGl2Pgor
ICAgIDxkaXY+PGEgaWQ9ImVuZCIgaHJlZj0iYSI+PGltZyBzcmM9InJlc291cmNlcy9ncmVlbi5w
bmciIHdpZHRoPTMwIGhlaWdodD0zMD48L2E+PC9kaXY+CiAgICAgPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+CiAgIDwvYm9keT4KIDwvaHRtbD4K
</data>
<flag name="review"
          id="64490"
          type_id="1"
          status="+"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73990</attachid>
            <date>2010-11-16 07:06:35 -0800</date>
            <delta_ts>2010-11-16 07:10:05 -0800</delta_ts>
            <desc>Patch- code only</desc>
            <filename>49382_code.patch</filename>
            <type>text/plain</type>
            <size>38782</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjA5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMTEtMTYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
CisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q29udHJvbGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseSk6CisgICAg
ICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5o
OgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9jdXNDYW5kaWRhdGU6OkZvY3VzQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmRp
c3RhbmNlRGF0YUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWxpZ25tZW50Rm9yUmVjdHMp
OgorICAgICAgICAoV2ViQ29yZTo6YXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3JlZW5BcGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1JlY3RJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpo
YXNPZmZzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6c2Nyb2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhblNjcm9sbEluRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6bm9kZVJlY3RJ
bkFic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVSZWN0SW5BYnNv
bHV0ZUNvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmVudHJ5QW5kRXhpdFBvaW50c0Zv
ckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5CZVNjcm9sbGVkSW50b1ZpZXcpOgor
ICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaDoKKwogMjAxMC0xMS0xNSAgUGF2ZWwg
RmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZ
dXJ5IFNlbWlraGF0c2t5LgpJbmRleDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDcxOTYwKQorKysgV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDExICs0MCwxMyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKQEAgLTU3LDYgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKK3N0YXRp
YyB2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRh
dGUsIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRj
aEV2ZW50c09uV2luZG93QW5kRm9jdXNlZE5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGZv
Y3VzZWQpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIGZvY3VzZWQgbm9kZSB3ZSBzaG91bGQgZGlz
cGF0Y2ggYmx1ciBvbiBpdCBiZWZvcmUgd2UgYmx1ciB0aGUgd2luZG93LgpAQCAtMjg5LDY0ICsy
OTIsNiBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rp
b25hbGx5KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17
Ci0gICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgQVNTRVJUKGZy
YW1lKTsKLSAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7
Ci0gICAgaWYgKCFmb2N1c2VkRG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZERvY3VtZW50LT5mb2N1c2VkTm9kZSgpOwotICAg
IGlmICghZm9jdXNlZE5vZGUpIHsKLSAgICAgICAgLy8gSnVzdCBtb3ZlIHRvIHRoZSBmaXJzdCBm
b2N1c2FibGUgbm9kZS4KLSAgICAgICAgRm9jdXNEaXJlY3Rpb24gdGFiRGlyZWN0aW9uID0gKGRp
cmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblVwIHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlv
bkxlZnQpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvY3VzRGly
ZWN0aW9uQmFja3dhcmQgOiBGb2N1c0RpcmVjdGlvbkZvcndhcmQ7Ci0gICAgICAgIC8vICdpbml0
aWFsRm9jdXMnIGlzIHNldCB0byB0cnVlIHNvIHRoZSBjaHJvbWUgaXMgbm90IGZvY3VzZWQuCi0g
ICAgICAgIHJldHVybiBhZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIodGFiRGlyZWN0aW9uLCBl
dmVudCwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gTW92ZSB1cCBpbiB0aGUgY2hhaW4gb2YgbmVz
dGVkIGZyYW1lcy4KLSAgICBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRvcCgpOwotCi0gICAgRm9j
dXNDYW5kaWRhdGUgZm9jdXNDYW5kaWRhdGU7Ci0gICAgZmluZEZvY3VzYWJsZU5vZGVJbkRpcmVj
dGlvbihmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RDaGlsZCgpLCBmb2N1c2VkTm9kZSwgZGlyZWN0
aW9uLCBldmVudCwgZm9jdXNDYW5kaWRhdGUpOwotCi0gICAgTm9kZSogbm9kZSA9IGZvY3VzQ2Fu
ZGlkYXRlLm5vZGU7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIGEgd2F5IHRvIGZvY3VzIGEgZG9jdW1lbnQgaGVy
ZS4KLSAgICAgICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgICAg
IHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLCBkaXJlY3Rpb24pOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgY3JhenkganVtcCBiZXR3ZWVu
IGxpbmtzIHRoYXQgYXJlIGVpdGhlciBmYXIgYXdheSBmcm9tIGVhY2ggb3RoZXIsCi0gICAgLy8g
b3IganVzdCBub3QgY3VycmVudGx5IHZpc2libGUsIGxldHMgZG8gYSBzY3JvbGwgaW4gdGhlIGdp
dmVuIGRpcmVjdGlvbiBhbmQgYmFpbCBvdXQKLSAgICAvLyBpZiB8bm9kZXwgZWxlbWVudCBpcyBu
b3QgaW4gdGhlIHZpZXdwb3J0LgotICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0KG5vZGUpKSB7Ci0g
ICAgICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKS0+ZnJhbWUoKTsK
LSAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZnJhbWUsIGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRh
dGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBEb2N1bWVudCogbmV3RG9j
dW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwotCi0gICAgaWYgKG5ld0RvY3VtZW50ICE9IGZvY3Vz
ZWREb2N1bWVudCkgewotICAgICAgICAvLyBGb2N1cyBpcyBnb2luZyBhd2F5IGZyb20gdGhlIG9y
aWdpbmFsbHkgZm9jdXNlZCBkb2N1bWVudCwgc28gY2xlYXIgdGhlIGZvY3VzZWQgbm9kZS4KLSAg
ICAgICAgZm9jdXNlZERvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKLSAgICB9Ci0KLSAgICBp
ZiAobmV3RG9jdW1lbnQpCi0gICAgICAgIHNldEZvY3VzZWRGcmFtZShuZXdEb2N1bWVudC0+ZnJh
bWUoKSk7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5v
ZGUpOwotICAgIEFTU0VSVChlbGVtZW50KTsKLQotICAgIHNjcm9sbEludG9WaWV3KGVsZW1lbnQp
OwotICAgIGVsZW1lbnQtPmZvY3VzKGZhbHNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3Rh
dGljIHZvaWQgdXBkYXRlRm9jdXNDYW5kaWRhdGVJblNhbWVDb250YWluZXIoY29uc3QgRm9jdXND
YW5kaWRhdGUmIGNhbmRpZGF0ZSwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCiB7CiAgICAgaWYg
KGNsb3Nlc3QuaXNOdWxsKCkpIHsKQEAgLTY1OCw0ICs2MDMsMTg4IEBAIHZvaWQgRm9jdXNDb250
cm9sbGVyOjpzZXRBY3RpdmUoYm9vbCBhY3QKICAgICAgICAgZGlzcGF0Y2hFdmVudHNPbldpbmRv
d0FuZEZvY3VzZWROb2RlKG1fZm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpLCBhY3RpdmUpOwogfQog
Cit2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRh
dGUsIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KQoreworICAgIGlmICghY2FuZGlkYXRlLm5vZGUt
PmlzRWxlbWVudE5vZGUoKSB8fCFjYW5kaWRhdGUubm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gSWdub3JlIGVtcHR5IGZyYW1lcworICAgIGlmIChjYW5kaWRhdGUu
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpICYmICFzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25l
ckVsZW1lbnQqPihjYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBJZ25vcmUgb2ZmIHNjcmVlbiBjaGlsZCBub2RlcyBvZiBjb250YWluZXJz
IHRoYXQgZG8gbm90IHNjcm9sbCAob3ZlcmZsb3c6aGlkZGVuKQorICAgIGlmIChoYXNPZmZzY3Jl
ZW5SZWN0KGNhbmRpZGF0ZS5ub2RlKSAmJiAhY2FuQmVTY3JvbGxlZEludG9WaWV3KGRpcmVjdGlv
biwgY2FuZGlkYXRlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRm9jdXNDYW5kaWRhdGUgY3Vy
cmVudDsKKyAgICBjdXJyZW50LnJlY3QgPSBzdGFydGluZ1JlY3Q7CisgICAgZGlzdGFuY2VEYXRh
Rm9yTm9kZShkaXJlY3Rpb24sIGN1cnJlbnQsIGNhbmRpZGF0ZSk7CisgICAgaWYgKGNhbmRpZGF0
ZS5kaXN0YW5jZSA9PSBtYXhEaXN0YW5jZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9uKSAmJiBjYW5kaWRhdGUu
YWxpZ25tZW50IDwgRnVsbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNsb3Nlc3QuaXNO
dWxsKCkpIHsKKyAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEludFJlY3QgaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihub2Rl
UmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjYW5kaWRhdGUubm9kZSwgdHJ1ZSksIG5vZGVSZWN0
SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGNsb3Nlc3Qubm9kZSwgdHJ1ZSkpOworICAgIGlmICghaW50
ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSWYgMiBub2RlcyBhcmUgaW50
ZXJzZWN0aW5nLCBkbyBoaXQgdGVzdCB0byBmaW5kIHdoaWNoIG5vZGUgaW4gb24gdG9wLgorICAg
ICAgICBpbnQgeCA9IGludGVyc2VjdGlvblJlY3QueCgpICsgaW50ZXJzZWN0aW9uUmVjdC53aWR0
aCgpIC8gMjsKKyAgICAgICAgaW50IHkgPSBpbnRlcnNlY3Rpb25SZWN0LnkoKSArIGludGVyc2Vj
dGlvblJlY3QuaGVpZ2h0KCkgLyAyOworICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGNh
bmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQoeCwgeSksIGZhbHNlLCB0cnVlKTsK
KyAgICAgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5jb250YWlucyhyZXN1bHQuaW5uZXJOb2RlKCkp
KSB7CisgICAgICAgICAgICBjbG9zZXN0ID0gY2FuZGlkYXRlOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmIChjbG9zZXN0Lm5vZGUtPmNvbnRhaW5zKHJlc3VsdC5p
bm5lck5vZGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNhbmRp
ZGF0ZS5hbGlnbm1lbnQgPT0gY2xvc2VzdC5hbGlnbm1lbnQpIHsKKyAgICAgICAgaWYgKGNhbmRp
ZGF0ZS5kaXN0YW5jZSA8IGNsb3Nlc3QuZGlzdGFuY2UpCisgICAgICAgICAgICBjbG9zZXN0ID0g
Y2FuZGlkYXRlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNhbmRpZGF0ZS5h
bGlnbm1lbnQgPiBjbG9zZXN0LmFsaWdubWVudCkKKyAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0
ZTsKK30KKwordm9pZCBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c0NhbmRpZGF0ZUluQ29udGFp
bmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0Rp
cmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50LCBGb2N1c0NhbmRpZGF0ZSYg
Y2xvc2VzdCkKK3sKKyAgICBBU1NFUlQoY29udGFpbmVyKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUg
PSBjb250YWluZXItPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IChub2RlLT5pc0ZyYW1lT3du
ZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBub2RlKSkgPyBu
b2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnRhaW5lcikgOiBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKGNvbnRhaW5lcikpIHsKKyAgICAgICAgaWYgKCghZm9jdXNlZEZyYW1lKCkgfHwgIWZvY3Vz
ZWRGcmFtZSgpLT5kb2N1bWVudCgpIHx8IG5vZGUgIT0gZm9jdXNlZEZyYW1lKCktPmRvY3VtZW50
KCktPmZvY3VzZWROb2RlKCkpICYmIChub2RlLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSB8
fCBub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGly
ZWN0aW9uLCBub2RlKSkpIHsKKyAgICAgICAgICAgIEZvY3VzQ2FuZGlkYXRlIGNhbmRpZGF0ZShu
b2RlKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94ID0gY29u
dGFpbmVyOworICAgICAgICAgICAgdXBkYXRlRm9jdXNDYW5kaWRhdGVJZk5lZWRlZChkaXJlY3Rp
b24sIHN0YXJ0aW5nUmVjdCwgY2FuZGlkYXRlLCBjbG9zZXN0KTsKKyAgICAgICAgfQorICAgIH0K
K30KKworYm9vbCBGb2N1c0NvbnRyb2xsZXI6Om5hdmlnYXRlSW5Db250YWluZXIoTm9kZSogY29u
dGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uIGRpcmVj
dGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFjb250YWluZXIgfHwgIWNv
bnRhaW5lci0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhl
IHN0YXJ0aW5nIHJlY3QgaXMgdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgbm9kZSwgaW4gZG9jdW1l
bnQgY29vcmRpbmF0ZXMuCisgICAgLy8gQ29tcG9zZSBhIHZpcnR1YWwgc3RhcnRpbmcgcmVjdCBp
ZiB0aGVyZSBpcyBubyBmb2N1c2VkIG5vZGUgb3IgaWYgaXQgaXMgb2ZmIHNjcmVlbi4KKyAgICAv
LyBUaGUgdmlydHVhbCByZWN0IGlzIHRoZSBlZGdlIG9mIHRoZSBjb250YWluZXIgb3IgZnJhbWUu
IFdlIHNlbGVjdCB3aGljaAorICAgIC8vIGVkZ2UgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24g
b2YgdGhlIG5hdmlnYXRpb24uCisgICAgSW50UmVjdCBuZXdTdGFydGluZ1JlY3QgPSBzdGFydGlu
Z1JlY3Q7CisKKyAgICBpZiAoc3RhcnRpbmdSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBuZXdT
dGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjb250YWluZXIpOwor
ICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
TGVmdDoKKyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRYKG5ld1N0YXJ0aW5nUmVjdC5y
aWdodCgpKTsKKyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRXaWR0aCgwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgICAg
ICBuZXdTdGFydGluZ1JlY3Quc2V0WShuZXdTdGFydGluZ1JlY3QuYm90dG9tKCkpOworICAgICAg
ICAgICAgbmV3U3RhcnRpbmdSZWN0LnNldEhlaWdodCgwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgICAgICBuZXdTdGFydGlu
Z1JlY3Quc2V0V2lkdGgoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1
c0RpcmVjdGlvbkRvd246CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0SGVpZ2h0KDAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbmQgdGhlIGNs
b3Nlc3Qgbm9kZSB3aXRoaW4gY3VycmVudCBjb250YWluZXIgaW4gdGhlIGRpcmVjdGlvbiBvZiB0
aGUgbmF2aWdhdGlvbi4KKyAgICBGb2N1c0NhbmRpZGF0ZSBmb2N1c0NhbmRpZGF0ZTsKKyAgICBm
aW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihjb250YWluZXIsIG5ld1N0YXJ0aW5nUmVjdCwg
ZGlyZWN0aW9uLCBldmVudCwgZm9jdXNDYW5kaWRhdGUpOworCisgICAgaWYgKGZvY3VzQ2FuZGlk
YXRlLmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rp
b24sIGNvbnRhaW5lcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZm9jdXMsIHNjcm9s
bCBpZiBwb3NzaWJsZS4KKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGNvbnRhaW5lciwg
ZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IC8vIFJldHVybiBmYWxzZSB3aWxsIGNhdXNlIGEgcmUtdHJ5LCBza2lwcGluZyB0aGlzIGNvbnRh
aW5lci4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZm9jdXNDYW5kaWRh
dGUubm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIGlmIChoYXNPZmZzY3Jl
ZW5SZWN0KGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAgIEZy
YW1lKiBmcmFtZSA9IGZvY3VzQ2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCktPnZpZXcoKS0+ZnJh
bWUoKTsKKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLT5kb2N1bWVudCgpLCBk
aXJlY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gTmF2aWdhdGUgaW50byBhIG5ldyBmcmFtZS4KKyAgICAgICAgSW50UmVjdCByZWN0OworICAg
ICAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWRPck1haW5GcmFtZSgpLT5kb2N1bWVudCgp
LT5mb2N1c2VkTm9kZSgpOworICAgICAgICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09mZnNjcmVl
blJlY3QoZm9jdXNlZE5vZGUpKQorICAgICAgICAgICAgcmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0
ZUNvb3JkaW5hdGVzKGZvY3VzZWROb2RlLCB0cnVlIC8qIGlnbm9yZSBib3JkZXIgKi8pOworICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZm9jdXNDYW5k
aWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZy
YW1lT3duZXJFbGVtZW50Kj4oZm9jdXNDYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAg
ICAgaWYgKCFuYXZpZ2F0ZUluQ29udGFpbmVyKHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxl
bWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKSwg
cmVjdCwgZGlyZWN0aW9uLCBldmVudCkpCisgICAgICAgICAgICAvLyBUaGUgbmV3IGZyYW1lIGhh
ZCBub3RoaW5nIGludGVyZXN0aW5nLCBza2lwIHBhc3QgaXQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAg
ICAgICAgIHJldHVybiBuYXZpZ2F0ZUluQ29udGFpbmVyKGNvbnRhaW5lciwgbm9kZVJlY3RJbkFi
c29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNDYW5kaWRhdGUubm9kZSwgdHJ1ZSksIGRpcmVjdGlvbiwg
ZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNhblNjcm9sbElu
RGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUubm9kZSkpIHsKKyAgICAgICAgaWYg
KGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9uKSkgeworICAg
ICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIE5hdmln
YXRlIGludG8gYSBuZXcgc2Nyb2xsYWJsZSBjb250YWluZXIuCisgICAgICAgIEludFJlY3QgcmVj
dDsKKyAgICAgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKS0+ZG9j
dW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKKyAgICAgICAgaWYgKGZvY3VzZWROb2RlICYmICFoYXNP
ZmZzY3JlZW5SZWN0KGZvY3VzZWROb2RlKSkKKyAgICAgICAgICAgIHJlY3QgPSBub2RlUmVjdElu
QWJzb2x1dGVDb29yZGluYXRlcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBu
YXZpZ2F0ZUluQ29udGFpbmVyKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHJlY3QsIGRpcmVjdGlvbiwg
ZXZlbnQpOworICAgIH0KKyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChmb2N1c0NhbmRpZGF0ZS5u
b2RlLCBkaXJlY3Rpb24pKSB7CisgICAgICAgIE5vZGUqIGNvbnRhaW5lciA9IGZvY3VzQ2FuZGlk
YXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3g7CisgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGNv
bnRhaW5lciwgZGlyZWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gV2UgZm91bmQgYSBuZXcgZm9jdXMgbm9kZSwgbmF2aWdhdGUgdG8gaXQuCisgICAgRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5ub2RlKTsK
KyAgICBBU1NFUlQoZWxlbWVudCk7CisKKyAgICBlbGVtZW50LT5mb2N1cyhmYWxzZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJl
Y3Rpb25hbGx5KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQp
Cit7CisgICAgRnJhbWUqIGN1ckZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgQVNT
RVJUKGN1ckZyYW1lKTsKKworICAgIERvY3VtZW50KiBmb2N1c2VkRG9jdW1lbnQgPSBjdXJGcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWZvY3VzZWREb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkRG9jdW1lbnQtPmZvY3Vz
ZWROb2RlKCk7CisgICAgTm9kZSogY29udGFpbmVyID0gZm9jdXNlZERvY3VtZW50OworCisgICAg
Ly8gRmlndXJlIG91dCB0aGUgc3RhcnRpbmcgcmVjdC4KKyAgICBJbnRSZWN0IHN0YXJ0aW5nUmVj
dDsKKyAgICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09mZnNjcmVlblJlY3QoZm9jdXNlZE5vZGUp
KSB7CisgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVPckZyYW1lUGFyZW50Rm9yTm9kZUFu
ZERpcmVjdGlvbihkaXJlY3Rpb24sIGZvY3VzZWROb2RlKTsKKyAgICAgICAgc3RhcnRpbmdSZWN0
ID0gbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNlZE5vZGUsIHRydWUgLyogaWdu
b3JlIGJvcmRlciAqLyk7CisgICAgfQorCisgICAgYm9vbCBjb25zdW1lZCA9IGZhbHNlOworICAg
IGRvIHsKKyAgICAgICAgaWYgKGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGFpbmVyKS0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgIGNvbnN1bWVkID0gbmF2aWdhdGVJbkNvbnRh
aW5lcihjb250YWluZXIsIHN0YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAg
IHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnRhaW5lciwg
dHJ1ZSAvKiBpZ25vcmUgYm9yZGVyICovKTsKKyAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJs
ZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKGRpcmVjdGlvbiwgY29udGFpbmVyKTsK
KyAgICB9IHdoaWxlICghY29uc3VtZWQgJiYgY29udGFpbmVyKTsKKworICAgIHJldHVybiBjb25z
dW1lZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuaAkocmV2aXNpb24gNzE5NjApCisrKyBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9jdXNDYW5kaWRhdGUmIHBhcmVudENhbmRp
ZGF0ZSA9IEZvY3VzQ2FuZGlkYXRlKCkpOwogICAgIHZvaWQgZGVlcEZpbmRGb2N1c2FibGVOb2Rl
SW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBOb2RlKiBmb2N1c2VkLCBGb2N1c0RpcmVjdGlv
biwgS2V5Ym9hcmRFdmVudCosIEZvY3VzQ2FuZGlkYXRlJik7CiAKKyAgICBib29sIG5hdmlnYXRl
SW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3Qs
IEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBmaW5kRm9jdXNDYW5k
aWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5n
UmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0NhbmRpZGF0ZSYgY2xv
c2VzdCk7CisKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgUmVmUHRyPEZyYW1lPiBtX2ZvY3VzZWRG
cmFtZTsKICAgICBib29sIG1faXNBY3RpdmU7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA3MTk2
MCkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYg
KzIzNSw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnJhbWVWaWV3U2Nyb2xsQ29ybmVyKFJlbmRl
clNjcm9sbGJhclBhcnQqIHNjcm9sbENvcm5lcikgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3Ju
ZXIgPT0gc2Nyb2xsQ29ybmVyOyB9CiAgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKCk7
CiAKKyAgICB2b2lkIGNhbGN1bGF0ZVNjcm9sbGJhck1vZGVzRm9yTGF5b3V0KFNjcm9sbGJhck1v
ZGUmIGhNb2RlLCBTY3JvbGxiYXJNb2RlJiB2TW9kZSk7CisKICAgICAvLyBOb3JtYWwgZGVsYXkK
ICAgICBzdGF0aWMgdm9pZCBzZXRSZXBhaW50VGhyb3R0bGluZ0RlZmVycmVkUmVwYWludERlbGF5
KGRvdWJsZSBwKTsKICAgICAvLyBOZWdhdGl2ZSB2YWx1ZSB3b3VsZCBtZWFuIHRoYXQgZmlyc3Qg
ZmV3IHJlcGFpbnRzIGhhcHBlbiB3aXRob3V0IGEgZGVsYXkKQEAgLTI2NCw3ICsyNjYsNiBAQCBw
cml2YXRlOgogICAgIGJvb2wgaGFzRml4ZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9maXhl
ZE9iamVjdENvdW50ID4gMDsgfQogCiAgICAgdm9pZCBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChS
ZW5kZXJPYmplY3QqLCBTY3JvbGxiYXJNb2RlJiBoTW9kZSwgU2Nyb2xsYmFyTW9kZSYgdk1vZGUp
OwotICAgIHZvaWQgY2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNGb3JMYXlvdXQoU2Nyb2xsYmFyTW9k
ZSYgaE1vZGUsIFNjcm9sbGJhck1vZGUmIHZNb2RlKTsKIAogICAgIHZvaWQgdXBkYXRlT3ZlcmZs
b3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7
CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNzE5NjApCisr
KyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxMiArNDMsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgbG9uZyBsb25nIHNw
YXRpYWxEaXN0YW5jZShGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmKTsKIHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRvUm9vdERvY3VtZW50KFJl
bmRlck9iamVjdCopOwotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGljIFJl
Y3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKTsKIHN0YXRpYyBi
b29sIGFyZVJlY3RzRnVsbHlBbGlnbmVkKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgSW50UmVjdCYpOwogc3RhdGljIGJvb2wgYXJlUmVjdHNQYXJ0aWFsbHlBbGlnbmVkKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGljIGJv
b2wgYXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3JlZW5BcGFydChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEludFNpemUmIHZpZXdTaXplKTsKIHN0YXRpYyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIHZv
aWQgZGVmbGF0ZUlmT3ZlcmxhcHBlZChJbnRSZWN0JiwgSW50UmVjdCYpOwogc3RhdGljIGJvb2wg
Y2hlY2tOZWdhdGl2ZUNvb3Jkc0Zvck5vZGUoTm9kZSosIGNvbnN0IEludFJlY3QmKTsKK3N0YXRp
YyBJbnRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqIGluaXRpYWxGcmFtZSwg
Y29uc3QgSW50UmVjdCYgcmVjdCk7CitzdGF0aWMgdm9pZCBlbnRyeUFuZEV4aXRQb2ludHNGb3JE
aXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGlu
Z1JlY3QsIGNvbnN0IEludFJlY3QmIHBvdGVudGlhbFJlY3QsIEludFBvaW50JiBleGl0UG9pbnQs
IEludFBvaW50JiBlbnRyeVBvaW50KTsKKworCitGb2N1c0NhbmRpZGF0ZTo6Rm9jdXNDYW5kaWRh
dGUoTm9kZSogbikKKyAgICA6IG5vZGUobikKKyAgICAsIGVuY2xvc2luZ1Njcm9sbGFibGVCb3go
MCkKKyAgICAsIGRpc3RhbmNlKG1heERpc3RhbmNlKCkpCisgICAgLCBwYXJlbnREaXN0YW5jZSht
YXhEaXN0YW5jZSgpKQorICAgICwgYWxpZ25tZW50KE5vbmUpCisgICAgLCBwYXJlbnRBbGlnbm1l
bnQoTm9uZSkKKyAgICAsIHJlY3Qobm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMobiwgdHJ1
ZSAvKiBpZ25vcmUgYm9yZGVyICovKSkKK3sKK30KIAogYm9vbCBpc1NwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZChjb25zdCBGcmFtZSogZnJhbWUpCiB7CkBAIC0xMDIsNyArMTE3LDggQEAgdm9pZCBk
aXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uIAogICAgIC8vIFRoZSBkaXN0YW5jZSBi
ZXR3ZWVuIHR3byBub2RlcyBpcyBub3QgdG8gYmUgY29uc2lkZXJlZCBhbG9uZSB3aGVuIGV2YWx1
YXRpbmcvbG9va2luZwogICAgIC8vIGZvciB0aGUgYmVzdCBmb2N1cyBjYW5kaWRhdGUgbm9kZS4g
QWxpZ25tZW50IG9mIHJlY3RzIGNhbiBiZSBhbHNvIGEgZ29vZCBwb2ludCB0byBiZQogICAgIC8v
IGNvbnNpZGVyZWQgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYWxnb3JpdGhtIHRvIGJlaGF2aW9yIGlu
IGEgbW9yZSBpbnR1aXRpdmUgd2F5LgotICAgIGNhbmRpZGF0ZS5hbGlnbm1lbnQgPSBhbGlnbm1l
bnRGb3JSZWN0cyhkaXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpOworICAgIEludFNpemUg
dmlld1NpemUgPSBjYW5kaWRhdGUubm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUo
KS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7CisgICAgY2FuZGlkYXRlLmFs
aWdubWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVj
dCwgdmlld1NpemUpOwogICAgIGNhbmRpZGF0ZS5kaXN0YW5jZSA9IHNwYXRpYWxEaXN0YW5jZShk
aXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpOwogfQogCkBAIC0xMzYsOCArMTUyLDEyIEBA
IHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRvUm9vdEQKICAgICByZXR1cm4gcmVj
dDsKIH0KIAotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVjdCwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0UmVjdCkKK3N0YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKQogeworICAgIC8vIElmIHdl
IGZvdW5kIGEgbm9kZSBpbiBmdWxsIGFsaWdubWVudCwgYnV0IGl0IGlzIHRvbyBmYXIgYXdheSwg
aWdub3JlIGl0LgorICAgIGlmIChhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwYXJ0KGRpcmVj
dGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCwgdmlld1NpemUpKQorICAgICAgICByZXR1cm4gTm9u
ZTsKKwogICAgIGlmIChhcmVSZWN0c0Z1bGx5QWxpZ25lZChkaXJlY3Rpb24sIGN1clJlY3QsIHRh
cmdldFJlY3QpKQogICAgICAgICByZXR1cm4gRnVsbDsKIApAQCAtMjc3LDYgKzI5NywyNSBAQCBz
dGF0aWMgYm9vbCBhcmVSZWN0c1BhcnRpYWxseUFsaWduZWQoRm9jCiAgICAgICAgICAgICB8fCAo
YkVuZCA+PSBhU3RhcnQgJiYgYkVuZCA8PSBhRW5kKSk7CiB9CiAKK3N0YXRpYyBib29sIGFyZVJl
Y3RzTW9yZVRoYW5GdWxsU2NyZWVuQXBhcnQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRT
aXplJiB2aWV3U2l6ZSkKK3sKKyAgICBBU1NFUlQoaXNSZWN0SW5EaXJlY3Rpb24oZGlyZWN0aW9u
LCBjdXJSZWN0LCB0YXJnZXRSZWN0KSk7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0
YXJnZXRSZWN0LnJpZ2h0KCkgPiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueCgpIC0gY3VyUmVjdC5yaWdo
dCgpID4gdmlld1NpemUud2lkdGgoKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAg
ICAgIHJldHVybiBjdXJSZWN0LnkoKSAtIHRhcmdldFJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5o
ZWlnaHQoKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgcmV0dXJuIHRh
cmdldFJlY3QueSgpIC0gY3VyUmVjdC5ib3R0b20oKSA+IHZpZXdTaXplLmhlaWdodCgpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9CisKIC8vIFJldHVybiB0cnVlIGlmIHJlY3QgfGF8IGlzIGJlbG93IHxi
fC4gRmFsc2Ugb3RoZXJ3aXNlLgogc3RhdGljIGlubGluZSBib29sIGJlbG93KGNvbnN0IEludFJl
Y3QmIGEsIGNvbnN0IEludFJlY3QmIGIpCiB7CkBAIC00MDMsMjkgKzQ0MiwyNSBAQCBzdGF0aWMg
bG9uZyBsb25nIHNwYXRpYWxEaXN0YW5jZShGb2N1c0RpCiAKIHN0YXRpYyBib29sIGlzUmVjdElu
RGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVj
dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBJbnRQb2ludCBjZW50ZXIodGFy
Z2V0UmVjdC5jZW50ZXIoKSk7Ci0gICAgaW50IHRhcmdldE1pZGRsZSA9IGlzSG9yaXpvbnRhbE1v
dmUoZGlyZWN0aW9uKSA/IGNlbnRlci54KCkgOiBjZW50ZXIueSgpOwotCiAgICAgc3dpdGNoIChk
aXJlY3Rpb24pIHsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgcmV0dXJu
IHRhcmdldE1pZGRsZSA8IGN1clJlY3QueCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC5y
aWdodCgpIDw9IGN1clJlY3QueCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAg
ICAgICAgcmV0dXJuIHRhcmdldE1pZGRsZSA+IGN1clJlY3QucmlnaHQoKTsKKyAgICAgICByZXR1
cm4gdGFyZ2V0UmVjdC54KCkgPj0gY3VyUmVjdC5yaWdodCgpOwogICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25VcDoKLSAgICAgICAgcmV0dXJuIHRhcmdldE1pZGRsZSA8IGN1clJlY3QueSgpOworICAg
ICAgICByZXR1cm4gdGFyZ2V0UmVjdC5ib3R0b20oKSA8PSBjdXJSZWN0LnkoKTsKICAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0dXJuIHRhcmdldE1pZGRsZSA+IGN1clJl
Y3QuYm90dG9tKCk7CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSA+PSBjdXJSZWN0LmJv
dHRvbSgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwogfQogCiAvLyBD
aGVja3MgaWYgfG5vZGV8IGlzIG9mZnNjcmVlbiB0aGUgdmlzaWJsZSBhcmVhICh2aWV3cG9ydCkg
b2YgaXRzIGNvbnRhaW5lcgogLy8gZG9jdW1lbnQuIEluIGNhc2UgaXQgaXMsIG9uZSBjYW4gc2Ny
b2xsIGluIGRpcmVjdGlvbiBvciB0YWtlIGFueSBkaWZmZXJlbnQKIC8vIGRlc2lyZWQgYWN0aW9u
IGxhdGVyIG9uLgotYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCitib29sIGhhc09m
ZnNjcmVlblJlY3QoTm9kZSogbm9kZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAg
IC8vIEdldCB0aGUgRnJhbWVWaWV3IGluIHdoaWNoIHxub2RlfCBpcyAod2hpY2ggbWVhbnMgdGhl
IGN1cnJlbnQgdmlld3BvcnQgaWYgfG5vZGV8CiAgICAgLy8gaXMgbm90IGluIGFuIGlubmVyIGRv
Y3VtZW50KSwgc28gd2UgY2FuIGNoZWNrIGlmIGl0cyBjb250ZW50IHJlY3QgaXMgdmlzaWJsZQpA
QCAtNDM1LDYgKzQ3MCwyNiBAQCBib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBJbnRSZWN0IGNvbnRhaW5lclZpZXdwb3J0UmVjdCA9
IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgLy8gV2Ugd2FudCB0byBzZWxl
Y3QgYSBub2RlIGlmIGl0IGlzIGN1cnJlbnRseSBvZmYgc2NyZWVuLCBidXQgd2lsbCBiZQorICAg
IC8vIGV4cG9zZWQgYWZ0ZXIgd2Ugc2Nyb2xsLiBBZGp1c3QgdGhlIHZpZXdwb3J0IHRvIHBvc3Qt
c2Nyb2xsaW5nIHBvc2l0aW9uLgorICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRYKGNv
bnRhaW5lclZpZXdwb3J0UmVjdC54KCkgLSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkp
OworICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0V2lkdGgoY29udGFpbmVyVmlld3Bv
cnRSZWN0LndpZHRoKCkgKyBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGNvbnRhaW5l
clZpZXdwb3J0UmVjdC5zZXRXaWR0aChjb250YWluZXJWaWV3cG9ydFJlY3Qud2lkdGgoKSArIFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldFkoY29u
dGFpbmVyVmlld3BvcnRSZWN0LnkoKSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7
CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRIZWlnaHQoY29udGFpbmVyVmlld3Bv
cnRSZWN0LmhlaWdodCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIGNvbnRhaW5l
clZpZXdwb3J0UmVjdC5zZXRIZWlnaHQoY29udGFpbmVyVmlld3BvcnRSZWN0LmhlaWdodCgpICsg
U2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXIg
PSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyKQpAQCAtNDQ3LDM2ICs1MDIsNzIg
QEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuICFjb250YWlu
ZXJWaWV3cG9ydFJlY3QuaW50ZXJzZWN0cyhyZWN0KTsKIH0KIAotLy8gSW4gYSBib3R0b20tdXAg
d2F5LCB0aGlzIG1ldGhvZCB0cmllcyB0byBzY3JvbGwgfGZyYW1lfCBpbiBhIGdpdmVuIGRpcmVj
dGlvbgotLy8gfGRpcmVjdGlvbnwsIGdvaW5nIHVwIGluIHRoZSBmcmFtZSB0cmVlIGhpZXJhcmNo
eSBpbiBjYXNlIGl0IGRvZXMgbm90IHN1Y2NlZWQuCi1ib29sIHNjcm9sbEluRGlyZWN0aW9uKEZy
YW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhbmRpZGF0
ZSYgY2FuZGlkYXRlKQorYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihGcmFtZSogZnJhbWUsIEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgQVNTRVJUKGZyYW1lICYmIGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlv
biwgZnJhbWUtPmRvY3VtZW50KCkpKTsKIAotICAgIFNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJl
Y3Rpb247CisgICAgaWYgKGZyYW1lICYmIGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwg
ZnJhbWUtPmRvY3VtZW50KCkpKSB7CisgICAgICAgIGludCBkeCA9IDA7CisgICAgICAgIGludCBk
eSA9IDA7CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25MZWZ0OgorICAgICAgICAgICAgZHggPSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
UmlnaHQ6CisgICAgICAgICAgICBkeCA9IFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAg
ICAgICAgICBkeSA9IC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICAgICAg
ZHkgPSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKLSAgICBzd2l0Y2ggKGRpcmVjdGlv
bikgewotICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgotICAgICAgICBzY3JvbGxEaXJlY3Rp
b24gPSBTY3JvbGxMZWZ0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
UmlnaHQ6Ci0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFJpZ2h0OwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6Ci0gICAgICAgIHNjcm9sbERpcmVjdGlv
biA9IFNjcm9sbFVwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93
bjoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRG93bjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmcmFtZS0+dmll
dygpLT5zY3JvbGxCeShJbnRTaXplKGR4LCBkeSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgaWYgKCFjYW5kaWRhdGUuaXNOdWxsKCkg
JiYgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJs
ZUJveCkpCi0gICAgICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vy
c2l2ZWx5KHNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lLCBjYW5kaWRhdGUuZW5jbG9zaW5n
U2Nyb2xsYWJsZUJveCk7Citib29sIHNjcm9sbEluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwg
Rm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIGlmIChjb250YWluZXItPmlzRG9jdW1l
bnROb2RlKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxJbkRpcmVjdGlvbihzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KGNvbnRhaW5lciktPmZyYW1lKCksIGRpcmVjdGlvbik7CisKKyAgICBpZiAoIWNv
bnRhaW5lci0+cmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KHNjcm9sbERpcmVjdGlv
biwgU2Nyb2xsQnlMaW5lKTsKKyAgICBpZiAoY29udGFpbmVyICYmIGNhblNjcm9sbEluRGlyZWN0
aW9uKGRpcmVjdGlvbiwgY29udGFpbmVyKSkgeworICAgICAgICBpbnQgZHggPSAwOworICAgICAg
ICBpbnQgZHkgPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIGR4ID0gLSBtaW4oU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxMZWZ0KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoK
KyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxXaWR0aCgp
ID4gKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNvbnRhaW5lci0+cmVu
ZGVyQm94KCktPmNsaWVudFdpZHRoKCkpKTsKKyAgICAgICAgICAgIGR4ID0gbWluKFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsV2lk
dGgoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxMZWZ0KCkgKyBjb250YWluZXIt
PnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICAgICAgZHkgPSAtIG1pbihTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFRv
cCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93
bjoKKyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxIZWln
aHQoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSArIGNvbnRhaW5lci0+
cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAgICAgICBkeSA9IG1pbihTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9s
bEhlaWdodCgpIC0gKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFRvcCgpICsgY29udGFp
bmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjb250YWluZXItPnJl
bmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGR4LCBkeSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZv
aWQgc2Nyb2xsSW50b1ZpZXcoRWxlbWVudCogZWxlbWVudCkKQEAgLTUzNCw3ICs2MjUsNyBAQCBz
dGF0aWMgYm9vbCBjaGVja05lZ2F0aXZlQ29vcmRzRm9yTm9kZShOCiAgICAgcmV0dXJuIGNhbkJl
U2Nyb2xsZWQ7CiB9CiAKLWJvb2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShOb2RlKiBub2Rl
KQorYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NjcsNCArNjU4LDIzOSBA
QCBib29sIGlzTm9kZURlZXBEZXNjZW5kYW50T2ZEb2N1bWVudChOb2RlCiAgICAgcmV0dXJuIGRl
c2NlbmRhbnQ7CiB9CiAKK05vZGUqIHNjcm9sbGFibGVPckZyYW1lUGFyZW50Rm9yTm9kZUFuZERp
cmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIG5vZGUpCit7CisgICAgQVNT
RVJUKG5vZGUpOworICAgIE5vZGUqIHBhcmVudCA9IG5vZGU7CisgICAgZG8geworICAgICAgICBp
ZiAocGFyZW50LT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAgICAgcGFyZW50ID0gc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihwYXJlbnQpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5vd25lckVsZW1l
bnQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRO
b2RlKCk7CisgICAgfSB3aGlsZSAocGFyZW50ICYmICFjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJl
Y3Rpb24sIHBhcmVudCkgJiYgIXBhcmVudC0+aXNEb2N1bWVudE5vZGUoKSk7CisKKyAgICByZXR1
cm4gcGFyZW50OworfQorCitib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbiwgY29uc3QgTm9kZSogY29udGFpbmVyKQoreworICAgIEFTU0VSVChjb250YWlu
ZXIpOworICAgIGlmIChjb250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVy
biBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIHN0YXRpY19jYXN0PGNvbnN0IERvY3Vt
ZW50Kj4oY29udGFpbmVyKS0+ZnJhbWUoKSk7CisKKyAgICBpZiAoIWlzU2Nyb2xsYWJsZUNvbnRh
aW5lck5vZGUoY29udGFpbmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNo
IChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgcmV0
dXJuIChjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9ISURE
RU4gJiYgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpID4gMCk7CisgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICByZXR1cm4gKGNvbnRhaW5lci0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+b3ZlcmZsb3dZKCkgIT0gT0hJRERFTiAmJiBjb250YWluZXItPnJlbmRlckJv
eCgpLT5zY3JvbGxUb3AoKSA+IDApOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAg
ICAgICAgcmV0dXJuIChjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WCgp
ICE9IE9ISURERU4gJiYgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29u
dGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94
KCktPnNjcm9sbFdpZHRoKCkpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAg
ICByZXR1cm4gKGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dZKCkgIT0g
T0hJRERFTiAmJiBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSArIGNvbnRhaW5l
ci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpIDwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+
c2Nyb2xsSGVpZ2h0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIGNhblNjcm9sbElu
RGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnJhbWUqIGZyYW1lKQor
eworICAgIGlmICghZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFNj
cm9sbGJhck1vZGUgdmVydGljYWxNb2RlOworICAgIFNjcm9sbGJhck1vZGUgaG9yaXpvbnRhbE1v
ZGU7CisgICAgZnJhbWUtPnZpZXcoKS0+Y2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNGb3JMYXlvdXQo
aG9yaXpvbnRhbE1vZGUsIHZlcnRpY2FsTW9kZSk7CisgICAgaWYgKChkaXJlY3Rpb24gPT0gRm9j
dXNEaXJlY3Rpb25MZWZ0IHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblJpZ2h0KSAmJiBT
Y3JvbGxiYXJBbHdheXNPZmYgPT0gaG9yaXpvbnRhbE1vZGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblVwIHx8IGRpcmVjdGlvbiA9
PSBGb2N1c0RpcmVjdGlvbkRvd24pICYmICBTY3JvbGxiYXJBbHdheXNPZmYgPT0gdmVydGljYWxN
b2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW50U2l6ZSBzaXplID0gZnJhbWUtPnZp
ZXcoKS0+Y29udGVudHNTaXplKCk7CisgICAgSW50U2l6ZSBvZmZzZXQgPSBmcmFtZS0+dmlldygp
LT5zY3JvbGxPZmZzZXQoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS0+dmlldygpLT52aXNp
YmxlQ29udGVudFJlY3QodHJ1ZSk7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gb2Zmc2V0LndpZHRoKCkgPiAw
OworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgcmV0dXJuIG9mZnNldC5oZWln
aHQoKSA+IDA7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4g
cmVjdC53aWR0aCgpICsgb2Zmc2V0LndpZHRoKCkgPCBzaXplLndpZHRoKCk7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHJldHVybiByZWN0LmhlaWdodCgpICsgb2Zmc2V0
LmhlaWdodCgpIDwgc2l6ZS5oZWlnaHQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3N0YXRpYyBJbnRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMoRnJh
bWUqIGluaXRpYWxGcmFtZSwgY29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QpCit7CisgICAgSW50
UmVjdCByZWN0ID0gaW5pdGlhbFJlY3Q7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBpbml0aWFs
RnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAg
IGlmIChFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZyYW1lLT5vd25l
ckVsZW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZWN0Lm1v
dmUoZWxlbWVudC0+b2Zmc2V0TGVmdCgpLCBlbGVtZW50LT5vZmZzZXRUb3AoKSk7CisgICAgICAg
ICAgICB9IHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7CisgICAg
ICAgICAgICByZWN0Lm1vdmUoKC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiByZWN0OworfQorCitJbnRSZWN0IG5vZGVSZWN0SW5B
YnNvbHV0ZUNvb3JkaW5hdGVzKE5vZGUqIG5vZGUsIGJvb2wgaWdub3JlQm9yZGVyKQoreworICAg
IEFTU0VSVChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkpOworCisgICAgaWYgKG5vZGUtPmlzRG9j
dW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0
ZXMoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKS0+ZnJhbWUoKSk7CisgICAgSW50UmVjdCBy
ZWN0ID0gcmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyhub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgp
LCBub2RlLT5nZXRSZWN0KCkpOworCisgICAgLy8gRm9yIGF1dGhvcnMgdGhhdCB1c2UgYm9yZGVy
IGluc3RlYWQgb2Ygb3V0bGluZSBpbiB0aGVpciBDU1MsIHdlIGNvbXBlbnNhdGUgYnkgaWdub3Jp
bmcgdGhlIGJvcmRlciB3aGVuIGNhbGN1bGF0aW5nCisgICAgLy8gdGhlIHJlY3Qgb2YgdGhlIGZv
Y3VzZWQgZWxlbWVudC4KKyAgICBpZiAoaWdub3JlQm9yZGVyKSB7CisgICAgICAgIHJlY3QubW92
ZShub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwgbm9kZS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSk7CisgICAgICAgIHJlY3Quc2V0V2lk
dGgocmVjdC53aWR0aCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdp
ZHRoKCkgLSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCkpOwor
ICAgICAgICByZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJv
cmRlckJvdHRvbVdpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UmVj
dCBmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqIGZyYW1lKQoreworICAgIHJl
dHVybiByZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKGZyYW1lLCBmcmFtZS0+dmlldygpLT52aXNp
YmxlQ29udGVudFJlY3QoKSk7Cit9CisKKy8vIEV4aXQgcG9pbnQgaXMgdGhlIGNsb3Nlc3QgcG9p
bnQgaW4gdGhlIHN0YXJ0aW5nUmVjdCwgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhl
IG5hdmlnYXRpb24uCisvLyBFbnRyeSBwb2ludCBpcyB0aGUgY2xvc2VzdCBwb2ludCBpbiB0aGUg
Y2FuZGlkYXRlIG5vZGUsIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0
aW9uLgordm9pZCBlbnRyeUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIGNvbnN0IEludFJlY3QmIHBv
dGVudGlhbFJlY3QsIEludFBvaW50JiBleGl0UG9pbnQsIEludFBvaW50JiBlbnRyeVBvaW50KQor
eworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6
CisgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICBlbnRy
eVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5yaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1Jl
Y3QueSgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QuYm90dG9tKCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAg
IGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgZW50cnlQb2lu
dC5zZXRYKHBvdGVudGlhbFJlY3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1
c0RpcmVjdGlvbkRvd246CisgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5nUmVjdC5ib3R0
b20oKSk7CisgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkxlZnQ6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBpZiAoYmVsb3co
c3RhcnRpbmdSZWN0LCBwb3RlbnRpYWxSZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNl
dFkoc3RhcnRpbmdSZWN0LnkoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50
aWFsUmVjdC5ib3R0b20oKSk7CisgICAgICAgIH0gZWxzZSBpZiAoYmVsb3cocG90ZW50aWFsUmVj
dCwgc3RhcnRpbmdSZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdS
ZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0
LnkoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgo
c3RhcnRpbmdSZWN0LnkoKSwgcG90ZW50aWFsUmVjdC55KCkpKTsKKyAgICAgICAgICAgIGVudHJ5
UG9pbnQuc2V0WShleGl0UG9pbnQueSgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Cisg
ICAgICAgIGlmIChyaWdodE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkpIHsKKyAgICAg
ICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICAgICAgZW50
cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
cmlnaHRPZihwb3RlbnRpYWxSZWN0LCBzdGFydGluZ1JlY3QpKSB7CisgICAgICAgICAgICBleGl0
UG9pbnQuc2V0WChzdGFydGluZ1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50
LnNldFgocG90ZW50aWFsUmVjdC54KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZXhpdFBvaW50LnNldFgobWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgpKSk7
CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFgoZXhpdFBvaW50LngoKSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCit2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBGb2N1c0NhbmRpZGF0ZSYgY3VycmVudCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRp
ZGF0ZSkKK3sKKyAgICBpZiAoY2FuZGlkYXRlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCFjYW5kaWRhdGUubm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IEludFJlY3Qgbm9kZVJlY3QgPSBjYW5kaWRhdGUucmVjdDsKKyAgICBJbnRSZWN0IGN1cnJlbnRS
ZWN0ID0gY3VycmVudC5yZWN0OworICAgIGRlZmxhdGVJZk92ZXJsYXBwZWQoY3VycmVudFJlY3Qs
IG5vZGVSZWN0KTsKKworICAgIGlmICghaXNSZWN0SW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBjdXJy
ZW50UmVjdCwgbm9kZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBleGl0
UG9pbnQ7CisgICAgSW50UG9pbnQgZW50cnlQb2ludDsKKyAgICBpbnQgc2FtZUF4aXNEaXN0YW5j
ZSA9IDA7CisgICAgaW50IG90aGVyQXhpc0Rpc3RhbmNlID0gMDsKKyAgICBlbnRyeUFuZEV4aXRQ
b2ludHNGb3JEaXJlY3Rpb24oZGlyZWN0aW9uLCBjdXJyZW50UmVjdCwgbm9kZVJlY3QsIGV4aXRQ
b2ludCwgZW50cnlQb2ludCk7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0gZXhpdFBvaW50
LngoKSAtIGVudHJ5UG9pbnQueCgpOworICAgICAgICBvdGhlckF4aXNEaXN0YW5jZSA9IGFicyhl
eGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBleGl0UG9pbnQu
eSgpIC0gZW50cnlQb2ludC55KCk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJzKGV4
aXRQb2ludC54KCkgLSBlbnRyeVBvaW50LngoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGVudHJ5UG9p
bnQueCgpIC0gZXhpdFBvaW50LngoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnMo
ZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBlbnRyeVBv
aW50LnkoKSAtIGV4aXRQb2ludC55KCk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJz
KGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaW50IHggPSAoZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpKSAqIChl
bnRyeVBvaW50LngoKSAtIGV4aXRQb2ludC54KCkpOworICAgIGludCB5ID0gKGVudHJ5UG9pbnQu
eSgpIC0gZXhpdFBvaW50LnkoKSkgKiAoZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpKTsK
KworICAgIGZsb2F0IGV1Y2xpZGlhbkRpc3RhbmNlID0gc3FydCgoeCArIHkpICogMS4wZik7CisK
KyAgICAvLyBMb29zZWx5IGJhc2VkIG9uIGh0dHA6Ly93d3cudzMub3JnL1RSL1dJQ0QvI2ZvY3Vz
LWhhbmRsaW5nCisgICAgLy8gZGYgPSBkb3REaXN0ICsgZHggKyBkeSArIDIgKiAoeGRpc3BsYWNl
bWVudCArIHlkaXNwbGFjZW1lbnQpIC0gc3FydChPdmVybGFwKQorCisgICAgZmxvYXQgZGlzdGFu
Y2UgPSBldWNsaWRpYW5EaXN0YW5jZSArIHNhbWVBeGlzRGlzdGFuY2UgKyAyICogb3RoZXJBeGlz
RGlzdGFuY2U7CisgICAgY2FuZGlkYXRlLmRpc3RhbmNlID0gcm91bmRmKGRpc3RhbmNlKTsKKyAg
ICBJbnRTaXplIHZpZXdTaXplID0gY2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpOworICAgIGNh
bmRpZGF0ZS5hbGlnbm1lbnQgPSBhbGlnbm1lbnRGb3JSZWN0cyhkaXJlY3Rpb24sIGN1cnJlbnRS
ZWN0LCBub2RlUmVjdCwgdmlld1NpemUpOworfQorCitib29sIGNhbkJlU2Nyb2xsZWRJbnRvVmll
dyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCit7
CisgICAgQVNTRVJUKGNhbmRpZGF0ZS5ub2RlICYmIGhhc09mZnNjcmVlblJlY3QoY2FuZGlkYXRl
Lm5vZGUpKTsKKyAgICBJbnRSZWN0IGNhbmRpZGF0ZVJlY3QgPSBub2RlUmVjdEluQWJzb2x1dGVD
b29yZGluYXRlcyhjYW5kaWRhdGUubm9kZSk7CisgICAgZm9yIChOb2RlKiBwYXJlbnROb2RlID0g
Y2FuZGlkYXRlLm5vZGUtPnBhcmVudCgpOyBwYXJlbnROb2RlOyBwYXJlbnROb2RlID0gcGFyZW50
Tm9kZS0+cGFyZW50KCkpIHsKKyAgICAgICAgSW50UmVjdCBwYXJlbnRSZWN0ID0gbm9kZVJlY3RJ
bkFic29sdXRlQ29vcmRpbmF0ZXMocGFyZW50Tm9kZSk7CisgICAgICAgIGlmICghY2FuZGlkYXRl
UmVjdC5pbnRlcnNlY3RzKHBhcmVudFJlY3QpKSB7CisgICAgICAgICAgICBpZiAoKChkaXJlY3Rp
b24gPT0gRm9jdXNEaXJlY3Rpb25MZWZ0IHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblJp
Z2h0KSAmJiBwYXJlbnROb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBP
SElEREVOKQorICAgICAgICAgICAgICAgIHx8ICgoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9u
VXAgfHwgZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRG93bikgJiYgcGFyZW50Tm9kZS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dZKCkgPT0gT0hJRERFTikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJlbnROb2RlID09IGNh
bmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KQorICAgICAgICAgICAgcmV0dXJuIGNhblNj
cm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgcGFyZW50Tm9kZSk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uaAkocmV2aXNpb24gNzE5NjApCisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmln
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBTcGF0aWFs
TmF2aWdhdGlvbl9oCiAKICNpbmNsdWRlICJGb2N1c0RpcmVjdGlvbi5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKICNpbmNsdWRlIDxsaW1pdHM+CkBAIC0xMDcs
MTYgKzEwOCw3IEBAIHN0cnVjdCBGb2N1c0NhbmRpZGF0ZSB7CiAgICAgewogICAgIH0KIAotICAg
IEZvY3VzQ2FuZGlkYXRlKE5vZGUqIG4pCi0gICAgICAgIDogbm9kZShuKQotICAgICAgICAsIGVu
Y2xvc2luZ1Njcm9sbGFibGVCb3goMCkKLSAgICAgICAgLCBkaXN0YW5jZShtYXhEaXN0YW5jZSgp
KQotICAgICAgICAsIHBhcmVudERpc3RhbmNlKG1heERpc3RhbmNlKCkpCi0gICAgICAgICwgYWxp
Z25tZW50KE5vbmUpCi0gICAgICAgICwgcGFyZW50QWxpZ25tZW50KE5vbmUpCi0gICAgewotICAg
IH0KLQorICAgIEZvY3VzQ2FuZGlkYXRlKE5vZGUqIG4pOwogICAgIGJvb2wgaXNOdWxsKCkgY29u
c3QgeyByZXR1cm4gIW5vZGU7IH0KICAgICBib29sIGluU2Nyb2xsYWJsZUNvbnRhaW5lcigpIGNv
bnN0IHsgcmV0dXJuIG5vZGUgJiYgZW5jbG9zaW5nU2Nyb2xsYWJsZUJveDsgfQogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG5vZGUgPyBub2RlLT5kb2N1bWVudCgpIDog
MDsgfQpAQCAtMTI3LDE2ICsxMTksMjQgQEAgc3RydWN0IEZvY3VzQ2FuZGlkYXRlIHsKICAgICBs
b25nIGxvbmcgcGFyZW50RGlzdGFuY2U7CiAgICAgUmVjdHNBbGlnbm1lbnQgYWxpZ25tZW50Owog
ICAgIFJlY3RzQWxpZ25tZW50IHBhcmVudEFsaWdubWVudDsKKyAgICBJbnRSZWN0IHJlY3Q7CiB9
OwogCiB2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBO
b2RlKiBzdGFydCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSk7Ci1ib29sIHNjcm9sbEluRGly
ZWN0aW9uKEZyYW1lKiwgRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5k
aWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKK2Jvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUq
LCBGb2N1c0RpcmVjdGlvbik7Citib29sIHNjcm9sbEluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5l
ciwgRm9jdXNEaXJlY3Rpb24pOwogdm9pZCBzY3JvbGxJbnRvVmlldyhFbGVtZW50Kik7Ci1ib29s
IGhhc09mZnNjcmVlblJlY3QoTm9kZSopOworYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqLCBG
b2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBGb2N1c0RpcmVjdGlvbk5vbmUpOwogYm9vbCBpc0lu
Um9vdERvY3VtZW50KE5vZGUqKTsKLWJvb2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShOb2Rl
Kik7Citib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoY29uc3QgTm9kZSopOwogYm9vbCBp
c05vZGVEZWVwRGVzY2VuZGFudE9mRG9jdW1lbnQoTm9kZSosIERvY3VtZW50Kik7Ci0KK05vZGUq
IHNjcm9sbGFibGVPckZyYW1lUGFyZW50Rm9yTm9kZUFuZERpcmVjdGlvbihGb2N1c0RpcmVjdGlv
biwgTm9kZSogbm9kZSk7Citib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9u
LCBjb25zdCBOb2RlKiBjb250YWluZXIpOworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihGb2N1
c0RpcmVjdGlvbiwgY29uc3QgRnJhbWUqKTsKK0ludFJlY3Qgbm9kZVJlY3RJbkFic29sdXRlQ29v
cmRpbmF0ZXMoTm9kZSosIGJvb2wgaWdub3JlQm9yZGVyID0gZmFsc2UpOworSW50UmVjdCBmcmFt
ZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqKTsKK3ZvaWQgZGlzdGFuY2VEYXRhRm9y
Tm9kZShGb2N1c0RpcmVjdGlvbiwgRm9jdXNDYW5kaWRhdGUmIGN1cnJlbnQsIEZvY3VzQ2FuZGlk
YXRlJiBjYW5kaWRhdGUpOworYm9vbCBjYW5CZVNjcm9sbGVkSW50b1ZpZXcoRm9jdXNEaXJlY3Rp
b24sIEZvY3VzQ2FuZGlkYXRlJik7CiB9IC8vIG5hbXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IFNwYXRpYWxOYXZpZ2F0aW9uX2gKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73991</attachid>
            <date>2010-11-16 07:10:05 -0800</date>
            <delta_ts>2010-11-16 07:42:54 -0800</delta_ts>
            <desc>Patch - code only</desc>
            <filename>49382_code.patch</filename>
            <type>text/plain</type>
            <size>38783</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjA5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMTEtMTYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
CisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q29udHJvbGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseSk6CisgICAg
ICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5o
OgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9jdXNDYW5kaWRhdGU6OkZvY3VzQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmRp
c3RhbmNlRGF0YUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWxpZ25tZW50Rm9yUmVjdHMp
OgorICAgICAgICAoV2ViQ29yZTo6YXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3JlZW5BcGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1JlY3RJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpo
YXNPZmZzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6c2Nyb2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhblNjcm9sbEluRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6bm9kZVJlY3RJ
bkFic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVSZWN0SW5BYnNv
bHV0ZUNvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmVudHJ5QW5kRXhpdFBvaW50c0Zv
ckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5CZVNjcm9sbGVkSW50b1ZpZXcpOgor
ICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaDoKKwogMjAxMC0xMS0xNSAgUGF2ZWwg
RmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZ
dXJ5IFNlbWlraGF0c2t5LgpJbmRleDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDcxOTYwKQorKysgV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDExICs0MCwxMyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKQEAgLTU3LDYgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKK3N0YXRp
YyB2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRh
dGUsIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRj
aEV2ZW50c09uV2luZG93QW5kRm9jdXNlZE5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGZv
Y3VzZWQpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIGZvY3VzZWQgbm9kZSB3ZSBzaG91bGQgZGlz
cGF0Y2ggYmx1ciBvbiBpdCBiZWZvcmUgd2UgYmx1ciB0aGUgd2luZG93LgpAQCAtMjg5LDY0ICsy
OTIsNiBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rp
b25hbGx5KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17
Ci0gICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgQVNTRVJUKGZy
YW1lKTsKLSAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7
Ci0gICAgaWYgKCFmb2N1c2VkRG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZERvY3VtZW50LT5mb2N1c2VkTm9kZSgpOwotICAg
IGlmICghZm9jdXNlZE5vZGUpIHsKLSAgICAgICAgLy8gSnVzdCBtb3ZlIHRvIHRoZSBmaXJzdCBm
b2N1c2FibGUgbm9kZS4KLSAgICAgICAgRm9jdXNEaXJlY3Rpb24gdGFiRGlyZWN0aW9uID0gKGRp
cmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblVwIHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlv
bkxlZnQpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvY3VzRGly
ZWN0aW9uQmFja3dhcmQgOiBGb2N1c0RpcmVjdGlvbkZvcndhcmQ7Ci0gICAgICAgIC8vICdpbml0
aWFsRm9jdXMnIGlzIHNldCB0byB0cnVlIHNvIHRoZSBjaHJvbWUgaXMgbm90IGZvY3VzZWQuCi0g
ICAgICAgIHJldHVybiBhZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIodGFiRGlyZWN0aW9uLCBl
dmVudCwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gTW92ZSB1cCBpbiB0aGUgY2hhaW4gb2YgbmVz
dGVkIGZyYW1lcy4KLSAgICBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRvcCgpOwotCi0gICAgRm9j
dXNDYW5kaWRhdGUgZm9jdXNDYW5kaWRhdGU7Ci0gICAgZmluZEZvY3VzYWJsZU5vZGVJbkRpcmVj
dGlvbihmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RDaGlsZCgpLCBmb2N1c2VkTm9kZSwgZGlyZWN0
aW9uLCBldmVudCwgZm9jdXNDYW5kaWRhdGUpOwotCi0gICAgTm9kZSogbm9kZSA9IGZvY3VzQ2Fu
ZGlkYXRlLm5vZGU7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIGEgd2F5IHRvIGZvY3VzIGEgZG9jdW1lbnQgaGVy
ZS4KLSAgICAgICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgICAg
IHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLCBkaXJlY3Rpb24pOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgY3JhenkganVtcCBiZXR3ZWVu
IGxpbmtzIHRoYXQgYXJlIGVpdGhlciBmYXIgYXdheSBmcm9tIGVhY2ggb3RoZXIsCi0gICAgLy8g
b3IganVzdCBub3QgY3VycmVudGx5IHZpc2libGUsIGxldHMgZG8gYSBzY3JvbGwgaW4gdGhlIGdp
dmVuIGRpcmVjdGlvbiBhbmQgYmFpbCBvdXQKLSAgICAvLyBpZiB8bm9kZXwgZWxlbWVudCBpcyBu
b3QgaW4gdGhlIHZpZXdwb3J0LgotICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0KG5vZGUpKSB7Ci0g
ICAgICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKS0+ZnJhbWUoKTsK
LSAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZnJhbWUsIGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRh
dGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBEb2N1bWVudCogbmV3RG9j
dW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwotCi0gICAgaWYgKG5ld0RvY3VtZW50ICE9IGZvY3Vz
ZWREb2N1bWVudCkgewotICAgICAgICAvLyBGb2N1cyBpcyBnb2luZyBhd2F5IGZyb20gdGhlIG9y
aWdpbmFsbHkgZm9jdXNlZCBkb2N1bWVudCwgc28gY2xlYXIgdGhlIGZvY3VzZWQgbm9kZS4KLSAg
ICAgICAgZm9jdXNlZERvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKLSAgICB9Ci0KLSAgICBp
ZiAobmV3RG9jdW1lbnQpCi0gICAgICAgIHNldEZvY3VzZWRGcmFtZShuZXdEb2N1bWVudC0+ZnJh
bWUoKSk7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5v
ZGUpOwotICAgIEFTU0VSVChlbGVtZW50KTsKLQotICAgIHNjcm9sbEludG9WaWV3KGVsZW1lbnQp
OwotICAgIGVsZW1lbnQtPmZvY3VzKGZhbHNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3Rh
dGljIHZvaWQgdXBkYXRlRm9jdXNDYW5kaWRhdGVJblNhbWVDb250YWluZXIoY29uc3QgRm9jdXND
YW5kaWRhdGUmIGNhbmRpZGF0ZSwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCiB7CiAgICAgaWYg
KGNsb3Nlc3QuaXNOdWxsKCkpIHsKQEAgLTY1OCw0ICs2MDMsMTg4IEBAIHZvaWQgRm9jdXNDb250
cm9sbGVyOjpzZXRBY3RpdmUoYm9vbCBhY3QKICAgICAgICAgZGlzcGF0Y2hFdmVudHNPbldpbmRv
d0FuZEZvY3VzZWROb2RlKG1fZm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpLCBhY3RpdmUpOwogfQog
Cit2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRh
dGUsIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KQoreworICAgIGlmICghY2FuZGlkYXRlLm5vZGUt
PmlzRWxlbWVudE5vZGUoKSB8fCFjYW5kaWRhdGUubm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gSWdub3JlIGVtcHR5IGZyYW1lcworICAgIGlmIChjYW5kaWRhdGUu
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpICYmICFzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25l
ckVsZW1lbnQqPihjYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBJZ25vcmUgb2ZmIHNjcmVlbiBjaGlsZCBub2RlcyBvZiBjb250YWluZXJz
IHRoYXQgZG8gbm90IHNjcm9sbCAob3ZlcmZsb3c6aGlkZGVuKQorICAgIGlmIChoYXNPZmZzY3Jl
ZW5SZWN0KGNhbmRpZGF0ZS5ub2RlKSAmJiAhY2FuQmVTY3JvbGxlZEludG9WaWV3KGRpcmVjdGlv
biwgY2FuZGlkYXRlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRm9jdXNDYW5kaWRhdGUgY3Vy
cmVudDsKKyAgICBjdXJyZW50LnJlY3QgPSBzdGFydGluZ1JlY3Q7CisgICAgZGlzdGFuY2VEYXRh
Rm9yTm9kZShkaXJlY3Rpb24sIGN1cnJlbnQsIGNhbmRpZGF0ZSk7CisgICAgaWYgKGNhbmRpZGF0
ZS5kaXN0YW5jZSA9PSBtYXhEaXN0YW5jZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9uKSAmJiBjYW5kaWRhdGUu
YWxpZ25tZW50IDwgRnVsbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNsb3Nlc3QuaXNO
dWxsKCkpIHsKKyAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEludFJlY3QgaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihub2Rl
UmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjYW5kaWRhdGUubm9kZSwgdHJ1ZSksIG5vZGVSZWN0
SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGNsb3Nlc3Qubm9kZSwgdHJ1ZSkpOworICAgIGlmICghaW50
ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSWYgMiBub2RlcyBhcmUgaW50
ZXJzZWN0aW5nLCBkbyBoaXQgdGVzdCB0byBmaW5kIHdoaWNoIG5vZGUgaW4gb24gdG9wLgorICAg
ICAgICBpbnQgeCA9IGludGVyc2VjdGlvblJlY3QueCgpICsgaW50ZXJzZWN0aW9uUmVjdC53aWR0
aCgpIC8gMjsKKyAgICAgICAgaW50IHkgPSBpbnRlcnNlY3Rpb25SZWN0LnkoKSArIGludGVyc2Vj
dGlvblJlY3QuaGVpZ2h0KCkgLyAyOworICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGNh
bmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQoeCwgeSksIGZhbHNlLCB0cnVlKTsK
KyAgICAgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5jb250YWlucyhyZXN1bHQuaW5uZXJOb2RlKCkp
KSB7CisgICAgICAgICAgICBjbG9zZXN0ID0gY2FuZGlkYXRlOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmIChjbG9zZXN0Lm5vZGUtPmNvbnRhaW5zKHJlc3VsdC5p
bm5lck5vZGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNhbmRp
ZGF0ZS5hbGlnbm1lbnQgPT0gY2xvc2VzdC5hbGlnbm1lbnQpIHsKKyAgICAgICAgaWYgKGNhbmRp
ZGF0ZS5kaXN0YW5jZSA8IGNsb3Nlc3QuZGlzdGFuY2UpCisgICAgICAgICAgICBjbG9zZXN0ID0g
Y2FuZGlkYXRlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNhbmRpZGF0ZS5h
bGlnbm1lbnQgPiBjbG9zZXN0LmFsaWdubWVudCkKKyAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0
ZTsKK30KKwordm9pZCBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c0NhbmRpZGF0ZUluQ29udGFp
bmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0Rp
cmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50LCBGb2N1c0NhbmRpZGF0ZSYg
Y2xvc2VzdCkKK3sKKyAgICBBU1NFUlQoY29udGFpbmVyKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUg
PSBjb250YWluZXItPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IChub2RlLT5pc0ZyYW1lT3du
ZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBub2RlKSkgPyBu
b2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnRhaW5lcikgOiBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKGNvbnRhaW5lcikpIHsKKyAgICAgICAgaWYgKCghZm9jdXNlZEZyYW1lKCkgfHwgIWZvY3Vz
ZWRGcmFtZSgpLT5kb2N1bWVudCgpIHx8IG5vZGUgIT0gZm9jdXNlZEZyYW1lKCktPmRvY3VtZW50
KCktPmZvY3VzZWROb2RlKCkpICYmIChub2RlLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSB8
fCBub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGly
ZWN0aW9uLCBub2RlKSkpIHsKKyAgICAgICAgICAgIEZvY3VzQ2FuZGlkYXRlIGNhbmRpZGF0ZShu
b2RlKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94ID0gY29u
dGFpbmVyOworICAgICAgICAgICAgdXBkYXRlRm9jdXNDYW5kaWRhdGVJZk5lZWRlZChkaXJlY3Rp
b24sIHN0YXJ0aW5nUmVjdCwgY2FuZGlkYXRlLCBjbG9zZXN0KTsKKyAgICAgICAgfQorICAgIH0K
K30KKworYm9vbCBGb2N1c0NvbnRyb2xsZXI6Om5hdmlnYXRlSW5Db250YWluZXIoTm9kZSogY29u
dGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uIGRpcmVj
dGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFjb250YWluZXIgfHwgIWNv
bnRhaW5lci0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhl
IHN0YXJ0aW5nIHJlY3QgaXMgdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgbm9kZSwgaW4gZG9jdW1l
bnQgY29vcmRpbmF0ZXMuCisgICAgLy8gQ29tcG9zZSBhIHZpcnR1YWwgc3RhcnRpbmcgcmVjdCBp
ZiB0aGVyZSBpcyBubyBmb2N1c2VkIG5vZGUgb3IgaWYgaXQgaXMgb2ZmIHNjcmVlbi4KKyAgICAv
LyBUaGUgdmlydHVhbCByZWN0IGlzIHRoZSBlZGdlIG9mIHRoZSBjb250YWluZXIgb3IgZnJhbWUu
IFdlIHNlbGVjdCB3aGljaAorICAgIC8vIGVkZ2UgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24g
b2YgdGhlIG5hdmlnYXRpb24uCisgICAgSW50UmVjdCBuZXdTdGFydGluZ1JlY3QgPSBzdGFydGlu
Z1JlY3Q7CisKKyAgICBpZiAoc3RhcnRpbmdSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBuZXdT
dGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjb250YWluZXIpOwor
ICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
TGVmdDoKKyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRYKG5ld1N0YXJ0aW5nUmVjdC5y
aWdodCgpKTsKKyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRXaWR0aCgwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgICAg
ICBuZXdTdGFydGluZ1JlY3Quc2V0WShuZXdTdGFydGluZ1JlY3QuYm90dG9tKCkpOworICAgICAg
ICAgICAgbmV3U3RhcnRpbmdSZWN0LnNldEhlaWdodCgwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgICAgICBuZXdTdGFydGlu
Z1JlY3Quc2V0V2lkdGgoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1
c0RpcmVjdGlvbkRvd246CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0SGVpZ2h0KDAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbmQgdGhlIGNs
b3Nlc3Qgbm9kZSB3aXRoaW4gY3VycmVudCBjb250YWluZXIgaW4gdGhlIGRpcmVjdGlvbiBvZiB0
aGUgbmF2aWdhdGlvbi4KKyAgICBGb2N1c0NhbmRpZGF0ZSBmb2N1c0NhbmRpZGF0ZTsKKyAgICBm
aW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihjb250YWluZXIsIG5ld1N0YXJ0aW5nUmVjdCwg
ZGlyZWN0aW9uLCBldmVudCwgZm9jdXNDYW5kaWRhdGUpOworCisgICAgaWYgKGZvY3VzQ2FuZGlk
YXRlLmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rp
b24sIGNvbnRhaW5lcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZm9jdXMsIHNjcm9s
bCBpZiBwb3NzaWJsZS4KKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGNvbnRhaW5lciwg
ZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IC8vIFJldHVybiBmYWxzZSB3aWxsIGNhdXNlIGEgcmUtdHJ5LCBza2lwcGluZyB0aGlzIGNvbnRh
aW5lci4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZm9jdXNDYW5kaWRh
dGUubm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIGlmIChoYXNPZmZzY3Jl
ZW5SZWN0KGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAgIEZy
YW1lKiBmcmFtZSA9IGZvY3VzQ2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCktPnZpZXcoKS0+ZnJh
bWUoKTsKKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLT5kb2N1bWVudCgpLCBk
aXJlY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gTmF2aWdhdGUgaW50byBhIG5ldyBmcmFtZS4KKyAgICAgICAgSW50UmVjdCByZWN0OworICAg
ICAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWRPck1haW5GcmFtZSgpLT5kb2N1bWVudCgp
LT5mb2N1c2VkTm9kZSgpOworICAgICAgICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09mZnNjcmVl
blJlY3QoZm9jdXNlZE5vZGUpKQorICAgICAgICAgICAgcmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0
ZUNvb3JkaW5hdGVzKGZvY3VzZWROb2RlLCB0cnVlIC8qIGlnbm9yZSBib3JkZXIgKi8pOworICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZm9jdXNDYW5k
aWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZy
YW1lT3duZXJFbGVtZW50Kj4oZm9jdXNDYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAg
ICAgaWYgKCFuYXZpZ2F0ZUluQ29udGFpbmVyKHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxl
bWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKSwg
cmVjdCwgZGlyZWN0aW9uLCBldmVudCkpCisgICAgICAgICAgICAvLyBUaGUgbmV3IGZyYW1lIGhh
ZCBub3RoaW5nIGludGVyZXN0aW5nLCBza2lwIHBhc3QgaXQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAg
ICAgICAgIHJldHVybiBuYXZpZ2F0ZUluQ29udGFpbmVyKGNvbnRhaW5lciwgbm9kZVJlY3RJbkFi
c29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNDYW5kaWRhdGUubm9kZSwgdHJ1ZSksIGRpcmVjdGlvbiwg
ZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNhblNjcm9sbElu
RGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUubm9kZSkpIHsKKyAgICAgICAgaWYg
KGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9uKSkgeworICAg
ICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIE5hdmln
YXRlIGludG8gYSBuZXcgc2Nyb2xsYWJsZSBjb250YWluZXIuCisgICAgICAgIEludFJlY3QgcmVj
dDsKKyAgICAgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKS0+ZG9j
dW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKKyAgICAgICAgaWYgKGZvY3VzZWROb2RlICYmICFoYXNP
ZmZzY3JlZW5SZWN0KGZvY3VzZWROb2RlKSkKKyAgICAgICAgICAgIHJlY3QgPSBub2RlUmVjdElu
QWJzb2x1dGVDb29yZGluYXRlcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBu
YXZpZ2F0ZUluQ29udGFpbmVyKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHJlY3QsIGRpcmVjdGlvbiwg
ZXZlbnQpOworICAgIH0KKyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChmb2N1c0NhbmRpZGF0ZS5u
b2RlLCBkaXJlY3Rpb24pKSB7CisgICAgICAgIE5vZGUqIGNvbnRhaW5lciA9IGZvY3VzQ2FuZGlk
YXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3g7CisgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGNv
bnRhaW5lciwgZGlyZWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gV2UgZm91bmQgYSBuZXcgZm9jdXMgbm9kZSwgbmF2aWdhdGUgdG8gaXQuCisgICAgRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5ub2RlKTsK
KyAgICBBU1NFUlQoZWxlbWVudCk7CisKKyAgICBlbGVtZW50LT5mb2N1cyhmYWxzZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJl
Y3Rpb25hbGx5KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQp
Cit7CisgICAgRnJhbWUqIGN1ckZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgQVNT
RVJUKGN1ckZyYW1lKTsKKworICAgIERvY3VtZW50KiBmb2N1c2VkRG9jdW1lbnQgPSBjdXJGcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWZvY3VzZWREb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkRG9jdW1lbnQtPmZvY3Vz
ZWROb2RlKCk7CisgICAgTm9kZSogY29udGFpbmVyID0gZm9jdXNlZERvY3VtZW50OworCisgICAg
Ly8gRmlndXJlIG91dCB0aGUgc3RhcnRpbmcgcmVjdC4KKyAgICBJbnRSZWN0IHN0YXJ0aW5nUmVj
dDsKKyAgICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09mZnNjcmVlblJlY3QoZm9jdXNlZE5vZGUp
KSB7CisgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVPckZyYW1lUGFyZW50Rm9yTm9kZUFu
ZERpcmVjdGlvbihkaXJlY3Rpb24sIGZvY3VzZWROb2RlKTsKKyAgICAgICAgc3RhcnRpbmdSZWN0
ID0gbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNlZE5vZGUsIHRydWUgLyogaWdu
b3JlIGJvcmRlciAqLyk7CisgICAgfQorCisgICAgYm9vbCBjb25zdW1lZCA9IGZhbHNlOworICAg
IGRvIHsKKyAgICAgICAgaWYgKGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGFpbmVyKS0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgIGNvbnN1bWVkID0gbmF2aWdhdGVJbkNvbnRh
aW5lcihjb250YWluZXIsIHN0YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAg
IHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnRhaW5lciwg
dHJ1ZSAvKiBpZ25vcmUgYm9yZGVyICovKTsKKyAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJs
ZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKGRpcmVjdGlvbiwgY29udGFpbmVyKTsK
KyAgICB9IHdoaWxlICghY29uc3VtZWQgJiYgY29udGFpbmVyKTsKKworICAgIHJldHVybiBjb25z
dW1lZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuaAkocmV2aXNpb24gNzE5NjApCisrKyBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9jdXNDYW5kaWRhdGUmIHBhcmVudENhbmRp
ZGF0ZSA9IEZvY3VzQ2FuZGlkYXRlKCkpOwogICAgIHZvaWQgZGVlcEZpbmRGb2N1c2FibGVOb2Rl
SW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBOb2RlKiBmb2N1c2VkLCBGb2N1c0RpcmVjdGlv
biwgS2V5Ym9hcmRFdmVudCosIEZvY3VzQ2FuZGlkYXRlJik7CiAKKyAgICBib29sIG5hdmlnYXRl
SW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3Qs
IEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBmaW5kRm9jdXNDYW5k
aWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5n
UmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0NhbmRpZGF0ZSYgY2xv
c2VzdCk7CisKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgUmVmUHRyPEZyYW1lPiBtX2ZvY3VzZWRG
cmFtZTsKICAgICBib29sIG1faXNBY3RpdmU7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA3MTk2
MCkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYg
KzIzNSw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnJhbWVWaWV3U2Nyb2xsQ29ybmVyKFJlbmRl
clNjcm9sbGJhclBhcnQqIHNjcm9sbENvcm5lcikgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3Ju
ZXIgPT0gc2Nyb2xsQ29ybmVyOyB9CiAgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKCk7
CiAKKyAgICB2b2lkIGNhbGN1bGF0ZVNjcm9sbGJhck1vZGVzRm9yTGF5b3V0KFNjcm9sbGJhck1v
ZGUmIGhNb2RlLCBTY3JvbGxiYXJNb2RlJiB2TW9kZSk7CisKICAgICAvLyBOb3JtYWwgZGVsYXkK
ICAgICBzdGF0aWMgdm9pZCBzZXRSZXBhaW50VGhyb3R0bGluZ0RlZmVycmVkUmVwYWludERlbGF5
KGRvdWJsZSBwKTsKICAgICAvLyBOZWdhdGl2ZSB2YWx1ZSB3b3VsZCBtZWFuIHRoYXQgZmlyc3Qg
ZmV3IHJlcGFpbnRzIGhhcHBlbiB3aXRob3V0IGEgZGVsYXkKQEAgLTI2NCw3ICsyNjYsNiBAQCBw
cml2YXRlOgogICAgIGJvb2wgaGFzRml4ZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9maXhl
ZE9iamVjdENvdW50ID4gMDsgfQogCiAgICAgdm9pZCBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChS
ZW5kZXJPYmplY3QqLCBTY3JvbGxiYXJNb2RlJiBoTW9kZSwgU2Nyb2xsYmFyTW9kZSYgdk1vZGUp
OwotICAgIHZvaWQgY2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNGb3JMYXlvdXQoU2Nyb2xsYmFyTW9k
ZSYgaE1vZGUsIFNjcm9sbGJhck1vZGUmIHZNb2RlKTsKIAogICAgIHZvaWQgdXBkYXRlT3ZlcmZs
b3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7
CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNzE5NjApCisr
KyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxMiArNDMsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgbG9uZyBsb25nIHNw
YXRpYWxEaXN0YW5jZShGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmKTsKIHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRvUm9vdERvY3VtZW50KFJl
bmRlck9iamVjdCopOwotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGljIFJl
Y3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKTsKIHN0YXRpYyBi
b29sIGFyZVJlY3RzRnVsbHlBbGlnbmVkKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgSW50UmVjdCYpOwogc3RhdGljIGJvb2wgYXJlUmVjdHNQYXJ0aWFsbHlBbGlnbmVkKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGljIGJv
b2wgYXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3JlZW5BcGFydChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEludFNpemUmIHZpZXdTaXplKTsKIHN0YXRpYyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIHZv
aWQgZGVmbGF0ZUlmT3ZlcmxhcHBlZChJbnRSZWN0JiwgSW50UmVjdCYpOwogc3RhdGljIGJvb2wg
Y2hlY2tOZWdhdGl2ZUNvb3Jkc0Zvck5vZGUoTm9kZSosIGNvbnN0IEludFJlY3QmKTsKK3N0YXRp
YyBJbnRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqIGluaXRpYWxGcmFtZSwg
Y29uc3QgSW50UmVjdCYgcmVjdCk7CitzdGF0aWMgdm9pZCBlbnRyeUFuZEV4aXRQb2ludHNGb3JE
aXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGlu
Z1JlY3QsIGNvbnN0IEludFJlY3QmIHBvdGVudGlhbFJlY3QsIEludFBvaW50JiBleGl0UG9pbnQs
IEludFBvaW50JiBlbnRyeVBvaW50KTsKKworCitGb2N1c0NhbmRpZGF0ZTo6Rm9jdXNDYW5kaWRh
dGUoTm9kZSogbikKKyAgICA6IG5vZGUobikKKyAgICAsIGVuY2xvc2luZ1Njcm9sbGFibGVCb3go
MCkKKyAgICAsIGRpc3RhbmNlKG1heERpc3RhbmNlKCkpCisgICAgLCBwYXJlbnREaXN0YW5jZSht
YXhEaXN0YW5jZSgpKQorICAgICwgYWxpZ25tZW50KE5vbmUpCisgICAgLCBwYXJlbnRBbGlnbm1l
bnQoTm9uZSkKKyAgICAsIHJlY3Qobm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMobiwgdHJ1
ZSAvKiBpZ25vcmUgYm9yZGVyICovKSkKK3sKK30KIAogYm9vbCBpc1NwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZChjb25zdCBGcmFtZSogZnJhbWUpCiB7CkBAIC0xMDIsNyArMTE3LDggQEAgdm9pZCBk
aXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uIAogICAgIC8vIFRoZSBkaXN0YW5jZSBi
ZXR3ZWVuIHR3byBub2RlcyBpcyBub3QgdG8gYmUgY29uc2lkZXJlZCBhbG9uZSB3aGVuIGV2YWx1
YXRpbmcvbG9va2luZwogICAgIC8vIGZvciB0aGUgYmVzdCBmb2N1cyBjYW5kaWRhdGUgbm9kZS4g
QWxpZ25tZW50IG9mIHJlY3RzIGNhbiBiZSBhbHNvIGEgZ29vZCBwb2ludCB0byBiZQogICAgIC8v
IGNvbnNpZGVyZWQgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYWxnb3JpdGhtIHRvIGJlaGF2aW9yIGlu
IGEgbW9yZSBpbnR1aXRpdmUgd2F5LgotICAgIGNhbmRpZGF0ZS5hbGlnbm1lbnQgPSBhbGlnbm1l
bnRGb3JSZWN0cyhkaXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpOworICAgIEludFNpemUg
dmlld1NpemUgPSBjYW5kaWRhdGUubm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUo
KS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7CisgICAgY2FuZGlkYXRlLmFs
aWdubWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVj
dCwgdmlld1NpemUpOwogICAgIGNhbmRpZGF0ZS5kaXN0YW5jZSA9IHNwYXRpYWxEaXN0YW5jZShk
aXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpOwogfQogCkBAIC0xMzYsOCArMTUyLDEyIEBA
IHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRvUm9vdEQKICAgICByZXR1cm4gcmVj
dDsKIH0KIAotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVjdCwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0UmVjdCkKK3N0YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKQogeworICAgIC8vIElmIHdl
IGZvdW5kIGEgbm9kZSBpbiBmdWxsIGFsaWdubWVudCwgYnV0IGl0IGlzIHRvbyBmYXIgYXdheSwg
aWdub3JlIGl0LgorICAgIGlmIChhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwYXJ0KGRpcmVj
dGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCwgdmlld1NpemUpKQorICAgICAgICByZXR1cm4gTm9u
ZTsKKwogICAgIGlmIChhcmVSZWN0c0Z1bGx5QWxpZ25lZChkaXJlY3Rpb24sIGN1clJlY3QsIHRh
cmdldFJlY3QpKQogICAgICAgICByZXR1cm4gRnVsbDsKIApAQCAtMjc3LDYgKzI5NywyNSBAQCBz
dGF0aWMgYm9vbCBhcmVSZWN0c1BhcnRpYWxseUFsaWduZWQoRm9jCiAgICAgICAgICAgICB8fCAo
YkVuZCA+PSBhU3RhcnQgJiYgYkVuZCA8PSBhRW5kKSk7CiB9CiAKK3N0YXRpYyBib29sIGFyZVJl
Y3RzTW9yZVRoYW5GdWxsU2NyZWVuQXBhcnQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRT
aXplJiB2aWV3U2l6ZSkKK3sKKyAgICBBU1NFUlQoaXNSZWN0SW5EaXJlY3Rpb24oZGlyZWN0aW9u
LCBjdXJSZWN0LCB0YXJnZXRSZWN0KSk7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0
YXJnZXRSZWN0LnJpZ2h0KCkgPiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueCgpIC0gY3VyUmVjdC5yaWdo
dCgpID4gdmlld1NpemUud2lkdGgoKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAg
ICAgIHJldHVybiBjdXJSZWN0LnkoKSAtIHRhcmdldFJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5o
ZWlnaHQoKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgcmV0dXJuIHRh
cmdldFJlY3QueSgpIC0gY3VyUmVjdC5ib3R0b20oKSA+IHZpZXdTaXplLmhlaWdodCgpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9CisKIC8vIFJldHVybiB0cnVlIGlmIHJlY3QgfGF8IGlzIGJlbG93IHxi
fC4gRmFsc2Ugb3RoZXJ3aXNlLgogc3RhdGljIGlubGluZSBib29sIGJlbG93KGNvbnN0IEludFJl
Y3QmIGEsIGNvbnN0IEludFJlY3QmIGIpCiB7CkBAIC00MDMsMjkgKzQ0MiwyNSBAQCBzdGF0aWMg
bG9uZyBsb25nIHNwYXRpYWxEaXN0YW5jZShGb2N1c0RpCiAKIHN0YXRpYyBib29sIGlzUmVjdElu
RGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVj
dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBJbnRQb2ludCBjZW50ZXIodGFy
Z2V0UmVjdC5jZW50ZXIoKSk7Ci0gICAgaW50IHRhcmdldE1pZGRsZSA9IGlzSG9yaXpvbnRhbE1v
dmUoZGlyZWN0aW9uKSA/IGNlbnRlci54KCkgOiBjZW50ZXIueSgpOwotCiAgICAgc3dpdGNoIChk
aXJlY3Rpb24pIHsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgcmV0dXJu
IHRhcmdldE1pZGRsZSA8IGN1clJlY3QueCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC5y
aWdodCgpIDw9IGN1clJlY3QueCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAg
ICAgICAgcmV0dXJuIHRhcmdldE1pZGRsZSA+IGN1clJlY3QucmlnaHQoKTsKKyAgICAgICAgcmV0
dXJuIHRhcmdldFJlY3QueCgpID49IGN1clJlY3QucmlnaHQoKTsKICAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6Ci0gICAgICAgIHJldHVybiB0YXJnZXRNaWRkbGUgPCBjdXJSZWN0LnkoKTsKKyAg
ICAgICAgcmV0dXJuIHRhcmdldFJlY3QuYm90dG9tKCkgPD0gY3VyUmVjdC55KCk7CiAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAgIHJldHVybiB0YXJnZXRNaWRkbGUgPiBjdXJS
ZWN0LmJvdHRvbSgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC55KCkgPj0gY3VyUmVjdC5i
b3R0b20oKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8g
Q2hlY2tzIGlmIHxub2RlfCBpcyBvZmZzY3JlZW4gdGhlIHZpc2libGUgYXJlYSAodmlld3BvcnQp
IG9mIGl0cyBjb250YWluZXIKIC8vIGRvY3VtZW50LiBJbiBjYXNlIGl0IGlzLCBvbmUgY2FuIHNj
cm9sbCBpbiBkaXJlY3Rpb24gb3IgdGFrZSBhbnkgZGlmZmVyZW50CiAvLyBkZXNpcmVkIGFjdGlv
biBsYXRlciBvbi4KLWJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlKQorYm9vbCBoYXNP
ZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAg
ICAvLyBHZXQgdGhlIEZyYW1lVmlldyBpbiB3aGljaCB8bm9kZXwgaXMgKHdoaWNoIG1lYW5zIHRo
ZSBjdXJyZW50IHZpZXdwb3J0IGlmIHxub2RlfAogICAgIC8vIGlzIG5vdCBpbiBhbiBpbm5lciBk
b2N1bWVudCksIHNvIHdlIGNhbiBjaGVjayBpZiBpdHMgY29udGVudCByZWN0IGlzIHZpc2libGUK
QEAgLTQzNSw2ICs0NzAsMjYgQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCBjb250YWluZXJWaWV3cG9ydFJlY3Qg
PSBmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIC8vIFdlIHdhbnQgdG8gc2Vs
ZWN0IGEgbm9kZSBpZiBpdCBpcyBjdXJyZW50bHkgb2ZmIHNjcmVlbiwgYnV0IHdpbGwgYmUKKyAg
ICAvLyBleHBvc2VkIGFmdGVyIHdlIHNjcm9sbC4gQWRqdXN0IHRoZSB2aWV3cG9ydCB0byBwb3N0
LXNjcm9sbGluZyBwb3NpdGlvbi4KKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0WChj
b250YWluZXJWaWV3cG9ydFJlY3QueCgpIC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgp
KTsKKyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldFdpZHRoKGNvbnRhaW5lclZpZXdw
b3J0UmVjdC53aWR0aCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBjb250YWlu
ZXJWaWV3cG9ydFJlY3Quc2V0V2lkdGgoY29udGFpbmVyVmlld3BvcnRSZWN0LndpZHRoKCkgKyBT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRZKGNv
bnRhaW5lclZpZXdwb3J0UmVjdC55KCkgLSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkp
OworICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0SGVpZ2h0KGNvbnRhaW5lclZpZXdw
b3J0UmVjdC5oZWlnaHQoKSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBjb250YWlu
ZXJWaWV3cG9ydFJlY3Quc2V0SGVpZ2h0KGNvbnRhaW5lclZpZXdwb3J0UmVjdC5oZWlnaHQoKSAr
IFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcikKQEAgLTQ0NywzNiArNTAyLDcy
IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlKQogICAgIHJldHVybiAhY29udGFp
bmVyVmlld3BvcnRSZWN0LmludGVyc2VjdHMocmVjdCk7CiB9CiAKLS8vIEluIGEgYm90dG9tLXVw
IHdheSwgdGhpcyBtZXRob2QgdHJpZXMgdG8gc2Nyb2xsIHxmcmFtZXwgaW4gYSBnaXZlbiBkaXJl
Y3Rpb24KLS8vIHxkaXJlY3Rpb258LCBnb2luZyB1cCBpbiB0aGUgZnJhbWUgdHJlZSBoaWVyYXJj
aHkgaW4gY2FzZSBpdCBkb2VzIG5vdCBzdWNjZWVkLgotYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihG
cmFtZSogZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRh
dGUmIGNhbmRpZGF0ZSkKK2Jvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIEFTU0VSVChmcmFtZSAmJiBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rp
b24sIGZyYW1lLT5kb2N1bWVudCgpKSk7CiAKLSAgICBTY3JvbGxEaXJlY3Rpb24gc2Nyb2xsRGly
ZWN0aW9uOworICAgIGlmIChmcmFtZSAmJiBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24s
IGZyYW1lLT5kb2N1bWVudCgpKSkgeworICAgICAgICBpbnQgZHggPSAwOworICAgICAgICBpbnQg
ZHkgPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIGR4ID0gLSBTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlv
blJpZ2h0OgorICAgICAgICAgICAgZHggPSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAg
ICAgICAgICAgZHkgPSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgICAg
IGR5ID0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgc3dpdGNoIChkaXJlY3Rp
b24pIHsKLSAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0
aW9uID0gU2Nyb2xsTGVmdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlv
blJpZ2h0OgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdodDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgotICAgICAgICBzY3JvbGxEaXJlY3Rp
b24gPSBTY3JvbGxVcDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRv
d246Ci0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZnJhbWUtPnZp
ZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIGlmICghY2FuZGlkYXRlLmlzTnVsbCgp
ICYmIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFi
bGVCb3gpKQotICAgICAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1
cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgY2FuZGlkYXRlLmVuY2xvc2lu
Z1Njcm9sbGFibGVCb3gpOworYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIs
IEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBpZiAoY29udGFpbmVyLT5pc0RvY3Vt
ZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gc2Nyb2xsSW5EaXJlY3Rpb24oc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihjb250YWluZXIpLT5mcmFtZSgpLCBkaXJlY3Rpb24pOworCisgICAgaWYgKCFj
b250YWluZXItPnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShzY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEJ5TGluZSk7CisgICAgaWYgKGNvbnRhaW5lciAmJiBjYW5TY3JvbGxJbkRpcmVj
dGlvbihkaXJlY3Rpb24sIGNvbnRhaW5lcikpIHsKKyAgICAgICAgaW50IGR4ID0gMDsKKyAgICAg
ICAgaW50IGR5ID0gMDsKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgICAgICBkeCA9IC0gbWluKFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
CisgICAgICAgICAgICBBU1NFUlQoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsV2lkdGgo
KSA+IChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxMZWZ0KCkgKyBjb250YWluZXItPnJl
bmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSk7CisgICAgICAgICAgICBkeCA9IG1pbihTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdp
ZHRoKCkgLSAoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVy
LT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgICAgIGR5ID0gLSBtaW4oU2Nyb2xs
YmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxU
b3AoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRv
d246CisgICAgICAgICAgICBBU1NFUlQoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVp
Z2h0KCkgLSAoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXIt
PnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkpOworICAgICAgICAgICAgZHkgPSBtaW4oU2Ny
b2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3Jv
bGxIZWlnaHQoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSArIGNvbnRh
aW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29udGFpbmVyLT5y
ZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShkeCwgZHkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2
b2lkIHNjcm9sbEludG9WaWV3KEVsZW1lbnQqIGVsZW1lbnQpCkBAIC01MzQsNyArNjI1LDcgQEAg
c3RhdGljIGJvb2wgY2hlY2tOZWdhdGl2ZUNvb3Jkc0Zvck5vZGUoTgogICAgIHJldHVybiBjYW5C
ZVNjcm9sbGVkOwogfQogCi1ib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoTm9kZSogbm9k
ZSkKK2Jvb2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShjb25zdCBOb2RlKiBub2RlKQogewog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTY3LDQgKzY1OCwyMzkg
QEAgYm9vbCBpc05vZGVEZWVwRGVzY2VuZGFudE9mRG9jdW1lbnQoTm9kZQogICAgIHJldHVybiBk
ZXNjZW5kYW50OwogfQogCitOb2RlKiBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVBbmRE
aXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBub2RlKQoreworICAgIEFT
U0VSVChub2RlKTsKKyAgICBOb2RlKiBwYXJlbnQgPSBub2RlOworICAgIGRvIHsKKyAgICAgICAg
aWYgKHBhcmVudC0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgICAgIHBhcmVudCA9IHN0YXRp
Y19jYXN0PERvY3VtZW50Kj4ocGFyZW50KS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+b3duZXJFbGVt
ZW50KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50
Tm9kZSgpOworICAgIH0gd2hpbGUgKHBhcmVudCAmJiAhY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGly
ZWN0aW9uLCBwYXJlbnQpICYmICFwYXJlbnQtPmlzRG9jdW1lbnROb2RlKCkpOworCisgICAgcmV0
dXJuIHBhcmVudDsKK30KKworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlv
biBkaXJlY3Rpb24sIGNvbnN0IE5vZGUqIGNvbnRhaW5lcikKK3sKKyAgICBBU1NFUlQoY29udGFp
bmVyKTsKKyAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICByZXR1
cm4gY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBzdGF0aWNfY2FzdDxjb25zdCBEb2N1
bWVudCo+KGNvbnRhaW5lciktPmZyYW1lKCkpOworCisgICAgaWYgKCFpc1Njcm9sbGFibGVDb250
YWluZXJOb2RlKGNvbnRhaW5lcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIHJl
dHVybiAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPSElE
REVOICYmIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSA+IDApOworICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgcmV0dXJuIChjb250YWluZXItPnJlbmRlcmVy
KCktPnN0eWxlKCktPm92ZXJmbG93WSgpICE9IE9ISURERU4gJiYgY29udGFpbmVyLT5yZW5kZXJC
b3goKS0+c2Nyb2xsVG9wKCkgPiAwKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6Cisg
ICAgICAgIHJldHVybiAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1go
KSAhPSBPSElEREVOICYmIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNv
bnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkgPCBjb250YWluZXItPnJlbmRlckJv
eCgpLT5zY3JvbGxXaWR0aCgpKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAg
ICAgcmV0dXJuIChjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WSgpICE9
IE9ISURERU4gJiYgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWlu
ZXItPnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94KCkt
PnNjcm9sbEhlaWdodCgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBjYW5TY3JvbGxJ
bkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZyYW1lKiBmcmFtZSkK
K3sKKyAgICBpZiAoIWZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBT
Y3JvbGxiYXJNb2RlIHZlcnRpY2FsTW9kZTsKKyAgICBTY3JvbGxiYXJNb2RlIGhvcml6b250YWxN
b2RlOworICAgIGZyYW1lLT52aWV3KCktPmNhbGN1bGF0ZVNjcm9sbGJhck1vZGVzRm9yTGF5b3V0
KGhvcml6b250YWxNb2RlLCB2ZXJ0aWNhbE1vZGUpOworICAgIGlmICgoZGlyZWN0aW9uID09IEZv
Y3VzRGlyZWN0aW9uTGVmdCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25SaWdodCkgJiYg
U2Nyb2xsYmFyQWx3YXlzT2ZmID09IGhvcml6b250YWxNb2RlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24g
PT0gRm9jdXNEaXJlY3Rpb25Eb3duKSAmJiAgU2Nyb2xsYmFyQWx3YXlzT2ZmID09IHZlcnRpY2Fs
TW9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEludFNpemUgc2l6ZSA9IGZyYW1lLT52
aWV3KCktPmNvbnRlbnRzU2l6ZSgpOworICAgIEludFNpemUgb2Zmc2V0ID0gZnJhbWUtPnZpZXco
KS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KHRydWUpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgcmV0dXJuIG9mZnNldC53aWR0aCgpID4g
MDsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBvZmZzZXQuaGVp
Z2h0KCkgPiAwOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJu
IHJlY3Qud2lkdGgoKSArIG9mZnNldC53aWR0aCgpIDwgc2l6ZS53aWR0aCgpOworICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICByZXR1cm4gcmVjdC5oZWlnaHQoKSArIG9mZnNl
dC5oZWlnaHQoKSA8IHNpemUuaGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzdGF0aWMgSW50UmVjdCByZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKEZy
YW1lKiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJlY3QmIGluaXRpYWxSZWN0KQoreworICAgIElu
dFJlY3QgcmVjdCA9IGluaXRpYWxSZWN0OworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gaW5pdGlh
bEZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgeworICAgICAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmcmFtZS0+b3du
ZXJFbGVtZW50KCkpKSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgcmVjdC5t
b3ZlKGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxlbWVudC0+b2Zmc2V0VG9wKCkpOworICAgICAg
ICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LT5vZmZzZXRQYXJlbnQoKSkpOworICAg
ICAgICAgICAgcmVjdC5tb3ZlKCgtZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBub2RlUmVjdElu
QWJzb2x1dGVDb29yZGluYXRlcyhOb2RlKiBub2RlLCBib29sIGlnbm9yZUJvcmRlcikKK3sKKyAg
ICBBU1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpKTsKKworICAgIGlmIChub2RlLT5pc0Rv
Y3VtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gZnJhbWVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5h
dGVzKHN0YXRpY19jYXN0PERvY3VtZW50Kj4obm9kZSktPmZyYW1lKCkpOworICAgIEludFJlY3Qg
cmVjdCA9IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KSwgbm9kZS0+Z2V0UmVjdCgpKTsKKworICAgIC8vIEZvciBhdXRob3JzIHRoYXQgdXNlIGJvcmRl
ciBpbnN0ZWFkIG9mIG91dGxpbmUgaW4gdGhlaXIgQ1NTLCB3ZSBjb21wZW5zYXRlIGJ5IGlnbm9y
aW5nIHRoZSBib3JkZXIgd2hlbiBjYWxjdWxhdGluZworICAgIC8vIHRoZSByZWN0IG9mIHRoZSBm
b2N1c2VkIGVsZW1lbnQuCisgICAgaWYgKGlnbm9yZUJvcmRlcikgeworICAgICAgICByZWN0Lm1v
dmUobm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCksIG5vZGUtPnJl
bmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkpOworICAgICAgICByZWN0LnNldFdp
ZHRoKHJlY3Qud2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckxlZnRX
aWR0aCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsK
KyAgICAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIG5vZGUtPnJlbmRlcmVyKCkt
PnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkgLSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5i
b3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFJl
Y3QgZnJhbWVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBy
ZXR1cm4gcmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyhmcmFtZSwgZnJhbWUtPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KCkpOworfQorCisvLyBFeGl0IHBvaW50IGlzIHRoZSBjbG9zZXN0IHBv
aW50IGluIHRoZSBzdGFydGluZ1JlY3QsIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRo
ZSBuYXZpZ2F0aW9uLgorLy8gRW50cnkgcG9pbnQgaXMgdGhlIGNsb3Nlc3QgcG9pbnQgaW4gdGhl
IGNhbmRpZGF0ZSBub2RlLCBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbmF2aWdh
dGlvbi4KK3ZvaWQgZW50cnlBbmRFeGl0UG9pbnRzRm9yRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBjb25zdCBJbnRSZWN0JiBw
b3RlbnRpYWxSZWN0LCBJbnRQb2ludCYgZXhpdFBvaW50LCBJbnRQb2ludCYgZW50cnlQb2ludCkK
K3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0
OgorICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGluZ1JlY3QueCgpKTsKKyAgICAgICAgZW50
cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdS
ZWN0LnkoKSk7CisgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LmJvdHRvbSgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAg
ICBleGl0UG9pbnQuc2V0WChzdGFydGluZ1JlY3QucmlnaHQoKSk7CisgICAgICAgIGVudHJ5UG9p
bnQuc2V0WChwb3RlbnRpYWxSZWN0LngoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QuYm90
dG9tKCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC55KCkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25MZWZ0OgorICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgaWYgKGJlbG93
KHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkpIHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5z
ZXRZKHN0YXJ0aW5nUmVjdC55KCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVu
dGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICB9IGVsc2UgaWYgKGJlbG93KHBvdGVudGlhbFJl
Y3QsIHN0YXJ0aW5nUmVjdCkpIHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5n
UmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVj
dC55KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkobWF4
KHN0YXJ0aW5nUmVjdC55KCksIHBvdGVudGlhbFJlY3QueSgpKSk7CisgICAgICAgICAgICBlbnRy
eVBvaW50LnNldFkoZXhpdFBvaW50LnkoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgor
ICAgICAgICBpZiAocmlnaHRPZihzdGFydGluZ1JlY3QsIHBvdGVudGlhbFJlY3QpKSB7CisgICAg
ICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGluZ1JlY3QueCgpKTsKKyAgICAgICAgICAgIGVu
dHJ5UG9pbnQuc2V0WChwb3RlbnRpYWxSZWN0LnJpZ2h0KCkpOworICAgICAgICB9IGVsc2UgaWYg
KHJpZ2h0T2YocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkgeworICAgICAgICAgICAgZXhp
dFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAgZW50cnlQb2lu
dC5zZXRYKHBvdGVudGlhbFJlY3QueCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGV4aXRQb2ludC5zZXRYKG1heChzdGFydGluZ1JlY3QueCgpLCBwb3RlbnRpYWxSZWN0LngoKSkp
OworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKGV4aXRQb2ludC54KCkpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKwordm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbiwgRm9jdXNDYW5kaWRhdGUmIGN1cnJlbnQsIEZvY3VzQ2FuZGlkYXRlJiBjYW5k
aWRhdGUpCit7CisgICAgaWYgKGNhbmRpZGF0ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghY2FuZGlkYXRlLm5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBJbnRSZWN0IG5vZGVSZWN0ID0gY2FuZGlkYXRlLnJlY3Q7CisgICAgSW50UmVjdCBjdXJyZW50
UmVjdCA9IGN1cnJlbnQucmVjdDsKKyAgICBkZWZsYXRlSWZPdmVybGFwcGVkKGN1cnJlbnRSZWN0
LCBub2RlUmVjdCk7CisKKyAgICBpZiAoIWlzUmVjdEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgY3Vy
cmVudFJlY3QsIG5vZGVSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgZXhp
dFBvaW50OworICAgIEludFBvaW50IGVudHJ5UG9pbnQ7CisgICAgaW50IHNhbWVBeGlzRGlzdGFu
Y2UgPSAwOworICAgIGludCBvdGhlckF4aXNEaXN0YW5jZSA9IDA7CisgICAgZW50cnlBbmRFeGl0
UG9pbnRzRm9yRGlyZWN0aW9uKGRpcmVjdGlvbiwgY3VycmVudFJlY3QsIG5vZGVSZWN0LCBleGl0
UG9pbnQsIGVudHJ5UG9pbnQpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGV4aXRQb2lu
dC54KCkgLSBlbnRyeVBvaW50LngoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnMo
ZXhpdFBvaW50LnkoKSAtIGVudHJ5UG9pbnQueSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0gZXhpdFBvaW50
LnkoKSAtIGVudHJ5UG9pbnQueSgpOworICAgICAgICBvdGhlckF4aXNEaXN0YW5jZSA9IGFicyhl
eGl0UG9pbnQueCgpIC0gZW50cnlQb2ludC54KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBlbnRyeVBv
aW50LngoKSAtIGV4aXRQb2ludC54KCk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJz
KGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0gZW50cnlQ
b2ludC55KCkgLSBleGl0UG9pbnQueSgpOworICAgICAgICBvdGhlckF4aXNEaXN0YW5jZSA9IGFi
cyhlbnRyeVBvaW50LngoKSAtIGV4aXRQb2ludC54KCkpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGludCB4ID0gKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSkgKiAo
ZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpKTsKKyAgICBpbnQgeSA9IChlbnRyeVBvaW50
LnkoKSAtIGV4aXRQb2ludC55KCkpICogKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7
CisKKyAgICBmbG9hdCBldWNsaWRpYW5EaXN0YW5jZSA9IHNxcnQoKHggKyB5KSAqIDEuMGYpOwor
CisgICAgLy8gTG9vc2VseSBiYXNlZCBvbiBodHRwOi8vd3d3LnczLm9yZy9UUi9XSUNELyNmb2N1
cy1oYW5kbGluZworICAgIC8vIGRmID0gZG90RGlzdCArIGR4ICsgZHkgKyAyICogKHhkaXNwbGFj
ZW1lbnQgKyB5ZGlzcGxhY2VtZW50KSAtIHNxcnQoT3ZlcmxhcCkKKworICAgIGZsb2F0IGRpc3Rh
bmNlID0gZXVjbGlkaWFuRGlzdGFuY2UgKyBzYW1lQXhpc0Rpc3RhbmNlICsgMiAqIG90aGVyQXhp
c0Rpc3RhbmNlOworICAgIGNhbmRpZGF0ZS5kaXN0YW5jZSA9IHJvdW5kZihkaXN0YW5jZSk7Cisg
ICAgSW50U2l6ZSB2aWV3U2l6ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKKyAgICBj
YW5kaWRhdGUuYWxpZ25tZW50ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBjdXJyZW50
UmVjdCwgbm9kZVJlY3QsIHZpZXdTaXplKTsKK30KKworYm9vbCBjYW5CZVNjcm9sbGVkSW50b1Zp
ZXcoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlKQor
eworICAgIEFTU0VSVChjYW5kaWRhdGUubm9kZSAmJiBoYXNPZmZzY3JlZW5SZWN0KGNhbmRpZGF0
ZS5ub2RlKSk7CisgICAgSW50UmVjdCBjYW5kaWRhdGVSZWN0ID0gbm9kZVJlY3RJbkFic29sdXRl
Q29vcmRpbmF0ZXMoY2FuZGlkYXRlLm5vZGUpOworICAgIGZvciAoTm9kZSogcGFyZW50Tm9kZSA9
IGNhbmRpZGF0ZS5ub2RlLT5wYXJlbnQoKTsgcGFyZW50Tm9kZTsgcGFyZW50Tm9kZSA9IHBhcmVu
dE5vZGUtPnBhcmVudCgpKSB7CisgICAgICAgIEludFJlY3QgcGFyZW50UmVjdCA9IG5vZGVSZWN0
SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKHBhcmVudE5vZGUpOworICAgICAgICBpZiAoIWNhbmRpZGF0
ZVJlY3QuaW50ZXJzZWN0cyhwYXJlbnRSZWN0KSkgeworICAgICAgICAgICAgaWYgKCgoZGlyZWN0
aW9uID09IEZvY3VzRGlyZWN0aW9uTGVmdCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25S
aWdodCkgJiYgcGFyZW50Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0g
T0hJRERFTikKKyAgICAgICAgICAgICAgICB8fCAoKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlv
blVwIHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkRvd24pICYmIHBhcmVudE5vZGUtPnJl
bmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WSgpID09IE9ISURERU4pKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyZW50Tm9kZSA9PSBj
YW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCkKKyAgICAgICAgICAgIHJldHVybiBjYW5T
Y3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIHBhcmVudE5vZGUpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdl
L1NwYXRpYWxOYXZpZ2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmgJKHJldmlzaW9uIDcxOTYwKQorKysgV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZp
Z2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgU3BhdGlh
bE5hdmlnYXRpb25faAogCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCiAjaW5jbHVkZSA8bGltaXRzPgpAQCAtMTA3
LDE2ICsxMDgsNyBAQCBzdHJ1Y3QgRm9jdXNDYW5kaWRhdGUgewogICAgIHsKICAgICB9CiAKLSAg
ICBGb2N1c0NhbmRpZGF0ZShOb2RlKiBuKQotICAgICAgICA6IG5vZGUobikKLSAgICAgICAgLCBl
bmNsb3NpbmdTY3JvbGxhYmxlQm94KDApCi0gICAgICAgICwgZGlzdGFuY2UobWF4RGlzdGFuY2Uo
KSkKLSAgICAgICAgLCBwYXJlbnREaXN0YW5jZShtYXhEaXN0YW5jZSgpKQotICAgICAgICAsIGFs
aWdubWVudChOb25lKQotICAgICAgICAsIHBhcmVudEFsaWdubWVudChOb25lKQotICAgIHsKLSAg
ICB9Ci0KKyAgICBGb2N1c0NhbmRpZGF0ZShOb2RlKiBuKTsKICAgICBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuICFub2RlOyB9CiAgICAgYm9vbCBpblNjcm9sbGFibGVDb250YWluZXIoKSBj
b25zdCB7IHJldHVybiBub2RlICYmIGVuY2xvc2luZ1Njcm9sbGFibGVCb3g7IH0KICAgICBEb2N1
bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBub2RlID8gbm9kZS0+ZG9jdW1lbnQoKSA6
IDA7IH0KQEAgLTEyNywxNiArMTE5LDI0IEBAIHN0cnVjdCBGb2N1c0NhbmRpZGF0ZSB7CiAgICAg
bG9uZyBsb25nIHBhcmVudERpc3RhbmNlOwogICAgIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudDsK
ICAgICBSZWN0c0FsaWdubWVudCBwYXJlbnRBbGlnbm1lbnQ7CisgICAgSW50UmVjdCByZWN0Owog
fTsKIAogdm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwg
Tm9kZSogc3RhcnQsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpOwotYm9vbCBzY3JvbGxJbkRp
cmVjdGlvbihGcmFtZSosIEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhbmRpZGF0ZSYgY2Fu
ZGlkYXRlID0gRm9jdXNDYW5kaWRhdGUoKSk7Citib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1l
KiwgRm9jdXNEaXJlY3Rpb24pOworYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWlu
ZXIsIEZvY3VzRGlyZWN0aW9uKTsKIHZvaWQgc2Nyb2xsSW50b1ZpZXcoRWxlbWVudCopOwotYm9v
bCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqKTsKK2Jvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiwg
Rm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gRm9jdXNEaXJlY3Rpb25Ob25lKTsKIGJvb2wgaXNJ
blJvb3REb2N1bWVudChOb2RlKik7Ci1ib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoTm9k
ZSopOworYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKGNvbnN0IE5vZGUqKTsKIGJvb2wg
aXNOb2RlRGVlcERlc2NlbmRhbnRPZkRvY3VtZW50KE5vZGUqLCBEb2N1bWVudCopOwotCitOb2Rl
KiBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVBbmREaXJlY3Rpb24oRm9jdXNEaXJlY3Rp
b24sIE5vZGUqIG5vZGUpOworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlv
biwgY29uc3QgTm9kZSogY29udGFpbmVyKTsKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oRm9j
dXNEaXJlY3Rpb24sIGNvbnN0IEZyYW1lKik7CitJbnRSZWN0IG5vZGVSZWN0SW5BYnNvbHV0ZUNv
b3JkaW5hdGVzKE5vZGUqLCBib29sIGlnbm9yZUJvcmRlciA9IGZhbHNlKTsKK0ludFJlY3QgZnJh
bWVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKEZyYW1lKik7Cit2b2lkIGRpc3RhbmNlRGF0YUZv
ck5vZGUoRm9jdXNEaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlJiBjdXJyZW50LCBGb2N1c0NhbmRp
ZGF0ZSYgY2FuZGlkYXRlKTsKK2Jvb2wgY2FuQmVTY3JvbGxlZEludG9WaWV3KEZvY3VzRGlyZWN0
aW9uLCBGb2N1c0NhbmRpZGF0ZSYpOwogfSAvLyBuYW1zcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBTcGF0aWFsTmF2aWdhdGlvbl9oCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73993</attachid>
            <date>2010-11-16 07:42:54 -0800</date>
            <delta_ts>2010-11-19 10:31:35 -0800</delta_ts>
            <desc>Patch - code only</desc>
            <filename>49382_code.patch</filename>
            <type>text/plain</type>
            <size>38764</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjA5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMTEtMTYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
CisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q29udHJvbGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseSk6CisgICAg
ICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5o
OgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9jdXNDYW5kaWRhdGU6OkZvY3VzQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmRp
c3RhbmNlRGF0YUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWxpZ25tZW50Rm9yUmVjdHMp
OgorICAgICAgICAoV2ViQ29yZTo6YXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3JlZW5BcGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1JlY3RJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpo
YXNPZmZzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6c2Nyb2xsYWJsZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhblNjcm9sbEluRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6bm9kZVJlY3RJ
bkFic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVSZWN0SW5BYnNv
bHV0ZUNvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmVudHJ5QW5kRXhpdFBvaW50c0Zv
ckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5CZVNjcm9sbGVkSW50b1ZpZXcpOgor
ICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaDoKKwogMjAxMC0xMS0xNSAgUGF2ZWwg
RmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZ
dXJ5IFNlbWlraGF0c2t5LgpJbmRleDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDcxOTYwKQorKysgV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDExICs0MCwxMyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKQEAgLTU3LDYgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKK3N0YXRp
YyB2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRh
dGUsIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRj
aEV2ZW50c09uV2luZG93QW5kRm9jdXNlZE5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGZv
Y3VzZWQpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBhIGZvY3VzZWQgbm9kZSB3ZSBzaG91bGQgZGlz
cGF0Y2ggYmx1ciBvbiBpdCBiZWZvcmUgd2UgYmx1ciB0aGUgd2luZG93LgpAQCAtMjg5LDY0ICsy
OTIsNiBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rp
b25hbGx5KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17
Ci0gICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgQVNTRVJUKGZy
YW1lKTsKLSAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7
Ci0gICAgaWYgKCFmb2N1c2VkRG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZERvY3VtZW50LT5mb2N1c2VkTm9kZSgpOwotICAg
IGlmICghZm9jdXNlZE5vZGUpIHsKLSAgICAgICAgLy8gSnVzdCBtb3ZlIHRvIHRoZSBmaXJzdCBm
b2N1c2FibGUgbm9kZS4KLSAgICAgICAgRm9jdXNEaXJlY3Rpb24gdGFiRGlyZWN0aW9uID0gKGRp
cmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblVwIHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlv
bkxlZnQpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvY3VzRGly
ZWN0aW9uQmFja3dhcmQgOiBGb2N1c0RpcmVjdGlvbkZvcndhcmQ7Ci0gICAgICAgIC8vICdpbml0
aWFsRm9jdXMnIGlzIHNldCB0byB0cnVlIHNvIHRoZSBjaHJvbWUgaXMgbm90IGZvY3VzZWQuCi0g
ICAgICAgIHJldHVybiBhZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIodGFiRGlyZWN0aW9uLCBl
dmVudCwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gTW92ZSB1cCBpbiB0aGUgY2hhaW4gb2YgbmVz
dGVkIGZyYW1lcy4KLSAgICBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRvcCgpOwotCi0gICAgRm9j
dXNDYW5kaWRhdGUgZm9jdXNDYW5kaWRhdGU7Ci0gICAgZmluZEZvY3VzYWJsZU5vZGVJbkRpcmVj
dGlvbihmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RDaGlsZCgpLCBmb2N1c2VkTm9kZSwgZGlyZWN0
aW9uLCBldmVudCwgZm9jdXNDYW5kaWRhdGUpOwotCi0gICAgTm9kZSogbm9kZSA9IGZvY3VzQ2Fu
ZGlkYXRlLm5vZGU7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsK
LSAgICAgICAgLy8gRklYTUU6IE1heSBuZWVkIGEgd2F5IHRvIGZvY3VzIGEgZG9jdW1lbnQgaGVy
ZS4KLSAgICAgICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgICAg
IHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLCBkaXJlY3Rpb24pOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgY3JhenkganVtcCBiZXR3ZWVu
IGxpbmtzIHRoYXQgYXJlIGVpdGhlciBmYXIgYXdheSBmcm9tIGVhY2ggb3RoZXIsCi0gICAgLy8g
b3IganVzdCBub3QgY3VycmVudGx5IHZpc2libGUsIGxldHMgZG8gYSBzY3JvbGwgaW4gdGhlIGdp
dmVuIGRpcmVjdGlvbiBhbmQgYmFpbCBvdXQKLSAgICAvLyBpZiB8bm9kZXwgZWxlbWVudCBpcyBu
b3QgaW4gdGhlIHZpZXdwb3J0LgotICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0KG5vZGUpKSB7Ci0g
ICAgICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKS0+ZnJhbWUoKTsK
LSAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZnJhbWUsIGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRh
dGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBEb2N1bWVudCogbmV3RG9j
dW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwotCi0gICAgaWYgKG5ld0RvY3VtZW50ICE9IGZvY3Vz
ZWREb2N1bWVudCkgewotICAgICAgICAvLyBGb2N1cyBpcyBnb2luZyBhd2F5IGZyb20gdGhlIG9y
aWdpbmFsbHkgZm9jdXNlZCBkb2N1bWVudCwgc28gY2xlYXIgdGhlIGZvY3VzZWQgbm9kZS4KLSAg
ICAgICAgZm9jdXNlZERvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKLSAgICB9Ci0KLSAgICBp
ZiAobmV3RG9jdW1lbnQpCi0gICAgICAgIHNldEZvY3VzZWRGcmFtZShuZXdEb2N1bWVudC0+ZnJh
bWUoKSk7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5v
ZGUpOwotICAgIEFTU0VSVChlbGVtZW50KTsKLQotICAgIHNjcm9sbEludG9WaWV3KGVsZW1lbnQp
OwotICAgIGVsZW1lbnQtPmZvY3VzKGZhbHNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3Rh
dGljIHZvaWQgdXBkYXRlRm9jdXNDYW5kaWRhdGVJblNhbWVDb250YWluZXIoY29uc3QgRm9jdXND
YW5kaWRhdGUmIGNhbmRpZGF0ZSwgRm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCiB7CiAgICAgaWYg
KGNsb3Nlc3QuaXNOdWxsKCkpIHsKQEAgLTY1OCw0ICs2MDMsMTg4IEBAIHZvaWQgRm9jdXNDb250
cm9sbGVyOjpzZXRBY3RpdmUoYm9vbCBhY3QKICAgICAgICAgZGlzcGF0Y2hFdmVudHNPbldpbmRv
d0FuZEZvY3VzZWROb2RlKG1fZm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpLCBhY3RpdmUpOwogfQog
Cit2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSWZOZWVkZWQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRh
dGUsIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KQoreworICAgIGlmICghY2FuZGlkYXRlLm5vZGUt
PmlzRWxlbWVudE5vZGUoKSB8fCFjYW5kaWRhdGUubm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gSWdub3JlIGVtcHR5IGZyYW1lcworICAgIGlmIChjYW5kaWRhdGUu
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpICYmICFzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25l
ckVsZW1lbnQqPihjYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBJZ25vcmUgb2ZmIHNjcmVlbiBjaGlsZCBub2RlcyBvZiBjb250YWluZXJz
IHRoYXQgZG8gbm90IHNjcm9sbCAob3ZlcmZsb3c6aGlkZGVuKQorICAgIGlmIChoYXNPZmZzY3Jl
ZW5SZWN0KGNhbmRpZGF0ZS5ub2RlKSAmJiAhY2FuQmVTY3JvbGxlZEludG9WaWV3KGRpcmVjdGlv
biwgY2FuZGlkYXRlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRm9jdXNDYW5kaWRhdGUgY3Vy
cmVudDsKKyAgICBjdXJyZW50LnJlY3QgPSBzdGFydGluZ1JlY3Q7CisgICAgZGlzdGFuY2VEYXRh
Rm9yTm9kZShkaXJlY3Rpb24sIGN1cnJlbnQsIGNhbmRpZGF0ZSk7CisgICAgaWYgKGNhbmRpZGF0
ZS5kaXN0YW5jZSA9PSBtYXhEaXN0YW5jZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9uKSAmJiBjYW5kaWRhdGUu
YWxpZ25tZW50IDwgRnVsbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNsb3Nlc3QuaXNO
dWxsKCkpIHsKKyAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEludFJlY3QgaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihub2Rl
UmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjYW5kaWRhdGUubm9kZSwgdHJ1ZSksIG5vZGVSZWN0
SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGNsb3Nlc3Qubm9kZSwgdHJ1ZSkpOworICAgIGlmICghaW50
ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSWYgMiBub2RlcyBhcmUgaW50
ZXJzZWN0aW5nLCBkbyBoaXQgdGVzdCB0byBmaW5kIHdoaWNoIG5vZGUgaW4gb24gdG9wLgorICAg
ICAgICBpbnQgeCA9IGludGVyc2VjdGlvblJlY3QueCgpICsgaW50ZXJzZWN0aW9uUmVjdC53aWR0
aCgpIC8gMjsKKyAgICAgICAgaW50IHkgPSBpbnRlcnNlY3Rpb25SZWN0LnkoKSArIGludGVyc2Vj
dGlvblJlY3QuaGVpZ2h0KCkgLyAyOworICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGNh
bmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQoeCwgeSksIGZhbHNlLCB0cnVlKTsK
KyAgICAgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5jb250YWlucyhyZXN1bHQuaW5uZXJOb2RlKCkp
KSB7CisgICAgICAgICAgICBjbG9zZXN0ID0gY2FuZGlkYXRlOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmIChjbG9zZXN0Lm5vZGUtPmNvbnRhaW5zKHJlc3VsdC5p
bm5lck5vZGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNhbmRp
ZGF0ZS5hbGlnbm1lbnQgPT0gY2xvc2VzdC5hbGlnbm1lbnQpIHsKKyAgICAgICAgaWYgKGNhbmRp
ZGF0ZS5kaXN0YW5jZSA8IGNsb3Nlc3QuZGlzdGFuY2UpCisgICAgICAgICAgICBjbG9zZXN0ID0g
Y2FuZGlkYXRlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNhbmRpZGF0ZS5h
bGlnbm1lbnQgPiBjbG9zZXN0LmFsaWdubWVudCkKKyAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0
ZTsKK30KKwordm9pZCBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c0NhbmRpZGF0ZUluQ29udGFp
bmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0Rp
cmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50LCBGb2N1c0NhbmRpZGF0ZSYg
Y2xvc2VzdCkKK3sKKyAgICBBU1NFUlQoY29udGFpbmVyKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUg
PSBjb250YWluZXItPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IChub2RlLT5pc0ZyYW1lT3du
ZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBub2RlKSkgPyBu
b2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnRhaW5lcikgOiBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKGNvbnRhaW5lcikpIHsKKyAgICAgICAgaWYgKCghZm9jdXNlZEZyYW1lKCkgfHwgIWZvY3Vz
ZWRGcmFtZSgpLT5kb2N1bWVudCgpIHx8IG5vZGUgIT0gZm9jdXNlZEZyYW1lKCktPmRvY3VtZW50
KCktPmZvY3VzZWROb2RlKCkpICYmIChub2RlLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSB8
fCBub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGly
ZWN0aW9uLCBub2RlKSkpIHsKKyAgICAgICAgICAgIEZvY3VzQ2FuZGlkYXRlIGNhbmRpZGF0ZShu
b2RlKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94ID0gY29u
dGFpbmVyOworICAgICAgICAgICAgdXBkYXRlRm9jdXNDYW5kaWRhdGVJZk5lZWRlZChkaXJlY3Rp
b24sIHN0YXJ0aW5nUmVjdCwgY2FuZGlkYXRlLCBjbG9zZXN0KTsKKyAgICAgICAgfQorICAgIH0K
K30KKworYm9vbCBGb2N1c0NvbnRyb2xsZXI6Om5hdmlnYXRlSW5Db250YWluZXIoTm9kZSogY29u
dGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uIGRpcmVj
dGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFjb250YWluZXIgfHwgIWNv
bnRhaW5lci0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhl
IHN0YXJ0aW5nIHJlY3QgaXMgdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgbm9kZSwgaW4gZG9jdW1l
bnQgY29vcmRpbmF0ZXMuCisgICAgLy8gQ29tcG9zZSBhIHZpcnR1YWwgc3RhcnRpbmcgcmVjdCBp
ZiB0aGVyZSBpcyBubyBmb2N1c2VkIG5vZGUgb3IgaWYgaXQgaXMgb2ZmIHNjcmVlbi4KKyAgICAv
LyBUaGUgdmlydHVhbCByZWN0IGlzIHRoZSBlZGdlIG9mIHRoZSBjb250YWluZXIgb3IgZnJhbWUu
IFdlIHNlbGVjdCB3aGljaAorICAgIC8vIGVkZ2UgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24g
b2YgdGhlIG5hdmlnYXRpb24uCisgICAgSW50UmVjdCBuZXdTdGFydGluZ1JlY3QgPSBzdGFydGlu
Z1JlY3Q7CisKKyAgICBpZiAoc3RhcnRpbmdSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBuZXdT
dGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjb250YWluZXIpOwor
ICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
TGVmdDoKKyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRYKG5ld1N0YXJ0aW5nUmVjdC5y
aWdodCgpKTsKKyAgICAgICAgICAgIG5ld1N0YXJ0aW5nUmVjdC5zZXRXaWR0aCgwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgICAg
ICBuZXdTdGFydGluZ1JlY3Quc2V0WShuZXdTdGFydGluZ1JlY3QuYm90dG9tKCkpOworICAgICAg
ICAgICAgbmV3U3RhcnRpbmdSZWN0LnNldEhlaWdodCgwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgICAgICBuZXdTdGFydGlu
Z1JlY3Quc2V0V2lkdGgoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1
c0RpcmVjdGlvbkRvd246CisgICAgICAgICAgICBuZXdTdGFydGluZ1JlY3Quc2V0SGVpZ2h0KDAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZpbmQgdGhlIGNs
b3Nlc3Qgbm9kZSB3aXRoaW4gY3VycmVudCBjb250YWluZXIgaW4gdGhlIGRpcmVjdGlvbiBvZiB0
aGUgbmF2aWdhdGlvbi4KKyAgICBGb2N1c0NhbmRpZGF0ZSBmb2N1c0NhbmRpZGF0ZTsKKyAgICBm
aW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihjb250YWluZXIsIG5ld1N0YXJ0aW5nUmVjdCwg
ZGlyZWN0aW9uLCBldmVudCwgZm9jdXNDYW5kaWRhdGUpOworCisgICAgaWYgKGZvY3VzQ2FuZGlk
YXRlLmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rp
b24sIGNvbnRhaW5lcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZm9jdXMsIHNjcm9s
bCBpZiBwb3NzaWJsZS4KKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGNvbnRhaW5lciwg
ZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IC8vIFJldHVybiBmYWxzZSB3aWxsIGNhdXNlIGEgcmUtdHJ5LCBza2lwcGluZyB0aGlzIGNvbnRh
aW5lci4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZm9jdXNDYW5kaWRh
dGUubm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIGlmIChoYXNPZmZzY3Jl
ZW5SZWN0KGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAgIEZy
YW1lKiBmcmFtZSA9IGZvY3VzQ2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCktPnZpZXcoKS0+ZnJh
bWUoKTsKKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLT5kb2N1bWVudCgpLCBk
aXJlY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gTmF2aWdhdGUgaW50byBhIG5ldyBmcmFtZS4KKyAgICAgICAgSW50UmVjdCByZWN0OworICAg
ICAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWRPck1haW5GcmFtZSgpLT5kb2N1bWVudCgp
LT5mb2N1c2VkTm9kZSgpOworICAgICAgICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09mZnNjcmVl
blJlY3QoZm9jdXNlZE5vZGUpKQorICAgICAgICAgICAgcmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0
ZUNvb3JkaW5hdGVzKGZvY3VzZWROb2RlLCB0cnVlIC8qIGlnbm9yZSBib3JkZXIgKi8pOworICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZm9jdXNDYW5k
aWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZy
YW1lT3duZXJFbGVtZW50Kj4oZm9jdXNDYW5kaWRhdGUubm9kZSktPmNvbnRlbnRGcmFtZSgpLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAg
ICAgaWYgKCFuYXZpZ2F0ZUluQ29udGFpbmVyKHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxl
bWVudCo+KGZvY3VzQ2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKSwg
cmVjdCwgZGlyZWN0aW9uLCBldmVudCkpCisgICAgICAgICAgICAvLyBUaGUgbmV3IGZyYW1lIGhh
ZCBub3RoaW5nIGludGVyZXN0aW5nLCBza2lwIHBhc3QgaXQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAg
ICAgICAgIHJldHVybiBuYXZpZ2F0ZUluQ29udGFpbmVyKGNvbnRhaW5lciwgbm9kZVJlY3RJbkFi
c29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNDYW5kaWRhdGUubm9kZSwgdHJ1ZSksIGRpcmVjdGlvbiwg
ZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNhblNjcm9sbElu
RGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUubm9kZSkpIHsKKyAgICAgICAgaWYg
KGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9uKSkgeworICAg
ICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZm9jdXNDYW5kaWRhdGUubm9kZSwgZGlyZWN0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIE5hdmln
YXRlIGludG8gYSBuZXcgc2Nyb2xsYWJsZSBjb250YWluZXIuCisgICAgICAgIEludFJlY3QgcmVj
dDsKKyAgICAgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKS0+ZG9j
dW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKKyAgICAgICAgaWYgKGZvY3VzZWROb2RlICYmICFoYXNP
ZmZzY3JlZW5SZWN0KGZvY3VzZWROb2RlKSkKKyAgICAgICAgICAgIHJlY3QgPSBub2RlUmVjdElu
QWJzb2x1dGVDb29yZGluYXRlcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBu
YXZpZ2F0ZUluQ29udGFpbmVyKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHJlY3QsIGRpcmVjdGlvbiwg
ZXZlbnQpOworICAgIH0KKyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChmb2N1c0NhbmRpZGF0ZS5u
b2RlLCBkaXJlY3Rpb24pKSB7CisgICAgICAgIE5vZGUqIGNvbnRhaW5lciA9IGZvY3VzQ2FuZGlk
YXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3g7CisgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGNv
bnRhaW5lciwgZGlyZWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gV2UgZm91bmQgYSBuZXcgZm9jdXMgbm9kZSwgbmF2aWdhdGUgdG8gaXQuCisgICAgRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5ub2RlKTsK
KyAgICBBU1NFUlQoZWxlbWVudCk7CisKKyAgICBlbGVtZW50LT5mb2N1cyhmYWxzZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJl
Y3Rpb25hbGx5KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQp
Cit7CisgICAgRnJhbWUqIGN1ckZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgQVNT
RVJUKGN1ckZyYW1lKTsKKworICAgIERvY3VtZW50KiBmb2N1c2VkRG9jdW1lbnQgPSBjdXJGcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWZvY3VzZWREb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkRG9jdW1lbnQtPmZvY3Vz
ZWROb2RlKCk7CisgICAgTm9kZSogY29udGFpbmVyID0gZm9jdXNlZERvY3VtZW50OworCisgICAg
Ly8gRmlndXJlIG91dCB0aGUgc3RhcnRpbmcgcmVjdC4KKyAgICBJbnRSZWN0IHN0YXJ0aW5nUmVj
dDsKKyAgICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09mZnNjcmVlblJlY3QoZm9jdXNlZE5vZGUp
KSB7CisgICAgICAgIGNvbnRhaW5lciA9IHNjcm9sbGFibGVPckZyYW1lUGFyZW50Rm9yTm9kZUFu
ZERpcmVjdGlvbihkaXJlY3Rpb24sIGZvY3VzZWROb2RlKTsKKyAgICAgICAgc3RhcnRpbmdSZWN0
ID0gbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNlZE5vZGUsIHRydWUgLyogaWdu
b3JlIGJvcmRlciAqLyk7CisgICAgfQorCisgICAgYm9vbCBjb25zdW1lZCA9IGZhbHNlOworICAg
IGRvIHsKKyAgICAgICAgaWYgKGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGFpbmVyKS0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgIGNvbnN1bWVkID0gbmF2aWdhdGVJbkNvbnRh
aW5lcihjb250YWluZXIsIHN0YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAg
IHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGNvbnRhaW5lciwg
dHJ1ZSAvKiBpZ25vcmUgYm9yZGVyICovKTsKKyAgICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJs
ZU9yRnJhbWVQYXJlbnRGb3JOb2RlQW5kRGlyZWN0aW9uKGRpcmVjdGlvbiwgY29udGFpbmVyKTsK
KyAgICB9IHdoaWxlICghY29uc3VtZWQgJiYgY29udGFpbmVyKTsKKworICAgIHJldHVybiBjb25z
dW1lZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuaAkocmV2aXNpb24gNzE5NjApCisrKyBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9jdXNDYW5kaWRhdGUmIHBhcmVudENhbmRp
ZGF0ZSA9IEZvY3VzQ2FuZGlkYXRlKCkpOwogICAgIHZvaWQgZGVlcEZpbmRGb2N1c2FibGVOb2Rl
SW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBOb2RlKiBmb2N1c2VkLCBGb2N1c0RpcmVjdGlv
biwgS2V5Ym9hcmRFdmVudCosIEZvY3VzQ2FuZGlkYXRlJik7CiAKKyAgICBib29sIG5hdmlnYXRl
SW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3Qs
IEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBmaW5kRm9jdXNDYW5k
aWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5n
UmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0NhbmRpZGF0ZSYgY2xv
c2VzdCk7CisKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgUmVmUHRyPEZyYW1lPiBtX2ZvY3VzZWRG
cmFtZTsKICAgICBib29sIG1faXNBY3RpdmU7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA3MTk2
MCkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYg
KzIzNSw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnJhbWVWaWV3U2Nyb2xsQ29ybmVyKFJlbmRl
clNjcm9sbGJhclBhcnQqIHNjcm9sbENvcm5lcikgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxDb3Ju
ZXIgPT0gc2Nyb2xsQ29ybmVyOyB9CiAgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKCk7
CiAKKyAgICB2b2lkIGNhbGN1bGF0ZVNjcm9sbGJhck1vZGVzRm9yTGF5b3V0KFNjcm9sbGJhck1v
ZGUmIGhNb2RlLCBTY3JvbGxiYXJNb2RlJiB2TW9kZSk7CisKICAgICAvLyBOb3JtYWwgZGVsYXkK
ICAgICBzdGF0aWMgdm9pZCBzZXRSZXBhaW50VGhyb3R0bGluZ0RlZmVycmVkUmVwYWludERlbGF5
KGRvdWJsZSBwKTsKICAgICAvLyBOZWdhdGl2ZSB2YWx1ZSB3b3VsZCBtZWFuIHRoYXQgZmlyc3Qg
ZmV3IHJlcGFpbnRzIGhhcHBlbiB3aXRob3V0IGEgZGVsYXkKQEAgLTI2NCw3ICsyNjYsNiBAQCBw
cml2YXRlOgogICAgIGJvb2wgaGFzRml4ZWRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9maXhl
ZE9iamVjdENvdW50ID4gMDsgfQogCiAgICAgdm9pZCBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChS
ZW5kZXJPYmplY3QqLCBTY3JvbGxiYXJNb2RlJiBoTW9kZSwgU2Nyb2xsYmFyTW9kZSYgdk1vZGUp
OwotICAgIHZvaWQgY2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNGb3JMYXlvdXQoU2Nyb2xsYmFyTW9k
ZSYgaE1vZGUsIFNjcm9sbGJhck1vZGUmIHZNb2RlKTsKIAogICAgIHZvaWQgdXBkYXRlT3ZlcmZs
b3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7
CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNzE5NjApCisr
KyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxMiArNDMsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgbG9uZyBsb25nIHNw
YXRpYWxEaXN0YW5jZShGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmKTsKIHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRvUm9vdERvY3VtZW50KFJl
bmRlck9iamVjdCopOwotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGljIFJl
Y3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKTsKIHN0YXRpYyBi
b29sIGFyZVJlY3RzRnVsbHlBbGlnbmVkKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgSW50UmVjdCYpOwogc3RhdGljIGJvb2wgYXJlUmVjdHNQYXJ0aWFsbHlBbGlnbmVkKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOworc3RhdGljIGJv
b2wgYXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3JlZW5BcGFydChGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNv
bnN0IEludFNpemUmIHZpZXdTaXplKTsKIHN0YXRpYyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIHZv
aWQgZGVmbGF0ZUlmT3ZlcmxhcHBlZChJbnRSZWN0JiwgSW50UmVjdCYpOwogc3RhdGljIGJvb2wg
Y2hlY2tOZWdhdGl2ZUNvb3Jkc0Zvck5vZGUoTm9kZSosIGNvbnN0IEludFJlY3QmKTsKK3N0YXRp
YyBJbnRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqIGluaXRpYWxGcmFtZSwg
Y29uc3QgSW50UmVjdCYgcmVjdCk7CitzdGF0aWMgdm9pZCBlbnRyeUFuZEV4aXRQb2ludHNGb3JE
aXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGlu
Z1JlY3QsIGNvbnN0IEludFJlY3QmIHBvdGVudGlhbFJlY3QsIEludFBvaW50JiBleGl0UG9pbnQs
IEludFBvaW50JiBlbnRyeVBvaW50KTsKKworCitGb2N1c0NhbmRpZGF0ZTo6Rm9jdXNDYW5kaWRh
dGUoTm9kZSogbikKKyAgICA6IG5vZGUobikKKyAgICAsIGVuY2xvc2luZ1Njcm9sbGFibGVCb3go
MCkKKyAgICAsIGRpc3RhbmNlKG1heERpc3RhbmNlKCkpCisgICAgLCBwYXJlbnREaXN0YW5jZSht
YXhEaXN0YW5jZSgpKQorICAgICwgYWxpZ25tZW50KE5vbmUpCisgICAgLCBwYXJlbnRBbGlnbm1l
bnQoTm9uZSkKKyAgICAsIHJlY3Qobm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMobiwgdHJ1
ZSAvKiBpZ25vcmUgYm9yZGVyICovKSkKK3sKK30KIAogYm9vbCBpc1NwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZChjb25zdCBGcmFtZSogZnJhbWUpCiB7CkBAIC0xMDIsNyArMTE3LDggQEAgdm9pZCBk
aXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uIAogICAgIC8vIFRoZSBkaXN0YW5jZSBi
ZXR3ZWVuIHR3byBub2RlcyBpcyBub3QgdG8gYmUgY29uc2lkZXJlZCBhbG9uZSB3aGVuIGV2YWx1
YXRpbmcvbG9va2luZwogICAgIC8vIGZvciB0aGUgYmVzdCBmb2N1cyBjYW5kaWRhdGUgbm9kZS4g
QWxpZ25tZW50IG9mIHJlY3RzIGNhbiBiZSBhbHNvIGEgZ29vZCBwb2ludCB0byBiZQogICAgIC8v
IGNvbnNpZGVyZWQgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYWxnb3JpdGhtIHRvIGJlaGF2aW9yIGlu
IGEgbW9yZSBpbnR1aXRpdmUgd2F5LgotICAgIGNhbmRpZGF0ZS5hbGlnbm1lbnQgPSBhbGlnbm1l
bnRGb3JSZWN0cyhkaXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpOworICAgIEludFNpemUg
dmlld1NpemUgPSBjYW5kaWRhdGUubm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJhbWUo
KS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7CisgICAgY2FuZGlkYXRlLmFs
aWdubWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVj
dCwgdmlld1NpemUpOwogICAgIGNhbmRpZGF0ZS5kaXN0YW5jZSA9IHNwYXRpYWxEaXN0YW5jZShk
aXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpOwogfQogCkBAIC0xMzYsOCArMTUyLDEyIEBA
IHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRvUm9vdEQKICAgICByZXR1cm4gcmVj
dDsKIH0KIAotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVjdCwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0UmVjdCkKK3N0YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKQogeworICAgIC8vIElmIHdl
IGZvdW5kIGEgbm9kZSBpbiBmdWxsIGFsaWdubWVudCwgYnV0IGl0IGlzIHRvbyBmYXIgYXdheSwg
aWdub3JlIGl0LgorICAgIGlmIChhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwYXJ0KGRpcmVj
dGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCwgdmlld1NpemUpKQorICAgICAgICByZXR1cm4gTm9u
ZTsKKwogICAgIGlmIChhcmVSZWN0c0Z1bGx5QWxpZ25lZChkaXJlY3Rpb24sIGN1clJlY3QsIHRh
cmdldFJlY3QpKQogICAgICAgICByZXR1cm4gRnVsbDsKIApAQCAtMjc3LDYgKzI5NywyNSBAQCBz
dGF0aWMgYm9vbCBhcmVSZWN0c1BhcnRpYWxseUFsaWduZWQoRm9jCiAgICAgICAgICAgICB8fCAo
YkVuZCA+PSBhU3RhcnQgJiYgYkVuZCA8PSBhRW5kKSk7CiB9CiAKK3N0YXRpYyBib29sIGFyZVJl
Y3RzTW9yZVRoYW5GdWxsU2NyZWVuQXBhcnQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRT
aXplJiB2aWV3U2l6ZSkKK3sKKyAgICBBU1NFUlQoaXNSZWN0SW5EaXJlY3Rpb24oZGlyZWN0aW9u
LCBjdXJSZWN0LCB0YXJnZXRSZWN0KSk7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0
YXJnZXRSZWN0LnJpZ2h0KCkgPiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueCgpIC0gY3VyUmVjdC5yaWdo
dCgpID4gdmlld1NpemUud2lkdGgoKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAg
ICAgIHJldHVybiBjdXJSZWN0LnkoKSAtIHRhcmdldFJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5o
ZWlnaHQoKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgcmV0dXJuIHRh
cmdldFJlY3QueSgpIC0gY3VyUmVjdC5ib3R0b20oKSA+IHZpZXdTaXplLmhlaWdodCgpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9CisKIC8vIFJldHVybiB0cnVlIGlmIHJlY3QgfGF8IGlzIGJlbG93IHxi
fC4gRmFsc2Ugb3RoZXJ3aXNlLgogc3RhdGljIGlubGluZSBib29sIGJlbG93KGNvbnN0IEludFJl
Y3QmIGEsIGNvbnN0IEludFJlY3QmIGIpCiB7CkBAIC00MDMsMjkgKzQ0MiwyNSBAQCBzdGF0aWMg
bG9uZyBsb25nIHNwYXRpYWxEaXN0YW5jZShGb2N1c0RpCiAKIHN0YXRpYyBib29sIGlzUmVjdElu
RGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVj
dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBJbnRQb2ludCBjZW50ZXIodGFy
Z2V0UmVjdC5jZW50ZXIoKSk7Ci0gICAgaW50IHRhcmdldE1pZGRsZSA9IGlzSG9yaXpvbnRhbE1v
dmUoZGlyZWN0aW9uKSA/IGNlbnRlci54KCkgOiBjZW50ZXIueSgpOwotCiAgICAgc3dpdGNoIChk
aXJlY3Rpb24pIHsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgcmV0dXJu
IHRhcmdldE1pZGRsZSA8IGN1clJlY3QueCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC5y
aWdodCgpIDw9IGN1clJlY3QueCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAg
ICAgICAgcmV0dXJuIHRhcmdldE1pZGRsZSA+IGN1clJlY3QucmlnaHQoKTsKKyAgICAgICAgcmV0
dXJuIHRhcmdldFJlY3QueCgpID49IGN1clJlY3QucmlnaHQoKTsKICAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6Ci0gICAgICAgIHJldHVybiB0YXJnZXRNaWRkbGUgPCBjdXJSZWN0LnkoKTsKKyAg
ICAgICAgcmV0dXJuIHRhcmdldFJlY3QuYm90dG9tKCkgPD0gY3VyUmVjdC55KCk7CiAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAgIHJldHVybiB0YXJnZXRNaWRkbGUgPiBjdXJS
ZWN0LmJvdHRvbSgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC55KCkgPj0gY3VyUmVjdC5i
b3R0b20oKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8g
Q2hlY2tzIGlmIHxub2RlfCBpcyBvZmZzY3JlZW4gdGhlIHZpc2libGUgYXJlYSAodmlld3BvcnQp
IG9mIGl0cyBjb250YWluZXIKIC8vIGRvY3VtZW50LiBJbiBjYXNlIGl0IGlzLCBvbmUgY2FuIHNj
cm9sbCBpbiBkaXJlY3Rpb24gb3IgdGFrZSBhbnkgZGlmZmVyZW50CiAvLyBkZXNpcmVkIGFjdGlv
biBsYXRlciBvbi4KLWJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlKQorYm9vbCBoYXNP
ZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAg
ICAvLyBHZXQgdGhlIEZyYW1lVmlldyBpbiB3aGljaCB8bm9kZXwgaXMgKHdoaWNoIG1lYW5zIHRo
ZSBjdXJyZW50IHZpZXdwb3J0IGlmIHxub2RlfAogICAgIC8vIGlzIG5vdCBpbiBhbiBpbm5lciBk
b2N1bWVudCksIHNvIHdlIGNhbiBjaGVjayBpZiBpdHMgY29udGVudCByZWN0IGlzIHZpc2libGUK
QEAgLTQzNSw2ICs0NzAsMjYgQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCBjb250YWluZXJWaWV3cG9ydFJlY3Qg
PSBmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIC8vIFdlIHdhbnQgdG8gc2Vs
ZWN0IGEgbm9kZSBpZiBpdCBpcyBjdXJyZW50bHkgb2ZmIHNjcmVlbiwgYnV0IHdpbGwgYmUKKyAg
ICAvLyBleHBvc2VkIGFmdGVyIHdlIHNjcm9sbC4gQWRqdXN0IHRoZSB2aWV3cG9ydCB0byBwb3N0
LXNjcm9sbGluZyBwb3NpdGlvbi4KKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0WChj
b250YWluZXJWaWV3cG9ydFJlY3QueCgpIC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgp
KTsKKyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldFdpZHRoKGNvbnRhaW5lclZpZXdw
b3J0UmVjdC53aWR0aCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBjb250YWlu
ZXJWaWV3cG9ydFJlY3Quc2V0V2lkdGgoY29udGFpbmVyVmlld3BvcnRSZWN0LndpZHRoKCkgKyBT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRZKGNv
bnRhaW5lclZpZXdwb3J0UmVjdC55KCkgLSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkp
OworICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0SGVpZ2h0KGNvbnRhaW5lclZpZXdw
b3J0UmVjdC5oZWlnaHQoKSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBjb250YWlu
ZXJWaWV3cG9ydFJlY3Quc2V0SGVpZ2h0KGNvbnRhaW5lclZpZXdwb3J0UmVjdC5oZWlnaHQoKSAr
IFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcikKQEAgLTQ0NywzNiArNTAyLDcy
IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlKQogICAgIHJldHVybiAhY29udGFp
bmVyVmlld3BvcnRSZWN0LmludGVyc2VjdHMocmVjdCk7CiB9CiAKLS8vIEluIGEgYm90dG9tLXVw
IHdheSwgdGhpcyBtZXRob2QgdHJpZXMgdG8gc2Nyb2xsIHxmcmFtZXwgaW4gYSBnaXZlbiBkaXJl
Y3Rpb24KLS8vIHxkaXJlY3Rpb258LCBnb2luZyB1cCBpbiB0aGUgZnJhbWUgdHJlZSBoaWVyYXJj
aHkgaW4gY2FzZSBpdCBkb2VzIG5vdCBzdWNjZWVkLgotYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihG
cmFtZSogZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRh
dGUmIGNhbmRpZGF0ZSkKK2Jvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIEFTU0VSVChmcmFtZSAmJiBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rp
b24sIGZyYW1lLT5kb2N1bWVudCgpKSk7CiAKLSAgICBTY3JvbGxEaXJlY3Rpb24gc2Nyb2xsRGly
ZWN0aW9uOworICAgIGlmIChmcmFtZSAmJiBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24s
IGZyYW1lLT5kb2N1bWVudCgpKSkgeworICAgICAgICBpbnQgZHggPSAwOworICAgICAgICBpbnQg
ZHkgPSAwOworICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIGR4ID0gLSBTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlv
blJpZ2h0OgorICAgICAgICAgICAgZHggPSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAg
ICAgICAgICAgZHkgPSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgICAg
IGR5ID0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgc3dpdGNoIChkaXJlY3Rp
b24pIHsKLSAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0
aW9uID0gU2Nyb2xsTGVmdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlv
blJpZ2h0OgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdodDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgotICAgICAgICBzY3JvbGxEaXJlY3Rp
b24gPSBTY3JvbGxVcDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRv
d246Ci0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZnJhbWUtPnZp
ZXcoKS0+c2Nyb2xsQnkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2Rl
KiBjb250YWluZXIsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBpZiAoY29udGFp
bmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gc2Nyb2xsSW5EaXJlY3Rpb24o
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250YWluZXIpLT5mcmFtZSgpLCBkaXJlY3Rpb24pOwog
Ci0gICAgaWYgKCFjYW5kaWRhdGUuaXNOdWxsKCkgJiYgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9k
ZShjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCkpCi0gICAgICAgIHJldHVybiBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KHNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsQnlMaW5lLCBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCk7CisgICAgaWYgKCFj
b250YWluZXItPnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShzY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEJ5TGluZSk7CisgICAgaWYgKGNvbnRhaW5lciAmJiBjYW5TY3JvbGxJbkRpcmVj
dGlvbihkaXJlY3Rpb24sIGNvbnRhaW5lcikpIHsKKyAgICAgICAgaW50IGR4ID0gMDsKKyAgICAg
ICAgaW50IGR5ID0gMDsKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgICAgICBkeCA9IC0gbWluKFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
CisgICAgICAgICAgICBBU1NFUlQoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsV2lkdGgo
KSA+IChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxMZWZ0KCkgKyBjb250YWluZXItPnJl
bmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSk7CisgICAgICAgICAgICBkeCA9IG1pbihTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdp
ZHRoKCkgLSAoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVy
LT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgICAgIGR5ID0gLSBtaW4oU2Nyb2xs
YmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxU
b3AoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRv
d246CisgICAgICAgICAgICBBU1NFUlQoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVp
Z2h0KCkgLSAoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXIt
PnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkpOworICAgICAgICAgICAgZHkgPSBtaW4oU2Ny
b2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3Jv
bGxIZWlnaHQoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSArIGNvbnRh
aW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29udGFpbmVyLT5y
ZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShkeCwgZHkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2
b2lkIHNjcm9sbEludG9WaWV3KEVsZW1lbnQqIGVsZW1lbnQpCkBAIC01MzQsNyArNjI1LDcgQEAg
c3RhdGljIGJvb2wgY2hlY2tOZWdhdGl2ZUNvb3Jkc0Zvck5vZGUoTgogICAgIHJldHVybiBjYW5C
ZVNjcm9sbGVkOwogfQogCi1ib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoTm9kZSogbm9k
ZSkKK2Jvb2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShjb25zdCBOb2RlKiBub2RlKQogewog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTY3LDQgKzY1OCwyMzgg
QEAgYm9vbCBpc05vZGVEZWVwRGVzY2VuZGFudE9mRG9jdW1lbnQoTm9kZQogICAgIHJldHVybiBk
ZXNjZW5kYW50OwogfQogCitOb2RlKiBzY3JvbGxhYmxlT3JGcmFtZVBhcmVudEZvck5vZGVBbmRE
aXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBub2RlKQoreworICAgIEFT
U0VSVChub2RlKTsKKyAgICBOb2RlKiBwYXJlbnQgPSBub2RlOworICAgIGRvIHsKKyAgICAgICAg
aWYgKHBhcmVudC0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgICAgIHBhcmVudCA9IHN0YXRp
Y19jYXN0PERvY3VtZW50Kj4ocGFyZW50KS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+b3duZXJFbGVt
ZW50KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50
Tm9kZSgpOworICAgIH0gd2hpbGUgKHBhcmVudCAmJiAhY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGly
ZWN0aW9uLCBwYXJlbnQpICYmICFwYXJlbnQtPmlzRG9jdW1lbnROb2RlKCkpOworCisgICAgcmV0
dXJuIHBhcmVudDsKK30KKworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlv
biBkaXJlY3Rpb24sIGNvbnN0IE5vZGUqIGNvbnRhaW5lcikKK3sKKyAgICBBU1NFUlQoY29udGFp
bmVyKTsKKyAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICByZXR1
cm4gY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBzdGF0aWNfY2FzdDxjb25zdCBEb2N1
bWVudCo+KGNvbnRhaW5lciktPmZyYW1lKCkpOworCisgICAgaWYgKCFpc1Njcm9sbGFibGVDb250
YWluZXJOb2RlKGNvbnRhaW5lcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIHJl
dHVybiAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPSElE
REVOICYmIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSA+IDApOworICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgcmV0dXJuIChjb250YWluZXItPnJlbmRlcmVy
KCktPnN0eWxlKCktPm92ZXJmbG93WSgpICE9IE9ISURERU4gJiYgY29udGFpbmVyLT5yZW5kZXJC
b3goKS0+c2Nyb2xsVG9wKCkgPiAwKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6Cisg
ICAgICAgIHJldHVybiAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1go
KSAhPSBPSElEREVOICYmIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNv
bnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkgPCBjb250YWluZXItPnJlbmRlckJv
eCgpLT5zY3JvbGxXaWR0aCgpKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAg
ICAgcmV0dXJuIChjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WSgpICE9
IE9ISURERU4gJiYgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWlu
ZXItPnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94KCkt
PnNjcm9sbEhlaWdodCgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBjYW5TY3JvbGxJ
bkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZyYW1lKiBmcmFtZSkK
K3sKKyAgICBpZiAoIWZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBT
Y3JvbGxiYXJNb2RlIHZlcnRpY2FsTW9kZTsKKyAgICBTY3JvbGxiYXJNb2RlIGhvcml6b250YWxN
b2RlOworICAgIGZyYW1lLT52aWV3KCktPmNhbGN1bGF0ZVNjcm9sbGJhck1vZGVzRm9yTGF5b3V0
KGhvcml6b250YWxNb2RlLCB2ZXJ0aWNhbE1vZGUpOworICAgIGlmICgoZGlyZWN0aW9uID09IEZv
Y3VzRGlyZWN0aW9uTGVmdCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25SaWdodCkgJiYg
U2Nyb2xsYmFyQWx3YXlzT2ZmID09IGhvcml6b250YWxNb2RlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24g
PT0gRm9jdXNEaXJlY3Rpb25Eb3duKSAmJiAgU2Nyb2xsYmFyQWx3YXlzT2ZmID09IHZlcnRpY2Fs
TW9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEludFNpemUgc2l6ZSA9IGZyYW1lLT52
aWV3KCktPmNvbnRlbnRzU2l6ZSgpOworICAgIEludFNpemUgb2Zmc2V0ID0gZnJhbWUtPnZpZXco
KS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KHRydWUpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgcmV0dXJuIG9mZnNldC53aWR0aCgpID4g
MDsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBvZmZzZXQuaGVp
Z2h0KCkgPiAwOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJu
IHJlY3Qud2lkdGgoKSArIG9mZnNldC53aWR0aCgpIDwgc2l6ZS53aWR0aCgpOworICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICByZXR1cm4gcmVjdC5oZWlnaHQoKSArIG9mZnNl
dC5oZWlnaHQoKSA8IHNpemUuaGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRp
YyBJbnRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqIGluaXRpYWxGcmFtZSwg
Y29uc3QgSW50UmVjdCYgaW5pdGlhbFJlY3QpCit7CisgICAgSW50UmVjdCByZWN0ID0gaW5pdGlh
bFJlY3Q7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBpbml0aWFsRnJhbWU7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZyYW1lLT5vd25lckVsZW1lbnQoKSkpIHsKKyAg
ICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUoZWxlbWVudC0+b2Zmc2V0
TGVmdCgpLCBlbGVtZW50LT5vZmZzZXRUb3AoKSk7CisgICAgICAgICAgICB9IHdoaWxlICgoZWxl
bWVudCA9IGVsZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7CisgICAgICAgICAgICByZWN0Lm1vdmUo
KC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiByZWN0OworfQorCitJbnRSZWN0IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVz
KE5vZGUqIG5vZGUsIGJvb2wgaWdub3JlQm9yZGVyKQoreworICAgIEFTU0VSVChub2RlICYmIG5v
ZGUtPnJlbmRlcmVyKCkpOworCisgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCisgICAg
ICAgIHJldHVybiBmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihub2RlKS0+ZnJhbWUoKSk7CisgICAgSW50UmVjdCByZWN0ID0gcmVjdFRvQWJzb2x1
dGVDb29yZGluYXRlcyhub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLCBub2RlLT5nZXRSZWN0KCkp
OworCisgICAgLy8gRm9yIGF1dGhvcnMgdGhhdCB1c2UgYm9yZGVyIGluc3RlYWQgb2Ygb3V0bGlu
ZSBpbiB0aGVpciBDU1MsIHdlIGNvbXBlbnNhdGUgYnkgaWdub3JpbmcgdGhlIGJvcmRlciB3aGVu
IGNhbGN1bGF0aW5nCisgICAgLy8gdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgZWxlbWVudC4KKyAg
ICBpZiAoaWdub3JlQm9yZGVyKSB7CisgICAgICAgIHJlY3QubW92ZShub2RlLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
Ym9yZGVyVG9wV2lkdGgoKSk7CisgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0g
bm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBub2RlLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCkpOworICAgICAgICByZWN0LnNldEhl
aWdodChyZWN0LmhlaWdodCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9w
V2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCkp
OworICAgIH0KKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBmcmFtZVJlY3RJbkFic29s
dXRlQ29vcmRpbmF0ZXMoRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiByZWN0VG9BYnNvbHV0
ZUNvb3JkaW5hdGVzKGZyYW1lLCBmcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKSk7
Cit9CisKKy8vIEV4aXQgcG9pbnQgaXMgdGhlIGNsb3Nlc3QgcG9pbnQgaW4gdGhlIHN0YXJ0aW5n
UmVjdCwgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisvLyBF
bnRyeSBwb2ludCBpcyB0aGUgY2xvc2VzdCBwb2ludCBpbiB0aGUgY2FuZGlkYXRlIG5vZGUsIGRl
cGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0aW9uLgordm9pZCBlbnRyeUFu
ZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzdGFydGluZ1JlY3QsIGNvbnN0IEludFJlY3QmIHBvdGVudGlhbFJlY3QsIEludFBv
aW50JiBleGl0UG9pbnQsIEludFBvaW50JiBlbnRyeVBvaW50KQoreworICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGV4aXRQb2lu
dC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50
aWFsUmVjdC5yaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
blVwOgorICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKKyAgICAgICAg
ZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0
YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJl
Y3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Cisg
ICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgIGVu
dHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBpZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBwb3Rl
bnRpYWxSZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0Lnko
KSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC5ib3R0b20oKSk7
CisgICAgICAgIH0gZWxzZSBpZiAoYmVsb3cocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkg
eworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3RhcnRpbmdSZWN0LnkoKSwg
cG90ZW50aWFsUmVjdC55KCkpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShleGl0UG9p
bnQueSgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uVXA6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIGlmIChyaWdodE9m
KHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkpIHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5z
ZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVu
dGlhbFJlY3QucmlnaHQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHRPZihwb3RlbnRpYWxS
ZWN0LCBzdGFydGluZ1JlY3QpKSB7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGlu
Z1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVj
dC54KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFgobWF4
KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgpKSk7CisgICAgICAgICAgICBlbnRy
eVBvaW50LnNldFgoZXhpdFBvaW50LngoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2
b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBGb2N1c0Nh
bmRpZGF0ZSYgY3VycmVudCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKK3sKKyAgICBpZiAo
Y2FuZGlkYXRlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFjYW5kaWRhdGUu
bm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEludFJlY3Qgbm9kZVJlY3Qg
PSBjYW5kaWRhdGUucmVjdDsKKyAgICBJbnRSZWN0IGN1cnJlbnRSZWN0ID0gY3VycmVudC5yZWN0
OworICAgIGRlZmxhdGVJZk92ZXJsYXBwZWQoY3VycmVudFJlY3QsIG5vZGVSZWN0KTsKKworICAg
IGlmICghaXNSZWN0SW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBjdXJyZW50UmVjdCwgbm9kZVJlY3Qp
KQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBleGl0UG9pbnQ7CisgICAgSW50UG9p
bnQgZW50cnlQb2ludDsKKyAgICBpbnQgc2FtZUF4aXNEaXN0YW5jZSA9IDA7CisgICAgaW50IG90
aGVyQXhpc0Rpc3RhbmNlID0gMDsKKyAgICBlbnRyeUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24o
ZGlyZWN0aW9uLCBjdXJyZW50UmVjdCwgbm9kZVJlY3QsIGV4aXRQb2ludCwgZW50cnlQb2ludCk7
CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0
OgorICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0gZXhpdFBvaW50LngoKSAtIGVudHJ5UG9pbnQu
eCgpOworICAgICAgICBvdGhlckF4aXNEaXN0YW5jZSA9IGFicyhleGl0UG9pbnQueSgpIC0gZW50
cnlQb2ludC55KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6
CisgICAgICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBleGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55
KCk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJzKGV4aXRQb2ludC54KCkgLSBlbnRy
eVBvaW50LngoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdo
dDoKKyAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50
LngoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnMoZW50cnlQb2ludC55KCkgLSBl
eGl0UG9pbnQueSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRv
d246CisgICAgICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBlbnRyeVBvaW50LnkoKSAtIGV4aXRQb2lu
dC55KCk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJzKGVudHJ5UG9pbnQueCgpIC0g
ZXhpdFBvaW50LngoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IHgg
PSAoZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpKSAqIChlbnRyeVBvaW50LngoKSAtIGV4
aXRQb2ludC54KCkpOworICAgIGludCB5ID0gKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50Lnko
KSkgKiAoZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpKTsKKworICAgIGZsb2F0IGV1Y2xp
ZGlhbkRpc3RhbmNlID0gc3FydCgoeCArIHkpICogMS4wZik7CisKKyAgICAvLyBMb29zZWx5IGJh
c2VkIG9uIGh0dHA6Ly93d3cudzMub3JnL1RSL1dJQ0QvI2ZvY3VzLWhhbmRsaW5nCisgICAgLy8g
ZGYgPSBkb3REaXN0ICsgZHggKyBkeSArIDIgKiAoeGRpc3BsYWNlbWVudCArIHlkaXNwbGFjZW1l
bnQpIC0gc3FydChPdmVybGFwKQorCisgICAgZmxvYXQgZGlzdGFuY2UgPSBldWNsaWRpYW5EaXN0
YW5jZSArIHNhbWVBeGlzRGlzdGFuY2UgKyAyICogb3RoZXJBeGlzRGlzdGFuY2U7CisgICAgY2Fu
ZGlkYXRlLmRpc3RhbmNlID0gcm91bmRmKGRpc3RhbmNlKTsKKyAgICBJbnRTaXplIHZpZXdTaXpl
ID0gY2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXco
KS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpOworICAgIGNhbmRpZGF0ZS5hbGlnbm1lbnQg
PSBhbGlnbm1lbnRGb3JSZWN0cyhkaXJlY3Rpb24sIGN1cnJlbnRSZWN0LCBub2RlUmVjdCwgdmll
d1NpemUpOworfQorCitib29sIGNhbkJlU2Nyb2xsZWRJbnRvVmlldyhGb2N1c0RpcmVjdGlvbiBk
aXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCit7CisgICAgQVNTRVJUKGNhbmRp
ZGF0ZS5ub2RlICYmIGhhc09mZnNjcmVlblJlY3QoY2FuZGlkYXRlLm5vZGUpKTsKKyAgICBJbnRS
ZWN0IGNhbmRpZGF0ZVJlY3QgPSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjYW5kaWRh
dGUubm9kZSk7CisgICAgZm9yIChOb2RlKiBwYXJlbnROb2RlID0gY2FuZGlkYXRlLm5vZGUtPnBh
cmVudCgpOyBwYXJlbnROb2RlOyBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+cGFyZW50KCkpIHsK
KyAgICAgICAgSW50UmVjdCBwYXJlbnRSZWN0ID0gbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0
ZXMocGFyZW50Tm9kZSk7CisgICAgICAgIGlmICghY2FuZGlkYXRlUmVjdC5pbnRlcnNlY3RzKHBh
cmVudFJlY3QpKSB7CisgICAgICAgICAgICBpZiAoKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rp
b25MZWZ0IHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblJpZ2h0KSAmJiBwYXJlbnROb2Rl
LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPSElEREVOKQorICAgICAgICAg
ICAgICAgIHx8ICgoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uVXAgfHwgZGlyZWN0aW9uID09
IEZvY3VzRGlyZWN0aW9uRG93bikgJiYgcGFyZW50Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
b3ZlcmZsb3dZKCkgPT0gT0hJRERFTikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChwYXJlbnROb2RlID09IGNhbmRpZGF0ZS5lbmNsb3NpbmdT
Y3JvbGxhYmxlQm94KQorICAgICAgICAgICAgcmV0dXJuIGNhblNjcm9sbEluRGlyZWN0aW9uKGRp
cmVjdGlvbiwgcGFyZW50Tm9kZSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaAkocmV2aXNp
b24gNzE5NjApCisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBTcGF0aWFsTmF2aWdhdGlvbl9oCiAKICNp
bmNsdWRlICJGb2N1c0RpcmVjdGlvbi5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJOb2RlLmgiCiAKICNpbmNsdWRlIDxsaW1pdHM+CkBAIC0xMDcsMTYgKzEwOCw3IEBAIHN0cnVj
dCBGb2N1c0NhbmRpZGF0ZSB7CiAgICAgewogICAgIH0KIAotICAgIEZvY3VzQ2FuZGlkYXRlKE5v
ZGUqIG4pCi0gICAgICAgIDogbm9kZShuKQotICAgICAgICAsIGVuY2xvc2luZ1Njcm9sbGFibGVC
b3goMCkKLSAgICAgICAgLCBkaXN0YW5jZShtYXhEaXN0YW5jZSgpKQotICAgICAgICAsIHBhcmVu
dERpc3RhbmNlKG1heERpc3RhbmNlKCkpCi0gICAgICAgICwgYWxpZ25tZW50KE5vbmUpCi0gICAg
ICAgICwgcGFyZW50QWxpZ25tZW50KE5vbmUpCi0gICAgewotICAgIH0KLQorICAgIEZvY3VzQ2Fu
ZGlkYXRlKE5vZGUqIG4pOwogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW5vZGU7
IH0KICAgICBib29sIGluU2Nyb2xsYWJsZUNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG5vZGUg
JiYgZW5jbG9zaW5nU2Nyb2xsYWJsZUJveDsgfQogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNv
bnN0IHsgcmV0dXJuIG5vZGUgPyBub2RlLT5kb2N1bWVudCgpIDogMDsgfQpAQCAtMTI3LDE2ICsx
MTksMjQgQEAgc3RydWN0IEZvY3VzQ2FuZGlkYXRlIHsKICAgICBsb25nIGxvbmcgcGFyZW50RGlz
dGFuY2U7CiAgICAgUmVjdHNBbGlnbm1lbnQgYWxpZ25tZW50OwogICAgIFJlY3RzQWxpZ25tZW50
IHBhcmVudEFsaWdubWVudDsKKyAgICBJbnRSZWN0IHJlY3Q7CiB9OwogCiB2b2lkIGRpc3RhbmNl
RGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBzdGFydCwgRm9jdXND
YW5kaWRhdGUmIGNhbmRpZGF0ZSk7Ci1ib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiwgRm9j
dXNEaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUgPSBGb2N1c0NhbmRp
ZGF0ZSgpKTsKK2Jvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqLCBGb2N1c0RpcmVjdGlvbik7
Citib29sIHNjcm9sbEluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24p
Owogdm9pZCBzY3JvbGxJbnRvVmlldyhFbGVtZW50Kik7Ci1ib29sIGhhc09mZnNjcmVlblJlY3Qo
Tm9kZSopOworYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqLCBGb2N1c0RpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBGb2N1c0RpcmVjdGlvbk5vbmUpOwogYm9vbCBpc0luUm9vdERvY3VtZW50KE5vZGUq
KTsKLWJvb2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShOb2RlKik7Citib29sIGlzU2Nyb2xs
YWJsZUNvbnRhaW5lck5vZGUoY29uc3QgTm9kZSopOwogYm9vbCBpc05vZGVEZWVwRGVzY2VuZGFu
dE9mRG9jdW1lbnQoTm9kZSosIERvY3VtZW50Kik7Ci0KK05vZGUqIHNjcm9sbGFibGVPckZyYW1l
UGFyZW50Rm9yTm9kZUFuZERpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgTm9kZSogbm9kZSk7Citi
b29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBOb2RlKiBjb250
YWluZXIpOworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgY29uc3Qg
RnJhbWUqKTsKK0ludFJlY3Qgbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoTm9kZSosIGJv
b2wgaWdub3JlQm9yZGVyID0gZmFsc2UpOworSW50UmVjdCBmcmFtZVJlY3RJbkFic29sdXRlQ29v
cmRpbmF0ZXMoRnJhbWUqKTsKK3ZvaWQgZGlzdGFuY2VEYXRhRm9yTm9kZShGb2N1c0RpcmVjdGlv
biwgRm9jdXNDYW5kaWRhdGUmIGN1cnJlbnQsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpOwor
Ym9vbCBjYW5CZVNjcm9sbGVkSW50b1ZpZXcoRm9jdXNEaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRl
Jik7CiB9IC8vIG5hbXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFNwYXRpYWxOYXZpZ2F0aW9u
X2gKCg==
</data>
<flag name="review"
          id="64523"
          type_id="1"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74401</attachid>
            <date>2010-11-19 10:31:35 -0800</date>
            <delta_ts>2010-11-19 12:08:22 -0800</delta_ts>
            <desc>Patch - code only</desc>
            <filename>49382_code.patch</filename>
            <type>text/plain</type>
            <size>39728</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjQxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMTEtMTkgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
IFdlIGRvIG5vdCBhZGQgdGhlIHNjcm9sbGluZyBjb25kaXRpb25zIGZvciBjb250YWluZXJzIHRo
YXQgaGF2ZSBvdmVyZmxvdzpoaWRkZW4KKyAgICAgICAgYW5kIGNhbm5vdCBzY3JvbGwuCisKKyAg
ICAgICAgY2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNGb3JMYXlvdXQgaXMgdXNlZCB0byBkZWNpZGUg
aWYgYSBmcmFtZSBjYW4gc2Nyb2xsIG9yIG5vdC4gV2UgY2Fubm90IHJlbHkgb24KKyAgICAgICAg
dGhlIGV4c2lzdGFuY2Ugb2YgdGhlIHNjcm9sbGJhciwgYmVjYXVzZSBpdCBjb3VsZCBiZSByZW1v
dmVkIHZpYSB0aGUgQVBJLCB3aGlsZSB0aGUgZnJhbWUgaXMgc3RpbGwKKyAgICAgICAgYWxsb3dl
ZCB0byBzY3JvbGwuCisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9u
YWxseSk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9jdXNDYW5kaWRhdGU6OkZvY3VzQ2FuZGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmRpc3RhbmNlRGF0YUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWxpZ25t
ZW50Rm9yUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6YXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3Jl
ZW5BcGFydCk6CisgICAgICAgIChXZWJDb3JlOjppc1JlY3RJbkRpcmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpoYXNPZmZzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbElu
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVG
b3JOb2RlSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2FuU2Nyb2xsSW5EaXJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6cmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW50cnlBbmRFeGl0UG9pbnRzRm9yRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bkJlU2Nyb2xsZWRJbnRvVmlldyk6CisgICAgICAgIChXZWJDb3JlOjp2aXJ0dWFsU3RhcnRpbmdS
ZWN0Rm9yRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmg6CisK
IDIwMTAtMTEtMTkgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiA3MjM4NCkKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIK
ICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC01Nyw2ICs1OSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCitzdGF0aWMgdm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0Nh
bmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCk7CiBzdGF0aWMgaW5s
aW5lIHZvaWQgZGlzcGF0Y2hFdmVudHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBmb2N1c2VkKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBmb2N1c2VkIG5v
ZGUgd2Ugc2hvdWxkIGRpc3BhdGNoIGJsdXIgb24gaXQgYmVmb3JlIHdlIGJsdXIgdGhlIHdpbmRv
dy4KQEAgLTI4OSw2NCArMjkyLDYgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1
c0luRG9jdQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2
YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQotewotICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRPck1haW5GcmFtZSgp
OwotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgRG9jdW1lbnQqIGZvY3VzZWREb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZm9jdXNlZERvY3VtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWREb2N1bWVudC0+Zm9j
dXNlZE5vZGUoKTsKLSAgICBpZiAoIWZvY3VzZWROb2RlKSB7Ci0gICAgICAgIC8vIEp1c3QgbW92
ZSB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIG5vZGUuCi0gICAgICAgIEZvY3VzRGlyZWN0aW9uIHRh
YkRpcmVjdGlvbiA9IChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24g
PT0gRm9jdXNEaXJlY3Rpb25MZWZ0KSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGb2N1c0RpcmVjdGlvbkJhY2t3YXJkIDogRm9jdXNEaXJlY3Rpb25Gb3J3YXJkOwot
ICAgICAgICAvLyAnaW5pdGlhbEZvY3VzJyBpcyBzZXQgdG8gdHJ1ZSBzbyB0aGUgY2hyb21lIGlz
IG5vdCBmb2N1c2VkLgotICAgICAgICByZXR1cm4gYWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVy
KHRhYkRpcmVjdGlvbiwgZXZlbnQsIHRydWUpOwotICAgIH0KLQotICAgIC8vIE1vdmUgdXAgaW4g
dGhlIGNoYWluIG9mIG5lc3RlZCBmcmFtZXMuCi0gICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
b3AoKTsKLQotICAgIEZvY3VzQ2FuZGlkYXRlIGZvY3VzQ2FuZGlkYXRlOwotICAgIGZpbmRGb2N1
c2FibGVOb2RlSW5EaXJlY3Rpb24oZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0Q2hpbGQoKSwgZm9j
dXNlZE5vZGUsIGRpcmVjdGlvbiwgZXZlbnQsIGZvY3VzQ2FuZGlkYXRlKTsKLQotICAgIE5vZGUq
IG5vZGUgPSBmb2N1c0NhbmRpZGF0ZS5ub2RlOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNF
bGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBNYXkgbmVlZCBhIHdheSB0byBmb2N1
cyBhIGRvY3VtZW50IGhlcmUuCi0gICAgICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihmcmFtZSwgZGlyZWN0aW9uKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGNy
YXp5IGp1bXAgYmV0d2VlbiBsaW5rcyB0aGF0IGFyZSBlaXRoZXIgZmFyIGF3YXkgZnJvbSBlYWNo
IG90aGVyLAotICAgIC8vIG9yIGp1c3Qgbm90IGN1cnJlbnRseSB2aXNpYmxlLCBsZXRzIGRvIGEg
c2Nyb2xsIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gYW5kIGJhaWwgb3V0Ci0gICAgLy8gaWYgfG5v
ZGV8IGVsZW1lbnQgaXMgbm90IGluIHRoZSB2aWV3cG9ydC4KLSAgICBpZiAoaGFzT2Zmc2NyZWVu
UmVjdChub2RlKSkgewotICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT52
aWV3KCktPmZyYW1lKCk7Ci0gICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLCBkaXJlY3Rp
b24sIGZvY3VzQ2FuZGlkYXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
RG9jdW1lbnQqIG5ld0RvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKLQotICAgIGlmIChuZXdE
b2N1bWVudCAhPSBmb2N1c2VkRG9jdW1lbnQpIHsKLSAgICAgICAgLy8gRm9jdXMgaXMgZ29pbmcg
YXdheSBmcm9tIHRoZSBvcmlnaW5hbGx5IGZvY3VzZWQgZG9jdW1lbnQsIHNvIGNsZWFyIHRoZSBm
b2N1c2VkIG5vZGUuCi0gICAgICAgIGZvY3VzZWREb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUoMCk7
Ci0gICAgfQotCi0gICAgaWYgKG5ld0RvY3VtZW50KQotICAgICAgICBzZXRGb2N1c2VkRnJhbWUo
bmV3RG9jdW1lbnQtPmZyYW1lKCkpOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KLSAgICBzY3JvbGxJ
bnRvVmlldyhlbGVtZW50KTsKLSAgICBlbGVtZW50LT5mb2N1cyhmYWxzZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSW5TYW1lQ29udGFp
bmVyKGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIEZvY3VzQ2FuZGlkYXRlJiBjbG9z
ZXN0KQogewogICAgIGlmIChjbG9zZXN0LmlzTnVsbCgpKSB7CkBAIC02NTgsNCArNjAzLDE3MCBA
QCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0QWN0aXZlKGJvb2wgYWN0CiAgICAgICAgIGRpc3Bh
dGNoRXZlbnRzT25XaW5kb3dBbmRGb2N1c2VkTm9kZShtX2ZvY3VzZWRGcmFtZS0+ZG9jdW1lbnQo
KSwgYWN0aXZlKTsKIH0KIAordm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0Nh
bmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCkKK3sKKyAgICBpZiAo
IWNhbmRpZGF0ZS5ub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwhY2FuZGlkYXRlLm5vZGUtPnJlbmRl
cmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElnbm9yZSBlbXB0eSBmcmFtZXMKKyAg
ICBpZiAoY2FuZGlkYXRlLm5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSAmJiAhc3RhdGljX2Nh
c3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oY2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIG9mZiBzY3JlZW4gY2hpbGQgbm9k
ZXMgb2YgY29udGFpbmVycyB0aGF0IGRvIG5vdCBzY3JvbGwgKG92ZXJmbG93OmhpZGRlbikKKyAg
ICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9kZSkgJiYgIWNhbkJlU2Nyb2xsZWRJ
bnRvVmlldyhkaXJlY3Rpb24sIGNhbmRpZGF0ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIEZv
Y3VzQ2FuZGlkYXRlIGN1cnJlbnQ7CisgICAgY3VycmVudC5yZWN0ID0gc3RhcnRpbmdSZWN0Owor
ICAgIGRpc3RhbmNlRGF0YUZvck5vZGUoZGlyZWN0aW9uLCBjdXJyZW50LCBjYW5kaWRhdGUpOwor
ICAgIGlmIChjYW5kaWRhdGUuZGlzdGFuY2UgPT0gbWF4RGlzdGFuY2UoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoY2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlv
bikgJiYgY2FuZGlkYXRlLmFsaWdubWVudCA8IEZ1bGwpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChjbG9zZXN0LmlzTnVsbCgpKSB7CisgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IGludGVyc2VjdGlvblJlY3QgPSBp
bnRlcnNlY3Rpb24obm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoY2FuZGlkYXRlLm5vZGUs
IHRydWUpLCBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjbG9zZXN0Lm5vZGUsIHRydWUp
KTsKKyAgICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElm
IDIgbm9kZXMgYXJlIGludGVyc2VjdGluZywgZG8gaGl0IHRlc3QgdG8gZmluZCB3aGljaCBub2Rl
IGluIG9uIHRvcC4KKyAgICAgICAgaW50IHggPSBpbnRlcnNlY3Rpb25SZWN0LngoKSArIGludGVy
c2VjdGlvblJlY3Qud2lkdGgoKSAvIDI7CisgICAgICAgIGludCB5ID0gaW50ZXJzZWN0aW9uUmVj
dC55KCkgKyBpbnRlcnNlY3Rpb25SZWN0LmhlaWdodCgpIC8gMjsKKyAgICAgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQgPSBjYW5kaWRhdGUubm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KEludFBvaW50KHgsIHkp
LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGlmIChjYW5kaWRhdGUubm9kZS0+Y29udGFpbnMocmVz
dWx0LmlubmVyTm9kZSgpKSkgeworICAgICAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xvc2VzdC5ub2RlLT5j
b250YWlucyhyZXN1bHQuaW5uZXJOb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChjYW5kaWRhdGUuYWxpZ25tZW50ID09IGNsb3Nlc3QuYWxpZ25tZW50KSB7Cisg
ICAgICAgIGlmIChjYW5kaWRhdGUuZGlzdGFuY2UgPCBjbG9zZXN0LmRpc3RhbmNlKQorICAgICAg
ICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChjYW5kaWRhdGUuYWxpZ25tZW50ID4gY2xvc2VzdC5hbGlnbm1lbnQpCisgICAgICAgIGNs
b3Nlc3QgPSBjYW5kaWRhdGU7Cit9CisKK3ZvaWQgRm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXND
YW5kaWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0
aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCwg
Rm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCit7CisgICAgQVNTRVJUKGNvbnRhaW5lcik7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSAo
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVj
dGlvbiwgbm9kZSkpID8gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhjb250YWluZXIpIDogbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZShjb250YWluZXIpKSB7CisgICAgICAgIGlmICgoIWZvY3VzZWRG
cmFtZSgpIHx8ICFmb2N1c2VkRnJhbWUoKS0+ZG9jdW1lbnQoKSB8fCBub2RlICE9IGZvY3VzZWRG
cmFtZSgpLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpKSAmJiAobm9kZS0+aXNLZXlib2FyZEZv
Y3VzYWJsZShldmVudCkgfHwgbm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9s
bEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgbm9kZSkpKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUt
PnJlbmRlcmVyKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBGb2N1
c0NhbmRpZGF0ZSBjYW5kaWRhdGUobm9kZSk7CisgICAgICAgICAgICBjYW5kaWRhdGUuZW5jbG9z
aW5nU2Nyb2xsYWJsZUJveCA9IGNvbnRhaW5lcjsKKyAgICAgICAgICAgIHVwZGF0ZUZvY3VzQ2Fu
ZGlkYXRlSWZOZWVkZWQoZGlyZWN0aW9uLCBzdGFydGluZ1JlY3QsIGNhbmRpZGF0ZSwgY2xvc2Vz
dCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0
ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0
LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAg
IGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXItPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEludFJlY3QgbmV3U3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0Owor
CisgICAgaWYgKHN0YXJ0aW5nUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG5ld1N0YXJ0aW5nUmVj
dCA9IHZpcnR1YWxTdGFydGluZ1JlY3RGb3JEaXJlY3Rpb24oZGlyZWN0aW9uLCBub2RlUmVjdElu
QWJzb2x1dGVDb29yZGluYXRlcyhjb250YWluZXIpKTsKKworICAgIC8vIEZpbmQgdGhlIGNsb3Nl
c3Qgbm9kZSB3aXRoaW4gY3VycmVudCBjb250YWluZXIgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUg
bmF2aWdhdGlvbi4KKyAgICBGb2N1c0NhbmRpZGF0ZSBmb2N1c0NhbmRpZGF0ZTsKKyAgICBmaW5k
Rm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihjb250YWluZXIsIG5ld1N0YXJ0aW5nUmVjdCwgZGly
ZWN0aW9uLCBldmVudCwgZm9jdXNDYW5kaWRhdGUpOworCisgICAgaWYgKGZvY3VzQ2FuZGlkYXRl
LmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24s
IGNvbnRhaW5lcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZm9jdXMsIHNjcm9sbCBp
ZiBwb3NzaWJsZS4KKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGNvbnRhaW5lciwgZGly
ZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8v
IFJldHVybiBmYWxzZSB3aWxsIGNhdXNlIGEgcmUtdHJ5LCBza2lwcGluZyB0aGlzIGNvbnRhaW5l
ci4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZm9jdXNDYW5kaWRhdGUu
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogZnJhbWVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4o
Zm9jdXNDYW5kaWRhdGUubm9kZSk7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gaWZyYW1lIHdp
dGhvdXQgdGhlIHNyYyBhdHRyaWJ1dGUsIGl0IHdpbGwgbm90IGhhdmUgYSBjb250ZW50RnJhbWUo
KS4KKyAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGNvbnNpZGVyIHN1Y2ggYW4gaWZyYW1lIGFz
IGEgY2FuZGlkYXRlLgorICAgICAgICBBU1NFUlQoZnJhbWVFbGVtZW50LT5jb250ZW50RnJhbWUo
KSk7CisKKyAgICAgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwg
ZGlyZWN0aW9uKSkgeworICAgICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZm9jdXNDYW5kaWRh
dGUubm9kZS0+ZG9jdW1lbnQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIC8vIE5hdmlnYXRlIGludG8gYSBuZXcgZnJhbWUuCisgICAg
ICAgIEludFJlY3QgcmVjdDsKKyAgICAgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkT3JN
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKKyAgICAgICAgaWYgKGZvY3Vz
ZWROb2RlICYmICFoYXNPZmZzY3JlZW5SZWN0KGZvY3VzZWROb2RlKSkKKyAgICAgICAgICAgIHJl
Y3QgPSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhmb2N1c2VkTm9kZSwgdHJ1ZSAvKiBp
Z25vcmUgYm9yZGVyICovKTsKKyAgICAgICAgZnJhbWVFbGVtZW50LT5jb250ZW50RnJhbWUoKS0+
ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAg
ICAgIGlmICghbmF2aWdhdGVJbkNvbnRhaW5lcihmcmFtZUVsZW1lbnQtPmNvbnRlbnRGcmFtZSgp
LT5kb2N1bWVudCgpLCByZWN0LCBkaXJlY3Rpb24sIGV2ZW50KSkKKyAgICAgICAgICAgIC8vIFRo
ZSBuZXcgZnJhbWUgaGFkIG5vdGhpbmcgaW50ZXJlc3RpbmcsIG5lZWQgdG8gZmluZCBhbm90aGVy
IGNhbmRpZGF0ZS4KKyAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0ZUluQ29udGFpbmVyKGNvbnRh
aW5lciwgbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNDYW5kaWRhdGUubm9kZSwg
dHJ1ZSksIGRpcmVjdGlvbiwgZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgaWYgKGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNDYW5kaWRhdGUubm9k
ZSkpIHsKKyAgICAgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwg
ZGlyZWN0aW9uKSkgeworICAgICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZm9jdXNDYW5kaWRh
dGUubm9kZSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIC8vIE5hdmlnYXRlIGludG8gYSBuZXcgc2Nyb2xsYWJsZSBjb250YWluZXIuCisg
ICAgICAgIEludFJlY3Qgc3RhcnRpbmdSZWN0OworICAgICAgICBOb2RlKiBmb2N1c2VkTm9kZSA9
IGZvY3VzZWRPck1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOworICAgICAg
ICBpZiAoZm9jdXNlZE5vZGUgJiYgIWhhc09mZnNjcmVlblJlY3QoZm9jdXNlZE5vZGUpKQorICAg
ICAgICAgICAgc3RhcnRpbmdSZWN0ID0gbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoZm9j
dXNlZE5vZGUsIHRydWUpOworICAgICAgICByZXR1cm4gbmF2aWdhdGVJbkNvbnRhaW5lcihmb2N1
c0NhbmRpZGF0ZS5ub2RlLCBzdGFydGluZ1JlY3QsIGRpcmVjdGlvbiwgZXZlbnQpOworICAgIH0K
KyAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChmb2N1c0NhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24p
KSB7CisgICAgICAgIE5vZGUqIGNvbnRhaW5lciA9IGZvY3VzQ2FuZGlkYXRlLmVuY2xvc2luZ1Nj
cm9sbGFibGVCb3g7CisgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGNvbnRhaW5lciwgZGlyZWN0
aW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gV2UgZm91bmQgYSBu
ZXcgZm9jdXMgbm9kZSwgbmF2aWdhdGUgdG8gaXQuCisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihmb2N1c0NhbmRpZGF0ZS5ub2RlKTsKKyAgICBBU1NFUlQoZWxl
bWVudCk7CisKKyAgICBlbGVtZW50LT5mb2N1cyhmYWxzZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgRnJhbWUq
IGN1ckZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgQVNTRVJUKGN1ckZyYW1lKTsK
KworICAgIERvY3VtZW50KiBmb2N1c2VkRG9jdW1lbnQgPSBjdXJGcmFtZS0+ZG9jdW1lbnQoKTsK
KyAgICBpZiAoIWZvY3VzZWREb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Tm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkRG9jdW1lbnQtPmZvY3VzZWROb2RlKCk7CisgICAg
Tm9kZSogY29udGFpbmVyID0gZm9jdXNlZERvY3VtZW50OworCisgICAgLy8gRmlndXJlIG91dCB0
aGUgc3RhcnRpbmcgcmVjdC4KKyAgICBJbnRSZWN0IHN0YXJ0aW5nUmVjdDsKKyAgICBpZiAoZm9j
dXNlZE5vZGUgJiYgIWhhc09mZnNjcmVlblJlY3QoZm9jdXNlZE5vZGUpKSB7CisgICAgICAgIGNv
bnRhaW5lciA9IHNjcm9sbGFibGVFbmNsb3NpbmdCb3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGly
ZWN0aW9uKGRpcmVjdGlvbiwgZm9jdXNlZE5vZGUpOworICAgICAgICBzdGFydGluZ1JlY3QgPSBu
b2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhmb2N1c2VkTm9kZSwgdHJ1ZSAvKiBpZ25vcmUg
Ym9yZGVyICovKTsKKyAgICB9CisKKyAgICBib29sIGNvbnN1bWVkID0gZmFsc2U7CisgICAgZG8g
eworICAgICAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250YWluZXIpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgY29uc3VtZWQgPSBuYXZpZ2F0ZUluQ29udGFpbmVy
KGNvbnRhaW5lciwgc3RhcnRpbmdSZWN0LCBkaXJlY3Rpb24sIGV2ZW50KTsKKyAgICAgICAgc3Rh
cnRpbmdSZWN0ID0gbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoY29udGFpbmVyLCB0cnVl
IC8qIGlnbm9yZSBib3JkZXIgKi8pOworICAgICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlRW5j
bG9zaW5nQm94T3JQYXJlbnRGcmFtZUZvck5vZGVJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGNvbnRh
aW5lcik7CisgICAgfSB3aGlsZSAoIWNvbnN1bWVkICYmIGNvbnRhaW5lcik7CisKKyAgICByZXR1
cm4gY29uc3VtZWQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRm9jdXND
b250cm9sbGVyLmgJKHJldmlzaW9uIDcyMzg0KQorKysgV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBwYXJl
bnRDYW5kaWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKICAgICB2b2lkIGRlZXBGaW5kRm9jdXNh
YmxlTm9kZUluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgTm9kZSogZm9jdXNlZCwgRm9jdXNE
aXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0NhbmRpZGF0ZSYpOwogCisgICAgYm9vbCBu
YXZpZ2F0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRp
bmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCopOworICAgIHZvaWQgZmluZEZv
Y3VzQ2FuZGlkYXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBz
dGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiwgRm9jdXNDYW5kaWRh
dGUmIGNsb3Nlc3QpOworCiAgICAgUGFnZSogbV9wYWdlOwogICAgIFJlZlB0cjxGcmFtZT4gbV9m
b2N1c2VkRnJhbWU7CiAgICAgYm9vbCBtX2lzQWN0aXZlOwpJbmRleDogV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNp
b24gNzIzODQpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzNiw2ICsyMzYsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZyYW1lVmlld1Njcm9sbENvcm5l
cihSZW5kZXJTY3JvbGxiYXJQYXJ0KiBzY3JvbGxDb3JuZXIpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsQ29ybmVyID09IHNjcm9sbENvcm5lcjsgfQogICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENv
cm5lcigpOwogCisgICAgdm9pZCBjYWxjdWxhdGVTY3JvbGxiYXJNb2Rlc0ZvckxheW91dChTY3Jv
bGxiYXJNb2RlJiBoTW9kZSwgU2Nyb2xsYmFyTW9kZSYgdk1vZGUpOworCiAgICAgLy8gTm9ybWFs
IGRlbGF5CiAgICAgc3RhdGljIHZvaWQgc2V0UmVwYWludFRocm90dGxpbmdEZWZlcnJlZFJlcGFp
bnREZWxheShkb3VibGUgcCk7CiAgICAgLy8gTmVnYXRpdmUgdmFsdWUgd291bGQgbWVhbiB0aGF0
IGZpcnN0IGZldyByZXBhaW50cyBoYXBwZW4gd2l0aG91dCBhIGRlbGF5CkBAIC0yNjUsNyArMjY3
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIGhhc0ZpeGVkT2JqZWN0cygpIGNvbnN0IHsgcmV0dXJu
IG1fZml4ZWRPYmplY3RDb3VudCA+IDA7IH0KIAogICAgIHZvaWQgYXBwbHlPdmVyZmxvd1RvVmll
d3BvcnQoUmVuZGVyT2JqZWN0KiwgU2Nyb2xsYmFyTW9kZSYgaE1vZGUsIFNjcm9sbGJhck1vZGUm
IHZNb2RlKTsKLSAgICB2b2lkIGNhbGN1bGF0ZVNjcm9sbGJhck1vZGVzRm9yTGF5b3V0KFNjcm9s
bGJhck1vZGUmIGhNb2RlLCBTY3JvbGxiYXJNb2RlJiB2TW9kZSk7CiAKICAgICB2b2lkIHVwZGF0
ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3Zl
cmZsb3cpOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAJKHJldmlzaW9uIDcy
Mzg0KQorKysgV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsMTIgKzQzLDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGxvbmcg
bG9uZyBzcGF0aWFsRGlzdGFuY2UoRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRSZWN0Jik7CiBzdGF0aWMgSW50UmVjdCByZW5kZXJSZWN0UmVsYXRpdmVUb1Jvb3REb2N1
bWVudChSZW5kZXJPYmplY3QqKTsKLXN0YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JS
ZWN0cyhGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKK3N0
YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhGb2N1c0RpcmVjdGlvbiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSk7CiBz
dGF0aWMgYm9vbCBhcmVSZWN0c0Z1bGx5QWxpZ25lZChGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKIHN0YXRpYyBib29sIGFyZVJlY3RzUGFydGlhbGx5QWxp
Z25lZChGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKK3N0
YXRpYyBib29sIGFyZVJlY3RzTW9yZVRoYW5GdWxsU2NyZWVuQXBhcnQoRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSk7CiBzdGF0aWMgYm9vbCBpc1JlY3RJbkRpcmVj
dGlvbihGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKIHN0
YXRpYyB2b2lkIGRlZmxhdGVJZk92ZXJsYXBwZWQoSW50UmVjdCYsIEludFJlY3QmKTsKIHN0YXRp
YyBib29sIGNoZWNrTmVnYXRpdmVDb29yZHNGb3JOb2RlKE5vZGUqLCBjb25zdCBJbnRSZWN0Jik7
CitzdGF0aWMgSW50UmVjdCByZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKEZyYW1lKiBpbml0aWFs
RnJhbWUsIGNvbnN0IEludFJlY3QmIHJlY3QpOworc3RhdGljIHZvaWQgZW50cnlBbmRFeGl0UG9p
bnRzRm9yRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYg
c3RhcnRpbmdSZWN0LCBjb25zdCBJbnRSZWN0JiBwb3RlbnRpYWxSZWN0LCBJbnRQb2ludCYgZXhp
dFBvaW50LCBJbnRQb2ludCYgZW50cnlQb2ludCk7CisKKworRm9jdXNDYW5kaWRhdGU6OkZvY3Vz
Q2FuZGlkYXRlKE5vZGUqIG4pCisgICAgOiBub2RlKG4pCisgICAgLCBlbmNsb3NpbmdTY3JvbGxh
YmxlQm94KDApCisgICAgLCBkaXN0YW5jZShtYXhEaXN0YW5jZSgpKQorICAgICwgcGFyZW50RGlz
dGFuY2UobWF4RGlzdGFuY2UoKSkKKyAgICAsIGFsaWdubWVudChOb25lKQorICAgICwgcGFyZW50
QWxpZ25tZW50KE5vbmUpCisgICAgLCByZWN0KG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVz
KG4sIHRydWUgLyogaWdub3JlIGJvcmRlciAqLykpCit7Cit9CiAKIGJvb2wgaXNTcGF0aWFsTmF2
aWdhdGlvbkVuYWJsZWQoY29uc3QgRnJhbWUqIGZyYW1lKQogewpAQCAtMTAyLDcgKzExNyw4IEBA
IHZvaWQgZGlzdGFuY2VEYXRhRm9yTm9kZShGb2N1c0RpcmVjdGlvbiAKICAgICAvLyBUaGUgZGlz
dGFuY2UgYmV0d2VlbiB0d28gbm9kZXMgaXMgbm90IHRvIGJlIGNvbnNpZGVyZWQgYWxvbmUgd2hl
biBldmFsdWF0aW5nL2xvb2tpbmcKICAgICAvLyBmb3IgdGhlIGJlc3QgZm9jdXMgY2FuZGlkYXRl
IG5vZGUuIEFsaWdubWVudCBvZiByZWN0cyBjYW4gYmUgYWxzbyBhIGdvb2QgcG9pbnQgdG8gYmUK
ICAgICAvLyBjb25zaWRlcmVkIGluIG9yZGVyIHRvIG1ha2UgdGhlIGFsZ29yaXRobSB0byBiZWhh
dmlvciBpbiBhIG1vcmUgaW50dWl0aXZlIHdheS4KLSAgICBjYW5kaWRhdGUuYWxpZ25tZW50ID0g
YWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBjdXJSZWN0LCB0YXJnZXRSZWN0KTsKKyAgICBJ
bnRTaXplIHZpZXdTaXplID0gY2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCktPnBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpOworICAgIGNhbmRp
ZGF0ZS5hbGlnbm1lbnQgPSBhbGlnbm1lbnRGb3JSZWN0cyhkaXJlY3Rpb24sIGN1clJlY3QsIHRh
cmdldFJlY3QsIHZpZXdTaXplKTsKICAgICBjYW5kaWRhdGUuZGlzdGFuY2UgPSBzcGF0aWFsRGlz
dGFuY2UoZGlyZWN0aW9uLCBjdXJSZWN0LCB0YXJnZXRSZWN0KTsKIH0KIApAQCAtMTM2LDggKzE1
MiwxMiBAQCBzdGF0aWMgSW50UmVjdCByZW5kZXJSZWN0UmVsYXRpdmVUb1Jvb3RECiAgICAgcmV0
dXJuIHJlY3Q7CiB9CiAKLXN0YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnRGb3JSZWN0cyhG
b2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QpCitzdGF0aWMgUmVjdHNBbGlnbm1lbnQgYWxpZ25tZW50Rm9yUmVj
dHMoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25z
dCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKIHsKKyAgICAv
LyBJZiB3ZSBmb3VuZCBhIG5vZGUgaW4gZnVsbCBhbGlnbm1lbnQsIGJ1dCBpdCBpcyB0b28gZmFy
IGF3YXksIGlnbm9yZSBpdC4KKyAgICBpZiAoYXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3JlZW5BcGFy
dChkaXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QsIHZpZXdTaXplKSkKKyAgICAgICAgcmV0
dXJuIE5vbmU7CisKICAgICBpZiAoYXJlUmVjdHNGdWxseUFsaWduZWQoZGlyZWN0aW9uLCBjdXJS
ZWN0LCB0YXJnZXRSZWN0KSkKICAgICAgICAgcmV0dXJuIEZ1bGw7CiAKQEAgLTI3Nyw2ICsyOTcs
MjUgQEAgc3RhdGljIGJvb2wgYXJlUmVjdHNQYXJ0aWFsbHlBbGlnbmVkKEZvYwogICAgICAgICAg
ICAgfHwgKGJFbmQgPj0gYVN0YXJ0ICYmIGJFbmQgPD0gYUVuZCkpOwogfQogCitzdGF0aWMgYm9v
bCBhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwYXJ0KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlv
biwgY29uc3QgSW50UmVjdCYgY3VyUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgSW50U2l6ZSYgdmlld1NpemUpCit7CisgICAgQVNTRVJUKGlzUmVjdEluRGlyZWN0aW9uKGRp
cmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCkpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24p
IHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgcmV0dXJuIGN1clJlY3Qu
eCgpIC0gdGFyZ2V0UmVjdC5yaWdodCgpID4gdmlld1NpemUud2lkdGgoKTsKKyAgICBjYXNlIEZv
Y3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0LngoKSAtIGN1clJl
Y3QucmlnaHQoKSA+IHZpZXdTaXplLndpZHRoKCk7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVw
OgorICAgICAgICByZXR1cm4gY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0LmJvdHRvbSgpID4gdmll
d1NpemUuaGVpZ2h0KCk7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHJl
dHVybiB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3U2l6ZS5oZWlnaHQo
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfQorCiAvLyBSZXR1cm4gdHJ1ZSBpZiByZWN0IHxhfCBpcyBi
ZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9vbCBiZWxvdyhjb25z
dCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewpAQCAtNDAzLDI5ICs0NDIsMjUgQEAg
c3RhdGljIGxvbmcgbG9uZyBzcGF0aWFsRGlzdGFuY2UoRm9jdXNEaQogCiBzdGF0aWMgYm9vbCBp
c1JlY3RJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3Qm
IGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCiB7Ci0gICAgSW50UG9pbnQgY2Vu
dGVyKHRhcmdldFJlY3QuY2VudGVyKCkpOwotICAgIGludCB0YXJnZXRNaWRkbGUgPSBpc0hvcml6
b250YWxNb3ZlKGRpcmVjdGlvbikgPyBjZW50ZXIueCgpIDogY2VudGVyLnkoKTsKLQogICAgIHN3
aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6Ci0gICAgICAg
IHJldHVybiB0YXJnZXRNaWRkbGUgPCBjdXJSZWN0LngoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdl
dFJlY3QucmlnaHQoKSA8PSBjdXJSZWN0LngoKTsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmln
aHQ6Ci0gICAgICAgIHJldHVybiB0YXJnZXRNaWRkbGUgPiBjdXJSZWN0LnJpZ2h0KCk7CisgICAg
ICAgIHJldHVybiB0YXJnZXRSZWN0LngoKSA+PSBjdXJSZWN0LnJpZ2h0KCk7CiAgICAgY2FzZSBG
b2N1c0RpcmVjdGlvblVwOgotICAgICAgICByZXR1cm4gdGFyZ2V0TWlkZGxlIDwgY3VyUmVjdC55
KCk7CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0LmJvdHRvbSgpIDw9IGN1clJlY3QueSgpOwog
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgotICAgICAgICByZXR1cm4gdGFyZ2V0TWlkZGxl
ID4gY3VyUmVjdC5ib3R0b20oKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpID49IGN1
clJlY3QuYm90dG9tKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIC8vIENoZWNrcyBpZiB8bm9kZXwgaXMgb2Zmc2NyZWVuIHRoZSB2aXNpYmxlIGFyZWEgKHZp
ZXdwb3J0KSBvZiBpdHMgY29udGFpbmVyCiAvLyBkb2N1bWVudC4gSW4gY2FzZSBpdCBpcywgb25l
IGNhbiBzY3JvbGwgaW4gZGlyZWN0aW9uIG9yIHRha2UgYW55IGRpZmZlcmVudAogLy8gZGVzaXJl
ZCBhY3Rpb24gbGF0ZXIgb24uCi1ib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSkKK2Jv
b2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBub2RlLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7CiAgICAgLy8gR2V0IHRoZSBGcmFtZVZpZXcgaW4gd2hpY2ggfG5vZGV8IGlzICh3aGljaCBt
ZWFucyB0aGUgY3VycmVudCB2aWV3cG9ydCBpZiB8bm9kZXwKICAgICAvLyBpcyBub3QgaW4gYW4g
aW5uZXIgZG9jdW1lbnQpLCBzbyB3ZSBjYW4gY2hlY2sgaWYgaXRzIGNvbnRlbnQgcmVjdCBpcyB2
aXNpYmxlCkBAIC00MzUsNiArNDcwLDI4IEBAIGJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBu
b2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgY29udGFpbmVyVmlld3Bv
cnRSZWN0ID0gZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICAvLyBXZSB3YW50
IHRvIHNlbGVjdCBhIG5vZGUgaWYgaXQgaXMgY3VycmVudGx5IG9mZiBzY3JlZW4sIGJ1dCB3aWxs
IGJlCisgICAgLy8gZXhwb3NlZCBhZnRlciB3ZSBzY3JvbGwuIEFkanVzdCB0aGUgdmlld3BvcnQg
dG8gcG9zdC1zY3JvbGxpbmcgcG9zaXRpb24uCisgICAgLy8gSWYgdGhlIGNvbnRhaW5lciBoYXMg
b3ZlcmZsb3c6aGlkZGVuLCB3ZSBjYW5ub3Qgc2Nyb2xsLCBzbyB3ZSBkbyBub3QgcGFzcyBkaXJl
Y3Rpb24KKyAgICAvLyBhbmQgd2UgZG8gbm90IGFkanVzdCBmb3Igc2Nyb2xsaW5nLgorICAgIHN3
aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAg
IGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRYKGNvbnRhaW5lclZpZXdwb3J0UmVjdC54KCkgLSBT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBjb250YWluZXJWaWV3cG9y
dFJlY3Quc2V0V2lkdGgoY29udGFpbmVyVmlld3BvcnRSZWN0LndpZHRoKCkgKyBTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uUmlnaHQ6CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRXaWR0aChjb250
YWluZXJWaWV3cG9ydFJlY3Qud2lkdGgoKSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAg
Y29udGFpbmVyVmlld3BvcnRSZWN0LnNldFkoY29udGFpbmVyVmlld3BvcnRSZWN0LnkoKSAtIFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0
UmVjdC5zZXRIZWlnaHQoY29udGFpbmVyVmlld3BvcnRSZWN0LmhlaWdodCgpICsgU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkRvd246CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRIZWlnaHQoY29u
dGFpbmVyVmlld3BvcnRSZWN0LmhlaWdodCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3Rl
cCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlm
ICghcmVuZGVyKQpAQCAtNDQ3LDM2ICs1MDQsNzIgQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5v
ZGUqIG5vZGUpCiAgICAgcmV0dXJuICFjb250YWluZXJWaWV3cG9ydFJlY3QuaW50ZXJzZWN0cyhy
ZWN0KTsKIH0KIAotLy8gSW4gYSBib3R0b20tdXAgd2F5LCB0aGlzIG1ldGhvZCB0cmllcyB0byBz
Y3JvbGwgfGZyYW1lfCBpbiBhIGdpdmVuIGRpcmVjdGlvbgotLy8gfGRpcmVjdGlvbnwsIGdvaW5n
IHVwIGluIHRoZSBmcmFtZSB0cmVlIGhpZXJhcmNoeSBpbiBjYXNlIGl0IGRvZXMgbm90IHN1Y2Nl
ZWQuCi1ib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlKQorYm9vbCBzY3JvbGxJ
bkRpcmVjdGlvbihGcmFtZSogZnJhbWUsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGZyYW1lICYm
IGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgZnJhbWUtPmRvY3VtZW50KCkpKTsKIAot
ICAgIFNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJlY3Rpb247CisgICAgaWYgKGZyYW1lICYmIGNh
blNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgZnJhbWUtPmRvY3VtZW50KCkpKSB7CisgICAg
ICAgIGludCBkeCA9IDA7CisgICAgICAgIGludCBkeSA9IDA7CisgICAgICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICAgICAg
ZHggPSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgICAgICBkeCA9IFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgICAgICBkeSA9IC0gU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25Eb3duOgorICAgICAgICAgICAgZHkgPSBTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CiAKLSAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25MZWZ0OgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxMZWZ0OwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6Ci0gICAgICAgIHNjcm9sbERpcmVj
dGlvbiA9IFNjcm9sbFJpZ2h0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uVXA6Ci0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbFVwOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9u
ID0gU2Nyb2xsRG93bjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBmcmFtZS0+dmlldygpLT5zY3JvbGxCeShJbnRTaXplKGR4LCBk
eSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQog
Ci0gICAgaWYgKCFjYW5kaWRhdGUuaXNOdWxsKCkgJiYgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9k
ZShjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCkpCi0gICAgICAgIHJldHVybiBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KHNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsQnlMaW5lLCBjYW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveCk7Citib29sIHNjcm9s
bEluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQor
eworICAgIGlmIChjb250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBz
Y3JvbGxJbkRpcmVjdGlvbihzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRhaW5lciktPmZyYW1l
KCksIGRpcmVjdGlvbik7CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3Jv
bGxSZWN1cnNpdmVseShzY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEJ5TGluZSk7CisgICAgaWYgKCFj
b250YWluZXItPnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
Y29udGFpbmVyICYmIGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgY29udGFpbmVyKSkg
eworICAgICAgICBpbnQgZHggPSAwOworICAgICAgICBpbnQgZHkgPSAwOworICAgICAgICBzd2l0
Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAg
ICAgICAgIGR4ID0gLSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWlu
ZXItPnJlbmRlckJveCgpLT5zY3JvbGxMZWZ0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgICAgIEFTU0VSVChjb250YWlu
ZXItPnJlbmRlckJveCgpLT5zY3JvbGxXaWR0aCgpID4gKGNvbnRhaW5lci0+cmVuZGVyQm94KCkt
PnNjcm9sbExlZnQoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpKTsK
KyAgICAgICAgICAgIGR4ID0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgY29u
dGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsV2lkdGgoKSAtIChjb250YWluZXItPnJlbmRlckJv
eCgpLT5zY3JvbGxMZWZ0KCkgKyBjb250YWluZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgor
ICAgICAgICAgICAgZHkgPSAtIG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNv
bnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFRvcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgICAgIEFTU0VSVChjb250
YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxIZWlnaHQoKSAtIChjb250YWluZXItPnJlbmRlckJv
eCgpLT5zY3JvbGxUb3AoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgp
KSk7CisgICAgICAgICAgICBkeSA9IG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCks
IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbEhlaWdodCgpIC0gKGNvbnRhaW5lci0+cmVu
ZGVyQm94KCktPnNjcm9sbFRvcCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50SGVp
Z2h0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigp
LT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGR4LCBkeSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgc2Nyb2xsSW50b1ZpZXcoRWxlbWVudCog
ZWxlbWVudCkKQEAgLTUzNCw3ICs2MjcsNyBAQCBzdGF0aWMgYm9vbCBjaGVja05lZ2F0aXZlQ29v
cmRzRm9yTm9kZShOCiAgICAgcmV0dXJuIGNhbkJlU2Nyb2xsZWQ7CiB9CiAKLWJvb2wgaXNTY3Jv
bGxhYmxlQ29udGFpbmVyTm9kZShOb2RlKiBub2RlKQorYm9vbCBpc1Njcm9sbGFibGVDb250YWlu
ZXJOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC01NjcsNCArNjYwLDI2OCBAQCBib29sIGlzTm9kZURlZXBEZXNjZW5kYW50
T2ZEb2N1bWVudChOb2RlCiAgICAgcmV0dXJuIGRlc2NlbmRhbnQ7CiB9CiAKK05vZGUqIHNjcm9s
bGFibGVFbmNsb3NpbmdCb3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9uKEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSk7CisgICAg
Tm9kZSogcGFyZW50ID0gbm9kZTsKKyAgICBkbyB7CisgICAgICAgIGlmIChwYXJlbnQtPmlzRG9j
dW1lbnROb2RlKCkpCisgICAgICAgICAgICBwYXJlbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KHBhcmVudCktPmRvY3VtZW50KCktPmZyYW1lKCktPm93bmVyRWxlbWVudCgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICB9IHdo
aWxlIChwYXJlbnQgJiYgIWNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgcGFyZW50KSAm
JiAhcGFyZW50LT5pc0RvY3VtZW50Tm9kZSgpKTsKKworICAgIHJldHVybiBwYXJlbnQ7Cit9CisK
K2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25z
dCBOb2RlKiBjb250YWluZXIpCit7CisgICAgQVNTRVJUKGNvbnRhaW5lcik7CisgICAgaWYgKGNv
bnRhaW5lci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGNhblNjcm9sbEluRGly
ZWN0aW9uKGRpcmVjdGlvbiwgc3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnQqPihjb250YWluZXIp
LT5mcmFtZSgpKTsKKworICAgIGlmICghaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShjb250YWlu
ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewor
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gKGNvbnRhaW5lci0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgIT0gT0hJRERFTiAmJiBjb250YWluZXIt
PnJlbmRlckJveCgpLT5zY3JvbGxMZWZ0KCkgPiAwKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
VXA6CisgICAgICAgIHJldHVybiAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVy
Zmxvd1koKSAhPSBPSElEREVOICYmIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFRvcCgp
ID4gMCk7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gKGNv
bnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgIT0gT0hJRERFTiAmJiBj
b250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxMZWZ0KCkgKyBjb250YWluZXItPnJlbmRlckJv
eCgpLT5jbGllbnRXaWR0aCgpIDwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsV2lkdGgo
KSk7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHJldHVybiAoY29udGFp
bmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1koKSAhPSBPSElEREVOICYmIGNvbnRh
aW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFRvcCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+
Y2xpZW50SGVpZ2h0KCkgPCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxIZWlnaHQoKSk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFt
ZS0+dmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU2Nyb2xsYmFyTW9kZSB2ZXJ0
aWNhbE1vZGU7CisgICAgU2Nyb2xsYmFyTW9kZSBob3Jpem9udGFsTW9kZTsKKyAgICBmcmFtZS0+
dmlldygpLT5jYWxjdWxhdGVTY3JvbGxiYXJNb2Rlc0ZvckxheW91dChob3Jpem9udGFsTW9kZSwg
dmVydGljYWxNb2RlKTsKKyAgICBpZiAoKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkxlZnQg
fHwgZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uUmlnaHQpICYmIFNjcm9sbGJhckFsd2F5c09m
ZiA9PSBob3Jpem9udGFsTW9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoZGly
ZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uVXAgfHwgZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9u
RG93bikgJiYgIFNjcm9sbGJhckFsd2F5c09mZiA9PSB2ZXJ0aWNhbE1vZGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBJbnRTaXplIHNpemUgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1Np
emUoKTsKKyAgICBJbnRTaXplIG9mZnNldCA9IGZyYW1lLT52aWV3KCktPnNjcm9sbE9mZnNldCgp
OworICAgIEludFJlY3QgcmVjdCA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCh0
cnVlKTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkxlZnQ6CisgICAgICAgIHJldHVybiBvZmZzZXQud2lkdGgoKSA+IDA7CisgICAgY2FzZSBGb2N1
c0RpcmVjdGlvblVwOgorICAgICAgICByZXR1cm4gb2Zmc2V0LmhlaWdodCgpID4gMDsKKyAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIHJldHVybiByZWN0LndpZHRoKCkgKyBv
ZmZzZXQud2lkdGgoKSA8IHNpemUud2lkdGgoKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93
bjoKKyAgICAgICAgcmV0dXJuIHJlY3QuaGVpZ2h0KCkgKyBvZmZzZXQuaGVpZ2h0KCkgPCBzaXpl
LmhlaWdodCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgSW50UmVjdCByZWN0VG9B
YnNvbHV0ZUNvb3JkaW5hdGVzKEZyYW1lKiBpbml0aWFsRnJhbWUsIGNvbnN0IEludFJlY3QmIGlu
aXRpYWxSZWN0KQoreworICAgIEludFJlY3QgcmVjdCA9IGluaXRpYWxSZWN0OworICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gaW5pdGlhbEZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihmcmFtZS0+b3duZXJFbGVtZW50KCkpKSB7CisgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxlbWVudC0+
b2Zmc2V0VG9wKCkpOworICAgICAgICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LT5v
ZmZzZXRQYXJlbnQoKSkpOworICAgICAgICAgICAgcmVjdC5tb3ZlKCgtZnJhbWUtPnZpZXcoKS0+
c2Nyb2xsT2Zmc2V0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVjdDsKK30K
KworSW50UmVjdCBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhOb2RlKiBub2RlLCBib29s
IGlnbm9yZUJvcmRlcikKK3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpKTsK
KworICAgIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gZnJhbWVS
ZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKHN0YXRpY19jYXN0PERvY3VtZW50Kj4obm9kZSktPmZy
YW1lKCkpOworICAgIEludFJlY3QgcmVjdCA9IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMobm9k
ZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSwgbm9kZS0+Z2V0UmVjdCgpKTsKKworICAgIC8vIEZvciBh
dXRob3JzIHRoYXQgdXNlIGJvcmRlciBpbnN0ZWFkIG9mIG91dGxpbmUgaW4gdGhlaXIgQ1NTLCB3
ZSBjb21wZW5zYXRlIGJ5IGlnbm9yaW5nIHRoZSBib3JkZXIgd2hlbiBjYWxjdWxhdGluZworICAg
IC8vIHRoZSByZWN0IG9mIHRoZSBmb2N1c2VkIGVsZW1lbnQuCisgICAgaWYgKGlnbm9yZUJvcmRl
cikgeworICAgICAgICByZWN0Lm1vdmUobm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVy
TGVmdFdpZHRoKCksIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkp
OworICAgICAgICByZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVyKCkt
PnN0eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
Ym9yZGVyUmlnaHRXaWR0aCgpKTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQo
KSAtIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCkgLSBub2RlLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlY3Q7Cit9CisKK0ludFJlY3QgZnJhbWVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKEZy
YW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gcmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyhmcmFt
ZSwgZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkpOworfQorCisvLyBUaGlzIG1l
dGhvZCBjYWxjdWxhdGVzIHRoZSBleGl0UG9pbnQgZnJvbSB0aGUgc3RhcnRpbmdSZWN0IGFuZCB0
aGUgZW50cnlQb2ludCBpbnRvIHRoZSBjYW5kaWRhdGUgcmVjdC4KKy8vIFRoZSBsaW5lIGJldHdl
ZW4gdGhvc2UgMiBwb2ludHMgaXMgdGhlIGNsb3Nlc3QgZGlzdGFuY2UgYmV0d2VlbiB0aGUgMiBy
ZWN0cy4KK3ZvaWQgZW50cnlBbmRFeGl0UG9pbnRzRm9yRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBjb25zdCBJbnRSZWN0JiBw
b3RlbnRpYWxSZWN0LCBJbnRQb2ludCYgZXhpdFBvaW50LCBJbnRQb2ludCYgZW50cnlQb2ludCkK
K3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0
OgorICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGluZ1JlY3QueCgpKTsKKyAgICAgICAgZW50
cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdS
ZWN0LnkoKSk7CisgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LmJvdHRvbSgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAg
ICBleGl0UG9pbnQuc2V0WChzdGFydGluZ1JlY3QucmlnaHQoKSk7CisgICAgICAgIGVudHJ5UG9p
bnQuc2V0WChwb3RlbnRpYWxSZWN0LngoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QuYm90
dG9tKCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC55KCkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25MZWZ0OgorICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgaWYgKGJlbG93
KHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkpIHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5z
ZXRZKHN0YXJ0aW5nUmVjdC55KCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVu
dGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICB9IGVsc2UgaWYgKGJlbG93KHBvdGVudGlhbFJl
Y3QsIHN0YXJ0aW5nUmVjdCkpIHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5n
UmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVj
dC55KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkobWF4
KHN0YXJ0aW5nUmVjdC55KCksIHBvdGVudGlhbFJlY3QueSgpKSk7CisgICAgICAgICAgICBlbnRy
eVBvaW50LnNldFkoZXhpdFBvaW50LnkoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgor
ICAgICAgICBpZiAocmlnaHRPZihzdGFydGluZ1JlY3QsIHBvdGVudGlhbFJlY3QpKSB7CisgICAg
ICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGluZ1JlY3QueCgpKTsKKyAgICAgICAgICAgIGVu
dHJ5UG9pbnQuc2V0WChwb3RlbnRpYWxSZWN0LnJpZ2h0KCkpOworICAgICAgICB9IGVsc2UgaWYg
KHJpZ2h0T2YocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkgeworICAgICAgICAgICAgZXhp
dFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAgZW50cnlQb2lu
dC5zZXRYKHBvdGVudGlhbFJlY3QueCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGV4aXRQb2ludC5zZXRYKG1heChzdGFydGluZ1JlY3QueCgpLCBwb3RlbnRpYWxSZWN0LngoKSkp
OworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKGV4aXRQb2ludC54KCkpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKwordm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbiwgRm9jdXNDYW5kaWRhdGUmIGN1cnJlbnQsIEZvY3VzQ2FuZGlkYXRlJiBjYW5k
aWRhdGUpCit7CisgICAgaWYgKGNhbmRpZGF0ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghY2FuZGlkYXRlLm5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBJbnRSZWN0IG5vZGVSZWN0ID0gY2FuZGlkYXRlLnJlY3Q7CisgICAgSW50UmVjdCBjdXJyZW50
UmVjdCA9IGN1cnJlbnQucmVjdDsKKyAgICBkZWZsYXRlSWZPdmVybGFwcGVkKGN1cnJlbnRSZWN0
LCBub2RlUmVjdCk7CisKKyAgICBpZiAoIWlzUmVjdEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgY3Vy
cmVudFJlY3QsIG5vZGVSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgZXhp
dFBvaW50OworICAgIEludFBvaW50IGVudHJ5UG9pbnQ7CisgICAgaW50IHNhbWVBeGlzRGlzdGFu
Y2UgPSAwOworICAgIGludCBvdGhlckF4aXNEaXN0YW5jZSA9IDA7CisgICAgZW50cnlBbmRFeGl0
UG9pbnRzRm9yRGlyZWN0aW9uKGRpcmVjdGlvbiwgY3VycmVudFJlY3QsIG5vZGVSZWN0LCBleGl0
UG9pbnQsIGVudHJ5UG9pbnQpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGV4aXRQb2lu
dC54KCkgLSBlbnRyeVBvaW50LngoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnMo
ZXhpdFBvaW50LnkoKSAtIGVudHJ5UG9pbnQueSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0gZXhpdFBvaW50
LnkoKSAtIGVudHJ5UG9pbnQueSgpOworICAgICAgICBvdGhlckF4aXNEaXN0YW5jZSA9IGFicyhl
eGl0UG9pbnQueCgpIC0gZW50cnlQb2ludC54KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBlbnRyeVBv
aW50LngoKSAtIGV4aXRQb2ludC54KCk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJz
KGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0gZW50cnlQ
b2ludC55KCkgLSBleGl0UG9pbnQueSgpOworICAgICAgICBvdGhlckF4aXNEaXN0YW5jZSA9IGFi
cyhlbnRyeVBvaW50LngoKSAtIGV4aXRQb2ludC54KCkpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGludCB4ID0gKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSkgKiAo
ZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpKTsKKyAgICBpbnQgeSA9IChlbnRyeVBvaW50
LnkoKSAtIGV4aXRQb2ludC55KCkpICogKGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7
CisKKyAgICBmbG9hdCBldWNsaWRpYW5EaXN0YW5jZSA9IHNxcnQoKHggKyB5KSAqIDEuMGYpOwor
CisgICAgLy8gTG9vc2VseSBiYXNlZCBvbiBodHRwOi8vd3d3LnczLm9yZy9UUi9XSUNELyNmb2N1
cy1oYW5kbGluZworICAgIC8vIGRmID0gZG90RGlzdCArIGR4ICsgZHkgKyAyICogKHhkaXNwbGFj
ZW1lbnQgKyB5ZGlzcGxhY2VtZW50KSAtIHNxcnQoT3ZlcmxhcCkKKworICAgIGZsb2F0IGRpc3Rh
bmNlID0gZXVjbGlkaWFuRGlzdGFuY2UgKyBzYW1lQXhpc0Rpc3RhbmNlICsgMiAqIG90aGVyQXhp
c0Rpc3RhbmNlOworICAgIGNhbmRpZGF0ZS5kaXN0YW5jZSA9IHJvdW5kZihkaXN0YW5jZSk7Cisg
ICAgSW50U2l6ZSB2aWV3U2l6ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgpLT5wYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKKyAgICBj
YW5kaWRhdGUuYWxpZ25tZW50ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9uLCBjdXJyZW50
UmVjdCwgbm9kZVJlY3QsIHZpZXdTaXplKTsKK30KKworYm9vbCBjYW5CZVNjcm9sbGVkSW50b1Zp
ZXcoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlKQor
eworICAgIEFTU0VSVChjYW5kaWRhdGUubm9kZSAmJiBoYXNPZmZzY3JlZW5SZWN0KGNhbmRpZGF0
ZS5ub2RlKSk7CisgICAgSW50UmVjdCBjYW5kaWRhdGVSZWN0ID0gY2FuZGlkYXRlLnJlY3Q7Cisg
ICAgZm9yIChOb2RlKiBwYXJlbnROb2RlID0gY2FuZGlkYXRlLm5vZGUtPnBhcmVudCgpOyBwYXJl
bnROb2RlOyBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS0+cGFyZW50KCkpIHsKKyAgICAgICAgSW50
UmVjdCBwYXJlbnRSZWN0ID0gbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMocGFyZW50Tm9k
ZSk7CisgICAgICAgIGlmICghY2FuZGlkYXRlUmVjdC5pbnRlcnNlY3RzKHBhcmVudFJlY3QpKSB7
CisgICAgICAgICAgICBpZiAoKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25MZWZ0IHx8IGRp
cmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblJpZ2h0KSAmJiBwYXJlbnROb2RlLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPSElEREVOKQorICAgICAgICAgICAgICAgIHx8ICgo
ZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uVXAgfHwgZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0
aW9uRG93bikgJiYgcGFyZW50Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dZKCkg
PT0gT0hJRERFTikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChwYXJlbnROb2RlID09IGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94
KQorICAgICAgICAgICAgcmV0dXJuIGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgcGFy
ZW50Tm9kZSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBUaGUgc3RhcnRpbmcg
cmVjdCBpcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlLCBpbiBkb2N1bWVudCBjb29yZGlu
YXRlcy4KKy8vIENvbXBvc2UgYSB2aXJ0dWFsIHN0YXJ0aW5nIHJlY3QgaWYgdGhlcmUgaXMgbm8g
Zm9jdXNlZCBub2RlIG9yIGlmIGl0IGlzIG9mZiBzY3JlZW4uCisvLyBUaGUgdmlydHVhbCByZWN0
IGlzIHRoZSBlZGdlIG9mIHRoZSBjb250YWluZXIgb3IgZnJhbWUuIFdlIHNlbGVjdCB3aGljaAor
Ly8gZWRnZSBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbmF2aWdhdGlvbi4KK0lu
dFJlY3QgdmlydHVhbFN0YXJ0aW5nUmVjdEZvckRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJl
Y3Rpb24sIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCkKK3sKKyAgICBJbnRSZWN0IHZpcnR1
YWxTdGFydGluZ1JlY3QgPSBzdGFydGluZ1JlY3Q7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
KyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVj
dC5zZXRYKHZpcnR1YWxTdGFydGluZ1JlY3QucmlnaHQoKSk7CisgICAgICAgIHZpcnR1YWxTdGFy
dGluZ1JlY3Quc2V0V2lkdGgoMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25VcDoKKyAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVjdC5zZXRZKHZpcnR1YWxTdGFydGlu
Z1JlY3QuYm90dG9tKCkpOworICAgICAgICB2aXJ0dWFsU3RhcnRpbmdSZWN0LnNldEhlaWdodCgw
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAg
ICB2aXJ0dWFsU3RhcnRpbmdSZWN0LnNldFdpZHRoKDApOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVjdC5zZXRI
ZWlnaHQoMCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiB2aXJ0dWFsU3RhcnRpbmdSZWN0Owor
fQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFs
TmF2aWdhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlv
bi5oCShyZXZpc2lvbiA3MjM4NCkKKysrIFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIFNwYXRpYWxOYXZpZ2F0
aW9uX2gKIAogI2luY2x1ZGUgIkZvY3VzRGlyZWN0aW9uLmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIk5vZGUuaCIKIAogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTEwNywxNiArMTA4
LDcgQEAgc3RydWN0IEZvY3VzQ2FuZGlkYXRlIHsKICAgICB7CiAgICAgfQogCi0gICAgRm9jdXND
YW5kaWRhdGUoTm9kZSogbikKLSAgICAgICAgOiBub2RlKG4pCi0gICAgICAgICwgZW5jbG9zaW5n
U2Nyb2xsYWJsZUJveCgwKQotICAgICAgICAsIGRpc3RhbmNlKG1heERpc3RhbmNlKCkpCi0gICAg
ICAgICwgcGFyZW50RGlzdGFuY2UobWF4RGlzdGFuY2UoKSkKLSAgICAgICAgLCBhbGlnbm1lbnQo
Tm9uZSkKLSAgICAgICAgLCBwYXJlbnRBbGlnbm1lbnQoTm9uZSkKLSAgICB7Ci0gICAgfQotCisg
ICAgRm9jdXNDYW5kaWRhdGUoTm9kZSogbik7CiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJl
dHVybiAhbm9kZTsgfQogICAgIGJvb2wgaW5TY3JvbGxhYmxlQ29udGFpbmVyKCkgY29uc3QgeyBy
ZXR1cm4gbm9kZSAmJiBlbmNsb3NpbmdTY3JvbGxhYmxlQm94OyB9CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbm9kZSA/IG5vZGUtPmRvY3VtZW50KCkgOiAwOyB9CkBA
IC0xMjcsMTYgKzExOSwyNSBAQCBzdHJ1Y3QgRm9jdXNDYW5kaWRhdGUgewogICAgIGxvbmcgbG9u
ZyBwYXJlbnREaXN0YW5jZTsKICAgICBSZWN0c0FsaWdubWVudCBhbGlnbm1lbnQ7CiAgICAgUmVj
dHNBbGlnbm1lbnQgcGFyZW50QWxpZ25tZW50OworICAgIEludFJlY3QgcmVjdDsKIH07CiAKIHZv
aWQgZGlzdGFuY2VEYXRhRm9yTm9kZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIHN0
YXJ0LCBGb2N1c0NhbmRpZGF0ZSYgY2FuZGlkYXRlKTsKLWJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24o
RnJhbWUqLCBGb2N1c0RpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSA9
IEZvY3VzQ2FuZGlkYXRlKCkpOworYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihGcmFtZSosIEZvY3Vz
RGlyZWN0aW9uKTsKK2Jvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1
c0RpcmVjdGlvbik7CiB2b2lkIHNjcm9sbEludG9WaWV3KEVsZW1lbnQqKTsKLWJvb2wgaGFzT2Zm
c2NyZWVuUmVjdChOb2RlKik7Citib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSosIEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbiA9IEZvY3VzRGlyZWN0aW9uTm9uZSk7CiBib29sIGlzSW5Sb290RG9j
dW1lbnQoTm9kZSopOwotYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKE5vZGUqKTsKK2Jv
b2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZShjb25zdCBOb2RlKik7CiBib29sIGlzTm9kZURl
ZXBEZXNjZW5kYW50T2ZEb2N1bWVudChOb2RlKiwgRG9jdW1lbnQqKTsKLQorTm9kZSogc2Nyb2xs
YWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24oRm9jdXNEaXJl
Y3Rpb24sIE5vZGUqIG5vZGUpOworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihGb2N1c0RpcmVj
dGlvbiwgY29uc3QgTm9kZSogY29udGFpbmVyKTsKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rpb24o
Rm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZyYW1lKik7CitJbnRSZWN0IG5vZGVSZWN0SW5BYnNvbHV0
ZUNvb3JkaW5hdGVzKE5vZGUqLCBib29sIGlnbm9yZUJvcmRlciA9IGZhbHNlKTsKK0ludFJlY3Qg
ZnJhbWVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKEZyYW1lKik7Cit2b2lkIGRpc3RhbmNlRGF0
YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlJiBjdXJyZW50LCBGb2N1c0Nh
bmRpZGF0ZSYgY2FuZGlkYXRlKTsKK2Jvb2wgY2FuQmVTY3JvbGxlZEludG9WaWV3KEZvY3VzRGly
ZWN0aW9uLCBGb2N1c0NhbmRpZGF0ZSYpOworSW50UmVjdCB2aXJ0dWFsU3RhcnRpbmdSZWN0Rm9y
RGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QpOwog
fSAvLyBuYW1zcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTcGF0aWFsTmF2aWdhdGlvbl9oCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74412</attachid>
            <date>2010-11-19 12:08:22 -0800</date>
            <delta_ts>2010-11-21 19:49:33 -0800</delta_ts>
            <desc>Patch - code only</desc>
            <filename>49382_code.patch</filename>
            <type>text/plain</type>
            <size>39741</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjQxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMTEtMTkgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
IFdlIGRvIG5vdCBhZGQgdGhlIHNjcm9sbGluZyBjb25kaXRpb25zIGZvciBjb250YWluZXJzIHRo
YXQgaGF2ZSBvdmVyZmxvdzpoaWRkZW4KKyAgICAgICAgYW5kIGNhbm5vdCBzY3JvbGwuCisKKyAg
ICAgICAgY2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNGb3JMYXlvdXQgaXMgdXNlZCB0byBkZWNpZGUg
aWYgYSBmcmFtZSBjYW4gc2Nyb2xsIG9yIG5vdC4gV2UgY2Fubm90IHJlbHkgb24KKyAgICAgICAg
dGhlIGV4c2lzdGFuY2Ugb2YgdGhlIHNjcm9sbGJhciwgYmVjYXVzZSBpdCBjb3VsZCBiZSByZW1v
dmVkIHZpYSB0aGUgQVBJLCB3aGlsZSB0aGUgZnJhbWUgaXMgc3RpbGwKKyAgICAgICAgYWxsb3dl
ZCB0byBzY3JvbGwuCisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9u
YWxseSk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9jdXNDYW5kaWRhdGU6OkZvY3VzQ2FuZGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmRpc3RhbmNlRGF0YUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWxpZ25t
ZW50Rm9yUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6YXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3Jl
ZW5BcGFydCk6CisgICAgICAgIChXZWJDb3JlOjppc1JlY3RJbkRpcmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpoYXNPZmZzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbElu
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVG
b3JOb2RlSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2FuU2Nyb2xsSW5EaXJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6cmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW50cnlBbmRFeGl0UG9pbnRzRm9yRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bkJlU2Nyb2xsZWRJbnRvVmlldyk6CisgICAgICAgIChXZWJDb3JlOjp2aXJ0dWFsU3RhcnRpbmdS
ZWN0Rm9yRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmg6CisK
IDIwMTAtMTEtMTkgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiA3MjM4NCkKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIK
ICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC01Nyw2ICs1OSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCitzdGF0aWMgdm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0Nh
bmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCk7CiBzdGF0aWMgaW5s
aW5lIHZvaWQgZGlzcGF0Y2hFdmVudHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBmb2N1c2VkKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBmb2N1c2VkIG5v
ZGUgd2Ugc2hvdWxkIGRpc3BhdGNoIGJsdXIgb24gaXQgYmVmb3JlIHdlIGJsdXIgdGhlIHdpbmRv
dy4KQEAgLTI4OSw2NCArMjkyLDYgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1
c0luRG9jdQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2
YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQotewotICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRPck1haW5GcmFtZSgp
OwotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgRG9jdW1lbnQqIGZvY3VzZWREb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZm9jdXNlZERvY3VtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWREb2N1bWVudC0+Zm9j
dXNlZE5vZGUoKTsKLSAgICBpZiAoIWZvY3VzZWROb2RlKSB7Ci0gICAgICAgIC8vIEp1c3QgbW92
ZSB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIG5vZGUuCi0gICAgICAgIEZvY3VzRGlyZWN0aW9uIHRh
YkRpcmVjdGlvbiA9IChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24g
PT0gRm9jdXNEaXJlY3Rpb25MZWZ0KSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGb2N1c0RpcmVjdGlvbkJhY2t3YXJkIDogRm9jdXNEaXJlY3Rpb25Gb3J3YXJkOwot
ICAgICAgICAvLyAnaW5pdGlhbEZvY3VzJyBpcyBzZXQgdG8gdHJ1ZSBzbyB0aGUgY2hyb21lIGlz
IG5vdCBmb2N1c2VkLgotICAgICAgICByZXR1cm4gYWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVy
KHRhYkRpcmVjdGlvbiwgZXZlbnQsIHRydWUpOwotICAgIH0KLQotICAgIC8vIE1vdmUgdXAgaW4g
dGhlIGNoYWluIG9mIG5lc3RlZCBmcmFtZXMuCi0gICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
b3AoKTsKLQotICAgIEZvY3VzQ2FuZGlkYXRlIGZvY3VzQ2FuZGlkYXRlOwotICAgIGZpbmRGb2N1
c2FibGVOb2RlSW5EaXJlY3Rpb24oZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0Q2hpbGQoKSwgZm9j
dXNlZE5vZGUsIGRpcmVjdGlvbiwgZXZlbnQsIGZvY3VzQ2FuZGlkYXRlKTsKLQotICAgIE5vZGUq
IG5vZGUgPSBmb2N1c0NhbmRpZGF0ZS5ub2RlOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNF
bGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBNYXkgbmVlZCBhIHdheSB0byBmb2N1
cyBhIGRvY3VtZW50IGhlcmUuCi0gICAgICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihmcmFtZSwgZGlyZWN0aW9uKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGNy
YXp5IGp1bXAgYmV0d2VlbiBsaW5rcyB0aGF0IGFyZSBlaXRoZXIgZmFyIGF3YXkgZnJvbSBlYWNo
IG90aGVyLAotICAgIC8vIG9yIGp1c3Qgbm90IGN1cnJlbnRseSB2aXNpYmxlLCBsZXRzIGRvIGEg
c2Nyb2xsIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gYW5kIGJhaWwgb3V0Ci0gICAgLy8gaWYgfG5v
ZGV8IGVsZW1lbnQgaXMgbm90IGluIHRoZSB2aWV3cG9ydC4KLSAgICBpZiAoaGFzT2Zmc2NyZWVu
UmVjdChub2RlKSkgewotICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT52
aWV3KCktPmZyYW1lKCk7Ci0gICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLCBkaXJlY3Rp
b24sIGZvY3VzQ2FuZGlkYXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
RG9jdW1lbnQqIG5ld0RvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKLQotICAgIGlmIChuZXdE
b2N1bWVudCAhPSBmb2N1c2VkRG9jdW1lbnQpIHsKLSAgICAgICAgLy8gRm9jdXMgaXMgZ29pbmcg
YXdheSBmcm9tIHRoZSBvcmlnaW5hbGx5IGZvY3VzZWQgZG9jdW1lbnQsIHNvIGNsZWFyIHRoZSBm
b2N1c2VkIG5vZGUuCi0gICAgICAgIGZvY3VzZWREb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUoMCk7
Ci0gICAgfQotCi0gICAgaWYgKG5ld0RvY3VtZW50KQotICAgICAgICBzZXRGb2N1c2VkRnJhbWUo
bmV3RG9jdW1lbnQtPmZyYW1lKCkpOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KLSAgICBzY3JvbGxJ
bnRvVmlldyhlbGVtZW50KTsKLSAgICBlbGVtZW50LT5mb2N1cyhmYWxzZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSW5TYW1lQ29udGFp
bmVyKGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIEZvY3VzQ2FuZGlkYXRlJiBjbG9z
ZXN0KQogewogICAgIGlmIChjbG9zZXN0LmlzTnVsbCgpKSB7CkBAIC02NTgsNCArNjAzLDE3MSBA
QCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0QWN0aXZlKGJvb2wgYWN0CiAgICAgICAgIGRpc3Bh
dGNoRXZlbnRzT25XaW5kb3dBbmRGb2N1c2VkTm9kZShtX2ZvY3VzZWRGcmFtZS0+ZG9jdW1lbnQo
KSwgYWN0aXZlKTsKIH0KIAordm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0Nh
bmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCkKK3sKKyAgICBpZiAo
IWNhbmRpZGF0ZS5ub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwhY2FuZGlkYXRlLm5vZGUtPnJlbmRl
cmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElnbm9yZSBlbXB0eSBmcmFtZXMKKyAg
ICBpZiAoY2FuZGlkYXRlLm5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSAmJiAhc3RhdGljX2Nh
c3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oY2FuZGlkYXRlLm5vZGUpLT5jb250ZW50RnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIG9mZiBzY3JlZW4gY2hpbGQgbm9k
ZXMgb2YgY29udGFpbmVycyB0aGF0IGRvIG5vdCBzY3JvbGwgKG92ZXJmbG93OmhpZGRlbikKKyAg
ICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChjYW5kaWRhdGUubm9kZSkgJiYgIWNhbkJlU2Nyb2xsZWRJ
bnRvVmlldyhkaXJlY3Rpb24sIGNhbmRpZGF0ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIEZv
Y3VzQ2FuZGlkYXRlIGN1cnJlbnQ7CisgICAgY3VycmVudC5yZWN0ID0gc3RhcnRpbmdSZWN0Owor
ICAgIGRpc3RhbmNlRGF0YUZvck5vZGUoZGlyZWN0aW9uLCBjdXJyZW50LCBjYW5kaWRhdGUpOwor
ICAgIGlmIChjYW5kaWRhdGUuZGlzdGFuY2UgPT0gbWF4RGlzdGFuY2UoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoY2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlv
bikgJiYgY2FuZGlkYXRlLmFsaWdubWVudCA8IEZ1bGwpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChjbG9zZXN0LmlzTnVsbCgpKSB7CisgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IGludGVyc2VjdGlvblJlY3QgPSBp
bnRlcnNlY3Rpb24obm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoY2FuZGlkYXRlLm5vZGUs
IHRydWUpLCBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjbG9zZXN0Lm5vZGUsIHRydWUp
KTsKKyAgICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElm
IDIgbm9kZXMgYXJlIGludGVyc2VjdGluZywgZG8gaGl0IHRlc3QgdG8gZmluZCB3aGljaCBub2Rl
IGluIG9uIHRvcC4KKyAgICAgICAgaW50IHggPSBpbnRlcnNlY3Rpb25SZWN0LngoKSArIGludGVy
c2VjdGlvblJlY3Qud2lkdGgoKSAvIDI7CisgICAgICAgIGludCB5ID0gaW50ZXJzZWN0aW9uUmVj
dC55KCkgKyBpbnRlcnNlY3Rpb25SZWN0LmhlaWdodCgpIC8gMjsKKyAgICAgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQgPSBjYW5kaWRhdGUubm9kZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5tYWluRnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KEludFBvaW50KHgsIHkp
LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGlmIChjYW5kaWRhdGUubm9kZS0+Y29udGFpbnMocmVz
dWx0LmlubmVyTm9kZSgpKSkgeworICAgICAgICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xvc2VzdC5ub2RlLT5j
b250YWlucyhyZXN1bHQuaW5uZXJOb2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChjYW5kaWRhdGUuYWxpZ25tZW50ID09IGNsb3Nlc3QuYWxpZ25tZW50KSB7Cisg
ICAgICAgIGlmIChjYW5kaWRhdGUuZGlzdGFuY2UgPCBjbG9zZXN0LmRpc3RhbmNlKQorICAgICAg
ICAgICAgY2xvc2VzdCA9IGNhbmRpZGF0ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChjYW5kaWRhdGUuYWxpZ25tZW50ID4gY2xvc2VzdC5hbGlnbm1lbnQpCisgICAgICAgIGNs
b3Nlc3QgPSBjYW5kaWRhdGU7Cit9CisKK3ZvaWQgRm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXND
YW5kaWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0
aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCwg
Rm9jdXNDYW5kaWRhdGUmIGNsb3Nlc3QpCit7CisgICAgQVNTRVJUKGNvbnRhaW5lcik7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSAo
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVj
dGlvbiwgbm9kZSkpID8gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhjb250YWluZXIpIDogbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZShjb250YWluZXIpKSB7CisgICAgICAgIGlmICgoIWZvY3VzZWRG
cmFtZSgpIHx8ICFmb2N1c2VkRnJhbWUoKS0+ZG9jdW1lbnQoKSB8fCBub2RlICE9IGZvY3VzZWRG
cmFtZSgpLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpKSAmJiAobm9kZS0+aXNLZXlib2FyZEZv
Y3VzYWJsZShldmVudCkgfHwgbm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9s
bEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgbm9kZSkpKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUt
PnJlbmRlcmVyKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBGb2N1
c0NhbmRpZGF0ZSBjYW5kaWRhdGUobm9kZSk7CisgICAgICAgICAgICBjYW5kaWRhdGUuZW5jbG9z
aW5nU2Nyb2xsYWJsZUJveCA9IGNvbnRhaW5lcjsKKyAgICAgICAgICAgIHVwZGF0ZUZvY3VzQ2Fu
ZGlkYXRlSWZOZWVkZWQoZGlyZWN0aW9uLCBzdGFydGluZ1JlY3QsIGNhbmRpZGF0ZSwgY2xvc2Vz
dCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0
ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0
LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAg
IGlmICghY29udGFpbmVyIHx8ICFjb250YWluZXItPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEludFJlY3QgbmV3U3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0Owor
CisgICAgaWYgKHN0YXJ0aW5nUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG5ld1N0YXJ0aW5nUmVj
dCA9IHZpcnR1YWxTdGFydGluZ1JlY3RGb3JEaXJlY3Rpb24oZGlyZWN0aW9uLCBub2RlUmVjdElu
QWJzb2x1dGVDb29yZGluYXRlcyhjb250YWluZXIpKTsKKworICAgIC8vIEZpbmQgdGhlIGNsb3Nl
c3Qgbm9kZSB3aXRoaW4gY3VycmVudCBjb250YWluZXIgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUg
bmF2aWdhdGlvbi4KKyAgICBGb2N1c0NhbmRpZGF0ZSBmb2N1c0NhbmRpZGF0ZTsKKyAgICBmaW5k
Rm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihjb250YWluZXIsIG5ld1N0YXJ0aW5nUmVjdCwgZGly
ZWN0aW9uLCBldmVudCwgZm9jdXNDYW5kaWRhdGUpOworCisgICAgaWYgKGZvY3VzQ2FuZGlkYXRl
LmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24s
IGNvbnRhaW5lcikpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZm9jdXMsIHNjcm9sbCBp
ZiBwb3NzaWJsZS4KKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGNvbnRhaW5lciwgZGly
ZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8v
IFJldHVybiBmYWxzZSB3aWxsIGNhdXNlIGEgcmUtdHJ5LCBza2lwcGluZyB0aGlzIGNvbnRhaW5l
ci4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZm9jdXNDYW5kaWRhdGUu
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogZnJhbWVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4o
Zm9jdXNDYW5kaWRhdGUubm9kZSk7CisgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gaWZyYW1lIHdp
dGhvdXQgdGhlIHNyYyBhdHRyaWJ1dGUsIGl0IHdpbGwgbm90IGhhdmUgYSBjb250ZW50RnJhbWUo
KS4KKyAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGNvbnNpZGVyIHN1Y2ggYW4gaWZyYW1lIGFz
IGEgY2FuZGlkYXRlLgorICAgICAgICBBU1NFUlQoZnJhbWVFbGVtZW50LT5jb250ZW50RnJhbWUo
KSk7CisKKyAgICAgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9kZSwg
ZGlyZWN0aW9uKSkgeworICAgICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oZm9jdXNDYW5kaWRh
dGUubm9kZS0+ZG9jdW1lbnQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIC8vIE5hdmlnYXRlIGludG8gYSBuZXcgZnJhbWUuCisgICAg
ICAgIEludFJlY3QgcmVjdDsKKyAgICAgICAgTm9kZSogZm9jdXNlZE5vZGUgPSBmb2N1c2VkT3JN
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKKyAgICAgICAgaWYgKGZvY3Vz
ZWROb2RlICYmICFoYXNPZmZzY3JlZW5SZWN0KGZvY3VzZWROb2RlKSkKKyAgICAgICAgICAgIHJl
Y3QgPSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhmb2N1c2VkTm9kZSwgdHJ1ZSAvKiBp
Z25vcmUgYm9yZGVyICovKTsKKyAgICAgICAgZnJhbWVFbGVtZW50LT5jb250ZW50RnJhbWUoKS0+
ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAg
ICAgIGlmICghbmF2aWdhdGVJbkNvbnRhaW5lcihmcmFtZUVsZW1lbnQtPmNvbnRlbnRGcmFtZSgp
LT5kb2N1bWVudCgpLCByZWN0LCBkaXJlY3Rpb24sIGV2ZW50KSkgeworICAgICAgICAgICAgLy8g
VGhlIG5ldyBmcmFtZSBoYWQgbm90aGluZyBpbnRlcmVzdGluZywgbmVlZCB0byBmaW5kIGFub3Ro
ZXIgY2FuZGlkYXRlLgorICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRlSW5Db250YWluZXIoY29u
dGFpbmVyLCBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhmb2N1c0NhbmRpZGF0ZS5ub2Rl
LCB0cnVlKSwgZGlyZWN0aW9uLCBldmVudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGlmIChjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGZvY3Vz
Q2FuZGlkYXRlLm5vZGUpKSB7CisgICAgICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0KGZvY3VzQ2Fu
ZGlkYXRlLm5vZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9u
KGZvY3VzQ2FuZGlkYXRlLm5vZGUsIGRpcmVjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBOYXZpZ2F0ZSBpbnRvIGEgbmV3IHNjcm9sbGFibGUg
Y29udGFpbmVyLgorICAgICAgICBJbnRSZWN0IHN0YXJ0aW5nUmVjdDsKKyAgICAgICAgTm9kZSog
Zm9jdXNlZE5vZGUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5v
ZGUoKTsKKyAgICAgICAgaWYgKGZvY3VzZWROb2RlICYmICFoYXNPZmZzY3JlZW5SZWN0KGZvY3Vz
ZWROb2RlKSkKKyAgICAgICAgICAgIHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNv
b3JkaW5hdGVzKGZvY3VzZWROb2RlLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIG5hdmlnYXRlSW5D
b250YWluZXIoZm9jdXNDYW5kaWRhdGUubm9kZSwgc3RhcnRpbmdSZWN0LCBkaXJlY3Rpb24sIGV2
ZW50KTsKKyAgICB9CisgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoZm9jdXNDYW5kaWRhdGUubm9k
ZSwgZGlyZWN0aW9uKSkgeworICAgICAgICBOb2RlKiBjb250YWluZXIgPSBmb2N1c0NhbmRpZGF0
ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94OworICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihjb250
YWluZXIsIGRpcmVjdGlvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8v
IFdlIGZvdW5kIGEgbmV3IGZvY3VzIG5vZGUsIG5hdmlnYXRlIHRvIGl0LgorICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZm9jdXNDYW5kaWRhdGUubm9kZSk7Cisg
ICAgQVNTRVJUKGVsZW1lbnQpOworCisgICAgZWxlbWVudC0+Zm9jdXMoZmFsc2UpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0
aW9uYWxseShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50KQor
eworICAgIEZyYW1lKiBjdXJGcmFtZSA9IGZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEFTU0VS
VChjdXJGcmFtZSk7CisKKyAgICBEb2N1bWVudCogZm9jdXNlZERvY3VtZW50ID0gY3VyRnJhbWUt
PmRvY3VtZW50KCk7CisgICAgaWYgKCFmb2N1c2VkRG9jdW1lbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZERvY3VtZW50LT5mb2N1c2Vk
Tm9kZSgpOworICAgIE5vZGUqIGNvbnRhaW5lciA9IGZvY3VzZWREb2N1bWVudDsKKworICAgIC8v
IEZpZ3VyZSBvdXQgdGhlIHN0YXJ0aW5nIHJlY3QuCisgICAgSW50UmVjdCBzdGFydGluZ1JlY3Q7
CisgICAgaWYgKGZvY3VzZWROb2RlICYmICFoYXNPZmZzY3JlZW5SZWN0KGZvY3VzZWROb2RlKSkg
eworICAgICAgICBjb250YWluZXIgPSBzY3JvbGxhYmxlRW5jbG9zaW5nQm94T3JQYXJlbnRGcmFt
ZUZvck5vZGVJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGZvY3VzZWROb2RlKTsKKyAgICAgICAgc3Rh
cnRpbmdSZWN0ID0gbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNlZE5vZGUsIHRy
dWUgLyogaWdub3JlIGJvcmRlciAqLyk7CisgICAgfQorCisgICAgYm9vbCBjb25zdW1lZCA9IGZh
bHNlOworICAgIGRvIHsKKyAgICAgICAgaWYgKGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUoKSkK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGFpbmVyKS0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgIGNvbnN1bWVkID0gbmF2aWdh
dGVJbkNvbnRhaW5lcihjb250YWluZXIsIHN0YXJ0aW5nUmVjdCwgZGlyZWN0aW9uLCBldmVudCk7
CisgICAgICAgIHN0YXJ0aW5nUmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGNv
bnRhaW5lciwgdHJ1ZSAvKiBpZ25vcmUgYm9yZGVyICovKTsKKyAgICAgICAgY29udGFpbmVyID0g
c2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24oZGly
ZWN0aW9uLCBjb250YWluZXIpOworICAgIH0gd2hpbGUgKCFjb25zdW1lZCAmJiBjb250YWluZXIp
OworCisgICAgcmV0dXJuIGNvbnN1bWVkOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCShyZXZpc2lvbiA3MjM4NCkKKysrIFdlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb2N1c0Nh
bmRpZGF0ZSYgcGFyZW50Q2FuZGlkYXRlID0gRm9jdXNDYW5kaWRhdGUoKSk7CiAgICAgdm9pZCBk
ZWVwRmluZEZvY3VzYWJsZU5vZGVJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIE5vZGUqIGZv
Y3VzZWQsIEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiwgRm9jdXNDYW5kaWRhdGUmKTsK
IAorICAgIGJvb2wgbmF2aWdhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IElu
dFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqKTsKKyAg
ICB2b2lkIGZpbmRGb2N1c0NhbmRpZGF0ZUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29u
c3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCos
IEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KTsKKwogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBSZWZQ
dHI8RnJhbWU+IG1fZm9jdXNlZEZyYW1lOwogICAgIGJvb2wgbV9pc0FjdGl2ZTsKSW5kZXg6IFdl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmgJKHJldmlzaW9uIDcyMzg0KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNGcmFtZVZp
ZXdTY3JvbGxDb3JuZXIoUmVuZGVyU2Nyb2xsYmFyUGFydCogc2Nyb2xsQ29ybmVyKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbENvcm5lciA9PSBzY3JvbGxDb3JuZXI7IH0KICAgICB2b2lkIGludmFs
aWRhdGVTY3JvbGxDb3JuZXIoKTsKIAorICAgIHZvaWQgY2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNG
b3JMYXlvdXQoU2Nyb2xsYmFyTW9kZSYgaE1vZGUsIFNjcm9sbGJhck1vZGUmIHZNb2RlKTsKKwog
ICAgIC8vIE5vcm1hbCBkZWxheQogICAgIHN0YXRpYyB2b2lkIHNldFJlcGFpbnRUaHJvdHRsaW5n
RGVmZXJyZWRSZXBhaW50RGVsYXkoZG91YmxlIHApOwogICAgIC8vIE5lZ2F0aXZlIHZhbHVlIHdv
dWxkIG1lYW4gdGhhdCBmaXJzdCBmZXcgcmVwYWludHMgaGFwcGVuIHdpdGhvdXQgYSBkZWxheQpA
QCAtMjY1LDcgKzI2Nyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYXNGaXhlZE9iamVjdHMoKSBj
b25zdCB7IHJldHVybiBtX2ZpeGVkT2JqZWN0Q291bnQgPiAwOyB9CiAKICAgICB2b2lkIGFwcGx5
T3ZlcmZsb3dUb1ZpZXdwb3J0KFJlbmRlck9iamVjdCosIFNjcm9sbGJhck1vZGUmIGhNb2RlLCBT
Y3JvbGxiYXJNb2RlJiB2TW9kZSk7Ci0gICAgdm9pZCBjYWxjdWxhdGVTY3JvbGxiYXJNb2Rlc0Zv
ckxheW91dChTY3JvbGxiYXJNb2RlJiBoTW9kZSwgU2Nyb2xsYmFyTW9kZSYgdk1vZGUpOwogCiAg
ICAgdm9pZCB1cGRhdGVPdmVyZmxvd1N0YXR1cyhib29sIGhvcml6b250YWxPdmVyZmxvdywgYm9v
bCB2ZXJ0aWNhbE92ZXJmbG93KTsKIApJbmRleDogV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
CShyZXZpc2lvbiA3MjM4NCkKKysrIFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDEyICs0MywyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0YXRpYyBsb25nIGxvbmcgc3BhdGlhbERpc3RhbmNlKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIEludFJlY3QgcmVuZGVyUmVjdFJlbGF0
aXZlVG9Sb290RG9jdW1lbnQoUmVuZGVyT2JqZWN0Kik7Ci1zdGF0aWMgUmVjdHNBbGlnbm1lbnQg
YWxpZ25tZW50Rm9yUmVjdHMoRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRSZWN0Jik7CitzdGF0aWMgUmVjdHNBbGlnbm1lbnQgYWxpZ25tZW50Rm9yUmVjdHMoRm9jdXNE
aXJlY3Rpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYg
dmlld1NpemUpOwogc3RhdGljIGJvb2wgYXJlUmVjdHNGdWxseUFsaWduZWQoRm9jdXNEaXJlY3Rp
b24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0Jik7CiBzdGF0aWMgYm9vbCBhcmVSZWN0
c1BhcnRpYWxseUFsaWduZWQoRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRSZWN0Jik7CitzdGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwYXJ0KEZv
Y3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVjdCwgY29uc3QgSW50
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50U2l6ZSYgdmlld1NpemUpOwogc3RhdGljIGJvb2wg
aXNSZWN0SW5EaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRSZWN0Jik7CiBzdGF0aWMgdm9pZCBkZWZsYXRlSWZPdmVybGFwcGVkKEludFJlY3QmLCBJbnRS
ZWN0Jik7CiBzdGF0aWMgYm9vbCBjaGVja05lZ2F0aXZlQ29vcmRzRm9yTm9kZShOb2RlKiwgY29u
c3QgSW50UmVjdCYpOworc3RhdGljIEludFJlY3QgcmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyhG
cmFtZSogaW5pdGlhbEZyYW1lLCBjb25zdCBJbnRSZWN0JiByZWN0KTsKK3N0YXRpYyB2b2lkIGVu
dHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNv
bnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgY29uc3QgSW50UmVjdCYgcG90ZW50aWFsUmVjdCwg
SW50UG9pbnQmIGV4aXRQb2ludCwgSW50UG9pbnQmIGVudHJ5UG9pbnQpOworCisKK0ZvY3VzQ2Fu
ZGlkYXRlOjpGb2N1c0NhbmRpZGF0ZShOb2RlKiBuKQorICAgIDogbm9kZShuKQorICAgICwgZW5j
bG9zaW5nU2Nyb2xsYWJsZUJveCgwKQorICAgICwgZGlzdGFuY2UobWF4RGlzdGFuY2UoKSkKKyAg
ICAsIHBhcmVudERpc3RhbmNlKG1heERpc3RhbmNlKCkpCisgICAgLCBhbGlnbm1lbnQoTm9uZSkK
KyAgICAsIHBhcmVudEFsaWdubWVudChOb25lKQorICAgICwgcmVjdChub2RlUmVjdEluQWJzb2x1
dGVDb29yZGluYXRlcyhuLCB0cnVlIC8qIGlnbm9yZSBib3JkZXIgKi8pKQoreworfQogCiBib29s
IGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKQEAgLTEw
Miw3ICsxMTcsOCBAQCB2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gCiAg
ICAgLy8gVGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIG5vZGVzIGlzIG5vdCB0byBiZSBjb25zaWRl
cmVkIGFsb25lIHdoZW4gZXZhbHVhdGluZy9sb29raW5nCiAgICAgLy8gZm9yIHRoZSBiZXN0IGZv
Y3VzIGNhbmRpZGF0ZSBub2RlLiBBbGlnbm1lbnQgb2YgcmVjdHMgY2FuIGJlIGFsc28gYSBnb29k
IHBvaW50IHRvIGJlCiAgICAgLy8gY29uc2lkZXJlZCBpbiBvcmRlciB0byBtYWtlIHRoZSBhbGdv
cml0aG0gdG8gYmVoYXZpb3IgaW4gYSBtb3JlIGludHVpdGl2ZSB3YXkuCi0gICAgY2FuZGlkYXRl
LmFsaWdubWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0
UmVjdCk7CisgICAgSW50U2l6ZSB2aWV3U2l6ZSA9IGNhbmRpZGF0ZS5ub2RlLT5kb2N1bWVudCgp
LT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUo
KTsKKyAgICBjYW5kaWRhdGUuYWxpZ25tZW50ID0gYWxpZ25tZW50Rm9yUmVjdHMoZGlyZWN0aW9u
LCBjdXJSZWN0LCB0YXJnZXRSZWN0LCB2aWV3U2l6ZSk7CiAgICAgY2FuZGlkYXRlLmRpc3RhbmNl
ID0gc3BhdGlhbERpc3RhbmNlKGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCk7CiB9CiAK
QEAgLTEzNiw4ICsxNTIsMTIgQEAgc3RhdGljIEludFJlY3QgcmVuZGVyUmVjdFJlbGF0aXZlVG9S
b290RAogICAgIHJldHVybiByZWN0OwogfQogCi1zdGF0aWMgUmVjdHNBbGlnbm1lbnQgYWxpZ25t
ZW50Rm9yUmVjdHMoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJS
ZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQorc3RhdGljIFJlY3RzQWxpZ25tZW50IGFs
aWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYg
Y3VyUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50U2l6ZSYgdmlld1Np
emUpCiB7CisgICAgLy8gSWYgd2UgZm91bmQgYSBub2RlIGluIGZ1bGwgYWxpZ25tZW50LCBidXQg
aXQgaXMgdG9vIGZhciBhd2F5LCBpZ25vcmUgaXQuCisgICAgaWYgKGFyZVJlY3RzTW9yZVRoYW5G
dWxsU2NyZWVuQXBhcnQoZGlyZWN0aW9uLCBjdXJSZWN0LCB0YXJnZXRSZWN0LCB2aWV3U2l6ZSkp
CisgICAgICAgIHJldHVybiBOb25lOworCiAgICAgaWYgKGFyZVJlY3RzRnVsbHlBbGlnbmVkKGRp
cmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCkpCiAgICAgICAgIHJldHVybiBGdWxsOwogCkBA
IC0yNzcsNiArMjk3LDI1IEBAIHN0YXRpYyBib29sIGFyZVJlY3RzUGFydGlhbGx5QWxpZ25lZChG
b2MKICAgICAgICAgICAgIHx8IChiRW5kID49IGFTdGFydCAmJiBiRW5kIDw9IGFFbmQpKTsKIH0K
IAorc3RhdGljIGJvb2wgYXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3JlZW5BcGFydChGb2N1c0RpcmVj
dGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKQoreworICAgIEFTU0VSVChpc1JlY3RJ
bkRpcmVjdGlvbihkaXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpKTsKKworICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIHJl
dHVybiBjdXJSZWN0LngoKSAtIHRhcmdldFJlY3QucmlnaHQoKSA+IHZpZXdTaXplLndpZHRoKCk7
CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gdGFyZ2V0UmVj
dC54KCkgLSBjdXJSZWN0LnJpZ2h0KCkgPiB2aWV3U2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25VcDoKKyAgICAgICAgcmV0dXJuIGN1clJlY3QueSgpIC0gdGFyZ2V0UmVjdC5i
b3R0b20oKSA+IHZpZXdTaXplLmhlaWdodCgpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3du
OgorICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC55KCkgLSBjdXJSZWN0LmJvdHRvbSgpID4gdmll
d1NpemUuaGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogLy8gUmV0dXJuIHRydWUgaWYg
cmVjdCB8YXwgaXMgYmVsb3cgfGJ8LiBGYWxzZSBvdGhlcndpc2UuCiBzdGF0aWMgaW5saW5lIGJv
b2wgYmVsb3coY29uc3QgSW50UmVjdCYgYSwgY29uc3QgSW50UmVjdCYgYikKIHsKQEAgLTQwMywy
OSArNDQyLDI1IEBAIHN0YXRpYyBsb25nIGxvbmcgc3BhdGlhbERpc3RhbmNlKEZvY3VzRGkKIAog
c3RhdGljIGJvb2wgaXNSZWN0SW5EaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBj
b25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQogewotICAg
IEludFBvaW50IGNlbnRlcih0YXJnZXRSZWN0LmNlbnRlcigpKTsKLSAgICBpbnQgdGFyZ2V0TWlk
ZGxlID0gaXNIb3Jpem9udGFsTW92ZShkaXJlY3Rpb24pID8gY2VudGVyLngoKSA6IGNlbnRlci55
KCk7Ci0KICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25M
ZWZ0OgotICAgICAgICByZXR1cm4gdGFyZ2V0TWlkZGxlIDwgY3VyUmVjdC54KCk7CisgICAgICAg
IHJldHVybiB0YXJnZXRSZWN0LnJpZ2h0KCkgPD0gY3VyUmVjdC54KCk7CiAgICAgY2FzZSBGb2N1
c0RpcmVjdGlvblJpZ2h0OgotICAgICAgICByZXR1cm4gdGFyZ2V0TWlkZGxlID4gY3VyUmVjdC5y
aWdodCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgPj0gY3VyUmVjdC5yaWdodCgp
OwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKLSAgICAgICAgcmV0dXJuIHRhcmdldE1pZGRs
ZSA8IGN1clJlY3QueSgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC5ib3R0b20oKSA8PSBj
dXJSZWN0LnkoKTsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0dXJu
IHRhcmdldE1pZGRsZSA+IGN1clJlY3QuYm90dG9tKCk7CisgICAgICAgIHJldHVybiB0YXJnZXRS
ZWN0LnkoKSA+PSBjdXJSZWN0LmJvdHRvbSgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwogfQogCiAvLyBDaGVja3MgaWYgfG5vZGV8IGlzIG9mZnNjcmVlbiB0aGUgdmlz
aWJsZSBhcmVhICh2aWV3cG9ydCkgb2YgaXRzIGNvbnRhaW5lcgogLy8gZG9jdW1lbnQuIEluIGNh
c2UgaXQgaXMsIG9uZSBjYW4gc2Nyb2xsIGluIGRpcmVjdGlvbiBvciB0YWtlIGFueSBkaWZmZXJl
bnQKIC8vIGRlc2lyZWQgYWN0aW9uIGxhdGVyIG9uLgotYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5v
ZGUqIG5vZGUpCitib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSogbm9kZSwgRm9jdXNEaXJlY3Rp
b24gZGlyZWN0aW9uKQogewogICAgIC8vIEdldCB0aGUgRnJhbWVWaWV3IGluIHdoaWNoIHxub2Rl
fCBpcyAod2hpY2ggbWVhbnMgdGhlIGN1cnJlbnQgdmlld3BvcnQgaWYgfG5vZGV8CiAgICAgLy8g
aXMgbm90IGluIGFuIGlubmVyIGRvY3VtZW50KSwgc28gd2UgY2FuIGNoZWNrIGlmIGl0cyBjb250
ZW50IHJlY3QgaXMgdmlzaWJsZQpAQCAtNDM1LDYgKzQ3MCwyOCBAQCBib29sIGhhc09mZnNjcmVl
blJlY3QoTm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBJbnRSZWN0IGNv
bnRhaW5lclZpZXdwb3J0UmVjdCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Cisg
ICAgLy8gV2Ugd2FudCB0byBzZWxlY3QgYSBub2RlIGlmIGl0IGlzIGN1cnJlbnRseSBvZmYgc2Ny
ZWVuLCBidXQgd2lsbCBiZQorICAgIC8vIGV4cG9zZWQgYWZ0ZXIgd2Ugc2Nyb2xsLiBBZGp1c3Qg
dGhlIHZpZXdwb3J0IHRvIHBvc3Qtc2Nyb2xsaW5nIHBvc2l0aW9uLgorICAgIC8vIElmIHRoZSBj
b250YWluZXIgaGFzIG92ZXJmbG93OmhpZGRlbiwgd2UgY2Fubm90IHNjcm9sbCwgc28gd2UgZG8g
bm90IHBhc3MgZGlyZWN0aW9uCisgICAgLy8gYW5kIHdlIGRvIG5vdCBhZGp1c3QgZm9yIHNjcm9s
bGluZy4KKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25M
ZWZ0OgorICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0WChjb250YWluZXJWaWV3cG9y
dFJlY3QueCgpIC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAgY29u
dGFpbmVyVmlld3BvcnRSZWN0LnNldFdpZHRoKGNvbnRhaW5lclZpZXdwb3J0UmVjdC53aWR0aCgp
ICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Qu
c2V0V2lkdGgoY29udGFpbmVyVmlld3BvcnRSZWN0LndpZHRoKCkgKyBTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
VXA6CisgICAgICAgIGNvbnRhaW5lclZpZXdwb3J0UmVjdC5zZXRZKGNvbnRhaW5lclZpZXdwb3J0
UmVjdC55KCkgLSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBjb250
YWluZXJWaWV3cG9ydFJlY3Quc2V0SGVpZ2h0KGNvbnRhaW5lclZpZXdwb3J0UmVjdC5oZWlnaHQo
KSArIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Qu
c2V0SGVpZ2h0KGNvbnRhaW5lclZpZXdwb3J0UmVjdC5oZWlnaHQoKSArIFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyID0gbm9kZS0+cmVuZGVy
ZXIoKTsKICAgICBpZiAoIXJlbmRlcikKQEAgLTQ0NywzNiArNTA0LDcyIEBAIGJvb2wgaGFzT2Zm
c2NyZWVuUmVjdChOb2RlKiBub2RlKQogICAgIHJldHVybiAhY29udGFpbmVyVmlld3BvcnRSZWN0
LmludGVyc2VjdHMocmVjdCk7CiB9CiAKLS8vIEluIGEgYm90dG9tLXVwIHdheSwgdGhpcyBtZXRo
b2QgdHJpZXMgdG8gc2Nyb2xsIHxmcmFtZXwgaW4gYSBnaXZlbiBkaXJlY3Rpb24KLS8vIHxkaXJl
Y3Rpb258LCBnb2luZyB1cCBpbiB0aGUgZnJhbWUgdHJlZSBoaWVyYXJjaHkgaW4gY2FzZSBpdCBk
b2VzIG5vdCBzdWNjZWVkLgotYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihGcmFtZSogZnJhbWUsIEZv
Y3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSkK
K2Jvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2N1c0RpcmVjdGlvbiBkaXJl
Y3Rpb24pCiB7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFT
U0VSVChmcmFtZSAmJiBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGZyYW1lLT5kb2N1
bWVudCgpKSk7CiAKLSAgICBTY3JvbGxEaXJlY3Rpb24gc2Nyb2xsRGlyZWN0aW9uOworICAgIGlm
IChmcmFtZSAmJiBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIGZyYW1lLT5kb2N1bWVu
dCgpKSkgeworICAgICAgICBpbnQgZHggPSAwOworICAgICAgICBpbnQgZHkgPSAwOworICAgICAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoK
KyAgICAgICAgICAgIGR4ID0gLSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAg
ICAgICAgZHggPSBTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICAgICAgZHkgPSAt
IFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgICAgIGR5ID0gU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsTGVm
dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgotICAgICAg
ICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxSaWdodDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblVwOgotICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxVcDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAgIHNj
cm9sbERpcmVjdGlvbiA9IFNjcm9sbERvd247Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnko
SW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KIAotICAgIGlmICghY2FuZGlkYXRlLmlzTnVsbCgpICYmIGlzU2Nyb2xsYWJs
ZUNvbnRhaW5lck5vZGUoY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3gpKQotICAgICAg
ICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3JvbGxSZWN1cnNpdmVseShzY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEJ5TGluZSwgY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9sbGFibGVCb3gp
OworYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbikKK3sKKyAgICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAg
ICAgICByZXR1cm4gc2Nyb2xsSW5EaXJlY3Rpb24oc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250
YWluZXIpLT5mcmFtZSgpLCBkaXJlY3Rpb24pOwogCi0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxCeUxpbmUp
OworICAgIGlmICghY29udGFpbmVyLT5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKGNvbnRhaW5lciAmJiBjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24s
IGNvbnRhaW5lcikpIHsKKyAgICAgICAgaW50IGR4ID0gMDsKKyAgICAgICAgaW50IGR5ID0gMDsK
KyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkxlZnQ6CisgICAgICAgICAgICBkeCA9IC0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgICAgICBB
U1NFUlQoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsV2lkdGgoKSA+IChjb250YWluZXIt
PnJlbmRlckJveCgpLT5zY3JvbGxMZWZ0KCkgKyBjb250YWluZXItPnJlbmRlckJveCgpLT5jbGll
bnRXaWR0aCgpKSk7CisgICAgICAgICAgICBkeCA9IG1pbihTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCksIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdpZHRoKCkgLSAoY29udGFp
bmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+
Y2xpZW50V2lkdGgoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25VcDoKKyAgICAgICAgICAgIGR5ID0gLSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgICAg
ICBBU1NFUlQoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVpZ2h0KCkgLSAoY29udGFp
bmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXItPnJlbmRlckJveCgpLT5j
bGllbnRIZWlnaHQoKSkpOworICAgICAgICAgICAgZHkgPSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxIZWlnaHQoKSAtIChj
b250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94
KCktPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5j
bG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShkeCwgZHkpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIHNjcm9sbEludG9W
aWV3KEVsZW1lbnQqIGVsZW1lbnQpCkBAIC01MzQsNyArNjI3LDcgQEAgc3RhdGljIGJvb2wgY2hl
Y2tOZWdhdGl2ZUNvb3Jkc0Zvck5vZGUoTgogICAgIHJldHVybiBjYW5CZVNjcm9sbGVkOwogfQog
Ci1ib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoTm9kZSogbm9kZSkKK2Jvb2wgaXNTY3Jv
bGxhYmxlQ29udGFpbmVyTm9kZShjb25zdCBOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTY3LDQgKzY2MCwyNjggQEAgYm9vbCBpc05vZGVE
ZWVwRGVzY2VuZGFudE9mRG9jdW1lbnQoTm9kZQogICAgIHJldHVybiBkZXNjZW5kYW50OwogfQog
CitOb2RlKiBzY3JvbGxhYmxlRW5jbG9zaW5nQm94T3JQYXJlbnRGcmFtZUZvck5vZGVJbkRpcmVj
dGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJU
KG5vZGUpOworICAgIE5vZGUqIHBhcmVudCA9IG5vZGU7CisgICAgZG8geworICAgICAgICBpZiAo
cGFyZW50LT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAgICAgcGFyZW50ID0gc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihwYXJlbnQpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5vd25lckVsZW1lbnQo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2Rl
KCk7CisgICAgfSB3aGlsZSAocGFyZW50ICYmICFjYW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rp
b24sIHBhcmVudCkgJiYgIXBhcmVudC0+aXNEb2N1bWVudE5vZGUoKSk7CisKKyAgICByZXR1cm4g
cGFyZW50OworfQorCitib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRp
cmVjdGlvbiwgY29uc3QgTm9kZSogY29udGFpbmVyKQoreworICAgIEFTU0VSVChjb250YWluZXIp
OworICAgIGlmIChjb250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBj
YW5TY3JvbGxJbkRpcmVjdGlvbihkaXJlY3Rpb24sIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50
Kj4oY29udGFpbmVyKS0+ZnJhbWUoKSk7CisKKyAgICBpZiAoIWlzU2Nyb2xsYWJsZUNvbnRhaW5l
ck5vZGUoY29udGFpbmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChk
aXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICAgICAgcmV0dXJu
IChjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9ISURERU4g
JiYgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpID4gMCk7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvblVwOgorICAgICAgICByZXR1cm4gKGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+b3ZlcmZsb3dZKCkgIT0gT0hJRERFTiAmJiBjb250YWluZXItPnJlbmRlckJveCgp
LT5zY3JvbGxUb3AoKSA+IDApOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAg
ICAgcmV0dXJuIChjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WCgpICE9
IE9ISURERU4gJiYgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFp
bmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94KCkt
PnNjcm9sbFdpZHRoKCkpOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICBy
ZXR1cm4gKGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dZKCkgIT0gT0hJ
RERFTiAmJiBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSArIGNvbnRhaW5lci0+
cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpIDwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Ny
b2xsSGVpZ2h0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIGNhblNjcm9sbEluRGly
ZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnJhbWUqIGZyYW1lKQorewor
ICAgIGlmICghZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFNjcm9s
bGJhck1vZGUgdmVydGljYWxNb2RlOworICAgIFNjcm9sbGJhck1vZGUgaG9yaXpvbnRhbE1vZGU7
CisgICAgZnJhbWUtPnZpZXcoKS0+Y2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNGb3JMYXlvdXQoaG9y
aXpvbnRhbE1vZGUsIHZlcnRpY2FsTW9kZSk7CisgICAgaWYgKChkaXJlY3Rpb24gPT0gRm9jdXNE
aXJlY3Rpb25MZWZ0IHx8IGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblJpZ2h0KSAmJiBTY3Jv
bGxiYXJBbHdheXNPZmYgPT0gaG9yaXpvbnRhbE1vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblVwIHx8IGRpcmVjdGlvbiA9PSBG
b2N1c0RpcmVjdGlvbkRvd24pICYmICBTY3JvbGxiYXJBbHdheXNPZmYgPT0gdmVydGljYWxNb2Rl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW50U2l6ZSBzaXplID0gZnJhbWUtPnZpZXco
KS0+Y29udGVudHNTaXplKCk7CisgICAgSW50U2l6ZSBvZmZzZXQgPSBmcmFtZS0+dmlldygpLT5z
Y3JvbGxPZmZzZXQoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBmcmFtZS0+dmlldygpLT52aXNpYmxl
Q29udGVudFJlY3QodHJ1ZSk7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4gb2Zmc2V0LndpZHRoKCkgPiAwOwor
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgcmV0dXJuIG9mZnNldC5oZWlnaHQo
KSA+IDA7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICByZXR1cm4gcmVj
dC53aWR0aCgpICsgb2Zmc2V0LndpZHRoKCkgPCBzaXplLndpZHRoKCk7CisgICAgY2FzZSBGb2N1
c0RpcmVjdGlvbkRvd246CisgICAgICAgIHJldHVybiByZWN0LmhlaWdodCgpICsgb2Zmc2V0Lmhl
aWdodCgpIDwgc2l6ZS5oZWlnaHQoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIElu
dFJlY3QgcmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyhGcmFtZSogaW5pdGlhbEZyYW1lLCBjb25z
dCBJbnRSZWN0JiBpbml0aWFsUmVjdCkKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBpbml0aWFsUmVj
dDsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGluaXRpYWxGcmFtZTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnJhbWUtPm93bmVyRWxlbWVudCgpKSkgeworICAgICAg
ICAgICAgZG8geworICAgICAgICAgICAgICAgIHJlY3QubW92ZShlbGVtZW50LT5vZmZzZXRMZWZ0
KCksIGVsZW1lbnQtPm9mZnNldFRvcCgpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKChlbGVtZW50
ID0gZWxlbWVudC0+b2Zmc2V0UGFyZW50KCkpKTsKKyAgICAgICAgICAgIHJlY3QubW92ZSgoLWZy
YW1lLT52aWV3KCktPnNjcm9sbE9mZnNldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHJlY3Q7Cit9CisKK0ludFJlY3Qgbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoTm9k
ZSogbm9kZSwgYm9vbCBpZ25vcmVCb3JkZXIpCit7CisgICAgQVNTRVJUKG5vZGUgJiYgbm9kZS0+
cmVuZGVyZXIoKSk7CisKKyAgICBpZiAobm9kZS0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAg
cmV0dXJuIGZyYW1lUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KG5vZGUpLT5mcmFtZSgpKTsKKyAgICBJbnRSZWN0IHJlY3QgPSByZWN0VG9BYnNvbHV0ZUNv
b3JkaW5hdGVzKG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCksIG5vZGUtPmdldFJlY3QoKSk7CisK
KyAgICAvLyBGb3IgYXV0aG9ycyB0aGF0IHVzZSBib3JkZXIgaW5zdGVhZCBvZiBvdXRsaW5lIGlu
IHRoZWlyIENTUywgd2UgY29tcGVuc2F0ZSBieSBpZ25vcmluZyB0aGUgYm9yZGVyIHdoZW4gY2Fs
Y3VsYXRpbmcKKyAgICAvLyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBlbGVtZW50LgorICAgIGlm
IChpZ25vcmVCb3JkZXIpIHsKKyAgICAgICAgcmVjdC5tb3ZlKG5vZGUtPnJlbmRlcmVyKCktPnN0
eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpLCBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3Jk
ZXJUb3BXaWR0aCgpKTsKKyAgICAgICAgcmVjdC5zZXRXaWR0aChyZWN0LndpZHRoKCkgLSBub2Rl
LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVy
KCktPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSk7CisgICAgICAgIHJlY3Quc2V0SGVpZ2h0
KHJlY3QuaGVpZ2h0KCkgLSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJUb3BXaWR0
aCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7Cisg
ICAgfQorICAgIHJldHVybiByZWN0OworfQorCitJbnRSZWN0IGZyYW1lUmVjdEluQWJzb2x1dGVD
b29yZGluYXRlcyhGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIHJlY3RUb0Fic29sdXRlQ29v
cmRpbmF0ZXMoZnJhbWUsIGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpKTsKK30K
KworLy8gVGhpcyBtZXRob2QgY2FsY3VsYXRlcyB0aGUgZXhpdFBvaW50IGZyb20gdGhlIHN0YXJ0
aW5nUmVjdCBhbmQgdGhlIGVudHJ5UG9pbnQgaW50byB0aGUgY2FuZGlkYXRlIHJlY3QuCisvLyBU
aGUgbGluZSBiZXR3ZWVuIHRob3NlIDIgcG9pbnRzIGlzIHRoZSBjbG9zZXN0IGRpc3RhbmNlIGJl
dHdlZW4gdGhlIDIgcmVjdHMuCit2b2lkIGVudHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihG
b2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgY29u
c3QgSW50UmVjdCYgcG90ZW50aWFsUmVjdCwgSW50UG9pbnQmIGV4aXRQb2ludCwgSW50UG9pbnQm
IGVudHJ5UG9pbnQpCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uTGVmdDoKKyAgICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LngoKSk7
CisgICAgICAgIGVudHJ5UG9pbnQuc2V0WChwb3RlbnRpYWxSZWN0LnJpZ2h0KCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIGV4aXRQb2ludC5z
ZXRZKHN0YXJ0aW5nUmVjdC55KCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFs
UmVjdC5ib3R0b20oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25S
aWdodDoKKyAgICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAg
ICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC54KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgZXhpdFBvaW50LnNldFkoc3Rh
cnRpbmdSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJl
Y3QueSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uTGVmdDoKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAg
ICAgIGlmIChiZWxvdyhzdGFydGluZ1JlY3QsIHBvdGVudGlhbFJlY3QpKSB7CisgICAgICAgICAg
ICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKKyAgICAgICAgICAgIGVudHJ5UG9p
bnQuc2V0WShwb3RlbnRpYWxSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChiZWxv
dyhwb3RlbnRpYWxSZWN0LCBzdGFydGluZ1JlY3QpKSB7CisgICAgICAgICAgICBleGl0UG9pbnQu
c2V0WShzdGFydGluZ1JlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRZ
KHBvdGVudGlhbFJlY3QueSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4aXRQ
b2ludC5zZXRZKG1heChzdGFydGluZ1JlY3QueSgpLCBwb3RlbnRpYWxSZWN0LnkoKSkpOworICAg
ICAgICAgICAgZW50cnlQb2ludC5zZXRZKGV4aXRQb2ludC55KCkpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uRG93bjoKKyAgICAgICAgaWYgKHJpZ2h0T2Yoc3RhcnRpbmdSZWN0LCBwb3RlbnRpYWxS
ZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LngoKSk7Cisg
ICAgICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5yaWdodCgpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChyaWdodE9mKHBvdGVudGlhbFJlY3QsIHN0YXJ0aW5nUmVjdCkpIHsKKyAg
ICAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAg
ICAgIGVudHJ5UG9pbnQuc2V0WChwb3RlbnRpYWxSZWN0LngoKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WChtYXgoc3RhcnRpbmdSZWN0LngoKSwgcG90ZW50
aWFsUmVjdC54KCkpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WChleGl0UG9pbnQueCgp
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgZGlzdGFuY2VEYXRhRm9yTm9kZShG
b2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlJiBjdXJyZW50LCBGb2N1c0Nh
bmRpZGF0ZSYgY2FuZGlkYXRlKQoreworICAgIGlmIChjYW5kaWRhdGUuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIWNhbmRpZGF0ZS5ub2RlLT5yZW5kZXJlcigpKQorICAgICAg
ICByZXR1cm47CisgICAgSW50UmVjdCBub2RlUmVjdCA9IGNhbmRpZGF0ZS5yZWN0OworICAgIElu
dFJlY3QgY3VycmVudFJlY3QgPSBjdXJyZW50LnJlY3Q7CisgICAgZGVmbGF0ZUlmT3ZlcmxhcHBl
ZChjdXJyZW50UmVjdCwgbm9kZVJlY3QpOworCisgICAgaWYgKCFpc1JlY3RJbkRpcmVjdGlvbihk
aXJlY3Rpb24sIGN1cnJlbnRSZWN0LCBub2RlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEludFBvaW50IGV4aXRQb2ludDsKKyAgICBJbnRQb2ludCBlbnRyeVBvaW50OworICAgIGludCBz
YW1lQXhpc0Rpc3RhbmNlID0gMDsKKyAgICBpbnQgb3RoZXJBeGlzRGlzdGFuY2UgPSAwOworICAg
IGVudHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihkaXJlY3Rpb24sIGN1cnJlbnRSZWN0LCBu
b2RlUmVjdCwgZXhpdFBvaW50LCBlbnRyeVBvaW50KTsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9u
KSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIHNhbWVBeGlzRGlzdGFu
Y2UgPSBleGl0UG9pbnQueCgpIC0gZW50cnlQb2ludC54KCk7CisgICAgICAgIG90aGVyQXhpc0Rp
c3RhbmNlID0gYWJzKGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgc2FtZUF4aXNEaXN0YW5j
ZSA9IGV4aXRQb2ludC55KCkgLSBlbnRyeVBvaW50LnkoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlz
dGFuY2UgPSBhYnMoZXhpdFBvaW50LngoKSAtIGVudHJ5UG9pbnQueCgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBzYW1lQXhpc0Rpc3Rh
bmNlID0gZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpOworICAgICAgICBvdGhlckF4aXNE
aXN0YW5jZSA9IGFicyhlbnRyeVBvaW50LnkoKSAtIGV4aXRQb2ludC55KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgc2FtZUF4aXNEaXN0
YW5jZSA9IGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKTsKKyAgICAgICAgb3RoZXJBeGlz
RGlzdGFuY2UgPSBhYnMoZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQueCgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgeCA9IChlbnRyeVBvaW50LngoKSAtIGV4aXRQ
b2ludC54KCkpICogKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSk7CisgICAgaW50IHkg
PSAoZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpKSAqIChlbnRyeVBvaW50LnkoKSAtIGV4
aXRQb2ludC55KCkpOworCisgICAgZmxvYXQgZXVjbGlkaWFuRGlzdGFuY2UgPSBzcXJ0KCh4ICsg
eSkgKiAxLjBmKTsKKworICAgIC8vIExvb3NlbHkgYmFzZWQgb24gaHR0cDovL3d3dy53My5vcmcv
VFIvV0lDRC8jZm9jdXMtaGFuZGxpbmcKKyAgICAvLyBkZiA9IGRvdERpc3QgKyBkeCArIGR5ICsg
MiAqICh4ZGlzcGxhY2VtZW50ICsgeWRpc3BsYWNlbWVudCkgLSBzcXJ0KE92ZXJsYXApCisKKyAg
ICBmbG9hdCBkaXN0YW5jZSA9IGV1Y2xpZGlhbkRpc3RhbmNlICsgc2FtZUF4aXNEaXN0YW5jZSAr
IDIgKiBvdGhlckF4aXNEaXN0YW5jZTsKKyAgICBjYW5kaWRhdGUuZGlzdGFuY2UgPSByb3VuZGYo
ZGlzdGFuY2UpOworICAgIEludFNpemUgdmlld1NpemUgPSBjYW5kaWRhdGUubm9kZS0+ZG9jdW1l
bnQoKS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5z
aXplKCk7CisgICAgY2FuZGlkYXRlLmFsaWdubWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVj
dGlvbiwgY3VycmVudFJlY3QsIG5vZGVSZWN0LCB2aWV3U2l6ZSk7Cit9CisKK2Jvb2wgY2FuQmVT
Y3JvbGxlZEludG9WaWV3KEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9jdXNDYW5kaWRhdGUm
IGNhbmRpZGF0ZSkKK3sKKyAgICBBU1NFUlQoY2FuZGlkYXRlLm5vZGUgJiYgaGFzT2Zmc2NyZWVu
UmVjdChjYW5kaWRhdGUubm9kZSkpOworICAgIEludFJlY3QgY2FuZGlkYXRlUmVjdCA9IGNhbmRp
ZGF0ZS5yZWN0OworICAgIGZvciAoTm9kZSogcGFyZW50Tm9kZSA9IGNhbmRpZGF0ZS5ub2RlLT5w
YXJlbnQoKTsgcGFyZW50Tm9kZTsgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUtPnBhcmVudCgpKSB7
CisgICAgICAgIEludFJlY3QgcGFyZW50UmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5h
dGVzKHBhcmVudE5vZGUpOworICAgICAgICBpZiAoIWNhbmRpZGF0ZVJlY3QuaW50ZXJzZWN0cyhw
YXJlbnRSZWN0KSkgeworICAgICAgICAgICAgaWYgKCgoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0
aW9uTGVmdCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25SaWdodCkgJiYgcGFyZW50Tm9k
ZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT0hJRERFTikKKyAgICAgICAg
ICAgICAgICB8fCAoKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvblVwIHx8IGRpcmVjdGlvbiA9
PSBGb2N1c0RpcmVjdGlvbkRvd24pICYmIHBhcmVudE5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkt
Pm92ZXJmbG93WSgpID09IE9ISURERU4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocGFyZW50Tm9kZSA9PSBjYW5kaWRhdGUuZW5jbG9zaW5n
U2Nyb2xsYWJsZUJveCkKKyAgICAgICAgICAgIHJldHVybiBjYW5TY3JvbGxJbkRpcmVjdGlvbihk
aXJlY3Rpb24sIHBhcmVudE5vZGUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
VGhlIHN0YXJ0aW5nIHJlY3QgaXMgdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgbm9kZSwgaW4gZG9j
dW1lbnQgY29vcmRpbmF0ZXMuCisvLyBDb21wb3NlIGEgdmlydHVhbCBzdGFydGluZyByZWN0IGlm
IHRoZXJlIGlzIG5vIGZvY3VzZWQgbm9kZSBvciBpZiBpdCBpcyBvZmYgc2NyZWVuLgorLy8gVGhl
IHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIG9yIGZyYW1lLiBXZSBz
ZWxlY3Qgd2hpY2gKKy8vIGVkZ2UgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG5h
dmlnYXRpb24uCitJbnRSZWN0IHZpcnR1YWxTdGFydGluZ1JlY3RGb3JEaXJlY3Rpb24oRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QpCit7CisgICAg
SW50UmVjdCB2aXJ0dWFsU3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0OworICAgIHN3aXRjaCAo
ZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIHZpcnR1
YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFsU3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAgICAg
ICB2aXJ0dWFsU3RhcnRpbmdSZWN0LnNldFdpZHRoKDApOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WSh2
aXJ0dWFsU3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVj
dC5zZXRIZWlnaHQoMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25S
aWdodDoKKyAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVjdC5zZXRXaWR0aCgwKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHZpcnR1YWxTdGFy
dGluZ1JlY3Quc2V0SGVpZ2h0KDApOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdmlydHVhbFN0
YXJ0aW5nUmVjdDsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU3Bh
dGlhbE5hdmlnYXRpb24uaAkocmV2aXNpb24gNzIzODQpCisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlh
bE5hdmlnYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBT
cGF0aWFsTmF2aWdhdGlvbl9oCiAKICNpbmNsdWRlICJGb2N1c0RpcmVjdGlvbi5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKICNpbmNsdWRlIDxsaW1pdHM+CkBA
IC0xMDcsMTYgKzEwOCw3IEBAIHN0cnVjdCBGb2N1c0NhbmRpZGF0ZSB7CiAgICAgewogICAgIH0K
IAotICAgIEZvY3VzQ2FuZGlkYXRlKE5vZGUqIG4pCi0gICAgICAgIDogbm9kZShuKQotICAgICAg
ICAsIGVuY2xvc2luZ1Njcm9sbGFibGVCb3goMCkKLSAgICAgICAgLCBkaXN0YW5jZShtYXhEaXN0
YW5jZSgpKQotICAgICAgICAsIHBhcmVudERpc3RhbmNlKG1heERpc3RhbmNlKCkpCi0gICAgICAg
ICwgYWxpZ25tZW50KE5vbmUpCi0gICAgICAgICwgcGFyZW50QWxpZ25tZW50KE5vbmUpCi0gICAg
ewotICAgIH0KLQorICAgIEZvY3VzQ2FuZGlkYXRlKE5vZGUqIG4pOwogICAgIGJvb2wgaXNOdWxs
KCkgY29uc3QgeyByZXR1cm4gIW5vZGU7IH0KICAgICBib29sIGluU2Nyb2xsYWJsZUNvbnRhaW5l
cigpIGNvbnN0IHsgcmV0dXJuIG5vZGUgJiYgZW5jbG9zaW5nU2Nyb2xsYWJsZUJveDsgfQogICAg
IERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG5vZGUgPyBub2RlLT5kb2N1bWVu
dCgpIDogMDsgfQpAQCAtMTI3LDE2ICsxMTksMjUgQEAgc3RydWN0IEZvY3VzQ2FuZGlkYXRlIHsK
ICAgICBsb25nIGxvbmcgcGFyZW50RGlzdGFuY2U7CiAgICAgUmVjdHNBbGlnbm1lbnQgYWxpZ25t
ZW50OwogICAgIFJlY3RzQWxpZ25tZW50IHBhcmVudEFsaWdubWVudDsKKyAgICBJbnRSZWN0IHJl
Y3Q7CiB9OwogCiB2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uLCBOb2RlKiBzdGFydCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSk7Ci1ib29sIHNjcm9s
bEluRGlyZWN0aW9uKEZyYW1lKiwgRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2FuZGlkYXRl
JiBjYW5kaWRhdGUgPSBGb2N1c0NhbmRpZGF0ZSgpKTsKK2Jvb2wgc2Nyb2xsSW5EaXJlY3Rpb24o
RnJhbWUqLCBGb2N1c0RpcmVjdGlvbik7Citib29sIHNjcm9sbEluRGlyZWN0aW9uKE5vZGUqIGNv
bnRhaW5lciwgRm9jdXNEaXJlY3Rpb24pOwogdm9pZCBzY3JvbGxJbnRvVmlldyhFbGVtZW50Kik7
Ci1ib29sIGhhc09mZnNjcmVlblJlY3QoTm9kZSopOworYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5v
ZGUqLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBGb2N1c0RpcmVjdGlvbk5vbmUpOwogYm9v
bCBpc0luUm9vdERvY3VtZW50KE5vZGUqKTsKLWJvb2wgaXNTY3JvbGxhYmxlQ29udGFpbmVyTm9k
ZShOb2RlKik7Citib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoY29uc3QgTm9kZSopOwog
Ym9vbCBpc05vZGVEZWVwRGVzY2VuZGFudE9mRG9jdW1lbnQoTm9kZSosIERvY3VtZW50Kik7Ci0K
K05vZGUqIHNjcm9sbGFibGVFbmNsb3NpbmdCb3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0
aW9uKEZvY3VzRGlyZWN0aW9uLCBOb2RlKiBub2RlKTsKK2Jvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rp
b24oRm9jdXNEaXJlY3Rpb24sIGNvbnN0IE5vZGUqIGNvbnRhaW5lcik7Citib29sIGNhblNjcm9s
bEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGcmFtZSopOworSW50UmVjdCBub2Rl
UmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhOb2RlKiwgYm9vbCBpZ25vcmVCb3JkZXIgPSBmYWxz
ZSk7CitJbnRSZWN0IGZyYW1lUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhGcmFtZSopOwordm9p
ZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uLCBGb2N1c0NhbmRpZGF0ZSYgY3Vy
cmVudCwgRm9jdXNDYW5kaWRhdGUmIGNhbmRpZGF0ZSk7Citib29sIGNhbkJlU2Nyb2xsZWRJbnRv
VmlldyhGb2N1c0RpcmVjdGlvbiwgRm9jdXNDYW5kaWRhdGUmKTsKK0ludFJlY3QgdmlydHVhbFN0
YXJ0aW5nUmVjdEZvckRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3Rh
cnRpbmdSZWN0KTsKIH0gLy8gbmFtc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU3BhdGlhbE5h
dmlnYXRpb25faAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74526</attachid>
            <date>2010-11-21 19:49:33 -0800</date>
            <delta_ts>2010-11-21 21:28:51 -0800</delta_ts>
            <desc>Patch - code only</desc>
            <filename>49382_code.patch</filename>
            <type>text/plain</type>
            <size>39907</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjQxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMTEtMTkgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPiwgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGF0aWFsIE5hdmlnYXRpb246IGlz
c3VlcyB3aXRoIHRoZSBub2RlIHNlbGVjdGlvbiBhbGdvcml0aG0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM4MgorCisgICAgICAgIE1vZGlmeSB0
aGUgU3BhdGlhbCBOYXZpZ2F0aW9uIGFsZ29yaXRobSwgdG8gYmV0dGVyIGhhbmRsZSBpbml0aWFs
IGZvY3VzIGFuZAorICAgICAgICBuYXZpZ2F0aW9uIGJldHdlZW4gZnJhbWVzLgorICAgICAgICBU
aGUgbmV3IGFsZ29yaXRobSB0YWtlcyB0aGUgcmVjdCBvZiB0aGUgZm9jdXNlZCBub2RlIGFzIHRo
ZSBzdGFydGluZ1JlY3QsCisgICAgICAgIGluc3RlYWQgb2YgdGhlIG5vZGUgaXRzZWxmLiBUaGF0
IGFsbG93cyB1cyB0byBjb25zdHJ1Y3QgYSB2aXJ0dWFsIHJlY3QgaWYKKyAgICAgICAgdGhlcmUg
aXMgbm8gZm9jdXNlZCBub2RlLCBvciBpZiBpdCBpcyBvZmYgdGhlIHNjcmVlbi4KKyAgICAgICAg
VGhlIHZpcnR1YWwgcmVjdCBpcyB0aGUgZWRnZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBkaXJl
Y3Rpb24gb2YgdGhlIG5hdmlnYXRpb24uCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBzY3Jv
bGxhYmxlIGNvbnRhaW5lcnMgYW5kIGZyYW1lcyB3aWxsIHNjcm9sbCByZWdhcmRsZXNzIG9mIHdl
YXRoZXIKKyAgICAgICAgdGhleSBoYXZlIGZvY3VzYWJsZSBjb250ZW50LiBVc2VycyB3aWxsIGJl
IGFibGUgdG8gdXNlIGFycm93IGtleXMgdG8gdmlldyBhbGwgdGhlCisgICAgICAgIGNvbnRlbnQg
b2Ygc3VjaCBhIGNvbnRhaW5lci4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGlmIHRoZSBjb250YWlu
ZXIgaGFzIHN0eWxlIG92ZXJmbG93OmhpZGRlbi4gCisgICAgICAgIFdlIHdpbGwgbm90IHNjcm9s
bCBpbiB0aGF0IGNhc2UuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB3ZSBoYW5kbGUgei1p
bmRleCBhbmQgcG9zaXRpb25pbmcgc28gdGhhdCBpZiB0aGVyZSBhcmUgMiBvdmVybGFwcGluZyBm
b2N1c2FibGUgbm9kZXMsCisgICAgICAgIHdlIGRvIGEgaGl0IHRlc3QgYW5kIG9ubHkgdGhlIG5v
ZGUgb24gdG9wIGNhbiBnZXQgZm9jdXMuCisKKyAgICAgICAgaGFzT2ZmU2NyZWVuUmVjdCgpIHdh
cyBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBjaGVjayBpZiBhIG5vZGUgd2lsbCBiZSBvZmYtc2Ny
ZWVuIGV2ZW4gYWZ0ZXIgd2Ugc2Nyb2xsZWQKKyAgICAgICAgaXRzIHBhcmVudCBjb250YWluZXIu
IFdlIGRvIG5vdCBhZGQgdGhlIHNjcm9sbGluZyBjb25kaXRpb25zIGZvciBjb250YWluZXJzIHRo
YXQgaGF2ZSBvdmVyZmxvdzpoaWRkZW4KKyAgICAgICAgYW5kIGNhbm5vdCBzY3JvbGwuCisKKyAg
ICAgICAgY2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNGb3JMYXlvdXQgaXMgdXNlZCB0byBkZWNpZGUg
aWYgYSBmcmFtZSBjYW4gc2Nyb2xsIG9yIG5vdC4gV2UgY2Fubm90IHJlbHkgb24KKyAgICAgICAg
dGhlIGV4c2lzdGFuY2Ugb2YgdGhlIHNjcm9sbGJhciwgYmVjYXVzZSBpdCBjb3VsZCBiZSByZW1v
dmVkIHZpYSB0aGUgQVBJLCB3aGlsZSB0aGUgZnJhbWUgaXMgc3RpbGwKKyAgICAgICAgYWxsb3dl
ZCB0byBzY3JvbGwuCisKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpuYXZpZ2F0ZUluQ29udGFpbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzRGlyZWN0aW9u
YWxseSk6CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9jdXNDYW5kaWRhdGU6OkZvY3VzQ2FuZGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmRpc3RhbmNlRGF0YUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWxpZ25t
ZW50Rm9yUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6YXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3Jl
ZW5BcGFydCk6CisgICAgICAgIChXZWJDb3JlOjppc1JlY3RJbkRpcmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpoYXNPZmZzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbElu
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVG
b3JOb2RlSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2FuU2Nyb2xsSW5EaXJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6cmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW50cnlBbmRFeGl0UG9pbnRzRm9yRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bkJlU2Nyb2xsZWRJbnRvVmlldyk6CisgICAgICAgIChXZWJDb3JlOjp2aXJ0dWFsU3RhcnRpbmdS
ZWN0Rm9yRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmg6CisK
IDIwMTAtMTEtMTkgIEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiA3MjM4NCkKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTMgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIK
ICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC01Nyw2ICs1OSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCitzdGF0aWMgdm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0Nh
bmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCk7CiBzdGF0aWMgaW5s
aW5lIHZvaWQgZGlzcGF0Y2hFdmVudHNPbldpbmRvd0FuZEZvY3VzZWROb2RlKERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBmb2N1c2VkKQogewogICAgIC8vIElmIHdlIGhhdmUgYSBmb2N1c2VkIG5v
ZGUgd2Ugc2hvdWxkIGRpc3BhdGNoIGJsdXIgb24gaXQgYmVmb3JlIHdlIGJsdXIgdGhlIHdpbmRv
dy4KQEAgLTI4OSw2NCArMjkyLDYgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1
c0luRG9jdQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2
YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQotewotICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRPck1haW5GcmFtZSgp
OwotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgRG9jdW1lbnQqIGZvY3VzZWREb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZm9jdXNlZERvY3VtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWREb2N1bWVudC0+Zm9j
dXNlZE5vZGUoKTsKLSAgICBpZiAoIWZvY3VzZWROb2RlKSB7Ci0gICAgICAgIC8vIEp1c3QgbW92
ZSB0byB0aGUgZmlyc3QgZm9jdXNhYmxlIG5vZGUuCi0gICAgICAgIEZvY3VzRGlyZWN0aW9uIHRh
YkRpcmVjdGlvbiA9IChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24g
PT0gRm9jdXNEaXJlY3Rpb25MZWZ0KSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGb2N1c0RpcmVjdGlvbkJhY2t3YXJkIDogRm9jdXNEaXJlY3Rpb25Gb3J3YXJkOwot
ICAgICAgICAvLyAnaW5pdGlhbEZvY3VzJyBpcyBzZXQgdG8gdHJ1ZSBzbyB0aGUgY2hyb21lIGlz
IG5vdCBmb2N1c2VkLgotICAgICAgICByZXR1cm4gYWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVy
KHRhYkRpcmVjdGlvbiwgZXZlbnQsIHRydWUpOwotICAgIH0KLQotICAgIC8vIE1vdmUgdXAgaW4g
dGhlIGNoYWluIG9mIG5lc3RlZCBmcmFtZXMuCi0gICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
b3AoKTsKLQotICAgIEZvY3VzQ2FuZGlkYXRlIGZvY3VzQ2FuZGlkYXRlOwotICAgIGZpbmRGb2N1
c2FibGVOb2RlSW5EaXJlY3Rpb24oZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0Q2hpbGQoKSwgZm9j
dXNlZE5vZGUsIGRpcmVjdGlvbiwgZXZlbnQsIGZvY3VzQ2FuZGlkYXRlKTsKLQotICAgIE5vZGUq
IG5vZGUgPSBmb2N1c0NhbmRpZGF0ZS5ub2RlOwotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNF
bGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBNYXkgbmVlZCBhIHdheSB0byBmb2N1
cyBhIGRvY3VtZW50IGhlcmUuCi0gICAgICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgICAgICBzY3JvbGxJbkRpcmVjdGlvbihmcmFtZSwgZGlyZWN0aW9uKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGNy
YXp5IGp1bXAgYmV0d2VlbiBsaW5rcyB0aGF0IGFyZSBlaXRoZXIgZmFyIGF3YXkgZnJvbSBlYWNo
IG90aGVyLAotICAgIC8vIG9yIGp1c3Qgbm90IGN1cnJlbnRseSB2aXNpYmxlLCBsZXRzIGRvIGEg
c2Nyb2xsIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gYW5kIGJhaWwgb3V0Ci0gICAgLy8gaWYgfG5v
ZGV8IGVsZW1lbnQgaXMgbm90IGluIHRoZSB2aWV3cG9ydC4KLSAgICBpZiAoaGFzT2Zmc2NyZWVu
UmVjdChub2RlKSkgewotICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT52
aWV3KCktPmZyYW1lKCk7Ci0gICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGZyYW1lLCBkaXJlY3Rp
b24sIGZvY3VzQ2FuZGlkYXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
RG9jdW1lbnQqIG5ld0RvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKLQotICAgIGlmIChuZXdE
b2N1bWVudCAhPSBmb2N1c2VkRG9jdW1lbnQpIHsKLSAgICAgICAgLy8gRm9jdXMgaXMgZ29pbmcg
YXdheSBmcm9tIHRoZSBvcmlnaW5hbGx5IGZvY3VzZWQgZG9jdW1lbnQsIHNvIGNsZWFyIHRoZSBm
b2N1c2VkIG5vZGUuCi0gICAgICAgIGZvY3VzZWREb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUoMCk7
Ci0gICAgfQotCi0gICAgaWYgKG5ld0RvY3VtZW50KQotICAgICAgICBzZXRGb2N1c2VkRnJhbWUo
bmV3RG9jdW1lbnQtPmZyYW1lKCkpOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KLSAgICBzY3JvbGxJ
bnRvVmlldyhlbGVtZW50KTsKLSAgICBlbGVtZW50LT5mb2N1cyhmYWxzZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIHVwZGF0ZUZvY3VzQ2FuZGlkYXRlSW5TYW1lQ29udGFp
bmVyKGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIEZvY3VzQ2FuZGlkYXRlJiBjbG9z
ZXN0KQogewogICAgIGlmIChjbG9zZXN0LmlzTnVsbCgpKSB7CkBAIC02NTgsNCArNjAzLDE4MCBA
QCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0QWN0aXZlKGJvb2wgYWN0CiAgICAgICAgIGRpc3Bh
dGNoRXZlbnRzT25XaW5kb3dBbmRGb2N1c2VkTm9kZShtX2ZvY3VzZWRGcmFtZS0+ZG9jdW1lbnQo
KSwgYWN0aXZlKTsKIH0KIAordm9pZCB1cGRhdGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0LCBGb2N1c0Nh
bmRpZGF0ZSYgY2FuZGlkYXRlLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCkKK3sKKyAgICBpZiAo
IWNhbmRpZGF0ZS5ub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgIWNhbmRpZGF0ZS5ub2RlLT5yZW5k
ZXJlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZ25vcmUgaWZyYW1lcyB0aGF0IGRv
bid0IGhhdmUgYSBzcmMgYXR0cmlidXRlCisgICAgaWYgKGNhbmRpZGF0ZS5ub2RlLT5pc0ZyYW1l
T3duZXJFbGVtZW50KCkgJiYgIXN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGNh
bmRpZGF0ZS5ub2RlKS0+Y29udGVudEZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IElnbm9yZSBvZmYgc2NyZWVuIGNoaWxkIG5vZGVzIG9mIGNvbnRhaW5lcnMgdGhhdCBkbyBub3Qg
c2Nyb2xsIChvdmVyZmxvdzpoaWRkZW4pCisgICAgaWYgKGhhc09mZnNjcmVlblJlY3QoY2FuZGlk
YXRlLm5vZGUpICYmICFjYW5CZVNjcm9sbGVkSW50b1ZpZXcoZGlyZWN0aW9uLCBjYW5kaWRhdGUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBGb2N1c0NhbmRpZGF0ZSBjdXJyZW50OworICAgIGN1
cnJlbnQucmVjdCA9IHN0YXJ0aW5nUmVjdDsKKyAgICBkaXN0YW5jZURhdGFGb3JOb2RlKGRpcmVj
dGlvbiwgY3VycmVudCwgY2FuZGlkYXRlKTsKKyAgICBpZiAoY2FuZGlkYXRlLmRpc3RhbmNlID09
IG1heERpc3RhbmNlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNPZmZzY3JlZW5S
ZWN0KGNhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24pICYmIGNhbmRpZGF0ZS5hbGlnbm1lbnQgPCBG
dWxsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2xvc2VzdC5pc051bGwoKSkgeworICAg
ICAgICBjbG9zZXN0ID0gY2FuZGlkYXRlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
SW50UmVjdCBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKG5vZGVSZWN0SW5BYnNvbHV0
ZUNvb3JkaW5hdGVzKGNhbmRpZGF0ZS5ub2RlLCB0cnVlKSwgbm9kZVJlY3RJbkFic29sdXRlQ29v
cmRpbmF0ZXMoY2xvc2VzdC5ub2RlLCB0cnVlKSk7CisgICAgaWYgKCFpbnRlcnNlY3Rpb25SZWN0
LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJZiAyIG5vZGVzIGFyZSBpbnRlcnNlY3RpbmcsIGRv
IGhpdCB0ZXN0IHRvIGZpbmQgd2hpY2ggbm9kZSBpbiBvbiB0b3AuCisgICAgICAgIGludCB4ID0g
aW50ZXJzZWN0aW9uUmVjdC54KCkgKyBpbnRlcnNlY3Rpb25SZWN0LndpZHRoKCkgLyAyOworICAg
ICAgICBpbnQgeSA9IGludGVyc2VjdGlvblJlY3QueSgpICsgaW50ZXJzZWN0aW9uUmVjdC5oZWln
aHQoKSAvIDI7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gY2FuZGlkYXRlLm5vZGUt
PmRvY3VtZW50KCktPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0
UmVzdWx0QXRQb2ludChJbnRQb2ludCh4LCB5KSwgZmFsc2UsIHRydWUpOworICAgICAgICBpZiAo
Y2FuZGlkYXRlLm5vZGUtPmNvbnRhaW5zKHJlc3VsdC5pbm5lck5vZGUoKSkpIHsKKyAgICAgICAg
ICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGNsb3Nlc3Qubm9kZS0+Y29udGFpbnMocmVzdWx0LmlubmVyTm9kZSgpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY2FuZGlkYXRlLmFsaWdubWVu
dCA9PSBjbG9zZXN0LmFsaWdubWVudCkgeworICAgICAgICBpZiAoY2FuZGlkYXRlLmRpc3RhbmNl
IDwgY2xvc2VzdC5kaXN0YW5jZSkKKyAgICAgICAgICAgIGNsb3Nlc3QgPSBjYW5kaWRhdGU7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY2FuZGlkYXRlLmFsaWdubWVudCA+IGNs
b3Nlc3QuYWxpZ25tZW50KQorICAgICAgICBjbG9zZXN0ID0gY2FuZGlkYXRlOworfQorCit2b2lk
IEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIoTm9kZSogY29u
dGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uIGRpcmVj
dGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQsIEZvY3VzQ2FuZGlkYXRlJiBjbG9zZXN0KQorewor
ICAgIEFTU0VSVChjb250YWluZXIpOworICAgIE5vZGUqIGZvY3VzZWROb2RlID0gKGZvY3VzZWRG
cmFtZSgpICYmIGZvY3VzZWRGcmFtZSgpLT5kb2N1bWVudCgpKSA/IGZvY3VzZWRGcmFtZSgpLT5k
b2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpIDogMDsKKworICAgIE5vZGUqIG5vZGUgPSBjb250YWlu
ZXItPmZpcnN0Q2hpbGQoKTsKKyAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IChub2RlLT5pc0ZyYW1l
T3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBub2RlKSkg
PyBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnRhaW5lcikgOiBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKGNvbnRhaW5lcikpIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gZm9jdXNlZE5vZGUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIShub2RlLT5pc0tleWJvYXJkRm9j
dXNhYmxlKGV2ZW50KSB8fCBub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xs
SW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBub2RlKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBGb2N1c0NhbmRpZGF0ZSBjYW5kaWRhdGUobm9kZSk7CisgICAgICAgIGNhbmRpZGF0
ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94ID0gY29udGFpbmVyOworICAgICAgICB1cGRhdGVGb2N1
c0NhbmRpZGF0ZUlmTmVlZGVkKGRpcmVjdGlvbiwgc3RhcnRpbmdSZWN0LCBjYW5kaWRhdGUsIGNs
b3Nlc3QpOworICAgIH0KK30KKworYm9vbCBGb2N1c0NvbnRyb2xsZXI6Om5hdmlnYXRlSW5Db250
YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFj
b250YWluZXIgfHwgIWNvbnRhaW5lci0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgSW50UmVjdCBuZXdTdGFydGluZ1JlY3QgPSBzdGFydGluZ1JlY3Q7CisKKyAgICBp
ZiAoc3RhcnRpbmdSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgbmV3U3RhcnRpbmdSZWN0ID0gdmly
dHVhbFN0YXJ0aW5nUmVjdEZvckRpcmVjdGlvbihkaXJlY3Rpb24sIG5vZGVSZWN0SW5BYnNvbHV0
ZUNvb3JkaW5hdGVzKGNvbnRhaW5lcikpOworCisgICAgLy8gRmluZCB0aGUgY2xvc2VzdCBub2Rl
IHdpdGhpbiBjdXJyZW50IGNvbnRhaW5lciBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0
aW9uLgorICAgIEZvY3VzQ2FuZGlkYXRlIGZvY3VzQ2FuZGlkYXRlOworICAgIGZpbmRGb2N1c0Nh
bmRpZGF0ZUluQ29udGFpbmVyKGNvbnRhaW5lciwgbmV3U3RhcnRpbmdSZWN0LCBkaXJlY3Rpb24s
IGV2ZW50LCBmb2N1c0NhbmRpZGF0ZSk7CisKKyAgICBpZiAoZm9jdXNDYW5kaWRhdGUuaXNOdWxs
KCkpIHsKKyAgICAgICAgaWYgKGNhblNjcm9sbEluRGlyZWN0aW9uKGRpcmVjdGlvbiwgY29udGFp
bmVyKSkgeworICAgICAgICAgICAgLy8gTm90aGluZyB0byBmb2N1cywgc2Nyb2xsIGlmIHBvc3Np
YmxlLgorICAgICAgICAgICAgc2Nyb2xsSW5EaXJlY3Rpb24oY29udGFpbmVyLCBkaXJlY3Rpb24p
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmV0dXJu
IGZhbHNlIHdpbGwgY2F1c2UgYSByZS10cnksIHNraXBwaW5nIHRoaXMgY29udGFpbmVyLgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChmb2N1c0NhbmRpZGF0ZS5ub2RlLT5p
c0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBm
cmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihmb2N1c0Nh
bmRpZGF0ZS5ub2RlKTsKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpZnJhbWUgd2l0aG91dCB0
aGUgc3JjIGF0dHJpYnV0ZSwgaXQgd2lsbCBub3QgaGF2ZSBhIGNvbnRlbnRGcmFtZSgpLgorICAg
ICAgICAvLyBXZSBBU1NFUlQgaGVyZSB0byBtYWtlIHN1cmUgdGhhdAorICAgICAgICAvLyB1cGRh
dGVGb2N1c0NhbmRpZGF0ZUlmTmVlZGVkKCkgd2lsbCBuZXZlciBjb25zaWRlciBzdWNoIGFuIGlm
cmFtZSBhcyBhIGNhbmRpZGF0ZS4KKyAgICAgICAgQVNTRVJUKGZyYW1lRWxlbWVudC0+Y29udGVu
dEZyYW1lKCkpOworCisgICAgICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0KGZvY3VzQ2FuZGlkYXRl
Lm5vZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgICAgIHNjcm9sbEluRGlyZWN0aW9uKGZvY3Vz
Q2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCksIGRpcmVjdGlvbik7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBOYXZpZ2F0ZSBpbnRvIGEgbmV3IGZyYW1l
LgorICAgICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIE5vZGUqIGZvY3VzZWROb2RlID0gZm9j
dXNlZE9yTWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CisgICAgICAgIGlm
IChmb2N1c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpCisgICAgICAg
ICAgICByZWN0ID0gbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNlZE5vZGUsIHRy
dWUgLyogaWdub3JlIGJvcmRlciAqLyk7CisgICAgICAgIGZyYW1lRWxlbWVudC0+Y29udGVudEZy
YW1lKCktPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OworICAgICAgICBpZiAoIW5hdmlnYXRlSW5Db250YWluZXIoZnJhbWVFbGVtZW50LT5jb250ZW50
RnJhbWUoKS0+ZG9jdW1lbnQoKSwgcmVjdCwgZGlyZWN0aW9uLCBldmVudCkpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBuZXcgZnJhbWUgaGFkIG5vdGhpbmcgaW50ZXJlc3RpbmcsIG5lZWQgdG8gZmlu
ZCBhbm90aGVyIGNhbmRpZGF0ZS4KKyAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0ZUluQ29udGFp
bmVyKGNvbnRhaW5lciwgbm9kZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoZm9jdXNDYW5kaWRh
dGUubm9kZSwgdHJ1ZSksIGRpcmVjdGlvbiwgZXZlbnQpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9u
LCBmb2N1c0NhbmRpZGF0ZS5ub2RlKSkgeworICAgICAgICBpZiAoaGFzT2Zmc2NyZWVuUmVjdChm
b2N1c0NhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24pKSB7CisgICAgICAgICAgICBzY3JvbGxJbkRp
cmVjdGlvbihmb2N1c0NhbmRpZGF0ZS5ub2RlLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gTmF2aWdhdGUgaW50byBhIG5ldyBzY3Jv
bGxhYmxlIGNvbnRhaW5lci4KKyAgICAgICAgSW50UmVjdCBzdGFydGluZ1JlY3Q7CisgICAgICAg
IE5vZGUqIGZvY3VzZWROb2RlID0gZm9jdXNlZE9yTWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmZv
Y3VzZWROb2RlKCk7CisgICAgICAgIGlmIChmb2N1c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVj
dChmb2N1c2VkTm9kZSkpCisgICAgICAgICAgICBzdGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJz
b2x1dGVDb29yZGluYXRlcyhmb2N1c2VkTm9kZSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBuYXZp
Z2F0ZUluQ29udGFpbmVyKGZvY3VzQ2FuZGlkYXRlLm5vZGUsIHN0YXJ0aW5nUmVjdCwgZGlyZWN0
aW9uLCBldmVudCk7CisgICAgfQorICAgIGlmIChoYXNPZmZzY3JlZW5SZWN0KGZvY3VzQ2FuZGlk
YXRlLm5vZGUsIGRpcmVjdGlvbikpIHsKKyAgICAgICAgTm9kZSogY29udGFpbmVyID0gZm9jdXND
YW5kaWRhdGUuZW5jbG9zaW5nU2Nyb2xsYWJsZUJveDsKKyAgICAgICAgc2Nyb2xsSW5EaXJlY3Rp
b24oY29udGFpbmVyLCBkaXJlY3Rpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBXZSBmb3VuZCBhIG5ldyBmb2N1cyBub2RlLCBuYXZpZ2F0ZSB0byBpdC4KKyAgICBF
bGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KGZvY3VzQ2FuZGlkYXRlLm5vZGUpOworICAgIEFT
U0VSVChlbGVtZW50KTsKKworICAgIGVsZW1lbnQtPmZvY3VzKGZhbHNlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0RpcmVjdGlvbmFs
bHkoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAg
ICBGcmFtZSogY3VyRnJhbWUgPSBmb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBBU1NFUlQoY3Vy
RnJhbWUpOworCisgICAgRG9jdW1lbnQqIGZvY3VzZWREb2N1bWVudCA9IGN1ckZyYW1lLT5kb2N1
bWVudCgpOworICAgIGlmICghZm9jdXNlZERvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IGZvY3VzZWREb2N1bWVudC0+Zm9jdXNlZE5vZGUo
KTsKKyAgICBOb2RlKiBjb250YWluZXIgPSBmb2N1c2VkRG9jdW1lbnQ7CisKKyAgICAvLyBGaWd1
cmUgb3V0IHRoZSBzdGFydGluZyByZWN0LgorICAgIEludFJlY3Qgc3RhcnRpbmdSZWN0OworICAg
IGlmIChmb2N1c2VkTm9kZSAmJiAhaGFzT2Zmc2NyZWVuUmVjdChmb2N1c2VkTm9kZSkpIHsKKyAg
ICAgICAgY29udGFpbmVyID0gc2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JO
b2RlSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBmb2N1c2VkTm9kZSk7CisgICAgICAgIHN0YXJ0aW5n
UmVjdCA9IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKGZvY3VzZWROb2RlLCB0cnVlIC8q
IGlnbm9yZSBib3JkZXIgKi8pOworICAgIH0KKworICAgIGJvb2wgY29uc3VtZWQgPSBmYWxzZTsK
KyAgICBkbyB7CisgICAgICAgIGlmIChjb250YWluZXItPmlzRG9jdW1lbnROb2RlKCkpCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRhaW5lciktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICBjb25zdW1lZCA9IG5hdmlnYXRlSW5D
b250YWluZXIoY29udGFpbmVyLCBzdGFydGluZ1JlY3QsIGRpcmVjdGlvbiwgZXZlbnQpOworICAg
ICAgICBzdGFydGluZ1JlY3QgPSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhjb250YWlu
ZXIsIHRydWUgLyogaWdub3JlIGJvcmRlciAqLyk7CisgICAgICAgIGNvbnRhaW5lciA9IHNjcm9s
bGFibGVFbmNsb3NpbmdCb3hPclBhcmVudEZyYW1lRm9yTm9kZUluRGlyZWN0aW9uKGRpcmVjdGlv
biwgY29udGFpbmVyKTsKKyAgICB9IHdoaWxlICghY29uc3VtZWQgJiYgY29udGFpbmVyKTsKKwor
ICAgIHJldHVybiBjb25zdW1lZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaAkocmV2aXNpb24gNzIzODQpCisrKyBXZWJDb3JlL3BhZ2UvRm9j
dXNDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9jdXNDYW5kaWRh
dGUmIHBhcmVudENhbmRpZGF0ZSA9IEZvY3VzQ2FuZGlkYXRlKCkpOwogICAgIHZvaWQgZGVlcEZp
bmRGb2N1c2FibGVOb2RlSW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBOb2RlKiBmb2N1c2Vk
LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCosIEZvY3VzQ2FuZGlkYXRlJik7CiAKKyAg
ICBib29sIG5hdmlnYXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0
JiBzdGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CisgICAgdm9p
ZCBmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IElu
dFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1
c0NhbmRpZGF0ZSYgY2xvc2VzdCk7CisKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgUmVmUHRyPEZy
YW1lPiBtX2ZvY3VzZWRGcmFtZTsKICAgICBib29sIG1faXNBY3RpdmU7CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
CShyZXZpc2lvbiA3MjM4NCkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMjM2LDYgKzIzNiw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnJhbWVWaWV3U2Ny
b2xsQ29ybmVyKFJlbmRlclNjcm9sbGJhclBhcnQqIHNjcm9sbENvcm5lcikgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxDb3JuZXIgPT0gc2Nyb2xsQ29ybmVyOyB9CiAgICAgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyKCk7CiAKKyAgICB2b2lkIGNhbGN1bGF0ZVNjcm9sbGJhck1vZGVzRm9yTGF5
b3V0KFNjcm9sbGJhck1vZGUmIGhNb2RlLCBTY3JvbGxiYXJNb2RlJiB2TW9kZSk7CisKICAgICAv
LyBOb3JtYWwgZGVsYXkKICAgICBzdGF0aWMgdm9pZCBzZXRSZXBhaW50VGhyb3R0bGluZ0RlZmVy
cmVkUmVwYWludERlbGF5KGRvdWJsZSBwKTsKICAgICAvLyBOZWdhdGl2ZSB2YWx1ZSB3b3VsZCBt
ZWFuIHRoYXQgZmlyc3QgZmV3IHJlcGFpbnRzIGhhcHBlbiB3aXRob3V0IGEgZGVsYXkKQEAgLTI2
NSw3ICsyNjcsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzRml4ZWRPYmplY3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9maXhlZE9iamVjdENvdW50ID4gMDsgfQogCiAgICAgdm9pZCBhcHBseU92ZXJm
bG93VG9WaWV3cG9ydChSZW5kZXJPYmplY3QqLCBTY3JvbGxiYXJNb2RlJiBoTW9kZSwgU2Nyb2xs
YmFyTW9kZSYgdk1vZGUpOwotICAgIHZvaWQgY2FsY3VsYXRlU2Nyb2xsYmFyTW9kZXNGb3JMYXlv
dXQoU2Nyb2xsYmFyTW9kZSYgaE1vZGUsIFNjcm9sbGJhck1vZGUmIHZNb2RlKTsKIAogICAgIHZv
aWQgdXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVy
dGljYWxPdmVyZmxvdyk7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2
aXNpb24gNzIzODQpCisrKyBXZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywxMiArNDMsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0
aWMgbG9uZyBsb25nIHNwYXRpYWxEaXN0YW5jZShGb2N1c0RpcmVjdGlvbiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFJlY3QmKTsKIHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRv
Um9vdERvY3VtZW50KFJlbmRlck9iamVjdCopOwotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdu
bWVudEZvclJlY3RzKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVj
dCYpOworc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZvclJlY3RzKEZvY3VzRGlyZWN0
aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHZpZXdT
aXplKTsKIHN0YXRpYyBib29sIGFyZVJlY3RzRnVsbHlBbGlnbmVkKEZvY3VzRGlyZWN0aW9uLCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOwogc3RhdGljIGJvb2wgYXJlUmVjdHNQYXJ0
aWFsbHlBbGlnbmVkKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVj
dCYpOworc3RhdGljIGJvb2wgYXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3JlZW5BcGFydChGb2N1c0Rp
cmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3QsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKTsKIHN0YXRpYyBib29sIGlzUmVj
dEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVj
dCYpOwogc3RhdGljIHZvaWQgZGVmbGF0ZUlmT3ZlcmxhcHBlZChJbnRSZWN0JiwgSW50UmVjdCYp
Owogc3RhdGljIGJvb2wgY2hlY2tOZWdhdGl2ZUNvb3Jkc0Zvck5vZGUoTm9kZSosIGNvbnN0IElu
dFJlY3QmKTsKK3N0YXRpYyBJbnRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUq
IGluaXRpYWxGcmFtZSwgY29uc3QgSW50UmVjdCYgcmVjdCk7CitzdGF0aWMgdm9pZCBlbnRyeUFu
ZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzdGFydGluZ1JlY3QsIGNvbnN0IEludFJlY3QmIHBvdGVudGlhbFJlY3QsIEludFBv
aW50JiBleGl0UG9pbnQsIEludFBvaW50JiBlbnRyeVBvaW50KTsKKworCitGb2N1c0NhbmRpZGF0
ZTo6Rm9jdXNDYW5kaWRhdGUoTm9kZSogbikKKyAgICA6IG5vZGUobikKKyAgICAsIGVuY2xvc2lu
Z1Njcm9sbGFibGVCb3goMCkKKyAgICAsIGRpc3RhbmNlKG1heERpc3RhbmNlKCkpCisgICAgLCBw
YXJlbnREaXN0YW5jZShtYXhEaXN0YW5jZSgpKQorICAgICwgYWxpZ25tZW50KE5vbmUpCisgICAg
LCBwYXJlbnRBbGlnbm1lbnQoTm9uZSkKKyAgICAsIHJlY3Qobm9kZVJlY3RJbkFic29sdXRlQ29v
cmRpbmF0ZXMobiwgdHJ1ZSAvKiBpZ25vcmUgYm9yZGVyICovKSkKK3sKK30KIAogYm9vbCBpc1Nw
YXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChjb25zdCBGcmFtZSogZnJhbWUpCiB7CkBAIC0xMDIsNyAr
MTE3LDggQEAgdm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uIAogICAgIC8v
IFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBub2RlcyBpcyBub3QgdG8gYmUgY29uc2lkZXJlZCBh
bG9uZSB3aGVuIGV2YWx1YXRpbmcvbG9va2luZwogICAgIC8vIGZvciB0aGUgYmVzdCBmb2N1cyBj
YW5kaWRhdGUgbm9kZS4gQWxpZ25tZW50IG9mIHJlY3RzIGNhbiBiZSBhbHNvIGEgZ29vZCBwb2lu
dCB0byBiZQogICAgIC8vIGNvbnNpZGVyZWQgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYWxnb3JpdGht
IHRvIGJlaGF2aW9yIGluIGEgbW9yZSBpbnR1aXRpdmUgd2F5LgotICAgIGNhbmRpZGF0ZS5hbGln
bm1lbnQgPSBhbGlnbm1lbnRGb3JSZWN0cyhkaXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3Qp
OworICAgIEludFNpemUgdmlld1NpemUgPSBjYW5kaWRhdGUubm9kZS0+ZG9jdW1lbnQoKS0+cGFn
ZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7Cisg
ICAgY2FuZGlkYXRlLmFsaWdubWVudCA9IGFsaWdubWVudEZvclJlY3RzKGRpcmVjdGlvbiwgY3Vy
UmVjdCwgdGFyZ2V0UmVjdCwgdmlld1NpemUpOwogICAgIGNhbmRpZGF0ZS5kaXN0YW5jZSA9IHNw
YXRpYWxEaXN0YW5jZShkaXJlY3Rpb24sIGN1clJlY3QsIHRhcmdldFJlY3QpOwogfQogCkBAIC0x
MzYsOCArMTUyLDEyIEBAIHN0YXRpYyBJbnRSZWN0IHJlbmRlclJlY3RSZWxhdGl2ZVRvUm9vdEQK
ICAgICByZXR1cm4gcmVjdDsKIH0KIAotc3RhdGljIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudEZv
clJlY3RzKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgY3VyUmVjdCwg
Y29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKK3N0YXRpYyBSZWN0c0FsaWdubWVudCBhbGlnbm1l
bnRGb3JSZWN0cyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJl
Y3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFNpemUmIHZpZXdTaXplKQog
eworICAgIC8vIElmIHdlIGZvdW5kIGEgbm9kZSBpbiBmdWxsIGFsaWdubWVudCwgYnV0IGl0IGlz
IHRvbyBmYXIgYXdheSwgaWdub3JlIGl0LgorICAgIGlmIChhcmVSZWN0c01vcmVUaGFuRnVsbFNj
cmVlbkFwYXJ0KGRpcmVjdGlvbiwgY3VyUmVjdCwgdGFyZ2V0UmVjdCwgdmlld1NpemUpKQorICAg
ICAgICByZXR1cm4gTm9uZTsKKwogICAgIGlmIChhcmVSZWN0c0Z1bGx5QWxpZ25lZChkaXJlY3Rp
b24sIGN1clJlY3QsIHRhcmdldFJlY3QpKQogICAgICAgICByZXR1cm4gRnVsbDsKIApAQCAtMjc3
LDYgKzI5NywyNSBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c1BhcnRpYWxseUFsaWduZWQoRm9jCiAg
ICAgICAgICAgICB8fCAoYkVuZCA+PSBhU3RhcnQgJiYgYkVuZCA8PSBhRW5kKSk7CiB9CiAKK3N0
YXRpYyBib29sIGFyZVJlY3RzTW9yZVRoYW5GdWxsU2NyZWVuQXBhcnQoRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKK3sKKyAgICBBU1NFUlQoaXNSZWN0SW5EaXJl
Y3Rpb24oZGlyZWN0aW9uLCBjdXJSZWN0LCB0YXJnZXRSZWN0KSk7CisKKyAgICBzd2l0Y2ggKGRp
cmVjdGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICByZXR1cm4g
Y3VyUmVjdC54KCkgLSB0YXJnZXRSZWN0LnJpZ2h0KCkgPiB2aWV3U2l6ZS53aWR0aCgpOworICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueCgp
IC0gY3VyUmVjdC5yaWdodCgpID4gdmlld1NpemUud2lkdGgoKTsKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBjdXJSZWN0LnkoKSAtIHRhcmdldFJlY3QuYm90dG9t
KCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAg
ICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIC0gY3VyUmVjdC5ib3R0b20oKSA+IHZpZXdTaXpl
LmhlaWdodCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKIC8vIFJldHVybiB0cnVlIGlmIHJlY3Qg
fGF8IGlzIGJlbG93IHxifC4gRmFsc2Ugb3RoZXJ3aXNlLgogc3RhdGljIGlubGluZSBib29sIGJl
bG93KGNvbnN0IEludFJlY3QmIGEsIGNvbnN0IEludFJlY3QmIGIpCiB7CkBAIC00MDMsMjkgKzQ0
MiwyNSBAQCBzdGF0aWMgbG9uZyBsb25nIHNwYXRpYWxEaXN0YW5jZShGb2N1c0RpCiAKIHN0YXRp
YyBib29sIGlzUmVjdEluRGlyZWN0aW9uKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3Qg
SW50UmVjdCYgY3VyUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBJbnRQ
b2ludCBjZW50ZXIodGFyZ2V0UmVjdC5jZW50ZXIoKSk7Ci0gICAgaW50IHRhcmdldE1pZGRsZSA9
IGlzSG9yaXpvbnRhbE1vdmUoZGlyZWN0aW9uKSA/IGNlbnRlci54KCkgOiBjZW50ZXIueSgpOwot
CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoK
LSAgICAgICAgcmV0dXJuIHRhcmdldE1pZGRsZSA8IGN1clJlY3QueCgpOworICAgICAgICByZXR1
cm4gdGFyZ2V0UmVjdC5yaWdodCgpIDw9IGN1clJlY3QueCgpOwogICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25SaWdodDoKLSAgICAgICAgcmV0dXJuIHRhcmdldE1pZGRsZSA+IGN1clJlY3QucmlnaHQo
KTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueCgpID49IGN1clJlY3QucmlnaHQoKTsKICAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6Ci0gICAgICAgIHJldHVybiB0YXJnZXRNaWRkbGUgPCBj
dXJSZWN0LnkoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QuYm90dG9tKCkgPD0gY3VyUmVj
dC55KCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAgIHJldHVybiB0YXJn
ZXRNaWRkbGUgPiBjdXJSZWN0LmJvdHRvbSgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC55
KCkgPj0gY3VyUmVjdC5ib3R0b20oKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKIH0KIAogLy8gQ2hlY2tzIGlmIHxub2RlfCBpcyBvZmZzY3JlZW4gdGhlIHZpc2libGUg
YXJlYSAodmlld3BvcnQpIG9mIGl0cyBjb250YWluZXIKIC8vIGRvY3VtZW50LiBJbiBjYXNlIGl0
IGlzLCBvbmUgY2FuIHNjcm9sbCBpbiBkaXJlY3Rpb24gb3IgdGFrZSBhbnkgZGlmZmVyZW50CiAv
LyBkZXNpcmVkIGFjdGlvbiBsYXRlciBvbi4KLWJvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiBu
b2RlKQorYm9vbCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqIG5vZGUsIEZvY3VzRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICAgICAvLyBHZXQgdGhlIEZyYW1lVmlldyBpbiB3aGljaCB8bm9kZXwgaXMg
KHdoaWNoIG1lYW5zIHRoZSBjdXJyZW50IHZpZXdwb3J0IGlmIHxub2RlfAogICAgIC8vIGlzIG5v
dCBpbiBhbiBpbm5lciBkb2N1bWVudCksIHNvIHdlIGNhbiBjaGVjayBpZiBpdHMgY29udGVudCBy
ZWN0IGlzIHZpc2libGUKQEAgLTQzNSw2ICs0NzAsMjggQEAgYm9vbCBoYXNPZmZzY3JlZW5SZWN0
KE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCBjb250YWlu
ZXJWaWV3cG9ydFJlY3QgPSBmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIC8v
IFdlIHdhbnQgdG8gc2VsZWN0IGEgbm9kZSBpZiBpdCBpcyBjdXJyZW50bHkgb2ZmIHNjcmVlbiwg
YnV0IHdpbGwgYmUKKyAgICAvLyBleHBvc2VkIGFmdGVyIHdlIHNjcm9sbC4gQWRqdXN0IHRoZSB2
aWV3cG9ydCB0byBwb3N0LXNjcm9sbGluZyBwb3NpdGlvbi4KKyAgICAvLyBJZiB0aGUgY29udGFp
bmVyIGhhcyBvdmVyZmxvdzpoaWRkZW4sIHdlIGNhbm5vdCBzY3JvbGwsIHNvIHdlIGRvIG5vdCBw
YXNzIGRpcmVjdGlvbgorICAgIC8vIGFuZCB3ZSBkbyBub3QgYWRqdXN0IGZvciBzY3JvbGxpbmcu
CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoK
KyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldFgoY29udGFpbmVyVmlld3BvcnRSZWN0
LngoKSAtIFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGNvbnRhaW5l
clZpZXdwb3J0UmVjdC5zZXRXaWR0aChjb250YWluZXJWaWV3cG9ydFJlY3Qud2lkdGgoKSArIFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldFdp
ZHRoKGNvbnRhaW5lclZpZXdwb3J0UmVjdC53aWR0aCgpICsgU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgor
ICAgICAgICBjb250YWluZXJWaWV3cG9ydFJlY3Quc2V0WShjb250YWluZXJWaWV3cG9ydFJlY3Qu
eSgpIC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpKTsKKyAgICAgICAgY29udGFpbmVy
Vmlld3BvcnRSZWN0LnNldEhlaWdodChjb250YWluZXJWaWV3cG9ydFJlY3QuaGVpZ2h0KCkgKyBT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgY29udGFpbmVyVmlld3BvcnRSZWN0LnNldEhl
aWdodChjb250YWluZXJWaWV3cG9ydFJlY3QuaGVpZ2h0KCkgKyBTY3JvbGxiYXI6OnBpeGVsc1Bl
ckxpbmVTdGVwKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlciA9IG5vZGUtPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyZW5kZXIpCkBAIC00NDcsMzYgKzUwNCw3MiBAQCBib29sIGhhc09mZnNjcmVl
blJlY3QoTm9kZSogbm9kZSkKICAgICByZXR1cm4gIWNvbnRhaW5lclZpZXdwb3J0UmVjdC5pbnRl
cnNlY3RzKHJlY3QpOwogfQogCi0vLyBJbiBhIGJvdHRvbS11cCB3YXksIHRoaXMgbWV0aG9kIHRy
aWVzIHRvIHNjcm9sbCB8ZnJhbWV8IGluIGEgZ2l2ZW4gZGlyZWN0aW9uCi0vLyB8ZGlyZWN0aW9u
fCwgZ29pbmcgdXAgaW4gdGhlIGZyYW1lIHRyZWUgaGllcmFyY2h5IGluIGNhc2UgaXQgZG9lcyBu
b3Qgc3VjY2VlZC4KLWJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oRnJhbWUqIGZyYW1lLCBGb2N1c0Rp
cmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpCitib29s
IHNjcm9sbEluRGlyZWN0aW9uKEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9u
KQogewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQo
ZnJhbWUgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBmcmFtZS0+ZG9jdW1lbnQo
KSkpOwogCi0gICAgU2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbjsKKyAgICBpZiAoZnJh
bWUgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBmcmFtZS0+ZG9jdW1lbnQoKSkp
IHsKKyAgICAgICAgaW50IGR4ID0gMDsKKyAgICAgICAgaW50IGR5ID0gMDsKKyAgICAgICAgc3dp
dGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAg
ICAgICAgICBkeCA9IC0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgICAg
IGR4ID0gU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAgICAgIGR5ID0gLSBTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgICAgICBkeSA9IFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KIAotICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBGb2N1
c0RpcmVjdGlvbkxlZnQ6Ci0gICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbExlZnQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAgc2Ny
b2xsRGlyZWN0aW9uID0gU2Nyb2xsUmlnaHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9j
dXNEaXJlY3Rpb25VcDoKLSAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsVXA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgotICAgICAgICBzY3JvbGxE
aXJlY3Rpb24gPSBTY3JvbGxEb3duOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KEludFNp
emUoZHgsIGR5KSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CiAKLSAgICBpZiAoIWNhbmRpZGF0ZS5pc051bGwoKSAmJiBpc1Njcm9sbGFibGVDb250
YWluZXJOb2RlKGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KSkKLSAgICAgICAgcmV0
dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Nyb2xsUmVjdXJzaXZlbHkoc2Nyb2xsRGlyZWN0
aW9uLCBTY3JvbGxCeUxpbmUsIGNhbmRpZGF0ZS5lbmNsb3NpbmdTY3JvbGxhYmxlQm94KTsKK2Jv
b2wgc2Nyb2xsSW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBkaXJl
Y3Rpb24pCit7CisgICAgaWYgKGNvbnRhaW5lci0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAg
cmV0dXJuIHNjcm9sbEluRGlyZWN0aW9uKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGFpbmVy
KS0+ZnJhbWUoKSwgZGlyZWN0aW9uKTsKIAotICAgIHJldHVybiBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnNjcm9sbFJlY3Vyc2l2ZWx5KHNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsQnlMaW5lKTsKKyAg
ICBpZiAoIWNvbnRhaW5lci0+cmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChjb250YWluZXIgJiYgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBjb250
YWluZXIpKSB7CisgICAgICAgIGludCBkeCA9IDA7CisgICAgICAgIGludCBkeSA9IDA7CisgICAg
ICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0
OgorICAgICAgICAgICAgZHggPSAtIG1pbihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCks
IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICAgICAgQVNTRVJU
KGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdpZHRoKCkgPiAoY29udGFpbmVyLT5yZW5k
ZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lk
dGgoKSkpOworICAgICAgICAgICAgZHggPSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3Rl
cCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxXaWR0aCgpIC0gKGNvbnRhaW5lci0+
cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVu
dFdpZHRoKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvY3VzRGlyZWN0
aW9uVXA6CisgICAgICAgICAgICBkeSA9IC0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICAgICAgQVNT
RVJUKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbEhlaWdodCgpIC0gKGNvbnRhaW5lci0+
cmVuZGVyQm94KCktPnNjcm9sbFRvcCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50
SGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGR5ID0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVpZ2h0KCkgLSAoY29udGFp
bmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXItPnJlbmRlckJveCgpLT5j
bGllbnRIZWlnaHQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2lu
Z0xheWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoZHgsIGR5KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBzY3JvbGxJbnRvVmlldyhF
bGVtZW50KiBlbGVtZW50KQpAQCAtNTM0LDcgKzYyNyw3IEBAIHN0YXRpYyBib29sIGNoZWNrTmVn
YXRpdmVDb29yZHNGb3JOb2RlKE4KICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZDsKIH0KIAotYm9v
bCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKE5vZGUqIG5vZGUpCitib29sIGlzU2Nyb2xsYWJs
ZUNvbnRhaW5lck5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTU2Nyw0ICs2NjAsMjY4IEBAIGJvb2wgaXNOb2RlRGVlcERl
c2NlbmRhbnRPZkRvY3VtZW50KE5vZGUKICAgICByZXR1cm4gZGVzY2VuZGFudDsKIH0KIAorTm9k
ZSogc2Nyb2xsYWJsZUVuY2xvc2luZ0JveE9yUGFyZW50RnJhbWVGb3JOb2RlSW5EaXJlY3Rpb24o
Rm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2Rl
KTsKKyAgICBOb2RlKiBwYXJlbnQgPSBub2RlOworICAgIGRvIHsKKyAgICAgICAgaWYgKHBhcmVu
dC0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgICAgIHBhcmVudCA9IHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4ocGFyZW50KS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+b3duZXJFbGVtZW50KCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOwor
ICAgIH0gd2hpbGUgKHBhcmVudCAmJiAhY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBw
YXJlbnQpICYmICFwYXJlbnQtPmlzRG9jdW1lbnROb2RlKCkpOworCisgICAgcmV0dXJuIHBhcmVu
dDsKK30KKworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IE5vZGUqIGNvbnRhaW5lcikKK3sKKyAgICBBU1NFUlQoY29udGFpbmVyKTsKKyAg
ICBpZiAoY29udGFpbmVyLT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gY2FuU2Ny
b2xsSW5EaXJlY3Rpb24oZGlyZWN0aW9uLCBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCo+KGNv
bnRhaW5lciktPmZyYW1lKCkpOworCisgICAgaWYgKCFpc1Njcm9sbGFibGVDb250YWluZXJOb2Rl
KGNvbnRhaW5lcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoZGlyZWN0
aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIHJldHVybiAoY29u
dGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPSElEREVOICYmIGNv
bnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSA+IDApOworICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25VcDoKKyAgICAgICAgcmV0dXJuIChjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxl
KCktPm92ZXJmbG93WSgpICE9IE9ISURERU4gJiYgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Ny
b2xsVG9wKCkgPiAwKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIHJl
dHVybiAoY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPSElE
REVOICYmIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNvbnRhaW5lci0+
cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkgPCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3Jv
bGxXaWR0aCgpKTsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgcmV0dXJu
IChjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WSgpICE9IE9ISURERU4g
JiYgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXItPnJlbmRl
ckJveCgpLT5jbGllbnRIZWlnaHQoKSA8IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbEhl
aWdodCgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlv
bihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZyYW1lKiBmcmFtZSkKK3sKKyAgICBp
ZiAoIWZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTY3JvbGxiYXJN
b2RlIHZlcnRpY2FsTW9kZTsKKyAgICBTY3JvbGxiYXJNb2RlIGhvcml6b250YWxNb2RlOworICAg
IGZyYW1lLT52aWV3KCktPmNhbGN1bGF0ZVNjcm9sbGJhck1vZGVzRm9yTGF5b3V0KGhvcml6b250
YWxNb2RlLCB2ZXJ0aWNhbE1vZGUpOworICAgIGlmICgoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0
aW9uTGVmdCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25SaWdodCkgJiYgU2Nyb2xsYmFy
QWx3YXlzT2ZmID09IGhvcml6b250YWxNb2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24gPT0gRm9jdXNE
aXJlY3Rpb25Eb3duKSAmJiAgU2Nyb2xsYmFyQWx3YXlzT2ZmID09IHZlcnRpY2FsTW9kZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIEludFNpemUgc2l6ZSA9IGZyYW1lLT52aWV3KCktPmNv
bnRlbnRzU2l6ZSgpOworICAgIEludFNpemUgb2Zmc2V0ID0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xs
T2Zmc2V0KCk7CisgICAgSW50UmVjdCByZWN0ID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRl
bnRSZWN0KHRydWUpOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uTGVmdDoKKyAgICAgICAgcmV0dXJuIG9mZnNldC53aWR0aCgpID4gMDsKKyAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHJldHVybiBvZmZzZXQuaGVpZ2h0KCkgPiAw
OworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgcmV0dXJuIHJlY3Qud2lk
dGgoKSArIG9mZnNldC53aWR0aCgpIDwgc2l6ZS53aWR0aCgpOworICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25Eb3duOgorICAgICAgICByZXR1cm4gcmVjdC5oZWlnaHQoKSArIG9mZnNldC5oZWlnaHQo
KSA8IHNpemUuaGVpZ2h0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBJbnRSZWN0
IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqIGluaXRpYWxGcmFtZSwgY29uc3QgSW50
UmVjdCYgaW5pdGlhbFJlY3QpCit7CisgICAgSW50UmVjdCByZWN0ID0gaW5pdGlhbFJlY3Q7Cisg
ICAgZm9yIChGcmFtZSogZnJhbWUgPSBpbml0aWFsRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KGZyYW1lLT5vd25lckVsZW1lbnQoKSkpIHsKKyAgICAgICAgICAg
IGRvIHsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmUoZWxlbWVudC0+b2Zmc2V0TGVmdCgpLCBl
bGVtZW50LT5vZmZzZXRUb3AoKSk7CisgICAgICAgICAgICB9IHdoaWxlICgoZWxlbWVudCA9IGVs
ZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7CisgICAgICAgICAgICByZWN0Lm1vdmUoKC1mcmFtZS0+
dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBy
ZWN0OworfQorCitJbnRSZWN0IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKE5vZGUqIG5v
ZGUsIGJvb2wgaWdub3JlQm9yZGVyKQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPnJlbmRl
cmVyKCkpOworCisgICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgIHJldHVy
biBmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihu
b2RlKS0+ZnJhbWUoKSk7CisgICAgSW50UmVjdCByZWN0ID0gcmVjdFRvQWJzb2x1dGVDb29yZGlu
YXRlcyhub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLCBub2RlLT5nZXRSZWN0KCkpOworCisgICAg
Ly8gRm9yIGF1dGhvcnMgdGhhdCB1c2UgYm9yZGVyIGluc3RlYWQgb2Ygb3V0bGluZSBpbiB0aGVp
ciBDU1MsIHdlIGNvbXBlbnNhdGUgYnkgaWdub3JpbmcgdGhlIGJvcmRlciB3aGVuIGNhbGN1bGF0
aW5nCisgICAgLy8gdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgZWxlbWVudC4KKyAgICBpZiAoaWdu
b3JlQm9yZGVyKSB7CisgICAgICAgIHJlY3QubW92ZShub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgp
LT5ib3JkZXJMZWZ0V2lkdGgoKSwgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9w
V2lkdGgoKSk7CisgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC0gbm9kZS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBub2RlLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCkpOworICAgICAgICByZWN0LnNldEhlaWdodChyZWN0
LmhlaWdodCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSAt
IG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCkpOworICAgIH0K
KyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRp
bmF0ZXMoRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiByZWN0VG9BYnNvbHV0ZUNvb3JkaW5h
dGVzKGZyYW1lLCBmcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKSk7Cit9CisKKy8v
IFRoaXMgbWV0aG9kIGNhbGN1bGF0ZXMgdGhlIGV4aXRQb2ludCBmcm9tIHRoZSBzdGFydGluZ1Jl
Y3QgYW5kIHRoZSBlbnRyeVBvaW50IGludG8gdGhlIGNhbmRpZGF0ZSByZWN0LgorLy8gVGhlIGxp
bmUgYmV0d2VlbiB0aG9zZSAyIHBvaW50cyBpcyB0aGUgY2xvc2VzdCBkaXN0YW5jZSBiZXR3ZWVu
IHRoZSAyIHJlY3RzLgordm9pZCBlbnRyeUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIGNvbnN0IElu
dFJlY3QmIHBvdGVudGlhbFJlY3QsIEludFBvaW50JiBleGl0UG9pbnQsIEludFBvaW50JiBlbnRy
eVBvaW50KQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1c0RpcmVj
dGlvbkxlZnQ6CisgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAg
ICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5yaWdodCgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgorICAgICAgICBleGl0UG9pbnQuc2V0WShz
dGFydGluZ1JlY3QueSgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3Qu
Ym90dG9tKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
CisgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAg
ZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0aW5n
UmVjdC5ib3R0b20oKSk7CisgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0Lnko
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBGb2N1
c0RpcmVjdGlvbkxlZnQ6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBp
ZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBwb3RlbnRpYWxSZWN0KSkgeworICAgICAgICAgICAgZXhp
dFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LnkoKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNl
dFkocG90ZW50aWFsUmVjdC5ib3R0b20oKSk7CisgICAgICAgIH0gZWxzZSBpZiAoYmVsb3cocG90
ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkgeworICAgICAgICAgICAgZXhpdFBvaW50LnNldFko
c3RhcnRpbmdSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3Rl
bnRpYWxSZWN0LnkoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleGl0UG9pbnQu
c2V0WShtYXgoc3RhcnRpbmdSZWN0LnkoKSwgcG90ZW50aWFsUmVjdC55KCkpKTsKKyAgICAgICAg
ICAgIGVudHJ5UG9pbnQuc2V0WShleGl0UG9pbnQueSgpKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlv
bkRvd246CisgICAgICAgIGlmIChyaWdodE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkp
IHsKKyAgICAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOworICAgICAg
ICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAocmlnaHRPZihwb3RlbnRpYWxSZWN0LCBzdGFydGluZ1JlY3QpKSB7CisgICAgICAg
ICAgICBleGl0UG9pbnQuc2V0WChzdGFydGluZ1JlY3QucmlnaHQoKSk7CisgICAgICAgICAgICBl
bnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC54KCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZXhpdFBvaW50LnNldFgobWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJl
Y3QueCgpKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFgoZXhpdFBvaW50LngoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBGb2N1c0NhbmRpZGF0ZSYgY3VycmVudCwgRm9jdXNDYW5kaWRh
dGUmIGNhbmRpZGF0ZSkKK3sKKyAgICBpZiAoY2FuZGlkYXRlLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFjYW5kaWRhdGUubm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIEludFJlY3Qgbm9kZVJlY3QgPSBjYW5kaWRhdGUucmVjdDsKKyAgICBJbnRSZWN0
IGN1cnJlbnRSZWN0ID0gY3VycmVudC5yZWN0OworICAgIGRlZmxhdGVJZk92ZXJsYXBwZWQoY3Vy
cmVudFJlY3QsIG5vZGVSZWN0KTsKKworICAgIGlmICghaXNSZWN0SW5EaXJlY3Rpb24oZGlyZWN0
aW9uLCBjdXJyZW50UmVjdCwgbm9kZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQ
b2ludCBleGl0UG9pbnQ7CisgICAgSW50UG9pbnQgZW50cnlQb2ludDsKKyAgICBpbnQgc2FtZUF4
aXNEaXN0YW5jZSA9IDA7CisgICAgaW50IG90aGVyQXhpc0Rpc3RhbmNlID0gMDsKKyAgICBlbnRy
eUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oZGlyZWN0aW9uLCBjdXJyZW50UmVjdCwgbm9kZVJl
Y3QsIGV4aXRQb2ludCwgZW50cnlQb2ludCk7CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewor
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0g
ZXhpdFBvaW50LngoKSAtIGVudHJ5UG9pbnQueCgpOworICAgICAgICBvdGhlckF4aXNEaXN0YW5j
ZSA9IGFicyhleGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBl
eGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55KCk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNl
ID0gYWJzKGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50LngoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9
IGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdGFu
Y2UgPSBhYnMoZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIHNhbWVBeGlzRGlzdGFuY2Ug
PSBlbnRyeVBvaW50LnkoKSAtIGV4aXRQb2ludC55KCk7CisgICAgICAgIG90aGVyQXhpc0Rpc3Rh
bmNlID0gYWJzKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaW50IHggPSAoZW50cnlQb2ludC54KCkgLSBleGl0UG9pbnQu
eCgpKSAqIChlbnRyeVBvaW50LngoKSAtIGV4aXRQb2ludC54KCkpOworICAgIGludCB5ID0gKGVu
dHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSkgKiAoZW50cnlQb2ludC55KCkgLSBleGl0UG9p
bnQueSgpKTsKKworICAgIGZsb2F0IGV1Y2xpZGlhbkRpc3RhbmNlID0gc3FydCgoeCArIHkpICog
MS4wZik7CisKKyAgICAvLyBMb29zZWx5IGJhc2VkIG9uIGh0dHA6Ly93d3cudzMub3JnL1RSL1dJ
Q0QvI2ZvY3VzLWhhbmRsaW5nCisgICAgLy8gZGYgPSBkb3REaXN0ICsgZHggKyBkeSArIDIgKiAo
eGRpc3BsYWNlbWVudCArIHlkaXNwbGFjZW1lbnQpIC0gc3FydChPdmVybGFwKQorCisgICAgZmxv
YXQgZGlzdGFuY2UgPSBldWNsaWRpYW5EaXN0YW5jZSArIHNhbWVBeGlzRGlzdGFuY2UgKyAyICog
b3RoZXJBeGlzRGlzdGFuY2U7CisgICAgY2FuZGlkYXRlLmRpc3RhbmNlID0gcm91bmRmKGRpc3Rh
bmNlKTsKKyAgICBJbnRTaXplIHZpZXdTaXplID0gY2FuZGlkYXRlLm5vZGUtPmRvY3VtZW50KCkt
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgp
OworICAgIGNhbmRpZGF0ZS5hbGlnbm1lbnQgPSBhbGlnbm1lbnRGb3JSZWN0cyhkaXJlY3Rpb24s
IGN1cnJlbnRSZWN0LCBub2RlUmVjdCwgdmlld1NpemUpOworfQorCitib29sIGNhbkJlU2Nyb2xs
ZWRJbnRvVmlldyhGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlJiBjYW5k
aWRhdGUpCit7CisgICAgQVNTRVJUKGNhbmRpZGF0ZS5ub2RlICYmIGhhc09mZnNjcmVlblJlY3Qo
Y2FuZGlkYXRlLm5vZGUpKTsKKyAgICBJbnRSZWN0IGNhbmRpZGF0ZVJlY3QgPSBjYW5kaWRhdGUu
cmVjdDsKKyAgICBmb3IgKE5vZGUqIHBhcmVudE5vZGUgPSBjYW5kaWRhdGUubm9kZS0+cGFyZW50
KCk7IHBhcmVudE5vZGU7IHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLT5wYXJlbnQoKSkgeworICAg
ICAgICBJbnRSZWN0IHBhcmVudFJlY3QgPSBub2RlUmVjdEluQWJzb2x1dGVDb29yZGluYXRlcyhw
YXJlbnROb2RlKTsKKyAgICAgICAgaWYgKCFjYW5kaWRhdGVSZWN0LmludGVyc2VjdHMocGFyZW50
UmVjdCkpIHsKKyAgICAgICAgICAgIGlmICgoKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkxl
ZnQgfHwgZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uUmlnaHQpICYmIHBhcmVudE5vZGUtPnJl
bmRlcmVyKCktPnN0eWxlKCktPm92ZXJmbG93WCgpID09IE9ISURERU4pCisgICAgICAgICAgICAg
ICAgfHwgKChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25VcCB8fCBkaXJlY3Rpb24gPT0gRm9j
dXNEaXJlY3Rpb25Eb3duKSAmJiBwYXJlbnROb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVy
Zmxvd1koKSA9PSBPSElEREVOKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHBhcmVudE5vZGUgPT0gY2FuZGlkYXRlLmVuY2xvc2luZ1Njcm9s
bGFibGVCb3gpCisgICAgICAgICAgICByZXR1cm4gY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZGlyZWN0
aW9uLCBwYXJlbnROb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFRoZSBz
dGFydGluZyByZWN0IGlzIHRoZSByZWN0IG9mIHRoZSBmb2N1c2VkIG5vZGUsIGluIGRvY3VtZW50
IGNvb3JkaW5hdGVzLgorLy8gQ29tcG9zZSBhIHZpcnR1YWwgc3RhcnRpbmcgcmVjdCBpZiB0aGVy
ZSBpcyBubyBmb2N1c2VkIG5vZGUgb3IgaWYgaXQgaXMgb2ZmIHNjcmVlbi4KKy8vIFRoZSB2aXJ0
dWFsIHJlY3QgaXMgdGhlIGVkZ2Ugb2YgdGhlIGNvbnRhaW5lciBvciBmcmFtZS4gV2Ugc2VsZWN0
IHdoaWNoCisvLyBlZGdlIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBuYXZpZ2F0
aW9uLgorSW50UmVjdCB2aXJ0dWFsU3RhcnRpbmdSZWN0Rm9yRGlyZWN0aW9uKEZvY3VzRGlyZWN0
aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgc3RhcnRpbmdSZWN0KQoreworICAgIEludFJl
Y3QgdmlydHVhbFN0YXJ0aW5nUmVjdCA9IHN0YXJ0aW5nUmVjdDsKKyAgICBzd2l0Y2ggKGRpcmVj
dGlvbikgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICB2aXJ0dWFsU3Rh
cnRpbmdSZWN0LnNldFgodmlydHVhbFN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgdmly
dHVhbFN0YXJ0aW5nUmVjdC5zZXRXaWR0aCgwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b2N1c0RpcmVjdGlvblVwOgorICAgICAgICB2aXJ0dWFsU3RhcnRpbmdSZWN0LnNldFkodmlydHVh
bFN0YXJ0aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0
SGVpZ2h0KDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0V2lkdGgoMCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgorICAgICAgICB2aXJ0dWFsU3RhcnRpbmdS
ZWN0LnNldEhlaWdodCgwKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIHZpcnR1YWxTdGFydGlu
Z1JlY3Q7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdl
L1NwYXRpYWxOYXZpZ2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmgJKHJldmlzaW9uIDcyMzg0KQorKysgV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZp
Z2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgU3BhdGlh
bE5hdmlnYXRpb25faAogCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCiAjaW5jbHVkZSA8bGltaXRzPgpAQCAtMTA3
LDE2ICsxMDgsNyBAQCBzdHJ1Y3QgRm9jdXNDYW5kaWRhdGUgewogICAgIHsKICAgICB9CiAKLSAg
ICBGb2N1c0NhbmRpZGF0ZShOb2RlKiBuKQotICAgICAgICA6IG5vZGUobikKLSAgICAgICAgLCBl
bmNsb3NpbmdTY3JvbGxhYmxlQm94KDApCi0gICAgICAgICwgZGlzdGFuY2UobWF4RGlzdGFuY2Uo
KSkKLSAgICAgICAgLCBwYXJlbnREaXN0YW5jZShtYXhEaXN0YW5jZSgpKQotICAgICAgICAsIGFs
aWdubWVudChOb25lKQotICAgICAgICAsIHBhcmVudEFsaWdubWVudChOb25lKQotICAgIHsKLSAg
ICB9Ci0KKyAgICBGb2N1c0NhbmRpZGF0ZShOb2RlKiBuKTsKICAgICBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuICFub2RlOyB9CiAgICAgYm9vbCBpblNjcm9sbGFibGVDb250YWluZXIoKSBj
b25zdCB7IHJldHVybiBub2RlICYmIGVuY2xvc2luZ1Njcm9sbGFibGVCb3g7IH0KICAgICBEb2N1
bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBub2RlID8gbm9kZS0+ZG9jdW1lbnQoKSA6
IDA7IH0KQEAgLTEyNywxNiArMTE5LDI1IEBAIHN0cnVjdCBGb2N1c0NhbmRpZGF0ZSB7CiAgICAg
bG9uZyBsb25nIHBhcmVudERpc3RhbmNlOwogICAgIFJlY3RzQWxpZ25tZW50IGFsaWdubWVudDsK
ICAgICBSZWN0c0FsaWdubWVudCBwYXJlbnRBbGlnbm1lbnQ7CisgICAgSW50UmVjdCByZWN0Owog
fTsKIAogdm9pZCBkaXN0YW5jZURhdGFGb3JOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwg
Tm9kZSogc3RhcnQsIEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpOwotYm9vbCBzY3JvbGxJbkRp
cmVjdGlvbihGcmFtZSosIEZvY3VzRGlyZWN0aW9uLCBjb25zdCBGb2N1c0NhbmRpZGF0ZSYgY2Fu
ZGlkYXRlID0gRm9jdXNDYW5kaWRhdGUoKSk7Citib29sIHNjcm9sbEluRGlyZWN0aW9uKEZyYW1l
KiwgRm9jdXNEaXJlY3Rpb24pOworYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWlu
ZXIsIEZvY3VzRGlyZWN0aW9uKTsKIHZvaWQgc2Nyb2xsSW50b1ZpZXcoRWxlbWVudCopOwotYm9v
bCBoYXNPZmZzY3JlZW5SZWN0KE5vZGUqKTsKK2Jvb2wgaGFzT2Zmc2NyZWVuUmVjdChOb2RlKiwg
Rm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uID0gRm9jdXNEaXJlY3Rpb25Ob25lKTsKIGJvb2wgaXNJ
blJvb3REb2N1bWVudChOb2RlKik7Ci1ib29sIGlzU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGUoTm9k
ZSopOworYm9vbCBpc1Njcm9sbGFibGVDb250YWluZXJOb2RlKGNvbnN0IE5vZGUqKTsKIGJvb2wg
aXNOb2RlRGVlcERlc2NlbmRhbnRPZkRvY3VtZW50KE5vZGUqLCBEb2N1bWVudCopOwotCitOb2Rl
KiBzY3JvbGxhYmxlRW5jbG9zaW5nQm94T3JQYXJlbnRGcmFtZUZvck5vZGVJbkRpcmVjdGlvbihG
b2N1c0RpcmVjdGlvbiwgTm9kZSogbm9kZSk7Citib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKEZv
Y3VzRGlyZWN0aW9uLCBjb25zdCBOb2RlKiBjb250YWluZXIpOworYm9vbCBjYW5TY3JvbGxJbkRp
cmVjdGlvbihGb2N1c0RpcmVjdGlvbiwgY29uc3QgRnJhbWUqKTsKK0ludFJlY3Qgbm9kZVJlY3RJ
bkFic29sdXRlQ29vcmRpbmF0ZXMoTm9kZSosIGJvb2wgaWdub3JlQm9yZGVyID0gZmFsc2UpOwor
SW50UmVjdCBmcmFtZVJlY3RJbkFic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqKTsKK3ZvaWQgZGlz
dGFuY2VEYXRhRm9yTm9kZShGb2N1c0RpcmVjdGlvbiwgRm9jdXNDYW5kaWRhdGUmIGN1cnJlbnQs
IEZvY3VzQ2FuZGlkYXRlJiBjYW5kaWRhdGUpOworYm9vbCBjYW5CZVNjcm9sbGVkSW50b1ZpZXco
Rm9jdXNEaXJlY3Rpb24sIEZvY3VzQ2FuZGlkYXRlJik7CitJbnRSZWN0IHZpcnR1YWxTdGFydGlu
Z1JlY3RGb3JEaXJlY3Rpb24oRm9jdXNEaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5n
UmVjdCk7CiB9IC8vIG5hbXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFNwYXRpYWxOYXZpZ2F0
aW9uX2gKCg==
</data>
<flag name="review"
          id="65151"
          type_id="1"
          status="+"
          setter="tonikitoo"
    />
          </attachment>
      

    </bug>

</bugzilla>