<?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>101001</bug_id>
          
          <creation_ts>2012-11-01 17:01:33 -0700</creation_ts>
          <short_desc>Pages with position:fixed elements should still be able to scroll on the scrolling thread</short_desc>
          <delta_ts>2012-11-05 15:34:00 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>756735</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-01 17:01:33 -0700</bug_when>
    <thetext>Currently when we have position:fixed elements on a page we fall into the slow &quot;scroll on the main thread&quot; mode. 

The scrolling tree should know about fixed layers so we can do scrolling on the scrolling thread.

&lt;rdar://problem/10857315&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756757</commentid>
    <comment_count>1</comment_count>
      <attachid>171959</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-01 17:37:03 -0700</bug_when>
    <thetext>Created attachment 171959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756759</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-01 17:41:35 -0700</bug_when>
    <thetext>Attachment 171959 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Source/WebCore/rendering/RenderLayerCompositor.cpp:2565:  Declaration has space between type name and * in RenderBoxModelObject *renderer  [whitespace/declaration] [3]
Source/WebCore/rendering/RenderLayerCompositor.cpp:2562:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp:100:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 39 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>756771</commentid>
    <comment_count>3</comment_count>
      <attachid>171959</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-01 18:08:09 -0700</bug_when>
    <thetext>Comment on attachment 171959
Patch

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

Looks really great. I found one or two showstopper issues, so review- because of those. Most of the other comments are just minor style ones.

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.h:54
&gt;  enum ScrollingNodeType {
&gt; -    ScrollingNode
&gt; -    // FIXME: This will soon contain other types such as FixedNode.
&gt; +    ScrollingNode,
&gt; +    FixedNode
&gt;  };

Could this just be defined on one line?

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.h:122
&gt; +    virtual void updateViewportConstrainedNode(ScrollingNodeID, PassOwnPtr&lt;ViewportConstraints&gt;, GraphicsLayer*) { }

It’s the empty function body that creates the only need to include PassOwnPtr.h here. Could we put that empty body into a cpp file instead? I don’t think it gets inlined.

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp:43
&gt; +ScrollingStateFixedNode::ScrollingStateFixedNode(ScrollingStateTree* stateTree, ScrollingNodeID nodeID)

I’d just name this “tree”.

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp:49
&gt; +ScrollingStateFixedNode::ScrollingStateFixedNode(const ScrollingStateFixedNode&amp; stateNode)

I’d just name this “node”.

&gt;&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp:100
&gt;&gt; +    if (m_constraints-&gt;anchorEdges() != 0) {
&gt; 
&gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]

You should obey the style bot here.

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp:114
&gt; +    if (m_constraints-&gt;alignmentOffset() != FloatSize()) {

I think !m_constraints-&gt;alignmentOffset() .isEmpty() would be better, if it generates the correct code. Or maybe !m_constraints-&gt;alignmentOffset().isZero()?

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp:119
&gt; +    if (m_constraints-&gt;viewportRectAtLastLayout() != FloatRect()) {

Ditto.

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp:125
&gt; +    if (m_constraints-&gt;layerPositionAtLastLayout() != FloatPoint()) {

Ditto.

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:31
&gt; +#include &quot;IntRect.h&quot;

This include doesn’t seem to be needed.

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:32
&gt; +#include &quot;Region.h&quot;

This include doesn’t seem to be needed.

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:36
&gt; +#include &lt;wtf/PassOwnPtr.h&gt;

I think this could include Forward.h instead of PassOwnPtr.h.

Please remove any other unneeded includes.

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:60
&gt; +    virtual bool isScrollingStateFixedNode() OVERRIDE { return true; }
&gt; +
&gt; +    virtual bool hasChangedProperties() const OVERRIDE { return m_changedProperties; }
&gt; +    virtual unsigned changedProperties() const OVERRIDE { return m_changedProperties; }
&gt; +    virtual void resetChangedProperties() OVERRIDE { m_changedProperties = 0; }

Can these overrides be private instead of public?

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:64
&gt; +    FixedPositionViewportConstraints* viewportConstraints() const { return m_constraints.get(); }

Can this return a const FixedPositionViewportConstraints* instead of a non-const?

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:66
&gt; +    virtual void dumpProperties(TextStream&amp;, int indent) const;

Please add OVERRIDE.

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:72
&gt; +    unsigned m_changedProperties;

The name here seems wrong. Since this variable does not contain properties, it should not be named “changed properties”. It should have the word “number” or “count” in its name.

Same for the getter function.

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:70
&gt; +    if (isScrollingStateScrollingNode())
&gt; +        clone = adoptPtr(new ScrollingStateScrollingNode(*toScrollingStateScrollingNode(this)));
&gt; +    else if (isScrollingStateFixedNode())
&gt; +        clone = adoptPtr(new ScrollingStateFixedNode(*toScrollingStateFixedNode(this)));

This seems like something that’s best done with a private virtual member function rather than a set of if statements. The node could clone itself.

Also, what does this function do if the node is neither type? It seems like it will just crash later. So the second if could just be an assertion instead of an if.

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:106
&gt; -    if (size_t index = m_children-&gt;find(node)) {
&gt; +    size_t index = m_children-&gt;find(node);
&gt; +    if (index != notFound) {

Why this change?

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.h:53
&gt;      virtual bool isScrollingStateScrollingNode() { return false; }
&gt; +    virtual bool isScrollingStateFixedNode() { return false; }

These virtual functions should be const. But also, we should remove them if we can. Such functions typically mean we have a design mistake.

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.h:63
&gt; +    GraphicsLayer* graphicsLayer() const { return m_graphicsLayer; }

Can this return a const GraphicsLayer* or be a non-const member function?

&gt; Source/WebCore/page/scrolling/ScrollingTree.cpp:172
&gt; +            OwnPtr&lt;ScrollingTreeNode&gt; newNode;
&gt; +            if (stateNode-&gt;isScrollingStateScrollingNode())
&gt; +                newNode = ScrollingTreeScrollingNode::create(this);
&gt; +            else if (stateNode-&gt;isScrollingStateFixedNode())
&gt; +                newNode = ScrollingTreeFixedNode::create(this);
&gt; +            else
&gt; +                ASSERT_NOT_REACHED();

This seems like something best done by a virtual function rather than a set of if statements.

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h:53
&gt; +    // Return whether this scrolling coordinator can keep fixed position layers fixed to their
&gt; +    // containers while scrolling.
&gt; +    virtual bool supportsFixedPositionLayers() const OVERRIDE { return true; }

Can this be private instead of public?

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h:85
&gt; +    // This function will update the ScrollingStateNode for the given viewport constrained object.
&gt; +    virtual void updateViewportConstrainedNode(ScrollingNodeID, PassOwnPtr&lt;ViewportConstraints&gt;, GraphicsLayer*) OVERRIDE;
&gt; +
&gt; +    // Called to synch the GraphicsLayer positions for child layers when their CALayers have been moved by the scrolling thread.
&gt; +    virtual void syncChildPositions(const IntRect&amp; viewportRect) OVERRIDE;

Can these be private instead of public?

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm:258
&gt; +            PassOwnPtr&lt;ScrollingStateFixedNode&gt; fixedNode = ScrollingStateFixedNode::create(m_scrollingStateTree.get(), newNodeID);

This should be OwnPtr. We don’t use PassOwnPtr for local variables.

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm:260
&gt; +            parent-&gt;appendChild(fixedNode);

Since we’ll be using OwnPtr, this will need to say fixedNode.release().

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm:390
&gt; +    ScrollingStateScrollingNode* rootNode = m_scrollingStateTree-&gt;rootStateNode();
&gt; +
&gt; +    Vector&lt;OwnPtr&lt;ScrollingStateNode&gt; &gt;* children = rootNode-&gt;children();

Not sure we need the rootNode local variable.

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm:397
&gt; +        FloatPoint newChildPos = child-&gt;viewportConstraints()-&gt;layerPositionForViewportRect(viewportRect);

Not a big fan of “pos” here. Could be “position”, in fact, could just be “position” or “childPosition” instead of “newChildPos”. I don’t think a longer name makes the super-local-scope variable meaning any clearer.

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h:47
&gt; +    virtual void update(ScrollingStateNode*) OVERRIDE;
&gt; +    virtual void parentScrollPositionDidChange(const IntRect&amp; viewportRect) OVERRIDE;

Can we make these virtual function overrides private?

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm:77
&gt; +    CGPoint newPosition = CGPointMake(layerPosition.x() - m_constraints-&gt;alignmentOffset().width() + anchorPoint.x * layerBounds.size.width,
&gt; +                                    layerPosition.y() - m_constraints-&gt;alignmentOffset().height() + anchorPoint.y * layerBounds.size.height);

The second line could just be indented by two. Or maybe we can find a way to write this so that the math is done on both dimensions at once rather than having to write the expression twice. I wish this just worked:

    layerPosition - m_constraints-&gt;alignmentOffset() + anchorPoint * layerBounds.size

It seems like we could make it work with C++ operator overloading, even if the overloaded operators were just in this file.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2523
&gt; +    // Also walk our our stacking contexts looking for a composited layer which is itself fixed.

This comment says what the code does, but not why. I think I understand why given the function name, but comment should say why rather than what.

&gt;&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2562
&gt;&gt; +    if (layer-&gt;renderer()-&gt;isStickyPositioned()) {
&gt; 
&gt; An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]

stylebot is right, although the code will look a little strange. Maybe factor this into two functions since there is almost no shared code.

&gt;&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2565
&gt;&gt; +        RenderBoxModelObject *renderer = toRenderBoxModelObject(layer-&gt;renderer());
&gt; 
&gt; Declaration has space between type name and * in RenderBoxModelObject *renderer  [whitespace/declaration] [3]

stylebot is right

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2606
&gt; +    return nullptr;

This may cause a compilation error on some platforms (Windows?) because it’s unreachable code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756777</commentid>
    <comment_count>4</comment_count>
      <attachid>171959</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-01 18:10:41 -0700</bug_when>
    <thetext>Comment on attachment 171959
Patch

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

&gt; Source/WebCore/page/FrameView.cpp:1860
&gt; +    // If the scrolling thread is updating the fixed elements, then we shouldn&apos;t update them again here.
&gt; +    if (Page* page = m_frame-&gt;page()) {
&gt; +        if (page-&gt;mainFrame() == m_frame) {
&gt; +            if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator()) {
&gt; +                if (scrollingCoordinator-&gt;supportsFixedPositionLayers() &amp;&amp; !scrollingCoordinator-&gt;shouldUpdateScrollLayerPositionOnMainThread()
&gt; +                    &amp;&amp; !inProgrammaticScroll())
&gt; +                    return;
&gt; +            }
&gt; +        }
&gt; +    }

Quite a mouthful. Can we package that up into a one-liner somehow? Can we pass in the info?

Should it be outside the #if USE(ACCELERATED_COMPOSITING) block?

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp:93
&gt; +    if (constraints-&gt;anchorEdges() != m_constraints-&gt;anchorEdges()) {
&gt; +        m_constraints-&gt;setAnchorEdges(constraints-&gt;anchorEdges());
&gt; +        m_changedProperties |= AnchorEdges;
&gt; +        m_scrollingStateTree-&gt;setHasChangedProperties(true);
&gt; +    }
&gt; +
&gt; +    if (constraints-&gt;alignmentOffset() != m_constraints-&gt;alignmentOffset()) {
&gt; +        m_constraints-&gt;setAlignmentOffset(constraints-&gt;alignmentOffset());
&gt; +        m_changedProperties |= AlignmentOffset;
&gt; +        m_scrollingStateTree-&gt;setHasChangedProperties(true);
&gt; +    }
&gt; +
&gt; +    if (constraints-&gt;viewportRectAtLastLayout() != m_constraints-&gt;viewportRectAtLastLayout()) {
&gt; +        m_constraints-&gt;setViewportRectAtLastLayout(constraints-&gt;viewportRectAtLastLayout());
&gt; +        m_changedProperties |= ViewportRectAtLastLayout;
&gt; +        m_scrollingStateTree-&gt;setHasChangedProperties(true);
&gt; +    }
&gt; +
&gt; +    if (constraints-&gt;layerPositionAtLastLayout() != m_constraints-&gt;layerPositionAtLastLayout()) {
&gt; +        m_constraints-&gt;setLayerPositionAtLastLayout(constraints-&gt;layerPositionAtLastLayout());
&gt; +        m_changedProperties |= LayerPositionAtLastLayout;
&gt; +        m_scrollingStateTree-&gt;setHasChangedProperties(true);
&gt; +    }

Can&apos;t we just make a FixedPositionViewportConstraint operator == and use that?

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:56
&gt; +    virtual bool isScrollingStateFixedNode() OVERRIDE { return true; }

I think isFixedNode() would be sufficient.

&gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:71
&gt; +    OwnPtr&lt;FixedPositionViewportConstraints&gt; m_constraints;

Just store by value. These are small. I think you could pass them around by value/reference in most places too.

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.h:53
&gt;      virtual bool isScrollingStateScrollingNode() { return false; }
&gt; +    virtual bool isScrollingStateFixedNode() { return false; }

isScrollingNode(), isFixedNode()

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.h:108
&gt; +    GraphicsLayer* m_graphicsLayer;

I think this is the most worrisome change in this patch. The guarantee that that this GraphicsLayer outlines the scrolling node is weak.

&gt; Source/WebCore/page/scrolling/ScrollingTreeNode.h:58
&gt; +    OwnPtr&lt;Vector&lt;OwnPtr&lt;ScrollingTreeNode&gt; &gt; &gt; m_children;

Might be nice to have  typedef for Vector&lt;OwnPtr&lt;ScrollingTreeNode&gt; &gt;

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h:82
&gt; +    virtual void updateViewportConstrainedNode(ScrollingNodeID, PassOwnPtr&lt;ViewportConstraints&gt;, GraphicsLayer*) OVERRIDE;

const ViewportConstraints&amp;

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h:85
&gt; +    virtual void syncChildPositions(const IntRect&amp; viewportRect) OVERRIDE;

We should probably start thinking about the viewport rect as a LayoutRect or FloatRect, given subpixel layout and scrolling in device pixels.

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm:289
&gt; +    m_scrollingStateTree-&gt;removeNode(node);
&gt; +
&gt; +    // ScrollingStateTree::removeNode() will destroy children, so we have to make sure we remove those children
&gt; +    // from the HashMap.
&gt; +    const Vector&lt;ScrollingNodeID&gt;&amp; removedNodes = m_scrollingStateTree-&gt;removedNodes();
&gt; +    size_t size = removedNodes.size();
&gt; +    for (size_t i = 0; i &lt; size; ++i)
&gt; +        m_stateNodeMap.remove(removedNodes[i]);

I&apos;m a bit confused about this apparently split of responsibility when removing nodes; why don&apos;t nodes remove themselves from the m_stateNodeMap?

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm:399
&gt; +    size_t size = children-&gt;size();
&gt; +    for (size_t i = 0; i &lt; size; ++i) {
&gt; +        ScrollingStateFixedNode* child = toScrollingStateFixedNode(children-&gt;at(i).get());
&gt; +        FloatPoint newChildPos = child-&gt;viewportConstraints()-&gt;layerPositionForViewportRect(viewportRect);
&gt; +        child-&gt;graphicsLayer()-&gt;setPosition(newChildPos);
&gt; +    }

Needs a FIXME that this will have to go deep in the tree at some point.

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h:52
&gt; +    OwnPtr&lt;FixedPositionViewportConstraints&gt; m_constraints;

By value.

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h:53
&gt; +    RetainPtr&lt;CALayer&gt; m_scrollLayer;

m_scrollLayer needs renaming.

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.mm:67
&gt; +    FixedPositionViewportConstraints* updatedConstraints = state-&gt;viewportConstraints();
&gt; +    if (state-&gt;changedProperties() &amp; ScrollingStateFixedNode::AnchorEdges)
&gt; +        m_constraints-&gt;setAnchorEdges(updatedConstraints-&gt;anchorEdges());
&gt; +    if (state-&gt;changedProperties() &amp; ScrollingStateFixedNode::AlignmentOffset)
&gt; +        m_constraints-&gt;setAlignmentOffset(updatedConstraints-&gt;alignmentOffset());
&gt; +    if (state-&gt;changedProperties() &amp; ScrollingStateFixedNode::ViewportRectAtLastLayout)
&gt; +        m_constraints-&gt;setViewportRectAtLastLayout(updatedConstraints-&gt;viewportRectAtLastLayout());
&gt; +    if (state-&gt;changedProperties() &amp; ScrollingStateFixedNode::LayerPositionAtLastLayout)
&gt; +        m_constraints-&gt;setLayerPositionAtLastLayout(updatedConstraints-&gt;layerPositionAtLastLayout());

Just copy the whole thing over.

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:1019
&gt; +    if (renderer()-&gt;style()-&gt;position() == FixedPosition)
&gt; +        nodeType = FixedNode;
&gt; +    else
&gt; +        nodeType = ScrollingNode;

what about (in future) position:fixed; overflow: scroll ?

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2530
&gt; +static bool isRootmostFixedOrStickyLayer(RenderLayer* layer)
&gt; +{
&gt; +    if (layer-&gt;renderer()-&gt;isStickyPositioned())
&gt; +        return true;
&gt; +
&gt; +    if (layer-&gt;renderer()-&gt;style()-&gt;position() != FixedPosition)
&gt; +        return false;
&gt; +
&gt; +    // Also walk our our stacking contexts looking for a composited layer which is itself fixed.
&gt; +    for (RenderLayer* stackingContext = layer-&gt;stackingContext(); stackingContext; stackingContext = stackingContext-&gt;stackingContext()) {
&gt; +        if (stackingContext-&gt;isComposited() &amp;&amp; stackingContext-&gt;renderer()-&gt;style()-&gt;position() == FixedPosition)
&gt; +            return false;
&gt; +    }
&gt; +
&gt; +    return true;
&gt; +}

This should share code with requriesCompositingForPosition()

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2538
&gt; +void RenderLayerCompositor::updateViewportConstraintStatus(RenderLayer* layer)
&gt; +{
&gt; +    if (isRootmostFixedOrStickyLayer(layer))
&gt; +        addViewportConstrainedLayer(layer);
&gt; +    else
&gt; +        removeViewportConstrainedLayer(layer);
&gt; +}

I don&apos;t really like how add/remove/updateFoo methods are sprinkled throughout the entire file. We should figure out a cleaner way to do this.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2622
&gt; +    RenderLayer* ancestor = layer-&gt;parent();
&gt; +    while (ancestor) {
&gt; +        if (RenderLayerBacking* backing = ancestor-&gt;backing()) {
&gt; +            if (backing-&gt;scrollLayerID())
&gt; +                return backing;
&gt; +        }
&gt; +        // If the fixed element is inside an overflow region, then we can&apos;t scroll it with the ScrollingCoordinator.
&gt; +        // We will be able to fix this when we get overflow regions scrolling with the ScrollingCoordinator.
&gt; +        if (layer-&gt;scrollsOverflow())
&gt; +            return 0;
&gt; +        ancestor = ancestor-&gt;parent();
&gt; +    }

The conflict between compositing being based on z-order, but clipping being based on parent order is apparent here. In z-order, your parent can be your sibling.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2653
&gt; +    // FIXME: We should support sticky position here!
&gt; +    if (layer-&gt;renderer()-&gt;isStickyPositioned())
&gt; +        return;
&gt; +
&gt; +    ScrollingCoordinator* scrollingCoordinator = this-&gt;scrollingCoordinator();
&gt; +    if (!scrollingCoordinator)
&gt; +        return;
&gt; +
&gt; +    if (!scrollingCoordinator-&gt;supportsFixedPositionLayers())
&gt; +        return;
&gt; +
&gt; +    // We will need to get non-main frames scrolling with the ScrollingCoordinator before we can get
&gt; +    // fixed position elements inside those frames to scroll with ScrollingCoordinator.
&gt; +    if (m_renderView-&gt;document()-&gt;ownerElement())
&gt; +        return;
&gt; +
&gt; +    ASSERT(layer-&gt;renderer()-&gt;style()-&gt;position() == FixedPosition);
&gt; +    ASSERT(m_viewportConstrainedLayers.contains(layer));
&gt; +    ASSERT(layer-&gt;isComposited());
&gt; +    if (!layer-&gt;parent())
&gt; +        return;
&gt; +
&gt; +    RenderLayerBacking* backing = layer-&gt;backing();
&gt; +    if (!backing)
&gt; +        return;

That all seems a bit verbose. Maybe collapse some of those tests onto one line.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2687
&gt; +void RenderLayerCompositor::registerAllViewportConstrainedLayers()
&gt; +{
&gt; +    HashSet&lt;RenderLayer*&gt;::const_iterator end = m_viewportConstrainedLayers.end();
&gt; +    for (HashSet&lt;RenderLayer*&gt;::const_iterator it = m_viewportConstrainedLayers.begin(); it != end; ++it)
&gt; +        registerOrUpdateViewportConstrainedLayer(*it);
&gt; +}
&gt; +
&gt; +void RenderLayerCompositor::unregisterAllViewportConstrainedLayers()
&gt; +{
&gt; +    HashSet&lt;RenderLayer*&gt;::const_iterator end = m_viewportConstrainedLayers.end();
&gt; +    for (HashSet&lt;RenderLayer*&gt;::const_iterator it = m_viewportConstrainedLayers.begin(); it != end; ++it)
&gt; +        unregisterViewportConstrainedLayer(*it);
&gt; +}

Should figure out if we really need these.

&gt; LayoutTests/platform/mac/tiled-drawing/tile-coverage-slow-scrolling.html:9
&gt; +            background-image: url(&apos;resources/64x32-red.png&apos;);

Why do you need an image resource here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756879</commentid>
    <comment_count>5</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-01 21:46:36 -0700</bug_when>
    <thetext>Thanks, Darin! I fixed almost everything you mentioned. For anything that I only partially changed or did not change, I made a note here:


(In reply to comment #3)
&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:60
&gt; &gt; +    virtual bool isScrollingStateFixedNode() OVERRIDE { return true; }
&gt; &gt; +
&gt; &gt; +    virtual bool hasChangedProperties() const OVERRIDE { return m_changedProperties; }
&gt; &gt; +    virtual unsigned changedProperties() const OVERRIDE { return m_changedProperties; }
&gt; &gt; +    virtual void resetChangedProperties() OVERRIDE { m_changedProperties = 0; }
&gt; 
&gt; Can these overrides be private instead of public?
&gt; 

changedProperties() needs to be public (the complier complains otherwise), but the others can be private.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:64
&gt; &gt; +    FixedPositionViewportConstraints* viewportConstraints() const { return m_constraints.get(); }
&gt; 
&gt; Can this return a const FixedPositionViewportConstraints* instead of a non-const?
&gt; 

Yes. I need an ugly const_cast in one place after this change, but that will go away when I fix the FixedPositionViewportConstraints copy constructor, which you have already requested, and which I plan to do very very soon.

&gt; 
&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateFixedNode.h:72
&gt; &gt; +    unsigned m_changedProperties;
&gt; 
&gt; The name here seems wrong. Since this variable does not contain properties, it should not be named “changed properties”. It should have the word “number” or “count” in its name.
&gt; 
&gt; Same for the getter function.
&gt;

Hmm, okay. I&apos;ll have to think this one over.
 
&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:106
&gt; &gt; -    if (size_t index = m_children-&gt;find(node)) {
&gt; &gt; +    size_t index = m_children-&gt;find(node);
&gt; &gt; +    if (index != notFound) {
&gt; 
&gt; Why this change?
&gt; 

Ah yes, this is a tricky bit. I added a comment. The bug was easy to encounter now that m_children might be anything other than null. The index will be notFound if the node to remove is a deeper-than-1-level descendant or if node is the root state node.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateNode.h:53
&gt; &gt;      virtual bool isScrollingStateScrollingNode() { return false; }
&gt; &gt; +    virtual bool isScrollingStateFixedNode() { return false; }
&gt; 
&gt; These virtual functions should be const. But also, we should remove them if we can. Such functions typically mean we have a design mistake.
&gt;

I think we might still need them in ScrollingTree::updateTreeFromStateNode(). Where we run through the state tree and use it to build up the scrolling tree. How else will we know which type of scrolling tree node to make?

&gt; &gt; Source/WebCore/page/scrolling/ScrollingTree.cpp:172
&gt; &gt; +            OwnPtr&lt;ScrollingTreeNode&gt; newNode;
&gt; &gt; +            if (stateNode-&gt;isScrollingStateScrollingNode())
&gt; &gt; +                newNode = ScrollingTreeScrollingNode::create(this);
&gt; &gt; +            else if (stateNode-&gt;isScrollingStateFixedNode())
&gt; &gt; +                newNode = ScrollingTreeFixedNode::create(this);
&gt; &gt; +            else
&gt; &gt; +                ASSERT_NOT_REACHED();
&gt; 
&gt; This seems like something best done by a virtual function rather than a set of if statements.
&gt; 

I couldn&apos;t work out how to make this happen without the if-statements. I don&apos;t think we want to add virtual functions to the state nodes to create scrolling tree nodes…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757570</commentid>
    <comment_count>6</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-02 14:18:39 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 171959 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171959&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/FrameView.cpp:1860
&gt; &gt; +    // If the scrolling thread is updating the fixed elements, then we shouldn&apos;t update them again here.
&gt; &gt; +    if (Page* page = m_frame-&gt;page()) {
&gt; &gt; +        if (page-&gt;mainFrame() == m_frame) {
&gt; &gt; +            if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator()) {
&gt; &gt; +                if (scrollingCoordinator-&gt;supportsFixedPositionLayers() &amp;&amp; !scrollingCoordinator-&gt;shouldUpdateScrollLayerPositionOnMainThread()
&gt; &gt; +                    &amp;&amp; !inProgrammaticScroll())
&gt; &gt; +                    return;
&gt; &gt; +            }
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Quite a mouthful. Can we package that up into a one-liner somehow? Can we pass in the info?
&gt; 

True. I changed it…my new code is still a mouthful, but it is at least in a separate function.

&gt; Should it be outside the #if USE(ACCELERATED_COMPOSITING) block?
&gt; 

Probably not.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateNode.h:108
&gt; &gt; +    GraphicsLayer* m_graphicsLayer;
&gt; 
&gt; I think this is the most worrisome change in this patch. The guarantee that that this GraphicsLayer outlines the scrolling node is weak.
&gt;

This is somewhat worrisome…but given that the node will be destroyed whenever the RenderLayerBacking is destroyed, I think we are probably safe. If we do end up finding crashes, we can do something else…but whatever it is will necessarily be less simple. I think we should stick with this simple solution first, especially because it SHOULD be safe. 


&gt; &gt; +    // ScrollingStateTree::removeNode() will destroy children, so we have to make sure we remove those children
&gt; &gt; +    // from the HashMap.
&gt; &gt; +    const Vector&lt;ScrollingNodeID&gt;&amp; removedNodes = m_scrollingStateTree-&gt;removedNodes();
&gt; &gt; +    size_t size = removedNodes.size();
&gt; &gt; +    for (size_t i = 0; i &lt; size; ++i)
&gt; &gt; +        m_stateNodeMap.remove(removedNodes[i]);
&gt; 
&gt; I&apos;m a bit confused about this apparently split of responsibility when removing nodes; why don&apos;t nodes remove themselves from the m_stateNodeMap?
&gt;

To do that, nodes (or the state tree) would have to know about the ScrollingCoordinator. They do not right now. Perhaps would should change that in the future.


&gt; &gt; Source/WebCore/rendering/RenderLayerBacking.cpp:1019
&gt; &gt; +    if (renderer()-&gt;style()-&gt;position() == FixedPosition)
&gt; &gt; +        nodeType = FixedNode;
&gt; &gt; +    else
&gt; &gt; +        nodeType = ScrollingNode;
&gt; 
&gt; what about (in future) position:fixed; overflow: scroll ?
&gt; 

Good question! I think we probably will want to make that a scrolling node and not a fixed node. I added a FIXME for now so that we can cross that bridge when we come to it.


&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2530
&gt; &gt; +static bool isRootmostFixedOrStickyLayer(RenderLayer* layer)
&gt; &gt; +{
&gt; &gt; +    if (layer-&gt;renderer()-&gt;isStickyPositioned())
&gt; &gt; +        return true;
&gt; &gt; +
&gt; &gt; +    if (layer-&gt;renderer()-&gt;style()-&gt;position() != FixedPosition)
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt; +    // Also walk our our stacking contexts looking for a composited layer which is itself fixed.
&gt; &gt; +    for (RenderLayer* stackingContext = layer-&gt;stackingContext(); stackingContext; stackingContext = stackingContext-&gt;stackingContext()) {
&gt; &gt; +        if (stackingContext-&gt;isComposited() &amp;&amp; stackingContext-&gt;renderer()-&gt;style()-&gt;position() == FixedPosition)
&gt; &gt; +            return false;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    return true;
&gt; &gt; +}
&gt; 
&gt; This should share code with requriesCompositingForPosition()
&gt; 

I don&apos;t see the connection here. Do you think this function should just call requriesCompositingForPosition() and return false if that is true before walking the stacking contexts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757611</commentid>
    <comment_count>7</comment_count>
      <attachid>172144</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-02 14:41:12 -0700</bug_when>
    <thetext>Created attachment 172144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758745</commentid>
    <comment_count>8</comment_count>
      <attachid>172370</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-05 11:39:14 -0800</bug_when>
    <thetext>Created attachment 172370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758802</commentid>
    <comment_count>9</comment_count>
      <attachid>172370</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-05 12:48:55 -0800</bug_when>
    <thetext>Comment on attachment 172370
Patch

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

&gt; Source/WebCore/page/FrameView.cpp:1853
&gt; +    if (!page)
&gt; +        return false;

Return true?

&gt; Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm:397
&gt; +        child-&gt;graphicsLayer()-&gt;setPosition(position);

Shouldn&apos;t this be a syncPosition()?

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2665
&gt; +        // If the fixed element is inside an overflow region, then we can&apos;t scroll it with the ScrollingCoordinator.
&gt; +        // We will be able to fix this when we get overflow regions scrolling with the ScrollingCoordinator.

Add a test for this?

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2677
&gt; +    // FIXME: We should support sticky position here! And we should eventuall support fixed/sticky elements
&gt; +    // that are inside non-main frames once we get non-main frames scrolling with the ScrollingCoordinator.

Would be good to have some tests with fixed/sticky things in subframes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758961</commentid>
    <comment_count>10</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-05 15:34:00 -0800</bug_when>
    <thetext>Thanks, Simon! Simon and I discussed his remaining comments in person.

http://trac.webkit.org/changeset/133536</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171959</attachid>
            <date>2012-11-01 17:37:03 -0700</date>
            <delta_ts>2012-11-02 14:41:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>82858</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzI0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MSBAQAorMjAxMi0xMS0wMSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMTAwMQorICAgICAgICBQYWdlcyB3aXRoIHBvc2l0aW9uOmZp
eGVkIGVsZW1lbnRzIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHNjcm9sbCBvbiAKKyAgICAgICAg
dGhlIHNjcm9sbGluZyB0aHJlYWQKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTA4NTczMTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBuZXcgY2xhc3Nlcy4gU2Ny
b2xsaW5nU3RhdGVGaXhlZE5vZGUgaXMgYSBjbGFzcyAKKyAgICAgICAgdG8gcmVwcmVzZW50IGZp
eGVkIG5vZGVzIGluIHRoZSBzdGF0ZSB0cmVlLCBhbmQgCisgICAgICAgIFNjcm9sbGluZ1RyZWVG
aXhlZE5vZGUgcmVwcmVzZW50cyBmaXhlZCBub2RlIGluIHRoZSBzY3JvbGxpbmcgdHJlZSAKKyAg
ICAgICAgb3ZlciBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgV2hlbiB3ZSBhcmUgKG5vbi1wcm9n
cmFtYXRpY2FsbHkpIHNjcm9sbGluZyBmaXhlZCBvYmplY3RzIG9uIHRoZSAKKyAgICAgICAgc2Ny
b2xsaW5nIHRocmVhZCwgd2UgZG8gbm90IHdhbnQgdG8gZG8gYW55IHdvcmsgaGVyZS4gCisgICAg
ICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1
cGRhdGVGaXhlZEVsZW1lbnRzQWZ0ZXJTY3JvbGxpbmcpOgorCisgICAgICAgIFdoZW5ldmVyIHdl
IHN5bmMgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYWluIGZyYW1lJ3MgbGF5ZXIsIHdlIGhhdmUgdG8g
CisgICAgICAgIGRvIHRoZSBzYW1lIGZvciBzY3JvbGxpbmcgdHJlZSBjaGlsZHJlbi4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRp
b24pOgorCisgICAgICAgIE5ldyBTY3JvbGxpbmdOb2RlVHlwZSAtLSBGaXhlZE5vZGUsIHlheSEg
QW5kIHR3byBuZXcgZnVuY3Rpb25zIAorICAgICAgICBzcGVjaWZpYyB0byBkZWFsaW5nIHdpdGgg
Rml4ZWROb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVZpZXdw
b3J0Q29uc3RyYWluZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzeW5jQ2hpbGRQb3NpdGlvbnMpOgorCisgICAgICAgIFRoaXMgaXMgdGhlIG5ldyBjbGFz
cyB0aGF0IHJlcHJlc2VudHMgZml4ZWQgbm9kZXMgaW4gdGhlIHN0YXRlIHRyZWUuIAorICAgICAg
ICBBbGwgb2YgdGhlIGNoYW5nZWQgcHJvcGVydGllcyBhcmUgc3RvcmVkIHdpdGhpbiAKKyAgICAg
ICAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMuCisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6U2Nyb2xsaW5nU3Rh
dGVGaXhlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6
On5TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZTo6dXBkYXRlQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nU3RhdGVGaXhlZE5vZGU6OmR1bXBQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OnZpZXdwb3J0Q29uc3RyYWludHMpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSk6CisKKyAgICAgICAgTWFrZSBz
dXJlIHRvIGNyZWF0ZSB0aGUgcmlnaHQgdHlwZSBvZiBjbG9uZSBmb3IgZWFjaCBub2RlLgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGU6OmNsb25lQW5kUmVzZXQpOgorCisgICAgICAgIE5v
dyB0aGF0IG1fY2hpbGRyZW4gbWF5IGJlIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCwgSSBmb3Vu
ZCB0aGlzIAorICAgICAgICBidWcuIFdlIGVuY291bnRlciBpdCB3aGVuIHRoZSBwYXJhbWV0ZXIg
dG8gcmVtb3ZlQ2hpbGQgaXMgdGhpcyBhbmQgd2UgCisgICAgICAgIHdhbnQgdG8gcmVtb3ZlIGFs
bCBvZiBvdXIgY2hpbGRyZW4uIEluIHRoYXQgY2FzZSwgdGhpcyBpcyBvYnZpb3VzbHkgCisgICAg
ICAgIG5vdCBmb3VuZCBpbiBpdHMgb3duIGNoaWxkIGFycmF5LgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nU3RhdGVOb2RlOjpyZW1vdmVDaGlsZCk6CisKKyAgICAgICAgU2Nyb2xsaW5nU3Rh
dGVOb2RlIG5vdyBjYWNoZXMgdGhlIEdyYXBoaWNzTGF5ZXIgaW4gYWRkaXRpb24gdG8gdGhlIAor
ICAgICAgICBQbGF0Zm9ybUxheWVyLiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gc3luYyB0aGUgR3Jh
cGhpY3NMYXllciBwb3NpdGlvbiAKKyAgICAgICAgYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWVzLgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjppc1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6Z3JhcGhpY3NMYXllcik6Cisg
ICAgICAgIChTY3JvbGxpbmdTdGF0ZU5vZGUpOgorCisgICAgICAgIEhhbmRsZSBmaXhlZCBub2Rl
cy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnVwZGF0ZVRyZWVGcm9tU3RhdGVOb2RlKToKKworICAg
ICAgICBOZXcgZnVuY3Rpb24gcGFyZW50U2Nyb2xsUG9zaXRpb25EaWRDaGFuZ2UoKSBpcyBjYWxs
ZWQgb24gY2hpbGRyZW4gCisgICAgICAgIHdoZW4gdGhlIHBhcmVudCBoYXMgc2Nyb2xsZWQuCisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaDoKKyAgICAgICAgKFNj
cm9sbGluZ1RyZWVOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAoU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUpOgor
CisgICAgICAgIFJldHVybiB0cnVlIGZvciBzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKS4g
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmg6
CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvck1hYyk6CisKKyAgICAgICAgSGFuZGxlIGZp
eGVkIG5vZGVzLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGlu
YXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjph
dHRhY2hUb1N0YXRlVHJlZSk6CisKKyAgICAgICAgTm93IHRoYXQgbV9jaGlsZHJlbiBjYW4gYmUg
bm9uLW51bGwgSSBjYXVnaHQgdGhpcyBwcmUtZXhpc3RpbmcgYnVnIAorICAgICAgICB3aGVyZSB3
ZSB3b3VsZCBjb21lIHRpbWVzIHJlbW92ZSBhIG5vZGUgd2l0aG91dCB1cGRhdGluZyB0aGUgSGFz
aE1hcC4gCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhhdCBieSBjb25zb2xpZGF0aW5nIHRo
ZSByZW1vdmFsIGludG8gb25lIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OmRldGFjaEZyb21TdGF0ZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNsZWFyU3RhdGVUcmVlKToKKworICAgICAgICBVcGRh
dGUgdGhlIEdyYXBoaWNzTGF5ZXJzIHRvIHJlZmxlY3QgdGhlIG5ldyBwb3NpdGlvbiB0aGF0IHRo
ZSAKKyAgICAgICAgU2Nyb2xsaW5nIHRocmVhZCBoYXMgbW92ZWQgdGhlIHVuZGVybHlpbmcgQ0FM
YXllciB0byBhbHJlYWR5LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnN5bmNDaGlsZFBvc2l0aW9ucyk6CisKKyAgICAgICAgUGFzcyBuZXcgY29uc3RyYWludHMg
b3ZlciB0byB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgbm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp1cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTm9kZSk6CisK
KyAgICAgICAgQ2FjaGUgdGhlIEdyYXBoaWNzTGF5ZXIgaW4gYWRkaXRpb24gdG8gdGhlIFBsYXRm
b3JtTGF5ZXIuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1N0YXRlTm9k
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xs
TGF5ZXIpOgorCisgICAgICAgIEhlcmUgaXMgdGhlIG5ldyBjbGFzcyB0aGF0IHJlcHJlc2VudHMg
Zml4ZWQgbm9kZXMgb3ZlciBvbiB0aGUgCisgICAgICAgIHNjcm9sbGluZyB0aHJlYWQuIAorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxpbmdUcmVlRml4ZWROb2RlKToK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVGaXhlZE5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRml4
ZWROb2RlOjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1RyZWVGaXhlZE5vZGU6On5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OnVwZGF0ZSk6CisKKyAgICAgICAgVGhpcyBp
cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gcmUtcG9zaXRpb24gdGhlIGZpeGVkIG9iamVjdCB3
aGVuIAorICAgICAgICBpdHMgcGFyZW50IGhhcyBzY3JvbGxlZCBzbyB0aGF0IGl0IGFwcGVhcnMg
dG8gaGF2ZSBub3QgbW92ZWQgYXQgYWxsLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZTo6cGFyZW50U2Nyb2xsUG9zaXRpb25EaWRDaGFuZ2UpOgorCisgICAgICAgIFdo
ZW5ldmVyIHdlIGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYSBzY3JvbGxpbmcgbGF5ZXIsIHRlbGwg
b3VyIAorICAgICAgICBjaGlsZHJlbi4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6CisKKyAgICAg
ICAgSGFuZGxlIGZpeGVkIG5vZGVzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjphdHRhY2hU
b1Njcm9sbGluZ0Nvb3JkaW5hdG9yKToKKworICAgICAgICBkZXRhY2hGcm9tU2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCBpdCBjYW4gYmUgCisgICAgICAg
IGNhbGxlZCBmcm9tIFJlbmRlckxheWVyQ29tcG9zaXRvciBmb3IgZml4ZWQgbm9kZXMuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAgICAgICAoUmVuZGVyTGF5
ZXJCYWNraW5nKToKKworICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3IgdGFrZXMgY29udHJv
bCBvZiBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBmaXhlZCAKKyAgICAgICAgbm9kZXMgdG8vZnJv
bSB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpkaWRGbHVzaENoYW5nZXNGb3JMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVJlbW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRNb3ZlT25zY3JlZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsTW92ZU9mZnNjcmVlbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsZWFyQmFja2luZ0Zv
ckxheWVySW5jbHVkaW5nRGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6aXNSb290bW9z
dEZpeGVkT3JTdGlja3lMYXllcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlVmlld3BvcnRDb25zdHJhaW50U3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVmlld3BvcnRD
b25zdHJhaW5lZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVtb3ZlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZVZpZXdwb3J0Q29uc3RyYWludHMpOgorICAgICAg
ICAoV2ViQ29yZTo6bmVhcmVzdFNjcm9sbGluZ0Nvb3JkaW5hdG9yQW5jZXN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWdpc3Rlck9yVXBkYXRlVmlld3Bv
cnRDb25zdHJhaW5lZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dW5yZWdpc3RlclZpZXdwb3J0Q29uc3RyYWluZWRMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5l
ZExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVucmVn
aXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFJl
bmRlckxheWVyQ29tcG9zaXRvcik6CisKIDIwMTItMTEtMDEgIE1heCBWdWpvdmljICA8bXZ1am92
aWNAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhZGVyc10gR2V0IHJpZCBvZiBpbnRlcm5h
bCB0ZXggY29vcmQgYXR0cmlidXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzMyMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTM0MTQsNiArMzQxNCwxMCBAQAogCQk5M0YxRDVDMTEyRDUzMzU2MDA4MzJCRUMgLyogSlNX
ZWJHTExvc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0YxRDVCRjEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExvc2VDb250ZXh0Lmgg
Ki87IH07CiAJCTkzRjZGMUVEMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y2RjFF
QTEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuY3BwICovOyB9OwogCQk5M0Y2
RjFFRTEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjZGMUVCMTI3RjcwQjEwMDU1Q0Iw
NiAvKiBXZWJHTENvbnRleHRFdmVudC5oICovOyB9OworCQk5M0Y4NjEyNjE2NDJGRjFFMDAwQ0Uw
REEgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGODYxMjQxNjQyRkYxRDAwMENFMERBIC8qIFNjcm9s
bGluZ1N0YXRlRml4ZWROb2RlLmNwcCAqLzsgfTsKKwkJOTNGODYxMjcxNjQyRkYxRTAwMENFMERB
IC8qIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y4NjEyNTE2NDJGRjFFMDAwQ0UwREEgLyogU2Nyb2xsaW5n
U3RhdGVGaXhlZE5vZGUuaCAqLzsgfTsKKwkJOTNGODYxMkIxNjQyRkYzNzAwMENFMERBIC8qIFNj
cm9sbGluZ1RyZWVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzRjg2MTI5MTY0MkZGMzcwMDBDRTBEQSAvKiBTY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmggKi87IH07CisJCTkzRjg2MTJDMTY0MkZGMzcwMDBDRTBEQSAvKiBTY3JvbGxpbmdU
cmVlRml4ZWROb2RlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNGODYxMkExNjQyRkYzNzAwMENFMERBIC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUu
bW0gKi87IH07CiAJCTkzRjkyNTQzMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5
MjU0MTBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjkyNTQ0MEY3RUY1Qjgw
MDdFMzdDOSAvKiBDaGVja2VkUmFkaW9CdXR0b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjkyNTQyMEY3RUY1QjgwMDdFMzdDOSAvKiBDaGVj
a2VkUmFkaW9CdXR0b25zLmNwcCAqLzsgfTsKIAkJOTNGOUI2NTcwQkEwRjM1RTAwODU0MDY0IC8q
IERPTUhUTUxDYW52YXNFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNGOUI2NTQwQkEwRjM1RTAwODU0MDY0IC8qIERPTUhUTUxDYW52YXNF
bGVtZW50Lm1tICovOyB9OwpAQCAtMTA2MzMsNiArMTA2MzcsMTAgQEAKIAkJOTNGNkYxRUExMjdG
NzBCMTAwNTVDQjA2IC8qIFdlYkdMQ29udGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMQ29udGV4dEV2ZW50LmNwcDsgcGF0aCA9IGNhbnZhcy9X
ZWJHTENvbnRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjZG
MUVCMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTENvbnRleHRFdmVudC5oOyBwYXRoID0gY2FudmFzL1dl
YkdMQ29udGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRjZGMUVD
MTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gV2ViR0xDb250ZXh0RXZlbnQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMQ29udGV4
dEV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNGODYxMjQxNjQyRkYx
RDAwMENFMERBIC8qIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNGODYxMjUxNjQyRkYxRTAwMENFMERBIC8qIFNjcm9s
bGluZ1N0YXRlRml4ZWROb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cm9sbGluZ1N0YXRlRml4ZWROb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkz
Rjg2MTI5MTY0MkZGMzcwMDBDRTBEQSAvKiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNGODYxMkExNjQyRkYzNzAwMENFMERBIC8qIFNj
cm9sbGluZ1RyZWVGaXhlZE5vZGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBTY3JvbGxpbmdUcmVlRml4ZWROb2RlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0Y4QjMwNTBBMzAwRkUxMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvci5wbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuc2NyaXB0LnBlcmw7IG5hbWUgPSBDb2RlR2VuZXJhdG9yLnBtOyBwYXRoID0g
c2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0Y4QjMwNjBBMzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB3cmFwc0xp
bmVzID0gMDsgfTsKIAkJOTNGOEIzMDcwQTMwMEZFQTAwRjYxQUI4IC8qIGdlbmVyYXRlLWJpbmRp
bmdzLnBsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9ICJnZW5lcmF0ZS1iaW5k
aW5ncy5wbCI7IHBhdGggPSAic2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDY1NSw2ICsxNDY2Myw4IEBACiAJCQkJMEY2MDVBRUIx
NUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8sCiAJCQkJMUFGNjJF
RTQxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKIAkJCQkx
QUY2MkVFNTE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLywKKwkJ
CQk5M0Y4NjEyNDE2NDJGRjFEMDAwQ0UwREEgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3Bw
ICovLAorCQkJCTkzRjg2MTI1MTY0MkZGMUUwMDBDRTBEQSAvKiBTY3JvbGxpbmdTdGF0ZUZpeGVk
Tm9kZS5oICovLAogCQkJCTkzMUNCRDA2MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0
ZU5vZGUuY3BwICovLAogCQkJCTkzMUNCRDA3MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdT
dGF0ZU5vZGUuaCAqLywKIAkJCQk5MzFDQkQwODE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlLmNwcCAqLywKQEAgLTE0NjgwLDYgKzE0NjkwLDggQEAKIAkJCQkx
QUY2MkVFMzE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0gKi8s
CiAJCQkJOTMxQ0JEMTIxNjFBNDRGODAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5t
bSAqLywKIAkJCQkxQUY2MkYyMzE0REFGRTkxMDA0MTU1NkMgLyogU2Nyb2xsaW5nVGhyZWFkTWFj
Lm1tICovLAorCQkJCTkzRjg2MTI5MTY0MkZGMzcwMDBDRTBEQSAvKiBTY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmggKi8sCisJCQkJOTNGODYxMkExNjQyRkYzNzAwMENFMERBIC8qIFNjcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUubW0gKi8sCiAJCQkJMUEzNTg2MkExNTI1MjI1NDAwMjJBNjU5IC8qIFNjcm9s
bGluZ1RyZWVNYWMubW0gKi8sCiAJCQkJOTNDNEE0MTMxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmggKi8sCiAJCQkJOTNDNEE0MTQxNjI5REY1QTAwQzNF
QjZFIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tICovLApAQCAtMjU3MTAsNiAr
MjU3MjIsOCBAQAogCQkJCTUwOTMzMzUwMTYzQjBFNDMwMDA5OUE2MCAvKiBDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MEQzMjg1ODE2M0IzMTNGMDAxNjEx
MUUgLyogVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzRkZGRjlBOTE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk5M0Y4NjEyNzE2NDJGRjFFMDAwQ0UwREEgLyogU2Nyb2xsaW5nU3Rh
dGVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRjg2MTJCMTY0MkZGMzcwMDBDRTBE
QSAvKiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI4Nzk2LDYg
KzI4ODEwLDggQEAKIAkJCQkxQUEyMTI1MDE2M0YwREE4MDAwMEU2M0YgLyogQXRvbWljU3RyaW5n
Q0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTBEMzI4NTcxNjNCMzEzRjAwMTYxMTFFIC8qIFZh
bGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzRkZG
RjlBODE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTkzRjg2MTI2MTY0MkZGMUUwMDBDRTBEQSAvKiBTY3JvbGxpbmdTdGF0ZUZp
eGVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0Y4NjEyQzE2NDJGRjM3MDAwQ0UwREEg
LyogU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTMzMjA4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQ3LDExICsxODQ3LDIyIEBA
IHZvaWQgRnJhbWVWaWV3OjpyZXBhaW50Rml4ZWRFbGVtZW50c0FmdGUKIAogdm9pZCBGcmFtZVZp
ZXc6OnVwZGF0ZUZpeGVkRWxlbWVudHNBZnRlclNjcm9sbGluZygpCiB7CisjaWYgRU5BQkxFKFRI
UkVBREVEX1NDUk9MTElORykKKyAgICAvLyBJZiB0aGUgc2Nyb2xsaW5nIHRocmVhZCBpcyB1cGRh
dGluZyB0aGUgZml4ZWQgZWxlbWVudHMsIHRoZW4gd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGVtIGFn
YWluIGhlcmUuCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKKyAgICAg
ICAgaWYgKHBhZ2UtPm1haW5GcmFtZSgpID09IG1fZnJhbWUpIHsKKyAgICAgICAgICAgIGlmIChT
Y3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxp
bmdDb29yZGluYXRvcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5zdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSAmJiAhc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPnNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKQorICAgICAg
ICAgICAgICAgICAgICAmJiAhaW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChtX25lc3RlZExheW91dENv
dW50IDw9IDEgJiYgaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkgewotICAgICAgICBp
ZiAoUmVuZGVyVmlldyogcm9vdCA9IHJvb3RSZW5kZXJlcih0aGlzKSkgeworICAgICAgICBpZiAo
UmVuZGVyVmlldyogcm9vdCA9IHJvb3RSZW5kZXJlcih0aGlzKSkKICAgICAgICAgICAgIHJvb3Qt
PmNvbXBvc2l0b3IoKS0+dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVP
blNjcm9sbCk7Ci0gICAgICAgIH0KICAgICB9CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJ
KHJldmlzaW9uIDEzMzIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDggKzI0MCwxMCBAQCB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhCiAgICAgaWYgKEdyYXBoaWNz
TGF5ZXIqIHNjcm9sbExheWVyID0gc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkg
ewogICAgICAgICBpZiAocHJvZ3JhbW1hdGljU2Nyb2xsKQogICAgICAgICAgICAgc2Nyb2xsTGF5
ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICBl
bHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc2Nyb2xsTGF5ZXItPnN5bmNQb3NpdGlv
bigtZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIHN5bmNDaGlsZFBv
c2l0aW9ucyhmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpKTsKKyAgICAgICAgfQogICAg
IH0KICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAxMzMyMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRl
ICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KQEAgLTQ4LDggKzQ5LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBNYWluVGhyZWFk
U2Nyb2xsaW5nUmVhcwogdHlwZWRlZiB1aW50NjRfdCBTY3JvbGxpbmdOb2RlSUQ7CiAKIGVudW0g
U2Nyb2xsaW5nTm9kZVR5cGUgewotICAgIFNjcm9sbGluZ05vZGUKLSAgICAvLyBGSVhNRTogVGhp
cyB3aWxsIHNvb24gY29udGFpbiBvdGhlciB0eXBlcyBzdWNoIGFzIEZpeGVkTm9kZS4KKyAgICBT
Y3JvbGxpbmdOb2RlLAorICAgIEZpeGVkTm9kZQogfTsKIAogY2xhc3MgRnJhbWU7CkBAIC02MSw2
ICs2Miw3IEBAIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVOb2Rl
OwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwogY2xhc3MgU2Nyb2xsaW5nU3Rh
dGVUcmVlOworY2xhc3MgVmlld3BvcnRDb25zdHJhaW50czsKIAogI2lmIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCiBjbGFzcyBTY3JvbGxpbmdUcmVlOwpAQCAtMTE3LDYgKzExOSw4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFNjcm9sbGluZ05vZGVJRCBhdHRhY2hUb1N0YXRlVHJlZShTY3Jv
bGxpbmdOb2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEIG5ld05vZGVJRCwgU2Nyb2xsaW5nTm9kZUlE
IC8qcGFyZW50SUQqLykgeyByZXR1cm4gbmV3Tm9kZUlEOyB9CiAgICAgdmlydHVhbCB2b2lkIGRl
dGFjaEZyb21TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJTdGF0ZVRyZWUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRDb25z
dHJhaW5lZE5vZGUoU2Nyb2xsaW5nTm9kZUlELCBQYXNzT3duUHRyPFZpZXdwb3J0Q29uc3RyYWlu
dHM+LCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHN5bmNDaGlsZFBvc2l0
aW9ucyhjb25zdCBJbnRSZWN0JikgeyB9CiAgICAgdmlydHVhbCBTdHJpbmcgc2Nyb2xsaW5nU3Rh
dGVUcmVlQXNUZXh0KCkgY29uc3Q7CiAKICAgICAvLyBHZW5lcmF0ZWQgYSB1bmlxdWUgaWQgZm9y
IHNjcm9sbCBsYXllcnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZUZpeGVkTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oIgorCisjaW5jbHVk
ZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUu
aCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisj
aWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQ
YXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlPiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZTo6Y3JlYXRlKFNjcm9sbGluZ1N0YXRlVHJlZSogc3RhdGVUcmVlLCBTY3JvbGxpbmdOb2RlSUQg
bm9kZUlEKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsaW5nU3RhdGVGaXhlZE5v
ZGUoc3RhdGVUcmVlLCBub2RlSUQpKTsKK30KKworU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OlNj
cm9sbGluZ1N0YXRlRml4ZWROb2RlKFNjcm9sbGluZ1N0YXRlVHJlZSogc3RhdGVUcmVlLCBTY3Jv
bGxpbmdOb2RlSUQgbm9kZUlEKQorICAgIDogU2Nyb2xsaW5nU3RhdGVOb2RlKHN0YXRlVHJlZSwg
bm9kZUlEKQorICAgICwgbV9jaGFuZ2VkUHJvcGVydGllcygwKQoreworfQorCitTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUoY29uc3QgU2Nyb2xsaW5nU3Rh
dGVGaXhlZE5vZGUmIHN0YXRlTm9kZSkKKyAgICA6IFNjcm9sbGluZ1N0YXRlTm9kZShzdGF0ZU5v
ZGUpCisgICAgLCBtX2NvbnN0cmFpbnRzKGFkb3B0UHRyKG5ldyBGaXhlZFBvc2l0aW9uVmlld3Bv
cnRDb25zdHJhaW50cyhzdGF0ZU5vZGUudmlld3BvcnRDb25zdHJhaW50cygpKSkpCisgICAgLCBt
X2NoYW5nZWRQcm9wZXJ0aWVzKHN0YXRlTm9kZS5jaGFuZ2VkUHJvcGVydGllcygpKQoreworfQor
CitTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6flNjcm9sbGluZ1N0YXRlRml4ZWROb2RlKCkKK3sK
K30KKwordm9pZCBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6dXBkYXRlQ29uc3RyYWludHMoUGFz
c093blB0cjxGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cz4gY29uc3RyYWludHMpCit7
CisgICAgaWYgKCFtX2NvbnN0cmFpbnRzKSB7CisgICAgICAgIG1fY29uc3RyYWludHMgPSBjb25z
dHJhaW50czsKKyAgICAgICAgbV9jaGFuZ2VkUHJvcGVydGllcyA9IEFuY2hvckVkZ2VzIHwgQWxp
Z25tZW50T2Zmc2V0IHwgVmlld3BvcnRSZWN0QXRMYXN0TGF5b3V0IHwgTGF5ZXJQb3NpdGlvbkF0
TGFzdExheW91dDsKKyAgICAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQ
cm9wZXJ0aWVzKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgd2Ug
aGF2ZSBhbiBleGlzdGluZyBjb250cmFpbnRzIG9iamVjdCwgdGhlbiB3ZSBqdXN0IHdhbnQgdG8g
dXBkYXRlIHdoYXRldmVyIGhhcyBjaGFuZ2VkLiBTbworICAgIC8vIHdlJ2xsIGdvIHRocm91Z2gg
ZWFjaCBvZiB0aGUgcHJvcGVydGllcy4KKyAgICBpZiAoY29uc3RyYWludHMtPmFuY2hvckVkZ2Vz
KCkgIT0gbV9jb25zdHJhaW50cy0+YW5jaG9yRWRnZXMoKSkgeworICAgICAgICBtX2NvbnN0cmFp
bnRzLT5zZXRBbmNob3JFZGdlcyhjb25zdHJhaW50cy0+YW5jaG9yRWRnZXMoKSk7CisgICAgICAg
IG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gQW5jaG9yRWRnZXM7CisgICAgICAgIG1fc2Nyb2xsaW5n
U3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKKyAgICB9CisKKyAgICBp
ZiAoY29uc3RyYWludHMtPmFsaWdubWVudE9mZnNldCgpICE9IG1fY29uc3RyYWludHMtPmFsaWdu
bWVudE9mZnNldCgpKSB7CisgICAgICAgIG1fY29uc3RyYWludHMtPnNldEFsaWdubWVudE9mZnNl
dChjb25zdHJhaW50cy0+YWxpZ25tZW50T2Zmc2V0KCkpOworICAgICAgICBtX2NoYW5nZWRQcm9w
ZXJ0aWVzIHw9IEFsaWdubWVudE9mZnNldDsKKyAgICAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUt
PnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUpOworICAgIH0KKworICAgIGlmIChjb25zdHJh
aW50cy0+dmlld3BvcnRSZWN0QXRMYXN0TGF5b3V0KCkgIT0gbV9jb25zdHJhaW50cy0+dmlld3Bv
cnRSZWN0QXRMYXN0TGF5b3V0KCkpIHsKKyAgICAgICAgbV9jb25zdHJhaW50cy0+c2V0Vmlld3Bv
cnRSZWN0QXRMYXN0TGF5b3V0KGNvbnN0cmFpbnRzLT52aWV3cG9ydFJlY3RBdExhc3RMYXlvdXQo
KSk7CisgICAgICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgfD0gVmlld3BvcnRSZWN0QXRMYXN0TGF5
b3V0OworICAgICAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRp
ZXModHJ1ZSk7CisgICAgfQorCisgICAgaWYgKGNvbnN0cmFpbnRzLT5sYXllclBvc2l0aW9uQXRM
YXN0TGF5b3V0KCkgIT0gbV9jb25zdHJhaW50cy0+bGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dCgp
KSB7CisgICAgICAgIG1fY29uc3RyYWludHMtPnNldExheWVyUG9zaXRpb25BdExhc3RMYXlvdXQo
Y29uc3RyYWludHMtPmxheWVyUG9zaXRpb25BdExhc3RMYXlvdXQoKSk7CisgICAgICAgIG1fY2hh
bmdlZFByb3BlcnRpZXMgfD0gTGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dDsKKyAgICAgICAgbV9z
Y3JvbGxpbmdTdGF0ZVRyZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKHRydWUpOworICAgIH0K
K30KKwordm9pZCBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6ZHVtcFByb3BlcnRpZXMoVGV4dFN0
cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgdHMgPDwgIigiIDw8ICJGaXhlZCBu
b2RlIiA8PCAiXG4iOworCisgICAgaWYgKG1fY29uc3RyYWludHMtPmFuY2hvckVkZ2VzKCkgIT0g
MCkgeworICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CisgICAgICAgIHRzIDw8
ICIoYW5jaG9yIGVkZ2VzOiAiOworICAgICAgICBpZiAobV9jb25zdHJhaW50cy0+aGFzQW5jaG9y
RWRnZShWaWV3cG9ydENvbnN0cmFpbnRzOjpBbmNob3JFZGdlTGVmdCkpCisgICAgICAgICAgICB0
cyA8PCAiQW5jaG9yRWRnZUxlZnQgIjsKKyAgICAgICAgaWYgKG1fY29uc3RyYWludHMtPmhhc0Fu
Y2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZVJpZ2h0KSkKKyAgICAgICAg
ICAgIHRzIDw8ICJBbmNob3JFZGdlUmlnaHQgIjsKKyAgICAgICAgaWYgKG1fY29uc3RyYWludHMt
Pmhhc0FuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZVRvcCkpCisgICAg
ICAgICAgICB0cyA8PCAiQW5jaG9yRWRnZVRvcCI7CisgICAgICAgIGlmIChtX2NvbnN0cmFpbnRz
LT5oYXNBbmNob3JFZGdlKFZpZXdwb3J0Q29uc3RyYWludHM6OkFuY2hvckVkZ2VCb3R0b20pKQor
ICAgICAgICAgICAgdHMgPDwgIkFuY2hvckVkZ2VCb3R0b20iOworICAgICAgICB0cyA8PCAiKVxu
IjsKKyAgICB9CisKKyAgICBpZiAobV9jb25zdHJhaW50cy0+YWxpZ25tZW50T2Zmc2V0KCkgIT0g
RmxvYXRTaXplKCkpIHsKKyAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOworICAg
ICAgICB0cyA8PCAiKGFsaWdubWVudCBvZmZzZXQgIiA8PCBtX2NvbnN0cmFpbnRzLT5hbGlnbm1l
bnRPZmZzZXQoKS53aWR0aCgpIDw8ICIgIiA8PCBtX2NvbnN0cmFpbnRzLT5hbGlnbm1lbnRPZmZz
ZXQoKS5oZWlnaHQoKSA8PCAiKVxuIjsKKyAgICB9CisKKyAgICBpZiAobV9jb25zdHJhaW50cy0+
dmlld3BvcnRSZWN0QXRMYXN0TGF5b3V0KCkgIT0gRmxvYXRSZWN0KCkpIHsKKyAgICAgICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCArIDEpOworICAgICAgICBGbG9hdFJlY3Qgdmlld3BvcnRSZWN0
ID0gbV9jb25zdHJhaW50cy0+dmlld3BvcnRSZWN0QXRMYXN0TGF5b3V0KCk7CisgICAgICAgIHRz
IDw8ICIodmlld3BvcnQgcmVjdCBhdCBsYXN0IGxheW91dDogIiA8PCB2aWV3cG9ydFJlY3QueCgp
IDw8ICIgIiA8PCB2aWV3cG9ydFJlY3QueSgpIDw8ICIgIiA8PCB2aWV3cG9ydFJlY3Qud2lkdGgo
KSA8PCAiICIgPDwgdmlld3BvcnRSZWN0LmhlaWdodCgpIDw8ICIpXG4iOworICAgIH0KKworICAg
IGlmIChtX2NvbnN0cmFpbnRzLT5sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KCkgIT0gRmxvYXRQ
b2ludCgpKSB7CisgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKKyAgICAgICAg
dHMgPDwgIihsYXllciBwb3NpdGlvbiBhdCBsYXN0IGxheW91dCAiIDw8IG1fY29uc3RyYWludHMt
PmxheWVyUG9zaXRpb25BdExhc3RMYXlvdXQoKS54KCkgPDwgIiAiIDw8IG1fY29uc3RyYWludHMt
PmxheWVyUG9zaXRpb25BdExhc3RMYXlvdXQoKS55KCkgPDwgIilcbiI7CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xM
SU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVG
aXhlZE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nU3RhdGVGaXhlZE5v
ZGVfaAorI2RlZmluZSBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZV9oCisKKyNpZiBFTkFCTEUoVEhS
RUFERURfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlJlZ2lv
bi5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZU5vZGUuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpeGVkUG9zaXRp
b25WaWV3cG9ydENvbnN0cmFpbnRzOworCitjbGFzcyBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSA6
IHB1YmxpYyBTY3JvbGxpbmdTdGF0ZU5vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlPiBjcmVhdGUoU2Nyb2xsaW5nU3RhdGVUcmVlKiwg
U2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlKGNvbnN0IFNj
cm9sbGluZ1N0YXRlRml4ZWROb2RlJik7CisgICAgdmlydHVhbCB+U2Nyb2xsaW5nU3RhdGVGaXhl
ZE5vZGUoKTsKKworICAgIGVudW0gQ2hhbmdlZFByb3BlcnR5Rm9yRml4ZWQgeworICAgICAgICBB
bmNob3JFZGdlcyA9IDEgPDwgMCwKKyAgICAgICAgQWxpZ25tZW50T2Zmc2V0ID0gMSA8PCAxLAor
ICAgICAgICBWaWV3cG9ydFJlY3RBdExhc3RMYXlvdXQgPSAxIDw8IDIsCisgICAgICAgIExheWVy
UG9zaXRpb25BdExhc3RMYXlvdXQgPSAxIDw8IDMKKyAgICB9OworCisgICAgdmlydHVhbCBib29s
IGlzU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUoKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX2NoYW5nZWRQcm9wZXJ0aWVzOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBjaGFu
Z2VkUHJvcGVydGllcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY2hhbmdlZFByb3BlcnRp
ZXM7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRDaGFuZ2VkUHJvcGVydGllcygpIE9WRVJSSURF
IHsgbV9jaGFuZ2VkUHJvcGVydGllcyA9IDA7IH0KKworICAgIHZvaWQgdXBkYXRlQ29uc3RyYWlu
dHMoUGFzc093blB0cjxGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cz4pOworCisgICAg
Rml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMqIHZpZXdwb3J0Q29uc3RyYWludHMoKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0cmFpbnRzLmdldCgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCitwcml2YXRl
OgorICAgIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlKFNjcm9sbGluZ1N0YXRlVHJlZSosIFNjcm9s
bGluZ05vZGVJRCk7CisKKyAgICBPd25QdHI8Rml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWlu
dHM+IG1fY29uc3RyYWludHM7CisgICAgdW5zaWduZWQgbV9jaGFuZ2VkUHJvcGVydGllczsKK307
CisKK2lubGluZSBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSogdG9TY3JvbGxpbmdTdGF0ZUZpeGVk
Tm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5v
ZGUtPmlzU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlKj4obm9kZSk7Cit9CisgICAgCisvLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvU2Nyb2xsaW5n
U3RhdGVGaXhlZE5vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUqKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
KworI2VuZGlmIC8vIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkocmV2
aXNpb24gMTMzMjA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlTm9kZS5oIgogCisjaW5jbHVkZSAi
U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUu
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKQEAgLTYxLDcgKzYyLDEyIEBAIFNjcm9sbGlu
Z1N0YXRlTm9kZTo6flNjcm9sbGluZ1N0YXRlTm9kZSgKIAogUGFzc093blB0cjxTY3JvbGxpbmdT
dGF0ZU5vZGU+IFNjcm9sbGluZ1N0YXRlTm9kZTo6Y2xvbmVBbmRSZXNldCgpCiB7Ci0gICAgT3du
UHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4gY2xvbmUgPSBhZG9wdFB0cihuZXcgU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKCp0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSh0
aGlzKSkpOworICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lOworCisgICAgaWYg
KGlzU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKCkpCisgICAgICAgIGNsb25lID0gYWRvcHRQ
dHIobmV3IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgqdG9TY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUodGhpcykpKTsKKyAgICBlbHNlIGlmIChpc1Njcm9sbGluZ1N0YXRlRml4ZWROb2Rl
KCkpCisgICAgICAgIGNsb25lID0gYWRvcHRQdHIobmV3IFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
KCp0b1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlKHRoaXMpKSk7CiAKICAgICAvLyBOb3cgdGhhdCB0
aGlzIG5vZGUgaXMgY2xvbmVkLCByZXNldCBvdXIgY2hhbmdlIHByb3BlcnRpZXMuCiAgICAgc2V0
U2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoZmFsc2UpOwpAQCAtOTYsNyArMTAyLDggQEAgdm9pZCBTY3Jv
bGxpbmdTdGF0ZU5vZGU6OnJlbW92ZUNoaWxkKFNjcgogICAgIGlmICghbV9jaGlsZHJlbikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHNpemVfdCBpbmRleCA9IG1fY2hpbGRyZW4tPmZpbmQo
bm9kZSkpIHsKKyAgICBzaXplX3QgaW5kZXggPSBtX2NoaWxkcmVuLT5maW5kKG5vZGUpOworICAg
IGlmIChpbmRleCAhPSBub3RGb3VuZCkgewogICAgICAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+
ZGlkUmVtb3ZlTm9kZShub2RlLT5zY3JvbGxpbmdOb2RlSUQoKSk7CiAgICAgICAgIG1fY2hpbGRy
ZW4tPnJlbW92ZShpbmRleCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCShyZXZpc2lvbiAx
MzMyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+U2Nyb2xsaW5nU3RhdGVOb2RlKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlKCkgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIFBhc3NP
d25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiBjbG9uZUFuZFJlc2V0KCk7CiAgICAgdm9pZCBjbG9u
ZUFuZFJlc2V0Q2hpbGRyZW4oU2Nyb2xsaW5nU3RhdGVOb2RlKik7CkBAIC01OSw4ICs2MCw5IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRDaGFuZ2VkUHJvcGVydGllcygpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0SGFzQ2hhbmdlZFByb3BlcnRpZXMoKSB7IHNldFNjcm9sbExh
eWVyRGlkQ2hhbmdlKHRydWUpOyB9CiAKKyAgICBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVy
KCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0xheWVyOyB9CiAgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1TY3JvbGxMYXllcigpIGNvbnN0OwotICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoY29u
c3QgR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXll
ciopOwogICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoUGxhdGZvcm1MYXllciopOwogCiAgICAgYm9v
bCBzY3JvbGxMYXllckRpZENoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJEaWRD
aGFuZ2U7IH0KQEAgLTEwMyw2ICsxMDUsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9wbGF0Zm9ybVNjcm9sbExheWVyOwogI2Vu
ZGlmCisgICAgR3JhcGhpY3NMYXllciogbV9ncmFwaGljc0xheWVyOwogCiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcAkocmV2
aXNpb24gMTMzMjA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTY3Jv
bGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVGaXhlZE5v
ZGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTE2
Miw5ICsxNjMsMTMgQEAgdm9pZCBTY3JvbGxpbmdUcmVlOjp1cGRhdGVUcmVlRnJvbVN0YXRlTgog
ICAgICAgICAgICAgbV9ub2RlTWFwLnNldChzdGF0ZU5vZGUtPnNjcm9sbGluZ05vZGVJRCgpLCBt
X3Jvb3ROb2RlLmdldCgpKTsKICAgICAgICAgICAgIG1fcm9vdE5vZGUtPnVwZGF0ZShzdGF0ZU5v
ZGUpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IEluIHRoZSBmdXR1
cmUsIHdlIHdpbGwgaGF2ZSBtb3JlIHRoYW4ganVzdCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZSwgc28gd2UnbGwgaGF2ZSB0bwotICAgICAgICAgICAgLy8gZmlndXJlIG91dCB3aGljaCB0eXBl
IG9mIG5vZGUgdG8gY3JlYXRlLgotICAgICAgICAgICAgT3duUHRyPFNjcm9sbGluZ1RyZWVOb2Rl
PiBuZXdOb2RlID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNyZWF0ZSh0aGlzKTsKKyAg
ICAgICAgICAgIE93blB0cjxTY3JvbGxpbmdUcmVlTm9kZT4gbmV3Tm9kZTsKKyAgICAgICAgICAg
IGlmIChzdGF0ZU5vZGUtPmlzU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKCkpCisgICAgICAg
ICAgICAgICAgbmV3Tm9kZSA9IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpjcmVhdGUodGhp
cyk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZU5vZGUtPmlzU2Nyb2xsaW5nU3RhdGVGaXhl
ZE5vZGUoKSkKKyAgICAgICAgICAgICAgICBuZXdOb2RlID0gU2Nyb2xsaW5nVHJlZUZpeGVkTm9k
ZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIG5ld05vZGVS
YXdQdHIgPSBuZXdOb2RlLmdldCgpOwogICAgICAgICAgICAgbV9ub2RlTWFwLnNldChzdGF0ZU5v
ZGUtPnNjcm9sbGluZ05vZGVJRCgpLCBuZXdOb2RlUmF3UHRyKTsKICAgICAgICAgICAgIFNjcm9s
bGluZ1RyZWVOb2RlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbm9kZU1hcC5maW5kKHN0YXRl
Tm9kZS0+cGFyZW50KCktPnNjcm9sbGluZ05vZGVJRCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAkocmV2aXNpb24gMTMz
MjA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlKFNjcm9sbGluZ1N0YXRlTm9kZSopID0gMDsKIAorICAgIHZpcnR1YWwgdm9p
ZCBwYXJlbnRTY3JvbGxQb3NpdGlvbkRpZENoYW5nZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJl
Y3QpID0gMDsKKwogICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCB7
IHJldHVybiBtX25vZGVJRDsgfQogICAgIHZvaWQgc2V0U2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGlu
Z05vZGVJRCBub2RlSUQpIHsgbV9ub2RlSUQgPSBub2RlSUQ7IH0KIApAQCAtNTMsNiArNTUsNyBA
QCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVl
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdUcmVlOyB9CisgICAgT3duUHRyPFZlY3RvcjxP
d25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+ID4gPiBtX2NoaWxkcmVuOwogCiBwcml2YXRlOgogICAg
IFNjcm9sbGluZ1RyZWUqIG1fc2Nyb2xsaW5nVHJlZTsKQEAgLTYwLDcgKzYzLDYgQEAgcHJpdmF0
ZToKICAgICBTY3JvbGxpbmdOb2RlSUQgbV9ub2RlSUQ7CiAKICAgICBTY3JvbGxpbmdUcmVlTm9k
ZSogbV9wYXJlbnQ7Ci0gICAgT3duUHRyPFZlY3RvcjxPd25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+
ID4gPiBtX2NoaWxkcmVuOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAxMzMyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0NiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Nyb2xsaW5nU3RhdGVOb2Rl
KikgT1ZFUlJJREU7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGltcGxlbWVudCB0aGlzIHdo
ZW4gd2Ugc3VwcG9ydCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZXMgYXMgY2hpbGRyZW4uCisg
ICAgdmlydHVhbCB2b2lkIHBhcmVudFNjcm9sbFBvc2l0aW9uRGlkQ2hhbmdlKGNvbnN0IEludFJl
Y3QmIC8qdmlld3BvcnRSZWN0Ki8pIE9WRVJSSURFIHsgfQorCiAgICAgdmlydHVhbCB2b2lkIGhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjLmgJKHJldmlzaW9uIDEzMzIwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3
aGVuZXZlciB0aGUgcm9vdCBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcy4K
ICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyop
OwogCisgICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBzY3JvbGxpbmcgY29vcmRpbmF0b3IgY2Fu
IGtlZXAgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGZpeGVkIHRvIHRoZWlyCisgICAgLy8gY29udGFp
bmVycyB3aGlsZSBzY3JvbGxpbmcuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRml4ZWRQb3Np
dGlvbkxheWVycygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIC8vIFNo
b3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGxheWVyIGZv
ciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgogICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZp
ZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgR3JhcGhpY3NM
YXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKTsKIApAQCAtNzQsNiArNzgsMTIgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KCkgY29u
c3QgT1ZFUlJJREU7CiAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIHRoZSBTY3Jv
bGxpbmdTdGF0ZU5vZGUgZm9yIHRoZSBnaXZlbiB2aWV3cG9ydCBjb25zdHJhaW5lZCBvYmplY3Qu
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWROb2RlKFNjcm9sbGlu
Z05vZGVJRCwgUGFzc093blB0cjxWaWV3cG9ydENvbnN0cmFpbnRzPiwgR3JhcGhpY3NMYXllciop
IE9WRVJSSURFOworCisgICAgLy8gQ2FsbGVkIHRvIHN5bmNoIHRoZSBHcmFwaGljc0xheWVyIHBv
c2l0aW9ucyBmb3IgY2hpbGQgbGF5ZXJzIHdoZW4gdGhlaXIgQ0FMYXllcnMgaGF2ZSBiZWVuIG1v
dmVkIGJ5IHRoZSBzY3JvbGxpbmcgdGhyZWFkLgorICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2hpbGRQ
b3NpdGlvbnMoY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KSBPVkVSUklERTsKKwogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZy
YW1lVmlldyhGcmFtZVZpZXcqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Ny
b2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7
CkBAIC0xMDksNiArMTE5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjcm9sbGluZ1N0YXRlVHJl
ZUNvbW1pdHRlclRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM+Kik7CiAg
ICAgdm9pZCBjb21taXRUcmVlU3RhdGUoKTsKIAorICAgIHZvaWQgcmVtb3ZlTm9kZShTY3JvbGxp
bmdTdGF0ZU5vZGUqKTsKKwogICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IG1fc2Nyb2xs
aW5nU3RhdGVUcmVlOwogICAgIFJlZlB0cjxTY3JvbGxpbmdUcmVlPiBtX3Njcm9sbGluZ1RyZWU7
CiAgICAgVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM+IG1fc2Nyb2xsaW5nU3RhdGVUcmVl
Q29tbWl0dGVyVGltZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCShyZXZpc2lvbiAx
MzMyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRl
ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb25zdHJhaW50cy5o
IgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsaW5nVGhyZWFkLmgiCkBAIC0yNTEsOCArMjUzLDE1IEBAIFNjcm9s
bGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzoKICAgICB9IGVsc2UgewogICAgICAg
ICBTY3JvbGxpbmdTdGF0ZU5vZGUqIHBhcmVudCA9IHN0YXRlTm9kZUZvcklEKHBhcmVudElEKTsK
ICAgICAgICAgc3dpdGNoIChub2RlVHlwZSkgeworICAgICAgICBjYXNlIEZpeGVkTm9kZTogewor
ICAgICAgICAgICAgQVNTRVJUKHN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpKTsKKyAgICAg
ICAgICAgIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU+IGZpeGVkTm9kZSA9IFNj
cm9sbGluZ1N0YXRlRml4ZWROb2RlOjpjcmVhdGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCks
IG5ld05vZGVJRCk7CisgICAgICAgICAgICBuZXdOb2RlID0gZml4ZWROb2RlLmdldCgpOworICAg
ICAgICAgICAgcGFyZW50LT5hcHBlbmRDaGlsZChmaXhlZE5vZGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBTY3JvbGxpbmdOb2RlOiB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IGNoaWxkIG5vZGVzLiBUaGlz
IGFzc2VydGlvbiBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHdlIGRvLgorICAgICAgICAgICAgLy8g
RklYTUU6IFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgY2hpbGQgbm9kZXMgdGhhdCBhcmUgZml4
ZWQuCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIFBhc3NP
d25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBzY3JvbGxpbmdOb2RlID0gU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVhdGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCks
IG5ld05vZGVJRCk7CiAgICAgICAgICAgICBuZXdOb2RlID0gc2Nyb2xsaW5nTm9kZS5nZXQoKTsK
QEAgLTI2OCw2ICsyNzcsMTggQEAgU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjOgogICAgIHJldHVybiBuZXdOb2RlSUQ7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWM6OnJlbW92ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlKQoreworICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOworCisgICAgLy8gU2Nyb2xsaW5nU3Rh
dGVUcmVlOjpyZW1vdmVOb2RlKCkgd2lsbCBkZXN0cm95IGNoaWxkcmVuLCBzbyB3ZSBoYXZlIHRv
IG1ha2Ugc3VyZSB3ZSByZW1vdmUgdGhvc2UgY2hpbGRyZW4KKyAgICAvLyBmcm9tIHRoZSBIYXNo
TWFwLgorICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxpbmdOb2RlSUQ+JiByZW1vdmVkTm9kZXMgPSBt
X3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3ZlZE5vZGVzKCk7CisgICAgc2l6ZV90IHNpemUgPSBy
ZW1vdmVkTm9kZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQorICAgICAgICBtX3N0YXRlTm9kZU1hcC5yZW1vdmUocmVtb3ZlZE5vZGVzW2ldKTsKK30KKwog
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxp
bmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkKIHsKICAgICBpZiAoIXNjcm9sbExheWVySUQpCkBAIC0y
NzgsMjAgKzI5OSwxMiBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpkZXRhY2hGcm9t
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+cmVtb3ZlTm9kZShub2RlKTsKLQotICAgIC8vIFNjcm9sbGluZ1N0YXRlVHJlZTo6cmVt
b3ZlTm9kZSgpIHdpbGwgZGVzdHJveSBjaGlsZHJlbiwgc28gd2UgaGF2ZSB0byBtYWtlIHN1cmUg
d2UgcmVtb3ZlIHRob3NlIGNoaWxkcmVuCi0gICAgLy8gZnJvbSB0aGUgSGFzaE1hcC4KLSAgICBj
b25zdCBWZWN0b3I8U2Nyb2xsaW5nTm9kZUlEPiYgcmVtb3ZlZE5vZGVzID0gbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPnJlbW92ZWROb2RlcygpOwotICAgIHNpemVfdCBzaXplID0gcmVtb3ZlZE5vZGVz
LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAg
bV9zdGF0ZU5vZGVNYXAucmVtb3ZlKHJlbW92ZWROb2Rlc1tpXSk7CisgICAgcmVtb3ZlTm9kZShu
b2RlKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6Y2xlYXJTdGF0ZVRyZWUo
KQogewotICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnJlbW92ZU5vZGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7Cisg
ICAgcmVtb3ZlTm9kZShtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKIH0K
IAogU2Nyb2xsaW5nU3RhdGVOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c3RhdGVOb2Rl
Rm9ySUQoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbExheWVySUQpCkBAIC0zNzAsNiArMzgzLDM1IEBA
IHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW4KICAgICAgICAgc2Nyb2xs
TGF5ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOwogfQogCit2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzeW5jQ2hpbGRQb3NpdGlvbnMoY29uc3QgSW50
UmVjdCYgdmlld3BvcnRSZWN0KQoreworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSog
cm9vdE5vZGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpOworCisgICAg
VmVjdG9yPE93blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+ID4qIGNoaWxkcmVuID0gcm9vdE5vZGUt
PmNoaWxkcmVuKCk7CisgICAgaWYgKCFjaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2l6ZV90IHNpemUgPSBjaGlsZHJlbi0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlKiBjaGlsZCA9
IHRvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUoY2hpbGRyZW4tPmF0KGkpLmdldCgpKTsKKyAgICAg
ICAgRmxvYXRQb2ludCBuZXdDaGlsZFBvcyA9IGNoaWxkLT52aWV3cG9ydENvbnN0cmFpbnRzKCkt
PmxheWVyUG9zaXRpb25Gb3JWaWV3cG9ydFJlY3Qodmlld3BvcnRSZWN0KTsKKyAgICAgICAgY2hp
bGQtPmdyYXBoaWNzTGF5ZXIoKS0+c2V0UG9zaXRpb24obmV3Q2hpbGRQb3MpOworICAgIH0KK30K
Kwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6dXBkYXRlVmlld3BvcnRDb25zdHJhaW5l
ZE5vZGUoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgUGFzc093blB0cjxWaWV3cG9ydENvbnN0cmFp
bnRzPiBjb25zdHJhaW50cywgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBB
U1NFUlQoc3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkpOworCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBzdXBwb3J0IHN0aWNreSBwb3NpdGlvbiBoZXJlIQorICAgIGlmIChjb25zdHJhaW50
cy0+Y29uc3RyYWludFR5cGUoKSA9PSBWaWV3cG9ydENvbnN0cmFpbnRzOjpTdGlja3lQb3NpdGlv
bkNvbnN0cmFpbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ1N0YXRlRml4ZWRO
b2RlKiBub2RlID0gdG9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZShzdGF0ZU5vZGVGb3JJRChub2Rl
SUQpKTsKKyAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoZ3JhcGhpY3NMYXllciwgbm9kZSk7Cisg
ICAgbm9kZS0+dXBkYXRlQ29uc3RyYWludHMoc3RhdGljX3BvaW50ZXJfY2FzdDxGaXhlZFBvc2l0
aW9uVmlld3BvcnRDb25zdHJhaW50cz4oY29uc3RyYWludHMpKTsKK30KKwogdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvck1hYzo6c2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKQogewogICAgIGlmICht
X3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyLmlzQWN0aXZlKCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nU3RhdGVOb2RlTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdT
dGF0ZU5vZGVNYWMubW0JKHJldmlzaW9uIDEzMzIwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6OnNldFNjcm9sbExheWVyKAog
ICAgIG1fcGxhdGZvcm1TY3JvbGxMYXllciA9IHBsYXRmb3JtTGF5ZXI7CiB9CiAKLXZvaWQgU2Ny
b2xsaW5nU3RhdGVOb2RlOjpzZXRTY3JvbGxMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyKQordm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6OnNldFNjcm9sbExheWVyKEdyYXBo
aWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1T
Y3JvbGxMYXllciA9IGdyYXBoaWNzTGF5ZXIgPyBncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVy
KCkgOiBuaWw7CiAKQEAgLTUxLDYgKzUxLDggQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6OnNl
dFNjcm9sbExheWVyKAogICAgICAgICByZXR1cm47CiAKICAgICBtX3BsYXRmb3JtU2Nyb2xsTGF5
ZXIgPSBwbGF0Zm9ybVNjcm9sbExheWVyOworICAgIG1fZ3JhcGhpY3NMYXllciA9IGdyYXBoaWNz
TGF5ZXI7CisKICAgICBtX3Njcm9sbExheWVyRGlkQ2hhbmdlID0gdHJ1ZTsKICAgICBtX3Njcm9s
bGluZ1N0YXRlVHJlZS0+c2V0SGFzQ2hhbmdlZFByb3BlcnRpZXModHJ1ZSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlRml4ZWROb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlX2gK
KyNkZWZpbmUgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZV9oCisKKyNpZiBFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU5vZGUuaCIKKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgQ0FMYXllcjsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50czsKKworY2xhc3Mg
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZSA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZT4gY3JlYXRl
KFNjcm9sbGluZ1RyZWUqKTsKKworICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVGaXhlZE5vZGUo
KTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Nyb2xsaW5nU3RhdGVOb2RlKikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHBhcmVudFNjcm9sbFBvc2l0aW9uRGlkQ2hhbmdlKGNvbnN0
IEludFJlY3QmIHZpZXdwb3J0UmVjdCkgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZShTY3JvbGxpbmdUcmVlKik7CisKKyAgICBPd25QdHI8Rml4ZWRQb3Np
dGlvblZpZXdwb3J0Q29uc3RyYWludHM+IG1fY29uc3RyYWludHM7CisgICAgUmV0YWluUHRyPENB
TGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbQkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWRO
b2RlLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCIKKworI2lm
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxpbmdDb25zdHJh
aW50cy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8U2Ny
b2xsaW5nVHJlZUZpeGVkTm9kZT4gU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y3JlYXRlKFNjcm9s
bGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3Jv
bGxpbmdUcmVlRml4ZWROb2RlKHNjcm9sbGluZ1RyZWUpKTsKK30KKworU2Nyb2xsaW5nVHJlZUZp
eGVkTm9kZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZShTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdU
cmVlKQorICAgIDogU2Nyb2xsaW5nVHJlZU5vZGUoc2Nyb2xsaW5nVHJlZSkKKyAgICAsIG1fY29u
c3RyYWludHMoYWRvcHRQdHIobmV3IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzKSkK
K3sKK30KKworU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6flNjcm9sbGluZ1RyZWVGaXhlZE5vZGUo
KQoreworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OnVwZGF0ZShTY3JvbGxpbmdT
dGF0ZU5vZGUqIHN0YXRlTm9kZSkKK3sKKyAgICBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSogc3Rh
dGUgPSB0b1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlKHN0YXRlTm9kZSk7CisKKyAgICBpZiAoc3Rh
dGUtPnNjcm9sbExheWVyRGlkQ2hhbmdlKCkpCisgICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzdGF0
ZS0+cGxhdGZvcm1TY3JvbGxMYXllcigpOworCisgICAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29u
c3RyYWludHMqIHVwZGF0ZWRDb25zdHJhaW50cyA9IHN0YXRlLT52aWV3cG9ydENvbnN0cmFpbnRz
KCk7CisgICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nU3RhdGVG
aXhlZE5vZGU6OkFuY2hvckVkZ2VzKQorICAgICAgICBtX2NvbnN0cmFpbnRzLT5zZXRBbmNob3JF
ZGdlcyh1cGRhdGVkQ29uc3RyYWludHMtPmFuY2hvckVkZ2VzKCkpOworICAgIGlmIChzdGF0ZS0+
Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlOjpBbGlnbm1lbnRP
ZmZzZXQpCisgICAgICAgIG1fY29uc3RyYWludHMtPnNldEFsaWdubWVudE9mZnNldCh1cGRhdGVk
Q29uc3RyYWludHMtPmFsaWdubWVudE9mZnNldCgpKTsKKyAgICBpZiAoc3RhdGUtPmNoYW5nZWRQ
cm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6Vmlld3BvcnRSZWN0QXRMYXN0
TGF5b3V0KQorICAgICAgICBtX2NvbnN0cmFpbnRzLT5zZXRWaWV3cG9ydFJlY3RBdExhc3RMYXlv
dXQodXBkYXRlZENvbnN0cmFpbnRzLT52aWV3cG9ydFJlY3RBdExhc3RMYXlvdXQoKSk7CisgICAg
aWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6
OkxheWVyUG9zaXRpb25BdExhc3RMYXlvdXQpCisgICAgICAgIG1fY29uc3RyYWludHMtPnNldExh
eWVyUG9zaXRpb25BdExhc3RMYXlvdXQodXBkYXRlZENvbnN0cmFpbnRzLT5sYXllclBvc2l0aW9u
QXRMYXN0TGF5b3V0KCkpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OnBhcmVu
dFNjcm9sbFBvc2l0aW9uRGlkQ2hhbmdlKGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCkKK3sK
KyAgICBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24gPSBtX2NvbnN0cmFpbnRzLT5sYXllclBvc2l0
aW9uRm9yVmlld3BvcnRSZWN0KHZpZXdwb3J0UmVjdCk7CisKKyAgICBDR1JlY3QgbGF5ZXJCb3Vu
ZHMgPSBbbV9zY3JvbGxMYXllci5nZXQoKSBib3VuZHNdOworICAgIENHUG9pbnQgYW5jaG9yUG9p
bnQgPSBbbV9zY3JvbGxMYXllci5nZXQoKSBhbmNob3JQb2ludF07CisgICAgQ0dQb2ludCBuZXdQ
b3NpdGlvbiA9IENHUG9pbnRNYWtlKGxheWVyUG9zaXRpb24ueCgpIC0gbV9jb25zdHJhaW50cy0+
YWxpZ25tZW50T2Zmc2V0KCkud2lkdGgoKSArIGFuY2hvclBvaW50LnggKiBsYXllckJvdW5kcy5z
aXplLndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJQb3Np
dGlvbi55KCkgLSBtX2NvbnN0cmFpbnRzLT5hbGlnbm1lbnRPZmZzZXQoKS5oZWlnaHQoKSArIGFu
Y2hvclBvaW50LnkgKiBsYXllckJvdW5kcy5zaXplLmhlaWdodCk7CisgICAgW21fc2Nyb2xsTGF5
ZXIuZ2V0KCkgc2V0UG9zaXRpb246bmV3UG9zaXRpb25dOworCisgICAgaWYgKCFtX2NoaWxkcmVu
KQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qgc2l6ZSA9IG1fY2hpbGRyZW4tPnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9jaGls
ZHJlbi0+YXQoaSktPnBhcmVudFNjcm9sbFBvc2l0aW9uRGlkQ2hhbmdlKHZpZXdwb3J0UmVjdCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tCShy
ZXZpc2lvbiAxMzMyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3NSw2ICsy
NzUsMTMgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2V0UwogewogICAg
IEFTU0VSVCghc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpKTsK
ICAgICBtX3Njcm9sbExheWVyLmdldCgpLnBvc2l0aW9uID0gQ0dQb2ludE1ha2UoLXBvc2l0aW9u
LngoKSArIHNjcm9sbE9yaWdpbigpLngoKSwgLXBvc2l0aW9uLnkoKSArIHNjcm9sbE9yaWdpbigp
LnkoKSk7CisKKyAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgIHJldHVybjsKKworICAgIHNp
emVfdCBzaXplID0gbV9jaGlsZHJlbi0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQorICAgICAgICBtX2NoaWxkcmVuLT5hdChpKS0+cGFyZW50U2Nyb2xsUG9z
aXRpb25EaWRDaGFuZ2UoSW50UmVjdChwb3NpdGlvbiwgdmlld3BvcnRSZWN0KCkuc2l6ZSgpKSk7
CiB9CiAKIEludFBvaW50IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjptaW5pbXVtU2Ny
b2xsUG9zaXRpb24oKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDEzMzIwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEzLDYgKzEwMTMsMTEgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmF0dGFjaFRvU2Nyb2xs
aQogICAgICAgICByZXR1cm47CiAKICAgICBTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSA9IFNj
cm9sbGluZ05vZGU7CisgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0g
Rml4ZWRQb3NpdGlvbikKKyAgICAgICAgbm9kZVR5cGUgPSBGaXhlZE5vZGU7CisgICAgZWxzZQor
ICAgICAgICBub2RlVHlwZSA9IFNjcm9sbGluZ05vZGU7CisKICAgICBTY3JvbGxpbmdOb2RlSUQg
cGFyZW50SUQgPSBwYXJlbnQgPyBwYXJlbnQtPnNjcm9sbExheWVySUQoKSA6IDA7CiAgICAgbV9z
Y3JvbGxMYXllcklEID0gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmF0dGFjaFRvU3RhdGVUcmVlKG5v
ZGVUeXBlLCBzY3JvbGxpbmdDb29yZGluYXRvci0+dW5pcXVlU2Nyb2xsTGF5ZXJJRCgpLCBwYXJl
bnRJRCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5oCShyZXZpc2lvbiAxMzMyMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDcgQEAgcHVi
bGljOgogICAgIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbGluZ0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIuZ2V0KCk7IH0KIAogICAgIHZvaWQgYXR0
YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcihSZW5kZXJMYXllckJhY2tpbmcqIHBhcmVudCk7Cisg
ICAgdm9pZCBkZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKICAgICB1aW50NjRfdCBz
Y3JvbGxMYXllcklEKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXllcklEOyB9CiAgICAgCiAg
ICAgYm9vbCBoYXNNYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllciAhPSAwOyB9
CkBAIC0yMDIsOCArMjAzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzU2Nyb2xsQ29y
bmVyTGF5ZXIoKSBjb25zdDsKICAgICBib29sIHVwZGF0ZVNjcm9sbGluZ0xheWVycyhib29sIHNj
cm9sbGluZ0xheWVycyk7CiAKLSAgICB2b2lkIGRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRv
cigpOwotCiAgICAgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgcGFpbnRpbmdQaGFzZUZvclBy
aW1hcnlMYXllcigpIGNvbnN0OwogICAgIAogICAgIEludFNpemUgY29udGVudE9mZnNldEluQ29t
cG9zdGluZ0xheWVyKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gMTMzMjA4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUg
IlNjcm9sbGluZ0NvbnN0cmFpbnRzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgpAQCAt
MzExLDEwICszMTIsMjAgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZsdXNoUGVuZGlu
ZwogICAgIAogICAgIEFTU0VSVChtX2ZsdXNoaW5nTGF5ZXJzKTsKICAgICBtX2ZsdXNoaW5nTGF5
ZXJzID0gZmFsc2U7CisKKyAgICBpZiAoIW1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRp
bmdVcGRhdGUuaXNFbXB0eSgpKSB7CisgICAgICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGluZ1VwZGF0
ZS5lbmQoKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFJlbmRlckxheWVyKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGluZ1VwZGF0ZS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICByZWdpc3Rlck9yVXBkYXRlVmlld3BvcnRD
b25zdHJhaW5lZExheWVyKCppdCk7CisgICAgICAgIAorICAgICAgICBtX3ZpZXdwb3J0Q29uc3Ry
YWluZWRMYXllcnNOZWVkaW5nVXBkYXRlLmNsZWFyKCk7CisgICAgfQogfQogCi12b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZGlkRmx1c2hDaGFuZ2VzRm9yTGF5ZXIoUmVuZGVyTGF5ZXIqKQor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEZsdXNoQ2hhbmdlc0ZvckxheWVyKFJlbmRl
ckxheWVyKiBsYXllcikKIHsKKyAgICBpZiAobV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzLmNv
bnRhaW5zKGxheWVyKSkKKyAgICAgICAgbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGlu
Z1VwZGF0ZS5hZGQobGF5ZXIpOwogfQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bm90
aWZ5Rmx1c2hCZWZvcmVEaXNwbGF5UmVmcmVzaChjb25zdCBHcmFwaGljc0xheWVyKikKQEAgLTUz
NCw2ICs1NDUsOSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luCiAK
ICAgICAgICAgICAgIGxheWVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KKworICAgICAgICAv
LyBOZWVkIHRvIGFkZCBmb3IgZXZlcnkgY29tcG9zaXRpbmcgbGF5ZXIsIGJlY2F1c2UgYSBjb21w
b3NpdGVkIGxheWVyIG1heSBjaGFuZ2UgZnJvbSBiZWluZyBub24tZml4ZWQgdG8gZml4ZWQuCisg
ICAgICAgIHVwZGF0ZVZpZXdwb3J0Q29uc3RyYWludFN0YXR1cyhsYXllcik7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKGxheWVyLT5iYWNraW5nKCkpIHsKICAgICAgICAgICAgIC8vIElmIHdl
J3JlIHJlbW92aW5nIGJhY2tpbmcgb24gYSByZWZsZWN0aW9uLCBjbGVhciB0aGUgc291cmNlIEdy
YXBoaWNzTGF5ZXIncyBwb2ludGVyIHRvCkBAIC01NDYsNiArNTYwLDggQEAgYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbgogICAgICAgICAgICAgICAgICAgICBiYWNraW5n
LT5ncmFwaGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRCeUxheWVyKDApOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVtb3ZlVmlld3BvcnRDb25zdHJh
aW5lZExheWVyKGxheWVyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbGF5ZXItPmNsZWFy
QmFja2luZygpOwogICAgICAgICAgICAgbGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKQEAgLTY1Nyw2ICs2
NzMsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJXaWxsQmVSCiAgICAgaWYg
KCFjaGlsZC0+aXNDb21wb3NpdGVkKCkgfHwgcGFyZW50LT5yZW5kZXJlcigpLT5kb2N1bWVudEJl
aW5nRGVzdHJveWVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIHJlbW92ZVZpZXdwb3J0Q29u
c3RyYWluZWRMYXllcihjaGlsZCk7CiAgICAgcmVwYWludEluQ29tcG9zaXRlZEFuY2VzdG9yKGNo
aWxkLCBjaGlsZC0+YmFja2luZygpLT5jb21wb3NpdGVkQm91bmRzKCkpOwogCiAgICAgc2V0Q29t
cG9zaXRpbmdQYXJlbnQoY2hpbGQsIDApOwpAQCAtMTM3Myw2ICsxMzkwLDggQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmRpZE1vdmVPbnNjcgogCiAgICAgUm9vdExheWVyQXR0YWNobWVu
dCBhdHRhY2htZW50ID0gc2hvdWxkUHJvcGFnYXRlQ29tcG9zaXRpbmdUb0VuY2xvc2luZ0ZyYW1l
KCkgPyBSb290TGF5ZXJBdHRhY2hlZFZpYUVuY2xvc2luZ0ZyYW1lIDogUm9vdExheWVyQXR0YWNo
ZWRWaWFDaHJvbWVDbGllbnQ7CiAgICAgYXR0YWNoUm9vdExheWVyKGF0dGFjaG1lbnQpOworCisg
ICAgcmVnaXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKCk7CiB9CiAKIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsTW92ZU9mZnNjcmVlbigpCkBAIC0xMzg0LDYgKzE0MDMs
NyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6d2lsbE1vdmVPZmZzCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGRldGFjaFJvb3RMYXllcigpOworICAgIHVucmVnaXN0ZXJBbGxWaWV3cG9y
dENvbnN0cmFpbmVkTGF5ZXJzKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpj
bGVhckJhY2tpbmdGb3JMYXllckluY2x1ZGluZ0Rlc2NlbmRhbnRzKFJlbmRlckxheWVyKiBsYXll
cikKQEAgLTEzOTEsOCArMTQxMSwxMCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xl
YXJCYWNraW5nCiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGxh
eWVyLT5pc0NvbXBvc2l0ZWQoKSkKKyAgICBpZiAobGF5ZXItPmlzQ29tcG9zaXRlZCgpKSB7Cisg
ICAgICAgIHJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihsYXllcik7CiAgICAgICAgIGxh
eWVyLT5jbGVhckJhY2tpbmcoKTsKKyAgICB9CiAgICAgCiAgICAgZm9yIChSZW5kZXJMYXllciog
Y3VyckxheWVyID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY3VyckxheWVyOyBjdXJyTGF5ZXIgPSBj
dXJyTGF5ZXItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNsZWFyQmFja2luZ0ZvckxheWVySW5j
bHVkaW5nRGVzY2VuZGFudHMoY3VyckxheWVyKTsKQEAgLTI0OTAsNiArMjUxMiwxODAgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldmljZU9yUGFnZQogICAgICAgICByb290TGF5ZXIt
Pm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygp
OwogfQogCitzdGF0aWMgYm9vbCBpc1Jvb3Rtb3N0Rml4ZWRPclN0aWNreUxheWVyKFJlbmRlckxh
eWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPmlzU3RpY2t5UG9zaXRp
b25lZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChsYXllci0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBBbHNvIHdhbGsgb3VyIG91ciBzdGFja2luZyBjb250ZXh0cyBsb29r
aW5nIGZvciBhIGNvbXBvc2l0ZWQgbGF5ZXIgd2hpY2ggaXMgaXRzZWxmIGZpeGVkLgorICAgIGZv
ciAoUmVuZGVyTGF5ZXIqIHN0YWNraW5nQ29udGV4dCA9IGxheWVyLT5zdGFja2luZ0NvbnRleHQo
KTsgc3RhY2tpbmdDb250ZXh0OyBzdGFja2luZ0NvbnRleHQgPSBzdGFja2luZ0NvbnRleHQtPnN0
YWNraW5nQ29udGV4dCgpKSB7CisgICAgICAgIGlmIChzdGFja2luZ0NvbnRleHQtPmlzQ29tcG9z
aXRlZCgpICYmIHN0YWNraW5nQ29udGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24o
KSA9PSBGaXhlZFBvc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
Vmlld3BvcnRDb25zdHJhaW50U3RhdHVzKFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICBpZiAo
aXNSb290bW9zdEZpeGVkT3JTdGlja3lMYXllcihsYXllcikpCisgICAgICAgIGFkZFZpZXdwb3J0
Q29uc3RyYWluZWRMYXllcihsYXllcik7CisgICAgZWxzZQorICAgICAgICByZW1vdmVWaWV3cG9y
dENvbnN0cmFpbmVkTGF5ZXIobGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6YWRkVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAg
ICBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMuYWRkKGxheWVyKTsKKyAgICByZWdpc3Rlck9y
VXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKGxheWVyKTsKK30KKwordm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXll
ciogbGF5ZXIpCit7CisgICAgaWYgKCFtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMuY29udGFp
bnMobGF5ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnJlZ2lzdGVyVmlld3BvcnRDb25z
dHJhaW5lZExheWVyKGxheWVyKTsKKyAgICBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMucmVt
b3ZlKGxheWVyKTsKK30KKworUGFzc093blB0cjxWaWV3cG9ydENvbnN0cmFpbnRzPiBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmNvbXB1dGVWaWV3cG9ydENvbnN0cmFpbnRzKFJlbmRlckxheWVyKiBs
YXllcikKK3sKKyAgICBBU1NFUlQobGF5ZXItPmlzQ29tcG9zaXRlZCgpKTsKKworICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKTsKKyAgICBMYXlvdXRS
ZWN0IHZpZXdwb3J0UmVjdCA9IGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAg
ICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPmlzU3RpY2t5UG9zaXRpb25lZCgpKSB7CisgICAgICAg
IE93blB0cjxTdGlja3lQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHM+IGNvbnN0cmFpbnRzID0g
YWRvcHRQdHIobmV3IFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyk7CisKKyAgICAg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QgKnJlbmRlcmVyID0gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChsYXllci0+cmVuZGVyZXIoKSk7CisKKyAgICAgICAgcmVuZGVyZXItPmNvbXB1dGVTdGlja3lQ
b3NpdGlvbkNvbnN0cmFpbnRzKCpjb25zdHJhaW50cywgdmlld3BvcnRSZWN0KTsKKworICAgICAg
ICBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gbGF5ZXItPmJhY2tpbmcoKS0+Z3JhcGhp
Y3NMYXllcigpOworICAgIAorICAgICAgICBjb25zdHJhaW50cy0+c2V0TGF5ZXJQb3NpdGlvbkF0
TGFzdExheW91dChncmFwaGljc0xheWVyLT5wb3NpdGlvbigpKTsKKyAgICAgICAgY29uc3RyYWlu
dHMtPnNldFN0aWNreU9mZnNldEF0TGFzdExheW91dChyZW5kZXJlci0+c3RpY2t5UG9zaXRpb25P
ZmZzZXQoKSk7CisKKyAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzLnJlbGVhc2UoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBPd25QdHI8Rml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHM+
IGNvbnN0cmFpbnRzID0gYWRvcHRQdHIobmV3IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFp
bnRzKTsKKworICAgICAgICBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gbGF5ZXItPmJh
Y2tpbmcoKS0+Z3JhcGhpY3NMYXllcigpOworCisgICAgICAgIGNvbnN0cmFpbnRzLT5zZXRMYXll
clBvc2l0aW9uQXRMYXN0TGF5b3V0KGdyYXBoaWNzTGF5ZXItPnBvc2l0aW9uKCkpOworICAgICAg
ICBjb25zdHJhaW50cy0+c2V0Vmlld3BvcnRSZWN0QXRMYXN0TGF5b3V0KHZpZXdwb3J0UmVjdCk7
CisgICAgICAgIAorICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBsYXllci0+cmVuZGVyZXIo
KS0+c3R5bGUoKTsKKyAgICAgICAgaWYgKCFzdHlsZS0+bGVmdCgpLmlzQXV0bygpKQorICAgICAg
ICAgICAgY29uc3RyYWludHMtPmFkZEFuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50czo6QW5j
aG9yRWRnZUxlZnQpOworCisgICAgICAgIGlmICghc3R5bGUtPnJpZ2h0KCkuaXNBdXRvKCkpCisg
ICAgICAgICAgICBjb25zdHJhaW50cy0+YWRkQW5jaG9yRWRnZShWaWV3cG9ydENvbnN0cmFpbnRz
OjpBbmNob3JFZGdlUmlnaHQpOworCisgICAgICAgIGlmICghc3R5bGUtPnRvcCgpLmlzQXV0bygp
KQorICAgICAgICAgICAgY29uc3RyYWludHMtPmFkZEFuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJh
aW50czo6QW5jaG9yRWRnZVRvcCk7CisKKyAgICAgICAgaWYgKCFzdHlsZS0+Ym90dG9tKCkuaXNB
dXRvKCkpCisgICAgICAgICAgICBjb25zdHJhaW50cy0+YWRkQW5jaG9yRWRnZShWaWV3cG9ydENv
bnN0cmFpbnRzOjpBbmNob3JFZGdlQm90dG9tKTsKKworICAgICAgICAvLyBJZiBsZWZ0IGFuZCBy
aWdodCBhcmUgYXV0bywgdXNlIGxlZnQuCisgICAgICAgIGlmIChzdHlsZS0+bGVmdCgpLmlzQXV0
bygpICYmIHN0eWxlLT5yaWdodCgpLmlzQXV0bygpKQorICAgICAgICAgICAgY29uc3RyYWludHMt
PmFkZEFuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZUxlZnQpOworCisg
ICAgICAgIC8vIElmIHRvcCBhbmQgYm90dG9tIGFyZSBhdXRvLCB1c2UgdG9wLgorICAgICAgICBp
ZiAoc3R5bGUtPnRvcCgpLmlzQXV0bygpICYmIHN0eWxlLT5ib3R0b20oKS5pc0F1dG8oKSkKKyAg
ICAgICAgICAgIGNvbnN0cmFpbnRzLT5hZGRBbmNob3JFZGdlKFZpZXdwb3J0Q29uc3RyYWludHM6
OkFuY2hvckVkZ2VUb3ApOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzLnJl
bGVhc2UoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBSZW5kZXJM
YXllckJhY2tpbmcqIG5lYXJlc3RTY3JvbGxpbmdDb29yZGluYXRvckFuY2VzdG9yKFJlbmRlckxh
eWVyKiBsYXllcikKK3sKKyAgICBSZW5kZXJMYXllciogYW5jZXN0b3IgPSBsYXllci0+cGFyZW50
KCk7CisgICAgd2hpbGUgKGFuY2VzdG9yKSB7CisgICAgICAgIGlmIChSZW5kZXJMYXllckJhY2tp
bmcqIGJhY2tpbmcgPSBhbmNlc3Rvci0+YmFja2luZygpKSB7CisgICAgICAgICAgICBpZiAoYmFj
a2luZy0+c2Nyb2xsTGF5ZXJJRCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBiYWNraW5nOwor
ICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZSBmaXhlZCBlbGVtZW50IGlzIGluc2lkZSBhbiBv
dmVyZmxvdyByZWdpb24sIHRoZW4gd2UgY2FuJ3Qgc2Nyb2xsIGl0IHdpdGggdGhlIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLgorICAgICAgICAvLyBXZSB3aWxsIGJlIGFibGUgdG8gZml4IHRoaXMgd2hl
biB3ZSBnZXQgb3ZlcmZsb3cgcmVnaW9ucyBzY3JvbGxpbmcgd2l0aCB0aGUgU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuCisgICAgICAgIGlmIChsYXllci0+c2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZWdpc3Rlck9yVXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyKiBsYXll
cikKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgc3RpY2t5IHBvc2l0aW9uIGhl
cmUhCisgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5pc1N0aWNreVBvc2l0aW9uZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICBpZiAoIXNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5zdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gV2Ugd2lsbCBuZWVkIHRvIGdldCBub24tbWFpbiBmcmFtZXMgc2Nyb2xsaW5nIHdp
dGggdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIGJlZm9yZSB3ZSBjYW4gZ2V0CisgICAgLy8gZml4
ZWQgcG9zaXRpb24gZWxlbWVudHMgaW5zaWRlIHRob3NlIGZyYW1lcyB0byBzY3JvbGwgd2l0aCBT
Y3JvbGxpbmdDb29yZGluYXRvci4KKyAgICBpZiAobV9yZW5kZXJWaWV3LT5kb2N1bWVudCgpLT5v
d25lckVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGxheWVyLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pOworICAgIEFTU0VS
VChtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKKyAgICBBU1NF
UlQobGF5ZXItPmlzQ29tcG9zaXRlZCgpKTsKKyAgICBpZiAoIWxheWVyLT5wYXJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXIt
PmJhY2tpbmcoKTsKKyAgICBpZiAoIWJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFNj
cm9sbGluZ05vZGVJRCBub2RlSUQgPSBiYWNraW5nLT5zY3JvbGxMYXllcklEKCk7CisgICAgaWYg
KCFub2RlSUQpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBwYXJlbnQgPSBuZWFyZXN0
U2Nyb2xsaW5nQ29vcmRpbmF0b3JBbmNlc3RvcihsYXllcik7CisgICAgICAgIGlmICghcGFyZW50
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBiYWNraW5nLT5hdHRhY2hUb1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yKHBhcmVudCk7CisgICAgICAgIG5vZGVJRCA9IGJhY2tpbmctPnNjcm9sbExh
eWVySUQoKTsKKyAgICB9CisKKyAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+dXBkYXRlVmlld3Bv
cnRDb25zdHJhaW5lZE5vZGUobm9kZUlELCBjb21wdXRlVmlld3BvcnRDb25zdHJhaW50cyhsYXll
ciksIGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1bnJlZ2lzdGVyVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyKiBs
YXllcikKK3sKKyAgICBBU1NFUlQobV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzLmNvbnRhaW5z
KGxheWVyKSk7CisKKyAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXIt
PmJhY2tpbmcoKSkKKyAgICAgICAgYmFja2luZy0+ZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWdpc3RlckFsbFZpZXdw
b3J0Q29uc3RyYWluZWRMYXllcnMoKQoreworICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzLmVuZCgpOworICAg
IGZvciAoSGFzaFNldDxSZW5kZXJMYXllcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdmlld3Bv
cnRDb25zdHJhaW5lZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJl
Z2lzdGVyT3JVcGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoKml0KTsKK30KKwordm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnVucmVnaXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5
ZXJzKCkKK3sKKyAgICBIYXNoU2V0PFJlbmRlckxheWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVu
ZGVyTGF5ZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXll
cnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB1bnJlZ2lzdGVyVmlld3BvcnRD
b25zdHJhaW5lZExheWVyKCppdCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3
aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogewogICAg
IGlmIChtX2xheWVyVXBkYXRlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHJldmlzaW9uIDEzMzIwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNyBAQCBjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvcjsKIGNsYXNzIFJlbmRl
clZpZGVvOwogI2VuZGlmCiBjbGFzcyBUaWxlZEJhY2tpbmc7CitjbGFzcyBWaWV3cG9ydENvbnN0
cmFpbnRzOwogCiBlbnVtIENvbXBvc2l0aW5nVXBkYXRlVHlwZSB7CiAgICAgQ29tcG9zaXRpbmdV
cGRhdGVBZnRlclN0eWxlQ2hhbmdlLApAQCAtMjI4LDYgKzIyOSwxMiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGRvY3VtZW50QmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKCk7CiAKKyAgICB2b2lkIHVw
ZGF0ZVZpZXdwb3J0Q29uc3RyYWludFN0YXR1cyhSZW5kZXJMYXllciopOworICAgIHZvaWQgcmVt
b3ZlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyKik7CisKKyAgICB2b2lkIHJl
Z2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygpOworICAgIHZvaWQgdW5yZWdpc3Rl
ckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKTsKKwogcHJpdmF0ZToKICAgICBjbGFzcyBP
dmVybGFwTWFwOwogCkBAIC0zMTQsNiArMzIxLDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXF1
aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyTGF5ZXIqKSBj
b25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JJbmRpcmVjdFJlYXNvbihSZW5k
ZXJPYmplY3QqLCBib29sIGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cywgYm9vbCBoYXMzRFRyYW5z
Zm9ybWVkRGVzY2VuZGFudHMsIFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29u
JikgY29uc3Q7CiAKKyAgICB2b2lkIGFkZFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJM
YXllciopOworICAgIHZvaWQgcmVnaXN0ZXJPclVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXll
cihSZW5kZXJMYXllciopOworICAgIHZvaWQgdW5yZWdpc3RlclZpZXdwb3J0Q29uc3RyYWluZWRM
YXllcihSZW5kZXJMYXllciopOworCisgICAgUGFzc093blB0cjxWaWV3cG9ydENvbnN0cmFpbnRz
PiBjb21wdXRlVmlld3BvcnRDb25zdHJhaW50cyhSZW5kZXJMYXllciopOworCiAgICAgYm9vbCBy
ZXF1aXJlc1Njcm9sbExheWVyKFJvb3RMYXllckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIGJvb2wg
cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdDsKICAgICBib29sIHJlcXVp
cmVzVmVydGljYWxTY3JvbGxiYXJMYXllcigpIGNvbnN0OwpAQCAtMzU4LDYgKzM3MSw5IEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fY2xpcExheWVyOwogICAgIE93blB0
cjxHcmFwaGljc0xheWVyPiBtX3Njcm9sbExheWVyOwogCisgICAgSGFzaFNldDxSZW5kZXJMYXll
cio+IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyczsKKyAgICBIYXNoU2V0PFJlbmRlckxheWVy
Kj4gbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGluZ1VwZGF0ZTsKKwogICAgIC8vIEVu
Y2xvc2luZyBsYXllciBmb3Igb3ZlcmZsb3cgY29udHJvbHMgYW5kIHRoZSBjbGlwcGluZyBsYXll
cgogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXI7
CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzI0NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTAxICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAxMDAxCisgICAgICAgIFBhZ2VzIHdpdGggcG9zaXRpb246Zml4ZWQgZWxl
bWVudHMgc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gc2Nyb2xsIG9uIAorICAgICAgICB0aGUgc2Ny
b2xsaW5nIHRocmVhZAorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8xMDg1NzMxNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBOZXcgdGVzdHMuCisgICAgICAgICogcGxhdGZvcm0vbWFjL3RpbGVkLWRy
YXdpbmcvZml4ZWQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5n
L2ZpeGVkL2Fic29sdXRlLWluc2lkZS1maXhlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2Fic29sdXRlLWluc2lkZS1maXhl
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhl
ZC9maXhlZC1wb3NpdGlvbi1vdXQtb2Ytdmlldy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1v
Zi12aWV3LW5lZ2F0aXZlLXppbmRleC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3
LW5lZ2F0aXZlLXppbmRleC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGls
ZWQtZHJhd2luZy9maXhlZC9maXhlZC1wb3NpdGlvbi1vdXQtb2Ytdmlldy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9mb3VyLWJhcnMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9m
aXhlZC9mb3VyLWJhcnMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL3RpbGVk
LWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZpeGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZpeGVkLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL3BlcmNlbnRh
Z2UtaW5zaWRlLWZpeGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvcGVyY2VudGFnZS1pbnNpZGUtZml4ZWQuaHRtbDogQWRk
ZWQuCisKKyAgICAgICAgQmFja2dyb3VuZCBpbWFnZSByZXNvdXJjZSB3aWxsIGFsbG93IHVzIHRv
IG1ha2UgdGVzdHMgdGhhdCB1c2UgCisgICAgICAgIGJhY2tncm91bmQtYXR0YWNobWVudDpmaXhl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9yZXNvdXJjZXM6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3Jlc291cmNlcy82NHgzMi1y
ZWQucG5nOiBBZGRlZC4KKworICAgICAgICBUaGVzZSB0d28gdGVzdHMgYXJlIHN1cHBvc2VkIHRv
IGJlIGluICJzbG93IHNjcm9sbGluZyIgbW9kZS4gTm93IHRoYXQgCisgICAgICAgIGZpeGVkIGVs
ZW1lbnRzIGNhbiBzY3JvbGwgImZhc3QsIiB3ZSBuZWVkIHNvbWV0aGluZyBlbHNlIHRvIGZvcmNl
IAorICAgICAgICBzbG93IHNjcm9sbGluZy4gV2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgYWRkIHNv
bWV0aGluZyB0byAKKyAgICAgICAgd2luZG93LmludGVybmFscyB0byBkbyB0aGF0LCBidXQgaW4g
dGhlIG1lYW50aW1lLCAKKyAgICAgICAgYmFja2dyb3VuZC1hdHRhY2htZW50OmZpeGVkIHdpbGwg
d29yay4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9zY3JvbGxpbmctdHJl
ZS1zbG93LXNjcm9sbGluZy1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3Rp
bGVkLWRyYXdpbmcvc2Nyb2xsaW5nLXRyZWUtc2xvdy1zY3JvbGxpbmcuaHRtbDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy90aWxlLWNvdmVyYWdlLXNsb3ctc2Nyb2xsaW5n
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy90aWxl
LWNvdmVyYWdlLXNsb3ctc2Nyb2xsaW5nLmh0bWw6CisKIDIwMTItMTEtMDEgIE1heCBWdWpvdmlj
ICA8bXZ1am92aWNAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhZGVyc10gR2V0IHJpZCBv
ZiBpbnRlcm5hbCB0ZXggY29vcmQgYXR0cmlidXRlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvdGlsZWQtZHJhd2luZy9zY3JvbGxpbmctdHJlZS1zbG93LXNjcm9sbGluZy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdp
bmcvc2Nyb2xsaW5nLXRyZWUtc2xvdy1zY3JvbGxpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAx
MzMyMDgpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9zY3JvbGxp
bmctdHJlZS1zbG93LXNjcm9sbGluZy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAoU2Nyb2xsaW5nIG5vZGUKICAgKHZpZXdwb3J0IHJlY3QgMCAwIDgwMCA2MDAp
CiAgIChjb250ZW50cyBzaXplIDgwMCA2MDApCi0gIChTY3JvbGxpbmcgb24gbWFpbiB0aHJlYWQg
YmVjYXVzZTogSGFzIHZpZXdwb3J0IGNvbnN0cmFpbmVkIG9iamVjdHMgd2l0aG91dCBzdXBwb3J0
aW5nIGZpeGVkIGxheWVycywgKQorICAoU2Nyb2xsaW5nIG9uIG1haW4gdGhyZWFkIGJlY2F1c2U6
IEhhcyBzbG93IHJlcGFpbnQgb2JqZWN0cywgKQogKQogCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9zY3JvbGxpbmctdHJlZS1zbG93LXNjcm9sbGluZy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3Nj
cm9sbGluZy10cmVlLXNsb3ctc2Nyb2xsaW5nLmh0bWwJKHJldmlzaW9uIDEzMzIwOCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3Njcm9sbGluZy10cmVlLXNsb3ct
c2Nyb2xsaW5nLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw4IEBACiAgICAgICAgIC5i
b3ggewogICAgICAgICAgICAgaGVpZ2h0OiAxMDBweDsKICAgICAgICAgICAgIHdpZHRoOiAxMDBw
eDsKLSAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsgLyogQXQgdGhpcyB0aW1lLCBwb3NpdGlv
bjpmaXhlZCBmb3JjZXMgc2xvdyBtb2RlLiAqLworICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFn
ZTogdXJsKCdyZXNvdXJjZXMvNjR4MzItcmVkLnBuZycpOworICAgICAgICAgICAgYmFja2dyb3Vu
ZC1hdHRhY2htZW50OiBmaXhlZDsgLyogQXQgdGhpcyB0aW1lLCBiYWNrZ3JvdW5kLWF0dGFjaG1l
bnQ6Zml4ZWQgZm9yY2VzIHNsb3cgbW9kZS4gKi8KICAgICAgICAgfQogICAgIDwvc3R5bGU+CiAg
ICAgPHNjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5n
L3RpbGUtY292ZXJhZ2Utc2xvdy1zY3JvbGxpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3RpbGUtY292ZXJhZ2Utc2xv
dy1zY3JvbGxpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxMzMyMDgpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy90aWxlLWNvdmVyYWdlLXNsb3ctc2Nyb2xsaW5n
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTIsMTMgKzEyLDYgQEAKICAgICAgIChj
aGlsZHJlbiAxCiAgICAgICAgIChHcmFwaGljc0xheWVyCiAgICAgICAgICAgKHZpc2libGUgcmVj
dCAwLjAwLCAwLjAwIDAuMDAgeCAwLjAwKQotICAgICAgICAgIChjaGlsZHJlbiAxCi0gICAgICAg
ICAgICAoR3JhcGhpY3NMYXllcgotICAgICAgICAgICAgICAocG9zaXRpb24gOC4wMCAxMy4wMCkK
LSAgICAgICAgICAgICAgKGJvdW5kcyAxMDAuMDAgMTAwLjAwKQotICAgICAgICAgICAgICAodmlz
aWJsZSByZWN0IDAuMDAsIDAuMDAgMTAwLjAwIHggMTAwLjAwKQotICAgICAgICAgICAgKQotICAg
ICAgICAgICkKICAgICAgICAgKQogICAgICAgKQogICAgICkKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3RpbGUtY292ZXJhZ2Utc2xvdy1zY3JvbGxpbmcuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy90
aWxlLWNvdmVyYWdlLXNsb3ctc2Nyb2xsaW5nLmh0bWwJKHJldmlzaW9uIDEzMzIwOCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3RpbGUtY292ZXJhZ2Utc2xvdy1z
Y3JvbGxpbmcuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDggQEAKICAgICAgICAgLmJv
eCB7CiAgICAgICAgICAgICBoZWlnaHQ6IDEwMHB4OwogICAgICAgICAgICAgd2lkdGg6IDEwMHB4
OwotICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkOyAvKiBBdCB0aGlzIHRpbWUsIHBvc2l0aW9u
OmZpeGVkIGZvcmNlcyBzbG93IG1vZGUuICovCisgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdl
OiB1cmwoJ3Jlc291cmNlcy82NHgzMi1yZWQucG5nJyk7CisgICAgICAgICAgICBiYWNrZ3JvdW5k
LWF0dGFjaG1lbnQ6IGZpeGVkOyAvKiBBdCB0aGlzIHRpbWUsIGJhY2tncm91bmQtYXR0YWNobWVu
dDpmaXhlZCBmb3JjZXMgc2xvdyBtb2RlLiAqLwogICAgICAgICB9CiAgICAgPC9zdHlsZT4KICAg
ICA8c2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcv
Zml4ZWQvYWJzb2x1dGUtaW5zaWRlLWZpeGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9hYnNvbHV0ZS1pbnNp
ZGUtZml4ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvYWJzb2x1dGUtaW5zaWRlLWZpeGVkLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorKFNjcm9sbGluZyBub2RlCisgICh2
aWV3cG9ydCByZWN0IDAgMCA3ODUgNjAwKQorICAoY29udGVudHMgc2l6ZSA3ODUgMjcxMCkKKyAg
KHJlcXVlc3RlZCBzY3JvbGwgcG9zaXRpb24gMCAyMDApCisgIChjaGlsZHJlbiAxCisgICAgKEZp
eGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VMZWZ0IEFuY2hvckVkZ2VU
b3ApCisgICAgICAodmlld3BvcnQgcmVjdCBhdCBsYXN0IGxheW91dDogMC4wMCAyMDAuMDAgNzg1
LjAwIDYwMC4wMCkKKyAgICAgIChsYXllciBwb3NpdGlvbiBhdCBsYXN0IGxheW91dCA4LjAwIDgu
MDApCisgICAgKQorICApCispCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxl
ZC1kcmF3aW5nL2ZpeGVkL2Fic29sdXRlLWluc2lkZS1maXhlZC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2Fic29sdXRlLWlu
c2lkZS1maXhlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L3RpbGVkLWRyYXdpbmcvZml4ZWQvYWJzb2x1dGUtaW5zaWRlLWZpeGVkLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxoZWFkPgor
ICAgIDxzdHlsZT4KKyAgICAgICAgYm9keSB7CisgICAgICAgICAgICBtYXJnaW46IDA7CisgICAg
ICAgICAgICBoZWlnaHQ6IDI1MDBweDsKKyAgICAgICAgfQorCisgICAgICAgIC5ib3ggeworICAg
ICAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICAgICAgd2lkdGg6IDEwMHB4OworICAgICAgICB9
CisKKyAgICAgICAgLm91dGVyIHsKKyAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKKyAgICAg
ICAgICAgIGxlZnQ6IDEwcHg7CisgICAgICAgICAgICB0b3A6IDEwcHg7CisgICAgICAgICAgICB3
aWR0aDogMTAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgICAgICAgb3V0
bGluZTogMnB4IHNvbGlkIGJsYWNrOworICAgICAgICB9CisKKyAgICAgICAgLndyYXBwZXIgewor
ICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBncmVlbjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLmluZGljYXRvciB7CisgICAg
ICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgICAgICAgICAgbWFyZ2luLXRvcDogMjEwcHg7Cisg
ICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgICAgICB9CisgICAgPC9zdHlsZT4K
KyAgICA8c2NyaXB0PgorICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gZG9TY3JvbGwoKQorICAgICAgeworICAgICAg
ICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICB3aW5kb3cuc2Nyb2xs
VG8oMCwgMjAwKTsKKyAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykgeworICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdHMnKS5pbm5lclRleHQgPSBpbnRlcm5h
bHMuc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KGRvY3VtZW50KTsKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgIH0KKyAgICAgICAgfSwgMTApOworICAgICAg
fQorICAgICAgCisgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvU2Nyb2xs
LCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgPCEtLSBUaGUgZ3Jl
ZW4gYm94IHNob3VsZCBvYnNjdXJlIHRoZSByZWQgYm94IC0tPgorICA8cHJlIGlkPSJyZXN1bHRz
Ij48L3ByZT4KKyAgPGRpdiBjbGFzcz0iaW5kaWNhdG9yIGJveCI+PC9kaXY+CisgIDxkaXYgY2xh
c3M9Im91dGVyIGJveCI+CisgICAgPGRpdiBjbGFzcz0id3JhcHBlciBib3giPgorICAgIDwvZGl2
PgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJh
d2luZy9maXhlZC9maXhlZC1wb3NpdGlvbi1vdXQtb2Ytdmlldy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9m
aXhlZC1wb3NpdGlvbi1vdXQtb2Ytdmlldy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTIgQEAKKyhTY3JvbGxpbmcgbm9kZQorICAodmlld3BvcnQgcmVjdCAwIDAgNzg1IDYw
MCkKKyAgKGNvbnRlbnRzIHNpemUgNzg1IDEwMjEpCisgIChTY3JvbGxpbmcgb24gbWFpbiB0aHJl
YWQgYmVjYXVzZTogSGFzIG5vbi1sYXllciBmaXhlZCBvYmplY3RzLCApCisgIChjaGlsZHJlbiAx
CisgICAgKEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VMZWZ0IEFu
Y2hvckVkZ2VUb3ApCisgICAgICAodmlld3BvcnQgcmVjdCBhdCBsYXN0IGxheW91dDogMC4wMCAw
LjAwIDc4NS4wMCA2MDAuMDApCisgICAgKQorICApCispCisKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3
LW5lZ2F0aXZlLXppbmRleC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZp
ZXctbmVnYXRpdmUtemluZGV4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1v
Zi12aWV3LW5lZ2F0aXZlLXppbmRleC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIgQEAKKyhTY3JvbGxpbmcgbm9kZQorICAodmlld3BvcnQgcmVjdCAwIDAgNzg1IDYwMCkK
KyAgKGNvbnRlbnRzIHNpemUgNzg1IDEwMjEpCisgIChTY3JvbGxpbmcgb24gbWFpbiB0aHJlYWQg
YmVjYXVzZTogSGFzIG5vbi1sYXllciBmaXhlZCBvYmplY3RzLCApCisgIChjaGlsZHJlbiAxCisg
ICAgKEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VMZWZ0IEFuY2hv
ckVkZ2VUb3ApCisgICAgICAodmlld3BvcnQgcmVjdCBhdCBsYXN0IGxheW91dDogMC4wMCAwLjAw
IDc4NS4wMCA2MDAuMDApCisgICAgKQorICApCispCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3LW5l
Z2F0aXZlLXppbmRleC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3LW5lZ2F0aXZl
LXppbmRleC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3Rp
bGVkLWRyYXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXctbmVnYXRpdmUtemlu
ZGV4Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKzwhRE9DVFlQRSBodG1sPgor
Cis8aHRtbD4KKzxoZWFkPgorICA8c3R5bGU+CisgICAgLmZpeGVkIHsKKyAgICAgIHBvc2l0aW9u
OiBmaXhlZDsKKyAgICAgIHdpZHRoOiAxMHB4OworICAgICAgaGVpZ2h0OiAxMHB4OworICAgIH0K
KyAgPC9zdHlsZT4KKworICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAg
ICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgICB3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAgICAgICB3aW5kb3cuc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2Nyb2xsaW5n
VHJlZSIpLmlubmVyVGV4dCA9IHdpbmRvdy5pbnRlcm5hbHMuc2Nyb2xsaW5nU3RhdGVUcmVlQXNU
ZXh0KGRvY3VtZW50KTsKKyAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAg
ICAgfSwgMTApOworICAgICAgfSwgZmFsc2UpOworICAgIH0KKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+
CisKKzxib2R5PgorICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDEwMDBweCI+CisgICAgPHByZSBpZD0i
c2Nyb2xsaW5nVHJlZSI+PC9wcmU+CisgIDwvZGl2PgorCisgIDxkaXYgY2xhc3M9ImZpeGVkIiBz
dHlsZT0iei1pbmRleDogLTE7IHRvcDogLTEwMHB4Ij48L2Rpdj4KKyAgPGRpdiBjbGFzcz0iZml4
ZWQiIHN0eWxlPSJ6LWluZGV4OiAtMTsgdG9wOiAwcHg7IGxlZnQ6IDEwMDBweCI+PC9kaXY+CisK
KyAgPGRpdiBjbGFzcz0iZml4ZWQiIHN0eWxlPSJ0b3A6IDBweDsgbGVmdDogMHB4Ij48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVk
LWRyYXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXcuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhlZC1w
b3NpdGlvbi1vdXQtb2Ytdmlldy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXcu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxo
dG1sPgorPGhlYWQ+CisgIDxzdHlsZT4KKyAgICAuZml4ZWQgeworICAgICAgcG9zaXRpb246IGZp
eGVkOworICAgICAgd2lkdGg6IDEwcHg7CisgICAgICBoZWlnaHQ6IDEwcHg7CisgICAgfQorICA8
L3N0eWxlPgorCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisKKyAgICAgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnc2Nyb2xsaW5nVHJlZScpLmlubmVyVGV4dCA9IGludGVybmFscy5zY3JvbGxpbmdTdGF0
ZVRyZWVBc1RleHQoZG9jdW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7CisgIDwvc2Ny
aXB0PgorPC9oZWFkPgorCis8Ym9keT4KKyAgPGRpdiBzdHlsZT0iaGVpZ2h0OiAxMDAwcHgiPgor
ICAgIDxwcmUgaWQ9InNjcm9sbGluZ1RyZWUiPjwvcHJlPgorICA8L2Rpdj4KKworICA8ZGl2IGNs
YXNzPSJmaXhlZCIgc3R5bGU9InRvcDogLTEwMHB4Ij48L2Rpdj4KKyAgPGRpdiBjbGFzcz0iZml4
ZWQiIHN0eWxlPSJ0b3A6IDBweDsgbGVmdDogMTAwMHB4Ij48L2Rpdj4KKworICA8ZGl2IGNsYXNz
PSJmaXhlZCIgc3R5bGU9InRvcDogMHB4OyBsZWZ0OiAwcHgiPjwvZGl2PgorPC9ib2R5PgorPC9o
dG1sPgorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhl
ZC9mb3VyLWJhcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZvdXItYmFycy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9m
b3VyLWJhcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3IEBACisoU2Ny
b2xsaW5nIG5vZGUKKyAgKHZpZXdwb3J0IHJlY3QgMCAwIDc4NSA2MDApCisgIChjb250ZW50cyBz
aXplIDc4NSAyMjIxKQorICAocmVxdWVzdGVkIHNjcm9sbCBwb3NpdGlvbiAwIDIwMCkKKyAgKGNo
aWxkcmVuIDQKKyAgICAoRml4ZWQgbm9kZQorICAgICAgKGFuY2hvciBlZGdlczogQW5jaG9yRWRn
ZUxlZnQgQW5jaG9yRWRnZVRvcCkKKyAgICAgICh2aWV3cG9ydCByZWN0IGF0IGxhc3QgbGF5b3V0
OiAwLjAwIDIwMC4wMCA3ODUuMDAgNjAwLjAwKQorICAgICkKKyAgICAoRml4ZWQgbm9kZQorICAg
ICAgKGFuY2hvciBlZGdlczogQW5jaG9yRWRnZUxlZnQgQW5jaG9yRWRnZVRvcCkKKyAgICAgICh2
aWV3cG9ydCByZWN0IGF0IGxhc3QgbGF5b3V0OiAwLjAwIDIwMC4wMCA3ODUuMDAgNjAwLjAwKQor
ICAgICAgKGxheWVyIHBvc2l0aW9uIGF0IGxhc3QgbGF5b3V0IDEwLjAwIDIwMC4wMCkKKyAgICAp
CisgICAgKEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VSaWdodCBB
bmNob3JFZGdlVG9wKQorICAgICAgKHZpZXdwb3J0IHJlY3QgYXQgbGFzdCBsYXlvdXQ6IDAuMDAg
MjAwLjAwIDc4NS4wMCA2MDAuMDApCisgICAgICAobGF5ZXIgcG9zaXRpb24gYXQgbGFzdCBsYXlv
dXQgNjAxLjAwIDIwMC4wMCkKKyAgICApCisgICAgKEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3Ig
ZWRnZXM6IEFuY2hvckVkZ2VMZWZ0IEFuY2hvckVkZ2VCb3R0b20pCisgICAgICAodmlld3BvcnQg
cmVjdCBhdCBsYXN0IGxheW91dDogMC4wMCAyMDAuMDAgNzg1LjAwIDYwMC4wMCkKKyAgICAgIChs
YXllciBwb3NpdGlvbiBhdCBsYXN0IGxheW91dCAwLjAwIDUxNi4wMCkKKyAgICApCisgICkKKykK
K1RoaXMgaXMgdGhlIHRvcCBiYXIuIFRoaXMgaXMgdGhlIGxlZnQgYmFyLiBUaGlzIGlzIHRoZSBy
aWdodCBiYXIuIFRoaXMgaXMgdGhlIGJvdHRvbSBiYXIuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9mb3VyLWJhcnMuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9mb3VyLWJhcnMu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3
aW5nL2ZpeGVkL2ZvdXItYmFycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACis8
IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBuYW1lPSJhcHBsZS1t
b2JpbGUtd2ViLWFwcC1jYXBhYmxlIiBjb250ZW50PSJ5ZXMiPgorICAgIDxzdHlsZSB0eXBlPSJ0
ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgICBib2R5IHsKKyAgICAgICAgaGVpZ2h0OiAy
MjAwcHg7CisgICAgICB9CisgICAgICAKKyAgICAgIC5maXhlZCB7CisgICAgICAgIHBvc2l0aW9u
OiBmaXhlZDsKKyAgICAgICAgdG9wOiAwOworICAgICAgICBsZWZ0OiAwOworICAgICAgICBtYXJn
aW46IDEwcHg7CisgICAgICAgIGhlaWdodDogNTBweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xv
cjogcmdiYSgwLCAxMjgsIDAsIDAuOCk7CisgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNr
OworICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAxMHB4IGJsYWNrOworICAgICAgfQor
ICAgICAgCisgICAgICAudG9wLCAuYm90dG9tIHsKKyAgICAgICAgd2lkdGg6IDk2JTsKKyAgICAg
IH0KKworICAgICAgLmxlZnQgeworICAgICAgICB0b3A6IDIwMHB4OworICAgICAgICBsZWZ0OiAx
MHB4OworICAgICAgICB3aWR0aDogMTUwcHg7CisgICAgICAgIGhlaWdodDogMzAwcHg7CisgICAg
ICB9CisKKyAgICAgIC5yaWdodCB7CisgICAgICAgIHRvcDogMjAwcHg7CisgICAgICAgIGxlZnQ6
IGF1dG87CisgICAgICAgIHJpZ2h0OiAxMHB4OworICAgICAgICB3aWR0aDogMTUwcHg7CisgICAg
ICAgIGhlaWdodDogMzAwcHg7CisgICAgICB9CisgICAgICAKKyAgICAgIC5ib3R0b20geworICAg
ICAgICB0b3A6IGF1dG87CisgICAgICAgIGJvdHRvbTogMTBweDsKKyAgICAgIH0KKyAgICAgIAor
ICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cisg
ICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIGRvU2Nyb2xsKCkKKyAgICAgIHsKKyAgICAgICAgd2lu
ZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAs
IDIwMCk7CisgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0cycpLmlubmVyVGV4dCA9IHdpbmRvdy5pbnRl
cm5hbHMuc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KGRvY3VtZW50KTsKKyAgICAgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgIH0KKyAgICAgICAgfSwgMTApOworICAg
ICAgfQorICAgICAgCisgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvU2Ny
b2xsLCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHByZSBpZD0i
cmVzdWx0cyI+PC9wcmU+CisKKzxkaXYgY2xhc3M9ImZpeGVkIHRvcCI+CisgIFRoaXMgaXMgdGhl
IHRvcCBiYXIuCis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZpeGVkIGxlZnQiPgorICBUaGlzIGlzIHRo
ZSBsZWZ0IGJhci4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZml4ZWQgcmlnaHQiPgorICBUaGlzIGlz
IHRoZSByaWdodCBiYXIuCis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZpeGVkIGJvdHRvbSI+CisgIFRo
aXMgaXMgdGhlIGJvdHRvbSBiYXIuCis8L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZpeGVk
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGls
ZWQtZHJhd2luZy9maXhlZC9uZXN0ZWQtZml4ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZp
eGVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorKFNjcm9sbGlu
ZyBub2RlCisgICh2aWV3cG9ydCByZWN0IDAgMCA3ODUgNjAwKQorICAoY29udGVudHMgc2l6ZSA3
ODUgMjIxMykKKyAgKHJlcXVlc3RlZCBzY3JvbGwgcG9zaXRpb24gMCAyMDApCisgIChjaGlsZHJl
biAxCisgICAgKEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VMZWZ0
IEFuY2hvckVkZ2VUb3ApCisgICAgICAodmlld3BvcnQgcmVjdCBhdCBsYXN0IGxheW91dDogMC4w
MCAyMDAuMDAgNzg1LjAwIDYwMC4wMCkKKyAgICApCisgICkKKykKKwpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZpeGVkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQv
bmVzdGVkLWZpeGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvdGlsZWQtZHJhd2luZy9maXhlZC9uZXN0ZWQtZml4ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKworPGhlYWQ+CisgICAgPHN0
eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAgICAgYm9keSB7CisgICAg
ICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICBoZWlnaHQ6IDIyMDBweDsKKyAgICAgICAg
fQorCisgICAgICAgIC5ib3ggeworICAgICAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICAgICAg
d2lkdGg6IDEwMHB4OworICAgICAgICB9CisKKyAgICAgICAgLm91dGVyIHsKKyAgICAgICAgICAg
IHBvc2l0aW9uOiBmaXhlZDsKKyAgICAgICAgICAgIHRvcDogMHB4OworICAgICAgICAgICAgei1p
bmRleDogMTsgLyogbWFrZXMgdGhpcyBhIHN0YWNraW5nIGNvbnRleHQgKi8KKyAgICAgICAgICAg
IGJhY2tncm91bmQ6IGJsdWU7CisgICAgICAgIH0KKworICAgICAgICAuaW5uZXIgeworICAgICAg
ICAgICAgcG9zaXRpb246IGZpeGVkOworICAgICAgICAgICAgdG9wOiAxMjBweDsKKyAgICAgICAg
ICAgIGxlZnQ6IDEyMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZDogZ3JlZW47CisgICAgICAg
IH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFy
c2V0PSJ1dGYtOCI+CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OworICAgICAgfQorCisgICAgICBmdW5jdGlvbiBkb1Njcm9sbCgpCisgICAgICB7CisgICAgICAg
IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgIHdpbmRvdy5zY3JvbGxU
bygwLCAyMDApOworICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdHMnKS5pbm5lclRleHQgPSB3aW5kb3cu
aW50ZXJuYWxzLnNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dChkb2N1bWVudCk7CisgICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sIDEwKTsK
KyAgICAgIH0KKyAgICAgIAorICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBk
b1Njcm9sbCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPHBy
ZSBpZD0icmVzdWx0cyI+PC9wcmU+CisgICAgPGRpdiBjbGFzcz0ib3V0ZXIgYm94Ij4KKyAgICAg
ICAgPGRpdiBjbGFzcz0iaW5uZXIgYm94Ij48L2Rpdj4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVk
L3BlcmNlbnRhZ2UtaW5zaWRlLWZpeGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9wZXJjZW50YWdlLWluc2lk
ZS1maXhlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9wZXJjZW50YWdlLWluc2lkZS1maXhlZC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKyhTY3JvbGxpbmcgbm9kZQorICAo
dmlld3BvcnQgcmVjdCAwIDAgNzg1IDYwMCkKKyAgKGNvbnRlbnRzIHNpemUgNzg1IDI1MTMpCisg
IChyZXF1ZXN0ZWQgc2Nyb2xsIHBvc2l0aW9uIDAgMjAwKQorICAoY2hpbGRyZW4gMQorICAgIChG
aXhlZCBub2RlCisgICAgICAoYW5jaG9yIGVkZ2VzOiBBbmNob3JFZGdlTGVmdCBBbmNob3JFZGdl
VG9wKQorICAgICAgKHZpZXdwb3J0IHJlY3QgYXQgbGFzdCBsYXlvdXQ6IDAuMDAgMjAwLjAwIDc4
NS4wMCA2MDAuMDApCisgICAgICAobGF5ZXIgcG9zaXRpb24gYXQgbGFzdCBsYXlvdXQgMC4wMCAx
My4wMCkKKyAgICApCisgICkKKykKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3Rp
bGVkLWRyYXdpbmcvZml4ZWQvcGVyY2VudGFnZS1pbnNpZGUtZml4ZWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9wZXJjZW50
YWdlLWluc2lkZS1maXhlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvcGVyY2VudGFnZS1pbnNpZGUtZml4ZWQuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKwor
PGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgICBib2R5IHsKKyAgICAgICAgICAgIG1hcmdpbjog
MDsKKyAgICAgICAgICAgIGhlaWdodDogMjUwMHB4OworICAgICAgICB9CisKKyAgICAgICAgLmJv
eCB7CisgICAgICAgICAgaGVpZ2h0OiAxMDBweDsKKyAgICAgICAgICB3aWR0aDogMTAwcHg7Cisg
ICAgICAgIH0KKworICAgICAgICAud3JhcHBlciB7CisgICAgICAgICAgcG9zaXRpb246IGZpeGVk
OworICAgICAgICAgIHdpZHRoOiA1MCU7CisgICAgICAgICAgaGVpZ2h0OiA1MCU7CisgICAgICAg
ICAgYm9yZGVyOiAyMHB4IHNvbGlkIGdyYXk7CisgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
c2lsdmVyOworICAgICAgICAgIHotaW5kZXg6IDA7CisgICAgICAgIH0KKworICAgICAgICAuaW5u
ZXIgeworICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgICAgICAgbWFyZ2lu
LWxlZnQ6LTUwcHg7CisgICAgICAgICAgICBtYXJnaW4tdG9wOi0xMDBweDsKKyAgICAgICAgICAg
IHRvcDogMTAwJTsKKyAgICAgICAgICAgIGxlZnQ6IDUwJTsKKyAgICAgICAgICAgIGJhY2tncm91
bmQ6IGdyZWVuOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKyAgICA8c2NyaXB0PgorICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgIH0KKworICAgICAg
ZnVuY3Rpb24gZG9TY3JvbGwoKQorICAgICAgeworICAgICAgICB3aW5kb3cuc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMjAwKTsKKyAgICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdyZXN1bHRzJykuaW5uZXJUZXh0ID0gd2luZG93LmludGVybmFscy5zY3JvbGxpbmdT
dGF0ZVRyZWVBc1RleHQoZG9jdW1lbnQpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgICAgICAgfQorICAgICAgICB9LCAxMCk7CisgICAgICB9CisgICAgICAKKyAg
ICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9TY3JvbGwsIGZhbHNlKTsKKyAg
ICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDwhLS0gVGhlIGdyYXkgYm94IHNob3Vs
ZCB0YWtlIHVwIHRoZSB0b3AgbGVmdCBxdWFkcmFudCBvZiB0aGUgd2ViIGFyZWEuCisgICAgICAg
ICBUaGUgZ3JlZW4gYm94IHNob3VsZCBiZSBhbGlnbmVkIHdpdGggdGhlIGluc2lkZSBlZGdlIG9m
IHRoZSBwYWxlciBncmF5IGJveCwgaW4gdGhlIGJvdHRvbSBtaWRkbGUuCisgICAgLS0+CisgICAg
PHByZSBpZD0icmVzdWx0cyI+PC9wcmU+CisgICAgPGRpdiBjbGFzcz0id3JhcHBlciI+CisgICAg
ICA8ZGl2IGNsYXNzPSJpbm5lciBib3giPjwvZGl2PgorICAgIDwvZGl2PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvcmVzb3Vy
Y2VzLzY0eDMyLXJlZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQg
YXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRy
YXdpbmcvcmVzb3VyY2VzLzY0eDMyLXJlZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUt
dHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhF
VWdBQUFFQUFBQUFnQ0FJQUFBQXQvK25UQUFBQUZYUkZXSFJEY21WaGRHbHZiaUJVYVcxbEFBZlMK
Q2dvWEFBeHo4Zlh2QUFBQUIzUkpUVVVIMGdvS0Z3SW9xTVdRekFBQUFBbHdTRmx6QUFBTEVnQUFD
eElCMHQxKy9BQUFBRTVKUkVGVQplTnJ0enpFTkFDQUF3RERBRVA1RjRRRVJIQTNKcHFDYlorenhj
MHNER3RDQUJqU2dBUTFvUUFNYTBJQUdOS0FCRFdoQUF4clFnQVkwCm9BRU5hRUFER3RDQUJqU2dB
UTE0N1FMZjJRRmNsbzNhTlFBQUFBQkpSVTVFcmtKZ2dnPT0KCg==
</data>
<flag name="review"
          id="186094"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172144</attachid>
            <date>2012-11-02 14:41:12 -0700</date>
            <delta_ts>2012-11-05 11:39:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>86870</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzM1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MSBAQAorMjAxMi0xMS0wMSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMTAwMQorICAgICAgICBQYWdlcyB3aXRoIHBvc2l0aW9uOmZp
eGVkIGVsZW1lbnRzIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHNjcm9sbCBvbiAKKyAgICAgICAg
dGhlIHNjcm9sbGluZyB0aHJlYWQKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTA4NTczMTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBuZXcgY2xhc3Nlcy4gU2Ny
b2xsaW5nU3RhdGVGaXhlZE5vZGUgaXMgYSBjbGFzcyAKKyAgICAgICAgdG8gcmVwcmVzZW50IGZp
eGVkIG5vZGVzIGluIHRoZSBzdGF0ZSB0cmVlLCBhbmQgCisgICAgICAgIFNjcm9sbGluZ1RyZWVG
aXhlZE5vZGUgcmVwcmVzZW50cyBmaXhlZCBub2RlIGluIHRoZSBzY3JvbGxpbmcgdHJlZSAKKyAg
ICAgICAgb3ZlciBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgV2hlbiB3ZSBhcmUgKG5vbi1wcm9n
cmFtYXRpY2FsbHkpIHNjcm9sbGluZyBmaXhlZCBvYmplY3RzIG9uIHRoZSAKKyAgICAgICAgc2Ny
b2xsaW5nIHRocmVhZCwgd2UgZG8gbm90IHdhbnQgdG8gZG8gYW55IHdvcmsgaGVyZS4gCisgICAg
ICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1
cGRhdGVGaXhlZEVsZW1lbnRzQWZ0ZXJTY3JvbGxpbmcpOgorCisgICAgICAgIFdoZW5ldmVyIHdl
IHN5bmMgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYWluIGZyYW1lJ3MgbGF5ZXIsIHdlIGhhdmUgdG8g
CisgICAgICAgIGRvIHRoZSBzYW1lIGZvciBzY3JvbGxpbmcgdHJlZSBjaGlsZHJlbi4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRp
b24pOgorCisgICAgICAgIE5ldyBTY3JvbGxpbmdOb2RlVHlwZSAtLSBGaXhlZE5vZGUsIHlheSEg
QW5kIHR3byBuZXcgZnVuY3Rpb25zIAorICAgICAgICBzcGVjaWZpYyB0byBkZWFsaW5nIHdpdGgg
Rml4ZWROb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVZpZXdw
b3J0Q29uc3RyYWluZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzeW5jQ2hpbGRQb3NpdGlvbnMpOgorCisgICAgICAgIFRoaXMgaXMgdGhlIG5ldyBjbGFz
cyB0aGF0IHJlcHJlc2VudHMgZml4ZWQgbm9kZXMgaW4gdGhlIHN0YXRlIHRyZWUuIAorICAgICAg
ICBBbGwgb2YgdGhlIGNoYW5nZWQgcHJvcGVydGllcyBhcmUgc3RvcmVkIHdpdGhpbiAKKyAgICAg
ICAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMuCisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6U2Nyb2xsaW5nU3Rh
dGVGaXhlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6
On5TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZTo6dXBkYXRlQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nU3RhdGVGaXhlZE5vZGU6OmR1bXBQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OnZpZXdwb3J0Q29uc3RyYWludHMpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSk6CisKKyAgICAgICAgTWFrZSBz
dXJlIHRvIGNyZWF0ZSB0aGUgcmlnaHQgdHlwZSBvZiBjbG9uZSBmb3IgZWFjaCBub2RlLgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGU6OmNsb25lQW5kUmVzZXQpOgorCisgICAgICAgIE5v
dyB0aGF0IG1fY2hpbGRyZW4gbWF5IGJlIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCwgSSBmb3Vu
ZCB0aGlzIAorICAgICAgICBidWcuIFdlIGVuY291bnRlciBpdCB3aGVuIHRoZSBwYXJhbWV0ZXIg
dG8gcmVtb3ZlQ2hpbGQgaXMgdGhpcyBhbmQgd2UgCisgICAgICAgIHdhbnQgdG8gcmVtb3ZlIGFs
bCBvZiBvdXIgY2hpbGRyZW4uIEluIHRoYXQgY2FzZSwgdGhpcyBpcyBvYnZpb3VzbHkgCisgICAg
ICAgIG5vdCBmb3VuZCBpbiBpdHMgb3duIGNoaWxkIGFycmF5LgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nU3RhdGVOb2RlOjpyZW1vdmVDaGlsZCk6CisKKyAgICAgICAgU2Nyb2xsaW5nU3Rh
dGVOb2RlIG5vdyBjYWNoZXMgdGhlIEdyYXBoaWNzTGF5ZXIgaW4gYWRkaXRpb24gdG8gdGhlIAor
ICAgICAgICBQbGF0Zm9ybUxheWVyLiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gc3luYyB0aGUgR3Jh
cGhpY3NMYXllciBwb3NpdGlvbiAKKyAgICAgICAgYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWVzLgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjppc1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6Z3JhcGhpY3NMYXllcik6Cisg
ICAgICAgIChTY3JvbGxpbmdTdGF0ZU5vZGUpOgorCisgICAgICAgIEhhbmRsZSBmaXhlZCBub2Rl
cy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnVwZGF0ZVRyZWVGcm9tU3RhdGVOb2RlKToKKworICAg
ICAgICBOZXcgZnVuY3Rpb24gcGFyZW50U2Nyb2xsUG9zaXRpb25EaWRDaGFuZ2UoKSBpcyBjYWxs
ZWQgb24gY2hpbGRyZW4gCisgICAgICAgIHdoZW4gdGhlIHBhcmVudCBoYXMgc2Nyb2xsZWQuCisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaDoKKyAgICAgICAgKFNj
cm9sbGluZ1RyZWVOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAoU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUpOgor
CisgICAgICAgIFJldHVybiB0cnVlIGZvciBzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKS4g
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmg6
CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvck1hYyk6CisKKyAgICAgICAgSGFuZGxlIGZp
eGVkIG5vZGVzLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGlu
YXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjph
dHRhY2hUb1N0YXRlVHJlZSk6CisKKyAgICAgICAgTm93IHRoYXQgbV9jaGlsZHJlbiBjYW4gYmUg
bm9uLW51bGwgSSBjYXVnaHQgdGhpcyBwcmUtZXhpc3RpbmcgYnVnIAorICAgICAgICB3aGVyZSB3
ZSB3b3VsZCBjb21lIHRpbWVzIHJlbW92ZSBhIG5vZGUgd2l0aG91dCB1cGRhdGluZyB0aGUgSGFz
aE1hcC4gCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhhdCBieSBjb25zb2xpZGF0aW5nIHRo
ZSByZW1vdmFsIGludG8gb25lIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OmRldGFjaEZyb21TdGF0ZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNsZWFyU3RhdGVUcmVlKToKKworICAgICAgICBVcGRh
dGUgdGhlIEdyYXBoaWNzTGF5ZXJzIHRvIHJlZmxlY3QgdGhlIG5ldyBwb3NpdGlvbiB0aGF0IHRo
ZSAKKyAgICAgICAgU2Nyb2xsaW5nIHRocmVhZCBoYXMgbW92ZWQgdGhlIHVuZGVybHlpbmcgQ0FM
YXllciB0byBhbHJlYWR5LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnN5bmNDaGlsZFBvc2l0aW9ucyk6CisKKyAgICAgICAgUGFzcyBuZXcgY29uc3RyYWludHMg
b3ZlciB0byB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgbm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp1cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTm9kZSk6CisK
KyAgICAgICAgQ2FjaGUgdGhlIEdyYXBoaWNzTGF5ZXIgaW4gYWRkaXRpb24gdG8gdGhlIFBsYXRm
b3JtTGF5ZXIuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1N0YXRlTm9k
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xs
TGF5ZXIpOgorCisgICAgICAgIEhlcmUgaXMgdGhlIG5ldyBjbGFzcyB0aGF0IHJlcHJlc2VudHMg
Zml4ZWQgbm9kZXMgb3ZlciBvbiB0aGUgCisgICAgICAgIHNjcm9sbGluZyB0aHJlYWQuIAorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxpbmdUcmVlRml4ZWROb2RlKToK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVGaXhlZE5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRml4
ZWROb2RlOjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1RyZWVGaXhlZE5vZGU6On5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OnVwZGF0ZSk6CisKKyAgICAgICAgVGhpcyBp
cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gcmUtcG9zaXRpb24gdGhlIGZpeGVkIG9iamVjdCB3
aGVuIAorICAgICAgICBpdHMgcGFyZW50IGhhcyBzY3JvbGxlZCBzbyB0aGF0IGl0IGFwcGVhcnMg
dG8gaGF2ZSBub3QgbW92ZWQgYXQgYWxsLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZTo6cGFyZW50U2Nyb2xsUG9zaXRpb25EaWRDaGFuZ2UpOgorCisgICAgICAgIFdo
ZW5ldmVyIHdlIGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYSBzY3JvbGxpbmcgbGF5ZXIsIHRlbGwg
b3VyIAorICAgICAgICBjaGlsZHJlbi4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6CisKKyAgICAg
ICAgSGFuZGxlIGZpeGVkIG5vZGVzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjphdHRhY2hU
b1Njcm9sbGluZ0Nvb3JkaW5hdG9yKToKKworICAgICAgICBkZXRhY2hGcm9tU2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCBpdCBjYW4gYmUgCisgICAgICAg
IGNhbGxlZCBmcm9tIFJlbmRlckxheWVyQ29tcG9zaXRvciBmb3IgZml4ZWQgbm9kZXMuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAgICAgICAoUmVuZGVyTGF5
ZXJCYWNraW5nKToKKworICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3IgdGFrZXMgY29udHJv
bCBvZiBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBmaXhlZCAKKyAgICAgICAgbm9kZXMgdG8vZnJv
bSB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpkaWRGbHVzaENoYW5nZXNGb3JMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVJlbW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRNb3ZlT25zY3JlZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsTW92ZU9mZnNjcmVlbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsZWFyQmFja2luZ0Zv
ckxheWVySW5jbHVkaW5nRGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6aXNSb290bW9z
dEZpeGVkT3JTdGlja3lMYXllcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlVmlld3BvcnRDb25zdHJhaW50U3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVmlld3BvcnRD
b25zdHJhaW5lZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVtb3ZlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZVZpZXdwb3J0Q29uc3RyYWludHMpOgorICAgICAg
ICAoV2ViQ29yZTo6bmVhcmVzdFNjcm9sbGluZ0Nvb3JkaW5hdG9yQW5jZXN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWdpc3Rlck9yVXBkYXRlVmlld3Bv
cnRDb25zdHJhaW5lZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dW5yZWdpc3RlclZpZXdwb3J0Q29uc3RyYWluZWRMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5l
ZExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVucmVn
aXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFJl
bmRlckxheWVyQ29tcG9zaXRvcik6CisKIDIwMTItMTEtMDIgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIFNVQlBJWEVMX0xBWU9VVCBvbiBN
YWMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDEzMzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMzNyw2ICszMzM3LDEw
IEBACiAJCTkzQzA5QTdGMEIwNjRFRUYwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXJNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0MwOUE3RTBCMDY0
RUVGMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyTWFjLm1tICovOyB9OwogCQk5M0MwOUE4MTBCMDY0
RjAwMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzA5QTgwMEIwNjRGMDAwMDVBQkQ0RCAvKiBFdmVudEhh
bmRsZXIuY3BwICovOyB9OwogCQk5M0MwOUM4NjBCMDY1N0FBMDA1QUJENEQgLyogU2Nyb2xsVHlw
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzA5
Qzg1MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3JvbGxUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTkzQzM4QkZFMTY0NDczQzcwMDA5MUVCMiAv
KiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0MzOEJGQzE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5n
U3RhdGVGaXhlZE5vZGUuY3BwICovOyB9OworCQk5M0MzOEJGRjE2NDQ3M0M3MDAwOTFFQjIgLyog
U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzQzM4QkZEMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0
ZUZpeGVkTm9kZS5oICovOyB9OworCQk5M0MzOEMwMzE2NDQ3M0REMDAwOTFFQjIgLyogU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNDMzhDMDExNjQ0NzNERDAwMDkxRUIyIC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5v
ZGUuaCAqLzsgfTsKKwkJOTNDMzhDMDQxNjQ0NzNERDAwMDkxRUIyIC8qIFNjcm9sbGluZ1RyZWVG
aXhlZE5vZGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0MzOEMwMjE2NDQ3M0REMDAwOTFFQjIgLyogU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbSAq
LzsgfTsKIAkJOTNDNDQyMDAwRjgxM0FFMTAwQzFBNjM0IC8qIENvbGxlY3Rpb25UeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0M0NDFGRjBGODEz
QUUxMDBDMUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0M0QTQxNTE2MjlERjVBMDBDM0VCNkUgLyogU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzRBNDEzMTYyOURGNUEwMEMzRUI2RSAvKiBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZU1hYy5oICovOyB9OwogCQk5M0M0QTQxNjE2MjlERjVBMDBDM0VCNkUg
LyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0M0QTQxNDE2MjlERjVBMDBDM0VCNkUgLyogU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0gKi87IH07CkBAIC0xMDU2Myw2ICsxMDU2Nywx
MCBAQAogCQk5M0MwOUE3RTBCMDY0RUVGMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyTWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRXZlbnRIYW5kbGVyTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0MwOUE4MDBCMDY0RjAwMDA1QUJENEQg
LyogRXZlbnRIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV2ZW50SGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzA5Qzg1
MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3JvbGxUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JvbGxUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0MzOEJGQzE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVGaXhlZE5v
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0MzOEJGRDE2NDQ3M0M3MDAw
OTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTNDMzhDMDExNjQ0NzNERDAwMDkxRUIyIC8qIFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZUZp
eGVkTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0MzOEMwMjE2NDQ3M0RE
MDAwOTFFQjIgLyogU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzQ0MUZGMEY4MTNBRTEwMEMxQTYzNCAvKiBDb2xsZWN0
aW9uVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xsZWN0aW9uVHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0M0QTQxMzE2MjlERjVBMDBDM0VC
NkUgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDNEE0MTQxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNDYzOCw2ICsxNDY0Niw4IEBACiAJCQkJMEY2MDVBRUIxNUY5NDg0
ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8sCiAJCQkJMUFGNjJFRTQxNERB
MjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKIAkJCQkxQUY2MkVF
NTE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLywKKwkJCQk5M0Mz
OEJGQzE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwICovLAor
CQkJCTkzQzM4QkZEMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5o
ICovLAogCQkJCTkzMUNCRDA2MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZU5vZGUu
Y3BwICovLAogCQkJCTkzMUNCRDA3MTYxQTQ0RTkwMEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZU5v
ZGUuaCAqLywKIAkJCQk5MzFDQkQwODE2MUE0NEU5MDBFNEM4NzQgLyogU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlLmNwcCAqLywKQEAgLTE0NjYzLDYgKzE0NjczLDggQEAKIAkJCQkxQUY2MkVF
MzE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0gKi8sCiAJCQkJ
OTMxQ0JEMTIxNjFBNDRGODAwRTRDODc0IC8qIFNjcm9sbGluZ1N0YXRlTm9kZU1hYy5tbSAqLywK
IAkJCQkxQUY2MkYyMzE0REFGRTkxMDA0MTU1NkMgLyogU2Nyb2xsaW5nVGhyZWFkTWFjLm1tICov
LAorCQkJCTkzQzM4QzAxMTY0NDczREQwMDA5MUVCMiAvKiBTY3JvbGxpbmdUcmVlRml4ZWROb2Rl
LmggKi8sCisJCQkJOTNDMzhDMDIxNjQ0NzNERDAwMDkxRUIyIC8qIFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGUubW0gKi8sCiAJCQkJMUEzNTg2MkExNTI1MjI1NDAwMjJBNjU5IC8qIFNjcm9sbGluZ1Ry
ZWVNYWMubW0gKi8sCiAJCQkJOTNDNEE0MTMxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjLmggKi8sCiAJCQkJOTNDNEE0MTQxNjI5REY1QTAwQzNFQjZFIC8q
IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tICovLApAQCAtMjU2NzMsNiArMjU2ODUs
OCBAQAogCQkJCTUwOTMzMzUwMTYzQjBFNDMwMDA5OUE2MCAvKiBDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MEQzMjg1ODE2M0IzMTNGMDAxNjExMUUgLyog
VmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRkZG
RjlBOTE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5M0MzOEJGRjE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhl
ZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzQzM4QzAzMTY0NDczREQwMDA5MUVCMiAvKiBT
Y3JvbGxpbmdUcmVlRml4ZWROb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI4NzU2LDYgKzI4Nzcw
LDggQEAKIAkJCQkzRkZGRjlBODE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3BvcnRS
dWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGRkMwMjJCMTY0M0I3MTAwMDRFMTYzOCAvKiBO
b2RlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZGQzAyMkQxNjQzQjcyNjAwNEUx
NjM4IC8qIEVsZW1lbnRSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0MzOEJGRTE2
NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTNDMzhDMDQxNjQ0NzNERDAwMDkxRUIyIC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5v
ZGUubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJl
dmlzaW9uIDEzMzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg0NSwxMyArMTg0NSw0NCBAQCB2b2lkIEZyYW1lVmlldzo6cmVwYWlu
dEZpeGVkRWxlbWVudHNBZnRlCiAgICAgfQogfQogCitib29sIEZyYW1lVmlldzo6c2hvdWxkVXBk
YXRlRml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCkKK3sKKyNpZiBFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQorICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgc2Nyb2xsaW5nIHRo
cmVhZCBpcyB1cGRhdGluZyB0aGUgZml4ZWQgZWxlbWVudHMsIHRoZW4gdGhlIEZyYW1lVmlldyBz
aG91bGQgbm90IHVwZGF0ZSB0aGVtIGFzIHdlbGwuCisgICAgaWYgKHBhZ2UtPm1haW5GcmFtZSgp
ICE9IG1fZnJhbWUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgU2Nyb2xsaW5nQ29vcmRp
bmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KTsKKyAgICBpZiAoIXNjcm9sbGluZ0Nvb3JkaW5hdG9yKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmICghc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxh
eWVycygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChzY3JvbGxpbmdDb29yZGlu
YXRvci0+c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpblByb2dyYW1tYXRpY1Njcm9sbCgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIHJldHVy
biB0cnVlOworfQorCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRml4ZWRFbGVtZW50c0FmdGVyU2Ny
b2xsaW5nKCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKCFz
aG91bGRVcGRhdGVGaXhlZEVsZW1lbnRzQWZ0ZXJTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgaWYgKG1fbmVzdGVkTGF5b3V0Q291bnQgPD0gMSAmJiBoYXNWaWV3cG9ydENvbnN0
cmFpbmVkT2JqZWN0cygpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJWaWV3KiByb290ID0gcm9vdFJl
bmRlcmVyKHRoaXMpKSB7CisgICAgICAgIGlmIChSZW5kZXJWaWV3KiByb290ID0gcm9vdFJlbmRl
cmVyKHRoaXMpKQogICAgICAgICAgICAgcm9vdC0+Y29tcG9zaXRvcigpLT51cGRhdGVDb21wb3Np
dGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZU9uU2Nyb2xsKTsKLSAgICAgICAgfQogICAgIH0K
ICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiAxMzMzNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTAsNiArMzkwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUNhbkJsaXRPblNjcm9sbFJl
Y3Vyc2l2ZWx5KCk7CiAgICAgYm9vbCBjb250ZW50c0luQ29tcG9zaXRlZExheWVyKCkgY29uc3Q7
CiAKKyAgICBib29sIHNob3VsZFVwZGF0ZUZpeGVkRWxlbWVudHNBZnRlclNjcm9sbGluZygpOwor
CiAgICAgdm9pZCBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChSZW5kZXJPYmplY3QqLCBTY3JvbGxi
YXJNb2RlJiBoTW9kZSwgU2Nyb2xsYmFyTW9kZSYgdk1vZGUpOwogICAgIHZvaWQgYXBwbHlQYWdp
bmF0aW9uVG9WaWV3cG9ydCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb25zdHJhaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmgJKHJldmlzaW9uIDEzMzM0NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDE1ICs0Niw2IEBAIHB1YmxpYzoKICAgICAgICAgQW5jaG9yRWRn
ZUJvdHRvbSA9IDEgPDwgMwogICAgIH07CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBBbmNob3JFZGdl
czsKLSAgICAKLSAgICBWaWV3cG9ydENvbnN0cmFpbnRzKCkKLSAgICAgICAgOiBtX2FuY2hvckVk
Z2VzKDApCi0gICAgeyB9Ci0KLSAgICBWaWV3cG9ydENvbnN0cmFpbnRzKFZpZXdwb3J0Q29uc3Ry
YWludHMqIGNvbnN0cmFpbnRzKQotICAgICAgICA6IG1fYWxpZ25tZW50T2Zmc2V0KGNvbnN0cmFp
bnRzLT5hbGlnbm1lbnRPZmZzZXQoKSkKLSAgICAgICAgLCBtX2FuY2hvckVkZ2VzKGNvbnN0cmFp
bnRzLT5hbmNob3JFZGdlcygpKQotICAgIHsgfQogCiAgICAgdmlydHVhbCB+Vmlld3BvcnRDb25z
dHJhaW50cygpIHsgfQogICAgIApAQCAtNjksNiArNjAsMTUgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0QWxpZ25tZW50T2Zmc2V0KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KSB7IG1fYWxpZ25tZW50
T2Zmc2V0ID0gb2Zmc2V0OyB9CiAKIHByb3RlY3RlZDoKKyAgICBWaWV3cG9ydENvbnN0cmFpbnRz
KCkKKyAgICAgICAgOiBtX2FuY2hvckVkZ2VzKDApCisgICAgeyB9CisKKyAgICBWaWV3cG9ydENv
bnN0cmFpbnRzKGNvbnN0IFZpZXdwb3J0Q29uc3RyYWludHMmIGNvbnN0cmFpbnRzKQorICAgICAg
ICA6IG1fYWxpZ25tZW50T2Zmc2V0KGNvbnN0cmFpbnRzLmFsaWdubWVudE9mZnNldCgpKQorICAg
ICAgICAsIG1fYW5jaG9yRWRnZXMoY29uc3RyYWludHMuYW5jaG9yRWRnZXMoKSkKKyAgICB7IH0K
KwogICAgIEZsb2F0U2l6ZSBtX2FsaWdubWVudE9mZnNldDsKICAgICBBbmNob3JFZGdlcyBtX2Fu
Y2hvckVkZ2VzOwogfTsKQEAgLTc4LDEwICs3OCwxMCBAQCBwdWJsaWM6CiAgICAgRml4ZWRQb3Np
dGlvblZpZXdwb3J0Q29uc3RyYWludHMoKQogICAgIHsgfQogCi0gICAgRml4ZWRQb3NpdGlvblZp
ZXdwb3J0Q29uc3RyYWludHMoRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMqIGNvbnN0
cmFpbnRzKQorICAgIEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzKGNvbnN0IEZpeGVk
UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzJiBjb25zdHJhaW50cykKICAgICAgICAgOiBWaWV3
cG9ydENvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKQotICAgICAgICAsIG1fdmlld3BvcnRSZWN0QXRM
YXN0TGF5b3V0KGNvbnN0cmFpbnRzLT52aWV3cG9ydFJlY3RBdExhc3RMYXlvdXQoKSkKLSAgICAg
ICAgLCBtX2xheWVyUG9zaXRpb25BdExhc3RMYXlvdXQoY29uc3RyYWludHMtPmxheWVyUG9zaXRp
b25BdExhc3RMYXlvdXQoKSkKKyAgICAgICAgLCBtX3ZpZXdwb3J0UmVjdEF0TGFzdExheW91dChj
b25zdHJhaW50cy52aWV3cG9ydFJlY3RBdExhc3RMYXlvdXQoKSkKKyAgICAgICAgLCBtX2xheWVy
UG9zaXRpb25BdExhc3RMYXlvdXQoY29uc3RyYWludHMubGF5ZXJQb3NpdGlvbkF0TGFzdExheW91
dCgpKQogICAgIHsgfQogCiAgICAgdmlydHVhbCBDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlw
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIEZpeGVkUG9zaXRpb25Db25zdGFpbnQ7IH07CkBA
IC05NCw2ICs5NCwxNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJQb3Np
dGlvbkF0TGFzdExheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJQb3NpdGlvbkF0TGFzdExh
eW91dDsgfQogICAgIHZvaWQgc2V0TGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgeyBtX2xheWVyUG9zaXRpb25BdExhc3RMYXlvdXQgPSBwb2ludDsgfQog
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFp
bnRzJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FsaWdubWVudE9mZnNl
dCA9PSBvdGhlci5tX2FsaWdubWVudE9mZnNldAorICAgICAgICAgICAgJiYgbV9hbmNob3JFZGdl
cyA9PSBvdGhlci5tX2FuY2hvckVkZ2VzCisgICAgICAgICAgICAmJiBtX3ZpZXdwb3J0UmVjdEF0
TGFzdExheW91dCA9PSBvdGhlci5tX3ZpZXdwb3J0UmVjdEF0TGFzdExheW91dAorICAgICAgICAg
ICAgJiYgbV9sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0ID09IG90aGVyLm1fbGF5ZXJQb3NpdGlv
bkF0TGFzdExheW91dDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRml4ZWRQ
b3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsgfQorCiBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0UmVjdEF0
TGFzdExheW91dDsKICAgICBGbG9hdFBvaW50IG1fbGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDEzMzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQwLDggKzI0MCwxMCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJh
CiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyID0gc2Nyb2xsTGF5ZXJGb3JGcmFt
ZVZpZXcoZnJhbWVWaWV3KSkgewogICAgICAgICBpZiAocHJvZ3JhbW1hdGljU2Nyb2xsKQogICAg
ICAgICAgICAgc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBvc2l0
aW9uKCkpOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc2Nyb2xs
TGF5ZXItPnN5bmNQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAg
ICAgICAgIHN5bmNDaGlsZFBvc2l0aW9ucyhmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgp
KTsKKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAx
MzMzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGlu
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yX2gKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRU
eXBlcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9s
bFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTQ3LDEwICs0OCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHR5cGVkZWYgdW5zaWduZWQgTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnM7
CiB0eXBlZGVmIHVpbnQ2NF90IFNjcm9sbGluZ05vZGVJRDsKIAotZW51bSBTY3JvbGxpbmdOb2Rl
VHlwZSB7Ci0gICAgU2Nyb2xsaW5nTm9kZQotICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgc29vbiBj
b250YWluIG90aGVyIHR5cGVzIHN1Y2ggYXMgRml4ZWROb2RlLgotfTsKK2VudW0gU2Nyb2xsaW5n
Tm9kZVR5cGUgeyBTY3JvbGxpbmdOb2RlLCBGaXhlZE5vZGUgfTsKIAogY2xhc3MgRnJhbWU7CiBj
bGFzcyBGcmFtZVZpZXc7CkBAIC01OCw5ICs1Niw3IEBAIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBj
bGFzcyBQYWdlOwogY2xhc3MgUmVnaW9uOwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7Ci1jbGFzcyBT
Y3JvbGxpbmdTdGF0ZU5vZGU7Ci1jbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7Ci1j
bGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CitjbGFzcyBWaWV3cG9ydENvbnN0cmFpbnRzOwogCiAj
aWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKIGNsYXNzIFNjcm9sbGluZ1RyZWU7CkBAIC0x
MTcsNiArMTEzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2Nyb2xsaW5nTm9kZUlEIGF0dGFj
aFRvU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQgbmV3Tm9kZUlE
LCBTY3JvbGxpbmdOb2RlSUQgLypwYXJlbnRJRCovKSB7IHJldHVybiBuZXdOb2RlSUQ7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0YXRlVHJlZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTm9kZShTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IFZpZXdw
b3J0Q29uc3RyYWludHMmLCBHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHN5
bmNDaGlsZFBvc2l0aW9ucyhjb25zdCBMYXlvdXRSZWN0JikgeyB9CiAgICAgdmlydHVhbCBTdHJp
bmcgc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KCkgY29uc3Q7CiAKICAgICAvLyBHZW5lcmF0ZWQg
YSB1bmlxdWUgaWQgZm9yIHNjcm9sbCBsYXllcnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVGaXhlZE5vZGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZS5oIgorCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCisjaW5jbHVkZSAiVGV4dFN0
cmVhbS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworI2lmIEVOQUJMRShUSFJFQURFRF9T
Q1JPTExJTkcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZT4gU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OmNyZWF0ZShTY3JvbGxpbmdT
dGF0ZVRyZWUqIHN0YXRlVHJlZSwgU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlKHN0YXRlVHJlZSwgbm9kZUlE
KSk7Cit9CisKK1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlOjpTY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZShTY3JvbGxpbmdTdGF0ZVRyZWUqIHRyZWUsIFNjcm9sbGluZ05vZGVJRCBub2RlSUQpCisgICAg
OiBTY3JvbGxpbmdTdGF0ZU5vZGUodHJlZSwgbm9kZUlEKQorICAgICwgbV9jaGFuZ2VkUHJvcGVy
dGllcygwKQoreworfQorCitTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6U2Nyb2xsaW5nU3RhdGVG
aXhlZE5vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUmIG5vZGUpCisgICAgOiBTY3Jv
bGxpbmdTdGF0ZU5vZGUobm9kZSkKKyAgICAsIG1fY29uc3RyYWludHMoRml4ZWRQb3NpdGlvblZp
ZXdwb3J0Q29uc3RyYWludHMobm9kZS52aWV3cG9ydENvbnN0cmFpbnRzKCkpKQorICAgICwgbV9j
aGFuZ2VkUHJvcGVydGllcyhub2RlLmNoYW5nZWRQcm9wZXJ0aWVzKCkpCit7Cit9CisKK1Njcm9s
bGluZ1N0YXRlRml4ZWROb2RlOjp+U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUoKQoreworfQorCitQ
YXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OmNs
b25lKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
KCp0aGlzKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OnVwZGF0ZUNvbnN0
cmFpbnRzKGNvbnN0IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzJiBjb25zdHJhaW50
cykKK3sKKyAgICBpZiAobV9jb25zdHJhaW50cyA9PSBjb25zdHJhaW50cykKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzOworICAgIG1fY2hhbmdlZFBy
b3BlcnRpZXMgPSBWaWV3cG9ydENvbnN0cmFpbnRzOworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKK30KKwordm9pZCBTY3JvbGxpbmdTdGF0
ZUZpeGVkTm9kZTo6ZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNv
bnN0Cit7CisgICAgdHMgPDwgIigiIDw8ICJGaXhlZCBub2RlIiA8PCAiXG4iOworCisgICAgaWYg
KG1fY29uc3RyYWludHMuYW5jaG9yRWRnZXMoKSkgeworICAgICAgICB3cml0ZUluZGVudCh0cywg
aW5kZW50ICsgMSk7CisgICAgICAgIHRzIDw8ICIoYW5jaG9yIGVkZ2VzOiAiOworICAgICAgICBp
ZiAobV9jb25zdHJhaW50cy5oYXNBbmNob3JFZGdlKFZpZXdwb3J0Q29uc3RyYWludHM6OkFuY2hv
ckVkZ2VMZWZ0KSkKKyAgICAgICAgICAgIHRzIDw8ICJBbmNob3JFZGdlTGVmdCAiOworICAgICAg
ICBpZiAobV9jb25zdHJhaW50cy5oYXNBbmNob3JFZGdlKFZpZXdwb3J0Q29uc3RyYWludHM6OkFu
Y2hvckVkZ2VSaWdodCkpCisgICAgICAgICAgICB0cyA8PCAiQW5jaG9yRWRnZVJpZ2h0ICI7Cisg
ICAgICAgIGlmIChtX2NvbnN0cmFpbnRzLmhhc0FuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50
czo6QW5jaG9yRWRnZVRvcCkpCisgICAgICAgICAgICB0cyA8PCAiQW5jaG9yRWRnZVRvcCI7Cisg
ICAgICAgIGlmIChtX2NvbnN0cmFpbnRzLmhhc0FuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50
czo6QW5jaG9yRWRnZUJvdHRvbSkpCisgICAgICAgICAgICB0cyA8PCAiQW5jaG9yRWRnZUJvdHRv
bSI7CisgICAgICAgIHRzIDw8ICIpXG4iOworICAgIH0KKworICAgIGlmICghbV9jb25zdHJhaW50
cy5hbGlnbm1lbnRPZmZzZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCArIDEpOworICAgICAgICB0cyA8PCAiKGFsaWdubWVudCBvZmZzZXQgIiA8PCBtX2Nv
bnN0cmFpbnRzLmFsaWdubWVudE9mZnNldCgpLndpZHRoKCkgPDwgIiAiIDw8IG1fY29uc3RyYWlu
dHMuYWxpZ25tZW50T2Zmc2V0KCkuaGVpZ2h0KCkgPDwgIilcbiI7CisgICAgfQorCisgICAgaWYg
KCFtX2NvbnN0cmFpbnRzLnZpZXdwb3J0UmVjdEF0TGFzdExheW91dCgpLmlzRW1wdHkoKSkgewor
ICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CisgICAgICAgIEZsb2F0UmVjdCB2
aWV3cG9ydFJlY3QgPSBtX2NvbnN0cmFpbnRzLnZpZXdwb3J0UmVjdEF0TGFzdExheW91dCgpOwor
ICAgICAgICB0cyA8PCAiKHZpZXdwb3J0IHJlY3QgYXQgbGFzdCBsYXlvdXQ6ICIgPDwgdmlld3Bv
cnRSZWN0LngoKSA8PCAiICIgPDwgdmlld3BvcnRSZWN0LnkoKSA8PCAiICIgPDwgdmlld3BvcnRS
ZWN0LndpZHRoKCkgPDwgIiAiIDw8IHZpZXdwb3J0UmVjdC5oZWlnaHQoKSA8PCAiKVxuIjsKKyAg
ICB9CisKKyAgICBpZiAobV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KCkg
IT0gRmxvYXRQb2ludCgpKSB7CisgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsK
KyAgICAgICAgdHMgPDwgIihsYXllciBwb3NpdGlvbiBhdCBsYXN0IGxheW91dCAiIDw8IG1fY29u
c3RyYWludHMubGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dCgpLngoKSA8PCAiICIgPDwgbV9jb25z
dHJhaW50cy5sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KCkueSgpIDw8ICIpXG4iOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVE
X1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1N0YXRlRml4ZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1N0YXRl
Rml4ZWROb2RlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGVfaAorCisjaWYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIlNjcm9sbGluZ0NvbnN0cmFpbnRz
LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpeGVkUG9zaXRpb25WaWV3
cG9ydENvbnN0cmFpbnRzOworCitjbGFzcyBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSA6IHB1Ymxp
YyBTY3JvbGxpbmdTdGF0ZU5vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNj
cm9sbGluZ1N0YXRlRml4ZWROb2RlPiBjcmVhdGUoU2Nyb2xsaW5nU3RhdGVUcmVlKiwgU2Nyb2xs
aW5nTm9kZUlEKTsKKworICAgIHZpcnR1YWwgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+
IGNsb25lKCk7CisKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSgpOworCisg
ICAgZW51bSBDaGFuZ2VkUHJvcGVydHlGb3JGaXhlZCB7CisgICAgICAgIFZpZXdwb3J0Q29uc3Ry
YWludHMgPSAxIDw8IDAKKyAgICB9OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBjaGFuZ2VkUHJv
cGVydGllcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY2hhbmdlZFByb3BlcnRpZXM7IH0K
KworICAgIHZvaWQgdXBkYXRlQ29uc3RyYWludHMoY29uc3QgRml4ZWRQb3NpdGlvblZpZXdwb3J0
Q29uc3RyYWludHMmKTsKKyAgICBjb25zdCBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50
cyYgdmlld3BvcnRDb25zdHJhaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RyYWludHM7IH0K
KworcHJpdmF0ZToKKyAgICBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZShTY3JvbGxpbmdTdGF0ZVRy
ZWUqLCBTY3JvbGxpbmdOb2RlSUQpOworICAgIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlKGNvbnN0
IFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlJik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGaXhlZE5v
ZGUoKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hh
bmdlZFByb3BlcnRpZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2NoYW5nZWRQcm9wZXJ0
aWVzOyB9CisgICAgdmlydHVhbCB2b2lkIHJlc2V0Q2hhbmdlZFByb3BlcnRpZXMoKSBPVkVSUklE
RSB7IG1fY2hhbmdlZFByb3BlcnRpZXMgPSAwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcFBy
b3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0IE9WRVJSSURFOworCisgICAg
Rml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMgbV9jb25zdHJhaW50czsKKyAgICB1bnNp
Z25lZCBtX2NoYW5nZWRQcm9wZXJ0aWVzOworfTsKKworaW5saW5lIFNjcm9sbGluZ1N0YXRlRml4
ZWROb2RlKiB0b1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSogbm9k
ZSkKK3sKKyAgICBBU1NFUlQoIW5vZGUgfHwgbm9kZS0+aXNGaXhlZE5vZGUoKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlKj4obm9kZSk7Cit9CisgICAg
CisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2
b2lkIHRvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVGaXhlZE5v
ZGUqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVB
REVEX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVOb2RlLmNwcAkocmV2aXNpb24gMTMzMzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlTm9kZS5o
IgogCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCIKICNpbmNsdWRlICJTY3Jv
bGxpbmdTdGF0ZVRyZWUuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKQEAgLTYxLDcgKzYy
LDcgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlOjp+U2Nyb2xsaW5nU3RhdGVOb2RlKAogCiBQYXNzT3du
UHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gU2Nyb2xsaW5nU3RhdGVOb2RlOjpjbG9uZUFuZFJlc2V0
KCkKIHsKLSAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBjbG9uZSA9IGFk
b3B0UHRyKG5ldyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKnRvU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKHRoaXMpKSk7CisgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gY2xv
bmUgPSB0aGlzLT5jbG9uZSgpOwogCiAgICAgLy8gTm93IHRoYXQgdGhpcyBub2RlIGlzIGNsb25l
ZCwgcmVzZXQgb3VyIGNoYW5nZSBwcm9wZXJ0aWVzLgogICAgIHNldFNjcm9sbExheWVyRGlkQ2hh
bmdlKGZhbHNlKTsKQEAgLTk2LDcgKzk3LDExIEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVOb2RlOjpy
ZW1vdmVDaGlsZChTY3IKICAgICBpZiAoIW1fY2hpbGRyZW4pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChzaXplX3QgaW5kZXggPSBtX2NoaWxkcmVuLT5maW5kKG5vZGUpKSB7CisgICAgc2l6
ZV90IGluZGV4ID0gbV9jaGlsZHJlbi0+ZmluZChub2RlKTsKKworICAgIC8vIFRoZSBpbmRleCB3
aWxsIGJlIG5vdEZvdW5kIGlmIHRoZSBub2RlIHRvIHJlbW92ZSBpcyBhIGRlZXBlci10aGFuLTEt
bGV2ZWwgZGVzY2VuZGFudCBvcgorICAgIC8vIGlmIG5vZGUgaXMgdGhlIHJvb3Qgc3RhdGUgbm9k
ZS4KKyAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKICAgICAgICAgbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPmRpZFJlbW92ZU5vZGUobm9kZS0+c2Nyb2xsaW5nTm9kZUlEKCkpOwogICAgICAgICBt
X2NoaWxkcmVuLT5yZW1vdmUoaW5kZXgpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkocmV2
aXNpb24gMTMzMzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDEwIEBAIHB1YmxpYzoKICAg
ICBTY3JvbGxpbmdTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVUcmVlKiwgU2Nyb2xsaW5nTm9kZUlE
KTsKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZU5vZGUoKTsKIAotICAgIHZpcnR1YWwgYm9v
bCBpc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGlzU2Nyb2xsaW5nTm9kZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzRml4ZWROb2RlKCkgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwg
UGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lKCkgPSAwOwogICAgIFBhc3NPd25Q
dHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiBjbG9uZUFuZFJlc2V0KCk7CiAgICAgdm9pZCBjbG9uZUFu
ZFJlc2V0Q2hpbGRyZW4oU2Nyb2xsaW5nU3RhdGVOb2RlKik7CiAKQEAgLTU5LDggKzYxLDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNldENoYW5nZWRQcm9wZXJ0aWVzKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNDaGFuZ2VkUHJvcGVydGllcygpIHsgc2V0U2Nyb2xsTGF5
ZXJEaWRDaGFuZ2UodHJ1ZSk7IH0KIAorICAgIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIo
KSB7IHJldHVybiBtX2dyYXBoaWNzTGF5ZXI7IH0KICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bVNjcm9sbExheWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTY3JvbGxMYXllcihjb25zdCBHcmFw
aGljc0xheWVyKik7CisgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7CiAg
ICAgdm9pZCBzZXRTY3JvbGxMYXllcihQbGF0Zm9ybUxheWVyKik7CiAKICAgICBib29sIHNjcm9s
bExheWVyRGlkQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXllckRpZENoYW5nZTsg
fQpAQCAtMTAzLDYgKzEwNiw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFJl
dGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3BsYXRmb3JtU2Nyb2xsTGF5ZXI7CiAjZW5kaWYKKyAg
ICBHcmFwaGljc0xheWVyKiBtX2dyYXBoaWNzTGF5ZXI7CiAKIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlLmNwcAkocmV2aXNpb24gMTMzMzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNiArNzgsMTEgQEAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjp+U2Nyb2xs
aW5nUwogewogfQogCitQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlOjpjbG9uZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKnRoaXMpKTsKK30KKwogdm9pZCBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU6OnNldFZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJl
Y3QpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRSZWN0ID09IHZpZXdwb3J0UmVjdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAxMzMzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsOCBAQCBjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUgOiBw
dWJsCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlPiBjcmVhdGUoU2Nyb2xsaW5nU3RhdGVUcmVlKiwgU2Nyb2xsaW5nTm9kZUlEKTsKIAot
ICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiBj
bG9uZSgpOworCiAgICAgdmlydHVhbCB+U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKCk7CiAK
ICAgICBlbnVtIENoYW5nZWRQcm9wZXJ0eSB7CkBAIC02MCw3ICs2MSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSAxIDw8IDEyLAogICAgIH07CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKSBPVkVSUklERSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsaW5nTm9kZSgpIE9WRVJSSURF
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBoYXNDaGFuZ2VkUHJvcGVydGll
cygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY2hhbmdlZFByb3BlcnRpZXM7IH0KICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGNoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQpAQCAtMTExLDYgKzExMiw3IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5nU3RhdGVU
cmVlKiwgU2Nyb2xsaW5nTm9kZUlEKTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUo
Y29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJik7CiAKICAgICB1bnNpZ25lZCBtX2No
YW5nZWRQcm9wZXJ0aWVzOwogCkBAIC0xMzksNyArMTQxLDcgQEAgcHJpdmF0ZToKIAogaW5saW5l
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlKQogewotICAgIEFTU0VSVCghbm9kZSB8fCBub2Rl
LT5pc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpKTsKKyAgICBBU1NFUlQoIW5vZGUgfHwg
bm9kZS0+aXNTY3JvbGxpbmdOb2RlKCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUqPihub2RlKTsKIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCShyZXZpc2lvbiAxMzMz
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsaW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGUuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMTYyLDkgKzE2Mywx
MyBAQCB2b2lkIFNjcm9sbGluZ1RyZWU6OnVwZGF0ZVRyZWVGcm9tU3RhdGVOCiAgICAgICAgICAg
ICBtX25vZGVNYXAuc2V0KHN0YXRlTm9kZS0+c2Nyb2xsaW5nTm9kZUlEKCksIG1fcm9vdE5vZGUu
Z2V0KCkpOwogICAgICAgICAgICAgbV9yb290Tm9kZS0+dXBkYXRlKHN0YXRlTm9kZSk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgd2Ugd2ls
bCBoYXZlIG1vcmUgdGhhbiBqdXN0IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLCBzbyB3ZSds
bCBoYXZlIHRvCi0gICAgICAgICAgICAvLyBmaWd1cmUgb3V0IHdoaWNoIHR5cGUgb2Ygbm9kZSB0
byBjcmVhdGUuCi0gICAgICAgICAgICBPd25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IG5ld05vZGUg
PSBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICAgICAg
T3duUHRyPFNjcm9sbGluZ1RyZWVOb2RlPiBuZXdOb2RlOworICAgICAgICAgICAgaWYgKHN0YXRl
Tm9kZS0+aXNTY3JvbGxpbmdOb2RlKCkpCisgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IFNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpjcmVhdGUodGhpcyk7CisgICAgICAgICAgICBlbHNlIGlm
IChzdGF0ZU5vZGUtPmlzRml4ZWROb2RlKCkpCisgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IFNj
cm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIFNjcm9sbGlu
Z1RyZWVOb2RlKiBuZXdOb2RlUmF3UHRyID0gbmV3Tm9kZS5nZXQoKTsKICAgICAgICAgICAgIG1f
bm9kZU1hcC5zZXQoc3RhdGVOb2RlLT5zY3JvbGxpbmdOb2RlSUQoKSwgbmV3Tm9kZVJhd1B0cik7
CiAgICAgICAgICAgICBTY3JvbGxpbmdUcmVlTm9kZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X25vZGVNYXAuZmluZChzdGF0ZU5vZGUtPnBhcmVudCgpLT5zY3JvbGxpbmdOb2RlSUQoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCShy
ZXZpc2lvbiAxMzMzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDEwIEBAIE9CSkNfQ0xBU1MgQ0FM
YXllcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBTY3Jv
bGxpbmdTdGF0ZU5vZGU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CiBjbGFzcyBTY3JvbGxp
bmdUcmVlTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOwotY2xhc3MgU2Ny
b2xsaW5nU3RhdGVUcmVlOwogCiAvLyBUaGUgU2Nyb2xsaW5nVHJlZSBjbGFzcyBsaXZlcyBhbG1v
c3QgZXhjbHVzaXZlbHkgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQgYW5kIG1hbmFnZXMgdGhlCiAv
LyBoaWVyYXJjaHkgb2Ygc2Nyb2xsYWJsZSByZWdpb25zIG9uIHRoZSBwYWdlLiBJdCdzIGFsc28g
cmVzcG9uc2libGUgZm9yIGRpc3BhdGNoaW5nIGV2ZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5oCShyZXZpc2lvbiAxMzMz
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVO
b2RlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOworCiBjbGFzcyBTY3JvbGxp
bmdUcmVlTm9kZSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZU5vZGUoU2Ny
b2xsaW5nVHJlZSopOwpAQCAtNDIsNiArNDYsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlKFNjcm9sbGluZ1N0YXRlTm9kZSopID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBw
YXJlbnRTY3JvbGxQb3NpdGlvbkRpZENoYW5nZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3Qp
ID0gMDsKKwogICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCB7IHJl
dHVybiBtX25vZGVJRDsgfQogICAgIHZvaWQgc2V0U2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGluZ05v
ZGVJRCBub2RlSUQpIHsgbV9ub2RlSUQgPSBub2RlSUQ7IH0KIApAQCAtNTQsMTMgKzYwLDE1IEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKCkg
Y29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdUcmVlOyB9CiAKKyAgICB0eXBlZGVmIFZlY3RvcjxP
d25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+ID4gU2Nyb2xsaW5nVHJlZUNoaWxkcmVuVmVjdG9yOwor
ICAgIE93blB0cjxTY3JvbGxpbmdUcmVlQ2hpbGRyZW5WZWN0b3I+IG1fY2hpbGRyZW47CisKIHBy
aXZhdGU6CiAgICAgU2Nyb2xsaW5nVHJlZSogbV9zY3JvbGxpbmdUcmVlOwogCiAgICAgU2Nyb2xs
aW5nTm9kZUlEIG1fbm9kZUlEOwogCiAgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIG1fcGFyZW50Owot
ICAgIE93blB0cjxWZWN0b3I8T3duUHRyPFNjcm9sbGluZ1RyZWVOb2RlPiA+ID4gbV9jaGlsZHJl
bjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
aAkocmV2aXNpb24gMTMzMzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlKCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFNjcm9sbGluZ1N0YXRlTm9kZSopIE9WRVJSSURFOwor
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbXBsZW1lbnQgdGhpcyB3aGVuIHdlIHN1cHBvcnQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVzIGFzIGNoaWxkcmVuLgorICAgIHZpcnR1YWwgdm9p
ZCBwYXJlbnRTY3JvbGxQb3NpdGlvbkRpZENoYW5nZShjb25zdCBJbnRSZWN0JiAvKnZpZXdwb3J0
UmVjdCovKSBPVkVSUklERSB7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRv
ck1hYy5oCShyZXZpc2lvbiAxMzMzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTY3JvbGxpbmdTdGF0ZU5v
ZGU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7CitjbGFzcyBTY3JvbGxpbmdT
dGF0ZVRyZWU7CisKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjIDogcHVibGljIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGlu
YXRvck1hYyhQYWdlKik7CkBAIC03NSw2ICs3OSwxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBT
dHJpbmcgc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKIHByaXZh
dGU6CisgICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBzY3JvbGxpbmcgY29vcmRpbmF0b3IgY2Fu
IGtlZXAgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGZpeGVkIHRvIHRoZWlyCisgICAgLy8gY29udGFp
bmVycyB3aGlsZSBzY3JvbGxpbmcuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRml4ZWRQb3Np
dGlvbkxheWVycygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIFRo
aXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgdGhlIFNjcm9sbGluZ1N0YXRlTm9kZSBmb3IgdGhlIGdp
dmVuIHZpZXdwb3J0IGNvbnN0cmFpbmVkIG9iamVjdC4KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Vmlld3BvcnRDb25zdHJhaW5lZE5vZGUoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBWaWV3cG9ydENv
bnN0cmFpbnRzJiwgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworCisgICAgLy8gQ2FsbGVkIHRv
IHN5bmNoIHRoZSBHcmFwaGljc0xheWVyIHBvc2l0aW9ucyBmb3IgY2hpbGQgbGF5ZXJzIHdoZW4g
dGhlaXIgQ0FMYXllcnMgaGF2ZSBiZWVuIG1vdmVkIGJ5IHRoZSBzY3JvbGxpbmcgdGhyZWFkLgor
ICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2hpbGRQb3NpdGlvbnMoY29uc3QgTGF5b3V0UmVjdCYgdmll
d3BvcnRSZWN0KSBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgdm9pZCByZWNvbXB1dGVXaGVlbEV2
ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJl
YWRTY3JvbGxpbmdSZWFzb25zKTsKIApAQCAtMTA5LDYgKzEyMyw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZpcmVkKFRpbWVyPFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWFjPiopOwogICAgIHZvaWQgY29tbWl0VHJlZVN0YXRlKCk7CiAKKyAgICB2
b2lkIHJlbW92ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKik7CisKICAgICBPd25QdHI8U2Nyb2xs
aW5nU3RhdGVUcmVlPiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKICAgICBSZWZQdHI8U2Nyb2xsaW5n
VHJlZT4gbV9zY3JvbGxpbmdUcmVlOwogICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
PiBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGlu
YXRvck1hYy5tbQkocmV2aXNpb24gMTMzMzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw2ICszOSw4IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisjaW5jbHVkZSAi
U2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oIgogI2luY2x1ZGUg
IlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RocmVhZC5oIgpAQCAt
MjUxLDEyICsyNTMsMTkgQEAgU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFj
OgogICAgIH0gZWxzZSB7CiAgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogcGFyZW50ID0gc3Rh
dGVOb2RlRm9ySUQocGFyZW50SUQpOwogICAgICAgICBzd2l0Y2ggKG5vZGVUeXBlKSB7CisgICAg
ICAgIGNhc2UgRml4ZWROb2RlOiB7CisgICAgICAgICAgICBBU1NFUlQoc3VwcG9ydHNGaXhlZFBv
c2l0aW9uTGF5ZXJzKCkpOworICAgICAgICAgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlRml4ZWRO
b2RlPiBmaXhlZE5vZGUgPSBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6Y3JlYXRlKG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLmdldCgpLCBuZXdOb2RlSUQpOworICAgICAgICAgICAgbmV3Tm9kZSA9IGZp
eGVkTm9kZS5nZXQoKTsKKyAgICAgICAgICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQoZml4ZWROb2Rl
LnJlbGVhc2UoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNl
IFNjcm9sbGluZ05vZGU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjdXJyZW50bHkgZG8g
bm90IHN1cHBvcnQgY2hpbGQgbm9kZXMuIFRoaXMgYXNzZXJ0aW9uIHNob3VsZCBiZSByZW1vdmVk
IHdoZW4gd2UgZG8uCisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY3VycmVudGx5IG9ubHkgc3Vw
cG9ydCBjaGlsZCBub2RlcyB0aGF0IGFyZSBmaXhlZC4KICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU+IHNjcm9sbGluZ05vZGUgPSBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OmNyZWF0
ZShtX3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKSwgbmV3Tm9kZUlEKTsKKyAgICAgICAgICAgIE93
blB0cjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+IHNjcm9sbGluZ05vZGUgPSBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OmNyZWF0ZShtX3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKSwg
bmV3Tm9kZUlEKTsKICAgICAgICAgICAgIG5ld05vZGUgPSBzY3JvbGxpbmdOb2RlLmdldCgpOwot
ICAgICAgICAgICAgcGFyZW50LT5hcHBlbmRDaGlsZChzY3JvbGxpbmdOb2RlKTsKKyAgICAgICAg
ICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQoc2Nyb2xsaW5nTm9kZS5yZWxlYXNlKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKQEAgLTI2OCw2ICsyNzcs
MTggQEAgU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOgogICAgIHJldHVy
biBuZXdOb2RlSUQ7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnJlbW92ZU5v
ZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlKQoreworICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5yZW1vdmVOb2RlKG5vZGUpOworCisgICAgLy8gU2Nyb2xsaW5nU3RhdGVUcmVlOjpyZW1vdmVO
b2RlKCkgd2lsbCBkZXN0cm95IGNoaWxkcmVuLCBzbyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBy
ZW1vdmUgdGhvc2UgY2hpbGRyZW4KKyAgICAvLyBmcm9tIHRoZSBIYXNoTWFwLgorICAgIGNvbnN0
IFZlY3RvcjxTY3JvbGxpbmdOb2RlSUQ+JiByZW1vdmVkTm9kZXMgPSBtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+cmVtb3ZlZE5vZGVzKCk7CisgICAgc2l6ZV90IHNpemUgPSByZW1vdmVkTm9kZXMuc2l6
ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBtX3N0
YXRlTm9kZU1hcC5yZW1vdmUocmVtb3ZlZE5vZGVzW2ldKTsKK30KKwogdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvck1hYzo6ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQgc2Nyb2xs
TGF5ZXJJRCkKIHsKICAgICBpZiAoIXNjcm9sbExheWVySUQpCkBAIC0yNzgsMjAgKzI5OSwxMiBA
QCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpkZXRhY2hGcm9tCiAgICAgaWYgKCFub2Rl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3ZlTm9k
ZShub2RlKTsKLQotICAgIC8vIFNjcm9sbGluZ1N0YXRlVHJlZTo6cmVtb3ZlTm9kZSgpIHdpbGwg
ZGVzdHJveSBjaGlsZHJlbiwgc28gd2UgaGF2ZSB0byBtYWtlIHN1cmUgd2UgcmVtb3ZlIHRob3Nl
IGNoaWxkcmVuCi0gICAgLy8gZnJvbSB0aGUgSGFzaE1hcC4KLSAgICBjb25zdCBWZWN0b3I8U2Ny
b2xsaW5nTm9kZUlEPiYgcmVtb3ZlZE5vZGVzID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92
ZWROb2RlcygpOwotICAgIHNpemVfdCBzaXplID0gcmVtb3ZlZE5vZGVzLnNpemUoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9zdGF0ZU5vZGVNYXAu
cmVtb3ZlKHJlbW92ZWROb2Rlc1tpXSk7CisgICAgcmVtb3ZlTm9kZShub2RlKTsKIH0KIAogdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6Y2xlYXJTdGF0ZVRyZWUoKQogewotICAgIG1fc3Rh
dGVOb2RlTWFwLmNsZWFyKCk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUo
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7CisgICAgcmVtb3ZlTm9kZSht
X3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKIH0KIAogU2Nyb2xsaW5nU3Rh
dGVOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c3RhdGVOb2RlRm9ySUQoU2Nyb2xsaW5n
Tm9kZUlEIHNjcm9sbExheWVySUQpCkBAIC0zNzAsNiArMzgzLDM0IEBAIHZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW4KICAgICAgICAgc2Nyb2xsTGF5ZXItPnNldFBvc2l0
aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOwogfQogCit2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpzeW5jQ2hpbGRQb3NpdGlvbnMoY29uc3QgTGF5b3V0UmVjdCYgdmlld3Bv
cnRSZWN0KQoreworICAgIFZlY3RvcjxPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiA+KiBjaGls
ZHJlbiA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPmNoaWxkcmVuKCk7
CisgICAgaWYgKCFjaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdl
J2xsIGhhdmUgdG8gdHJhdmVyc2UgZGVlcGVyIGludG8gdGhlIHRyZWUgYXQgc29tZSBwb2ludC4K
KyAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLT5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUqIGNo
aWxkID0gdG9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZShjaGlsZHJlbi0+YXQoaSkuZ2V0KCkpOwor
ICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gY2hpbGQtPnZpZXdwb3J0Q29uc3RyYWludHMo
KS5sYXllclBvc2l0aW9uRm9yVmlld3BvcnRSZWN0KHZpZXdwb3J0UmVjdCk7CisgICAgICAgIGNo
aWxkLT5ncmFwaGljc0xheWVyKCktPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICB9Cit9CisK
K3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRO
b2RlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIGNvbnN0IFZpZXdwb3J0Q29uc3RyYWludHMmIGNv
bnN0cmFpbnRzLCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQoreworICAgIEFTU0VSVChz
dXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHN1cHBvcnQgc3RpY2t5IHBvc2l0aW9uIGhlcmUhCisgICAgaWYgKGNvbnN0cmFpbnRzLmNvbnN0
cmFpbnRUeXBlKCkgPT0gVmlld3BvcnRDb25zdHJhaW50czo6U3RpY2t5UG9zaXRpb25Db25zdHJh
aW50KQorICAgICAgICByZXR1cm47CisKKyAgICBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSogbm9k
ZSA9IHRvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUoc3RhdGVOb2RlRm9ySUQobm9kZUlEKSk7Cisg
ICAgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKGdyYXBoaWNzTGF5ZXIsIG5vZGUpOworICAgIG5vZGUt
PnVwZGF0ZUNvbnN0cmFpbnRzKChjb25zdCBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50
cyYpY29uc3RyYWludHMpOworfQorCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzY2hl
ZHVsZVRyZWVTdGF0ZUNvbW1pdCgpCiB7CiAgICAgaWYgKG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29t
bWl0dGVyVGltZXIuaXNBY3RpdmUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL21hYy9TY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1N0YXRlTm9kZU1hYy5tbQkocmV2aXNp
b24gMTMzMzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1N0YXRlTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFNj
cm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXIoCiAgICAgbV9wbGF0Zm9ybVNjcm9sbExh
eWVyID0gcGxhdGZvcm1MYXllcjsKIH0KIAotdm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6OnNldFNj
cm9sbExheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit2b2lkIFNjcm9s
bGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
cikKIHsKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybVNjcm9sbExheWVyID0gZ3JhcGhpY3NM
YXllciA/IGdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IG5pbDsKIApAQCAtNTEsNiAr
NTEsOCBAQCB2b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXIoCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fcGxhdGZvcm1TY3JvbGxMYXllciA9IHBsYXRmb3JtU2Nyb2xsTGF5
ZXI7CisgICAgbV9ncmFwaGljc0xheWVyID0gZ3JhcGhpY3NMYXllcjsKKwogICAgIG1fc2Nyb2xs
TGF5ZXJEaWRDaGFuZ2UgPSB0cnVlOwogICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXND
aGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdU
cmVlRml4ZWROb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGVfaAorI2RlZmluZSBTY3JvbGxpbmdUcmVl
Rml4ZWROb2RlX2gKKworI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNpbmNsdWRl
ICJTY3JvbGxpbmdDb25zdHJhaW50cy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgi
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIENBTGF5ZXI7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWlu
dHM7CisKK2NsYXNzIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUgOiBwdWJsaWMgU2Nyb2xsaW5nVHJl
ZU5vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU+IGNyZWF0ZShTY3JvbGxpbmdUcmVlKik7CisKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdU
cmVlRml4ZWROb2RlKCk7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZShT
Y3JvbGxpbmdUcmVlKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFNjcm9sbGluZ1N0YXRl
Tm9kZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYXJlbnRTY3JvbGxQb3NpdGlvbkRp
ZENoYW5nZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpIE9WRVJSSURFOworCisgICAgRml4
ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMgbV9jb25zdHJhaW50czsKKyAgICBSZXRhaW5Q
dHI8Q0FMYXllcj4gbV9sYXllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdU
cmVlRml4ZWROb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdUcmVlRml4ZWROb2RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLm1tCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGaXhlZE5v
ZGUubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIgorCisjaWYg
RU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRml4
ZWROb2RlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Bhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZT4gU2Nyb2xsaW5nVHJlZUZp
eGVkTm9kZTo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUpCit7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlRml4ZWROb2RlKHNjcm9sbGluZ1RyZWUpKTsK
K30KKworU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZShTY3Jv
bGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKQorICAgIDogU2Nyb2xsaW5nVHJlZU5vZGUoc2Nyb2xs
aW5nVHJlZSkKKyAgICAsIG1fY29uc3RyYWludHMoRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3Ry
YWludHMoKSkKK3sKK30KKworU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6flNjcm9sbGluZ1RyZWVG
aXhlZE5vZGUoKQoreworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OnVwZGF0ZShT
Y3JvbGxpbmdTdGF0ZU5vZGUqIHN0YXRlTm9kZSkKK3sKKyAgICBTY3JvbGxpbmdTdGF0ZUZpeGVk
Tm9kZSogc3RhdGUgPSB0b1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlKHN0YXRlTm9kZSk7CisKKyAg
ICBpZiAoc3RhdGUtPnNjcm9sbExheWVyRGlkQ2hhbmdlKCkpCisgICAgICAgIG1fbGF5ZXIgPSBz
dGF0ZS0+cGxhdGZvcm1TY3JvbGxMYXllcigpOworCisgICAgaWYgKHN0YXRlTm9kZS0+Y2hhbmdl
ZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlOjpWaWV3cG9ydENvbnN0cmFp
bnRzKQorICAgICAgICBtX2NvbnN0cmFpbnRzID0gc3RhdGUtPnZpZXdwb3J0Q29uc3RyYWludHMo
KTsKK30KKworc3RhdGljIGlubGluZSBDR1BvaW50IG9wZXJhdG9yKihDR1BvaW50JiBhLCBjb25z
dCBDR1NpemUmIGIpCit7CisgICAgcmV0dXJuIENHUG9pbnRNYWtlKGEueCAqIGIud2lkdGgsIGEu
eSAqIGIuaGVpZ2h0KTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpwYXJlbnRT
Y3JvbGxQb3NpdGlvbkRpZENoYW5nZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpCit7Cisg
ICAgRmxvYXRQb2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9u
Rm9yVmlld3BvcnRSZWN0KHZpZXdwb3J0UmVjdCk7CisKKyAgICBDR1JlY3QgbGF5ZXJCb3VuZHMg
PSBbbV9sYXllci5nZXQoKSBib3VuZHNdOworICAgIENHUG9pbnQgYW5jaG9yUG9pbnQgPSBbbV9s
YXllci5nZXQoKSBhbmNob3JQb2ludF07CisgICAgQ0dQb2ludCBuZXdQb3NpdGlvbiA9IGxheWVy
UG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmFsaWdubWVudE9mZnNldCgpICsgYW5jaG9yUG9pbnQg
KiBsYXllckJvdW5kcy5zaXplOworICAgIFttX2xheWVyLmdldCgpIHNldFBvc2l0aW9uOm5ld1Bv
c2l0aW9uXTsKKworICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2l6ZV90IHNpemUgPSBtX2NoaWxkcmVuLT5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW4tPmF0KGkpLT5wYXJlbnRTY3JvbGxQ
b3NpdGlvbkRpZENoYW5nZSh2aWV3cG9ydFJlY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQkocmV2aXNpb24gMTMzMzQ3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNiArMjc1LDEzIEBAIHZvaWQgU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVNYWM6OnNldFMKIHsKICAgICBBU1NFUlQoIXNob3VsZFVwZGF0ZVNjcm9s
bExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSk7CiAgICAgbV9zY3JvbGxMYXllci5nZXQoKS5w
b3NpdGlvbiA9IENHUG9pbnRNYWtlKC1wb3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCks
IC1wb3NpdGlvbi55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCkpOworCisgICAgaWYgKCFtX2NoaWxk
cmVuKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qgc2l6ZSA9IG1fY2hpbGRyZW4tPnNp
emUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbV9j
aGlsZHJlbi0+YXQoaSktPnBhcmVudFNjcm9sbFBvc2l0aW9uRGlkQ2hhbmdlKEludFJlY3QocG9z
aXRpb24sIHZpZXdwb3J0UmVjdCgpLnNpemUoKSkpOwogfQogCiBJbnRQb2ludCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZU1hYzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShy
ZXZpc2lvbiAxMzMzNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMiw3ICsxMDEyLDE0IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjphdHRhY2hUb1Njcm9sbGkKICAgICBpZiAoIXNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlw
ZSA9IFNjcm9sbGluZ05vZGU7CisgICAgLy8gRklYTUU6IFdoZW4gd2Ugc3VwcG9ydCBvdmVyZmxv
dyBhcmVhcywgd2Ugd2lsbCBoYXZlIHRvIHJlZmluZSB0aGlzIGZvciBvdmVyZmxvdyBhcmVhcyB0
aGF0IGFyZSBhbHNvCisgICAgLy8gcG9zaXRvbjpmaXhlZC4KKyAgICBTY3JvbGxpbmdOb2RlVHlw
ZSBub2RlVHlwZTsKKyAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBG
aXhlZFBvc2l0aW9uKQorICAgICAgICBub2RlVHlwZSA9IEZpeGVkTm9kZTsKKyAgICBlbHNlCisg
ICAgICAgIG5vZGVUeXBlID0gU2Nyb2xsaW5nTm9kZTsKKwogICAgIFNjcm9sbGluZ05vZGVJRCBw
YXJlbnRJRCA9IHBhcmVudCA/IHBhcmVudC0+c2Nyb2xsTGF5ZXJJRCgpIDogMDsKICAgICBtX3Nj
cm9sbExheWVySUQgPSBzY3JvbGxpbmdDb29yZGluYXRvci0+YXR0YWNoVG9TdGF0ZVRyZWUobm9k
ZVR5cGUsIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT51bmlxdWVTY3JvbGxMYXllcklEKCksIHBhcmVu
dElEKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmgJKHJldmlzaW9uIDEzMzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsNyBAQCBwdWJs
aWM6CiAgICAgR3JhcGhpY3NMYXllciogc2Nyb2xsaW5nQ29udGVudHNMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci5nZXQoKTsgfQogCiAgICAgdm9pZCBhdHRh
Y2hUb1Njcm9sbGluZ0Nvb3JkaW5hdG9yKFJlbmRlckxheWVyQmFja2luZyogcGFyZW50KTsKKyAg
ICB2b2lkIGRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcigpOwogICAgIHVpbnQ2NF90IHNj
cm9sbExheWVySUQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbExheWVySUQ7IH0KICAgICAKICAg
ICBib29sIGhhc01hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyICE9IDA7IH0K
QEAgLTIwNCw4ICsyMDUsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxDb3Ju
ZXJMYXllcigpIGNvbnN0OwogICAgIGJvb2wgdXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgc2Ny
b2xsaW5nTGF5ZXJzKTsKIAotICAgIHZvaWQgZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCk7Ci0KICAgICBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBwYWludGluZ1BoYXNlRm9yUHJp
bWFyeUxheWVyKCkgY29uc3Q7CiAgICAgCiAgICAgSW50U2l6ZSBjb250ZW50T2Zmc2V0SW5Db21w
b3N0aW5nTGF5ZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxMzMzNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAi
U2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCkBAIC0z
MTIsMTAgKzMxMywyMCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5n
CiAgICAgCiAgICAgQVNTRVJUKG1fZmx1c2hpbmdMYXllcnMpOwogICAgIG1fZmx1c2hpbmdMYXll
cnMgPSBmYWxzZTsKKworICAgIGlmICghbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGlu
Z1VwZGF0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgSGFzaFNldDxSZW5kZXJMYXllcio+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnNOZWVkaW5nVXBkYXRl
LmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnNOZWVkaW5nVXBkYXRlLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHJlZ2lzdGVyT3JVcGRhdGVWaWV3cG9ydENv
bnN0cmFpbmVkTGF5ZXIoKml0KTsKKyAgICAgICAgCisgICAgICAgIG1fdmlld3BvcnRDb25zdHJh
aW5lZExheWVyc05lZWRpbmdVcGRhdGUuY2xlYXIoKTsKKyAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpkaWRGbHVzaENoYW5nZXNGb3JMYXllcihSZW5kZXJMYXllciopCit2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkRmx1c2hDaGFuZ2VzRm9yTGF5ZXIoUmVuZGVy
TGF5ZXIqIGxheWVyKQogeworICAgIGlmIChtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMuY29u
dGFpbnMobGF5ZXIpKQorICAgICAgICBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnNOZWVkaW5n
VXBkYXRlLmFkZChsYXllcik7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpub3Rp
ZnlGbHVzaEJlZm9yZURpc3BsYXlSZWZyZXNoKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQpAQCAtNTM1
LDYgKzU0Niw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW4KIAog
ICAgICAgICAgICAgbGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQorCisgICAgICAgIC8v
IE5lZWQgdG8gYWRkIGZvciBldmVyeSBjb21wb3NpdGluZyBsYXllciwgYmVjYXVzZSBhIGNvbXBv
c2l0ZWQgbGF5ZXIgbWF5IGNoYW5nZSBmcm9tIGJlaW5nIG5vbi1maXhlZCB0byBmaXhlZC4KKyAg
ICAgICAgdXBkYXRlVmlld3BvcnRDb25zdHJhaW50U3RhdHVzKGxheWVyKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAobGF5ZXItPmJhY2tpbmcoKSkgewogICAgICAgICAgICAgLy8gSWYgd2Un
cmUgcmVtb3ZpbmcgYmFja2luZyBvbiBhIHJlZmxlY3Rpb24sIGNsZWFyIHRoZSBzb3VyY2UgR3Jh
cGhpY3NMYXllcidzIHBvaW50ZXIgdG8KQEAgLTU0Nyw2ICs1NjEsOCBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luCiAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmct
PmdyYXBoaWNzTGF5ZXIoKS0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIoMCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZW1vdmVWaWV3cG9ydENvbnN0cmFp
bmVkTGF5ZXIobGF5ZXIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBsYXllci0+Y2xlYXJC
YWNraW5nKCk7CiAgICAgICAgICAgICBsYXllckNoYW5nZWQgPSB0cnVlOwpAQCAtNjU4LDYgKzY3
NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVIKICAgICBpZiAo
IWNoaWxkLT5pc0NvbXBvc2l0ZWQoKSB8fCBwYXJlbnQtPnJlbmRlcmVyKCktPmRvY3VtZW50QmVp
bmdEZXN0cm95ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgcmVtb3ZlVmlld3BvcnRDb25z
dHJhaW5lZExheWVyKGNoaWxkKTsKICAgICByZXBhaW50SW5Db21wb3NpdGVkQW5jZXN0b3IoY2hp
bGQsIGNoaWxkLT5iYWNraW5nKCktPmNvbXBvc2l0ZWRCb3VuZHMoKSk7CiAKICAgICBzZXRDb21w
b3NpdGluZ1BhcmVudChjaGlsZCwgMCk7CkBAIC0xMzg2LDYgKzE0MDMsOCBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZGlkTW92ZU9uc2NyCiAKICAgICBSb290TGF5ZXJBdHRhY2htZW50
IGF0dGFjaG1lbnQgPSBzaG91bGRQcm9wYWdhdGVDb21wb3NpdGluZ1RvRW5jbG9zaW5nRnJhbWUo
KSA/IFJvb3RMYXllckF0dGFjaGVkVmlhRW5jbG9zaW5nRnJhbWUgOiBSb290TGF5ZXJBdHRhY2hl
ZFZpYUNocm9tZUNsaWVudDsKICAgICBhdHRhY2hSb290TGF5ZXIoYXR0YWNobWVudCk7CisKKyAg
ICByZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OndpbGxNb3ZlT2Zmc2NyZWVuKCkKQEAgLTEzOTcsNiArMTQxNiw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsTW92ZU9mZnMKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZGV0YWNoUm9vdExheWVyKCk7CisgICAgdW5yZWdpc3RlckFsbFZpZXdwb3J0
Q29uc3RyYWluZWRMYXllcnMoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNs
ZWFyQmFja2luZ0ZvckxheWVySW5jbHVkaW5nRGVzY2VuZGFudHMoUmVuZGVyTGF5ZXIqIGxheWVy
KQpAQCAtMTQwNCw4ICsxNDI0LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjbGVh
ckJhY2tpbmcKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGF5
ZXItPmlzQ29tcG9zaXRlZCgpKQorICAgIGlmIChsYXllci0+aXNDb21wb3NpdGVkKCkpIHsKKyAg
ICAgICAgcmVtb3ZlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKGxheWVyKTsKICAgICAgICAgbGF5
ZXItPmNsZWFyQmFja2luZygpOworICAgIH0KICAgICAKICAgICBmb3IgKFJlbmRlckxheWVyKiBj
dXJyTGF5ZXIgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1
cnJMYXllci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY2xlYXJCYWNraW5nRm9yTGF5ZXJJbmNs
dWRpbmdEZXNjZW5kYW50cyhjdXJyTGF5ZXIpOwpAQCAtMjUzNiw2ICsyNTU4LDE4MSBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV2aWNlT3JQYWdlCiAgICAgICAgIHJvb3RMYXllci0+
bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7
CiB9CiAKK3N0YXRpYyBib29sIGlzUm9vdG1vc3RGaXhlZE9yU3RpY2t5TGF5ZXIoUmVuZGVyTGF5
ZXIqIGxheWVyKQoreworICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS0+aXNTdGlja3lQb3NpdGlv
bmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGxheWVyLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGZvciAoUmVuZGVyTGF5ZXIqIHN0YWNraW5nQ29udGV4dCA9IGxheWVyLT5z
dGFja2luZ0NvbnRleHQoKTsgc3RhY2tpbmdDb250ZXh0OyBzdGFja2luZ0NvbnRleHQgPSBzdGFj
a2luZ0NvbnRleHQtPnN0YWNraW5nQ29udGV4dCgpKSB7CisgICAgICAgIGlmIChzdGFja2luZ0Nv
bnRleHQtPmlzQ29tcG9zaXRlZCgpICYmIHN0YWNraW5nQ29udGV4dC0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlVmlld3BvcnRDb25zdHJhaW50U3RhdHVzKFJlbmRlckxheWVyKiBsYXll
cikKK3sKKyAgICBpZiAoaXNSb290bW9zdEZpeGVkT3JTdGlja3lMYXllcihsYXllcikpCisgICAg
ICAgIGFkZFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihsYXllcik7CisgICAgZWxzZQorICAgICAg
ICByZW1vdmVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIobGF5ZXIpOworfQorCit2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6YWRkVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVy
KiBsYXllcikKK3sKKyAgICBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMuYWRkKGxheWVyKTsK
KyAgICByZWdpc3Rlck9yVXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKGxheWVyKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRM
YXllcihSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgaWYgKCFtX3ZpZXdwb3J0Q29uc3RyYWlu
ZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnJlZ2lz
dGVyVmlld3BvcnRDb25zdHJhaW5lZExheWVyKGxheWVyKTsKKyAgICBtX3ZpZXdwb3J0Q29uc3Ry
YWluZWRMYXllcnMucmVtb3ZlKGxheWVyKTsKK30KKworY29uc3QgRml4ZWRQb3NpdGlvblZpZXdw
b3J0Q29uc3RyYWludHMgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlRml4ZWRWaWV3cG9y
dENvbnN0cmFpbnRzKFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICBBU1NFUlQobGF5ZXItPmlz
Q29tcG9zaXRlZCgpKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3
LT5mcmFtZVZpZXcoKTsKKyAgICBMYXlvdXRSZWN0IHZpZXdwb3J0UmVjdCA9IGZyYW1lVmlldy0+
dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisKKyAgICBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJh
aW50cyBjb25zdHJhaW50cyA9IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzKCk7CisK
KyAgICBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gbGF5ZXItPmJhY2tpbmcoKS0+Z3Jh
cGhpY3NMYXllcigpOworCisgICAgY29uc3RyYWludHMuc2V0TGF5ZXJQb3NpdGlvbkF0TGFzdExh
eW91dChncmFwaGljc0xheWVyLT5wb3NpdGlvbigpKTsKKyAgICBjb25zdHJhaW50cy5zZXRWaWV3
cG9ydFJlY3RBdExhc3RMYXlvdXQodmlld3BvcnRSZWN0KTsKKyAgICAgICAgCisgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgaWYgKCFzdHls
ZS0+bGVmdCgpLmlzQXV0bygpKQorICAgICAgICBjb25zdHJhaW50cy5hZGRBbmNob3JFZGdlKFZp
ZXdwb3J0Q29uc3RyYWludHM6OkFuY2hvckVkZ2VMZWZ0KTsKKworICAgIGlmICghc3R5bGUtPnJp
Z2h0KCkuaXNBdXRvKCkpCisgICAgICAgIGNvbnN0cmFpbnRzLmFkZEFuY2hvckVkZ2UoVmlld3Bv
cnRDb25zdHJhaW50czo6QW5jaG9yRWRnZVJpZ2h0KTsKKworICAgIGlmICghc3R5bGUtPnRvcCgp
LmlzQXV0bygpKQorICAgICAgICBjb25zdHJhaW50cy5hZGRBbmNob3JFZGdlKFZpZXdwb3J0Q29u
c3RyYWludHM6OkFuY2hvckVkZ2VUb3ApOworCisgICAgaWYgKCFzdHlsZS0+Ym90dG9tKCkuaXNB
dXRvKCkpCisgICAgICAgIGNvbnN0cmFpbnRzLmFkZEFuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJh
aW50czo6QW5jaG9yRWRnZUJvdHRvbSk7CisKKyAgICAvLyBJZiBsZWZ0IGFuZCByaWdodCBhcmUg
YXV0bywgdXNlIGxlZnQuCisgICAgaWYgKHN0eWxlLT5sZWZ0KCkuaXNBdXRvKCkgJiYgc3R5bGUt
PnJpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIGNvbnN0cmFpbnRzLmFkZEFuY2hvckVkZ2UoVmll
d3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZUxlZnQpOworCisgICAgLy8gSWYgdG9wIGFuZCBi
b3R0b20gYXJlIGF1dG8sIHVzZSB0b3AuCisgICAgaWYgKHN0eWxlLT50b3AoKS5pc0F1dG8oKSAm
JiBzdHlsZS0+Ym90dG9tKCkuaXNBdXRvKCkpCisgICAgICAgIGNvbnN0cmFpbnRzLmFkZEFuY2hv
ckVkZ2UoVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZVRvcCk7CisgICAgICAgIAorICAg
IHJldHVybiBjb25zdHJhaW50czsKK30KKworY29uc3QgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENv
bnN0cmFpbnRzIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZVN0aWNreVZpZXdwb3J0Q29u
c3RyYWludHMoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIEFTU0VSVChsYXllci0+aXNDb21w
b3NpdGVkKCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXctPmZy
YW1lVmlldygpOworICAgIExheW91dFJlY3Qgdmlld3BvcnRSZWN0ID0gZnJhbWVWaWV3LT52aXNp
YmxlQ29udGVudFJlY3QoKTsKKworICAgIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50
cyBjb25zdHJhaW50cyA9IFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cygpOworCisg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChsYXllci0+cmVuZGVyZXIoKSk7CisKKyAgICByZW5kZXJlci0+Y29tcHV0ZVN0aWNreVBvc2l0
aW9uQ29uc3RyYWludHMoY29uc3RyYWludHMsIHZpZXdwb3J0UmVjdCk7CisKKyAgICBHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyID0gbGF5ZXItPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigp
OworCisgICAgY29uc3RyYWludHMuc2V0TGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dChncmFwaGlj
c0xheWVyLT5wb3NpdGlvbigpKTsKKyAgICBjb25zdHJhaW50cy5zZXRTdGlja3lPZmZzZXRBdExh
c3RMYXlvdXQocmVuZGVyZXItPnN0aWNreVBvc2l0aW9uT2Zmc2V0KCkpOworCisgICAgcmV0dXJu
IGNvbnN0cmFpbnRzOworfQorCitzdGF0aWMgUmVuZGVyTGF5ZXJCYWNraW5nKiBuZWFyZXN0U2Ny
b2xsaW5nQ29vcmRpbmF0b3JBbmNlc3RvcihSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgUmVu
ZGVyTGF5ZXIqIGFuY2VzdG9yID0gbGF5ZXItPnBhcmVudCgpOworICAgIHdoaWxlIChhbmNlc3Rv
cikgeworICAgICAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gYW5jZXN0b3It
PmJhY2tpbmcoKSkgeworICAgICAgICAgICAgaWYgKGJhY2tpbmctPnNjcm9sbExheWVySUQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gYmFja2luZzsKKyAgICAgICAgfQorICAgICAgICAvLyBJ
ZiB0aGUgZml4ZWQgZWxlbWVudCBpcyBpbnNpZGUgYW4gb3ZlcmZsb3cgcmVnaW9uLCB0aGVuIHdl
IGNhbid0IHNjcm9sbCBpdCB3aXRoIHRoZSBTY3JvbGxpbmdDb29yZGluYXRvci4KKyAgICAgICAg
Ly8gV2Ugd2lsbCBiZSBhYmxlIHRvIGZpeCB0aGlzIHdoZW4gd2UgZ2V0IG92ZXJmbG93IHJlZ2lv
bnMgc2Nyb2xsaW5nIHdpdGggdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLgorICAgICAgICBpZiAo
bGF5ZXItPnNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpOworICAgIH0KKworICAgIHJldHVybiAwOwor
fQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVnaXN0ZXJPclVwZGF0ZVZpZXdwb3J0
Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBzdXBwb3J0IHN0aWNreSBwb3NpdGlvbiBoZXJlISBBbmQgd2Ugc2hvdWxkIGV2ZW50
dWFsbCBzdXBwb3J0IGZpeGVkL3N0aWNreSBlbGVtZW50cworICAgIC8vIHRoYXQgYXJlIGluc2lk
ZSBub24tbWFpbiBmcmFtZXMgb25jZSB3ZSBnZXQgbm9uLW1haW4gZnJhbWVzIHNjcm9sbGluZyB3
aXRoIHRoZSBTY3JvbGxpbmdDb29yZGluYXRvci4KKyAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkt
PmlzU3RpY2t5UG9zaXRpb25lZCgpIHx8IG1fcmVuZGVyVmlldy0+ZG9jdW1lbnQoKS0+b3duZXJF
bGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAg
aWYgKCFzY3JvbGxpbmdDb29yZGluYXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFz
Y3JvbGxpbmdDb29yZGluYXRvci0+c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgfHwgIWxh
eWVyLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGxheWVyLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pOworICAgIEFTU0VS
VChtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKKyAgICBBU1NF
UlQobGF5ZXItPmlzQ29tcG9zaXRlZCgpKTsKKworICAgIFJlbmRlckxheWVyQmFja2luZyogYmFj
a2luZyA9IGxheWVyLT5iYWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEID0gYmFja2luZy0+c2Nyb2xsTGF5ZXJJ
RCgpOworICAgIGlmICghbm9kZUlEKSB7CisgICAgICAgIFJlbmRlckxheWVyQmFja2luZyogcGFy
ZW50ID0gbmVhcmVzdFNjcm9sbGluZ0Nvb3JkaW5hdG9yQW5jZXN0b3IobGF5ZXIpOworICAgICAg
ICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYmFja2luZy0+YXR0
YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcihwYXJlbnQpOworICAgICAgICBub2RlSUQgPSBiYWNr
aW5nLT5zY3JvbGxMYXllcklEKCk7CisgICAgfQorCisgICAgaWYgKGxheWVyLT5yZW5kZXJlcigp
LT5pc1N0aWNreVBvc2l0aW9uZWQoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnVw
ZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWROb2RlKG5vZGVJRCwgY29tcHV0ZVN0aWNreVZpZXdwb3J0
Q29uc3RyYWludHMobGF5ZXIpLCBiYWNraW5nLT5ncmFwaGljc0xheWVyKCkpOworICAgIGVsc2UK
KyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRO
b2RlKG5vZGVJRCwgY29tcHV0ZUZpeGVkVmlld3BvcnRDb25zdHJhaW50cyhsYXllciksIGJhY2tp
bmctPmdyYXBoaWNzTGF5ZXIoKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1
bnJlZ2lzdGVyVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyKiBsYXllcikKK3sK
KyAgICBBU1NFUlQobV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzLmNvbnRhaW5zKGxheWVyKSk7
CisKKyAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXItPmJhY2tpbmco
KSkKKyAgICAgICAgYmFja2luZy0+ZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWdpc3RlckFsbFZpZXdwb3J0Q29uc3Ry
YWluZWRMYXllcnMoKQoreworICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoSGFz
aFNldDxSZW5kZXJMYXllcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdmlld3BvcnRDb25zdHJh
aW5lZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJlZ2lzdGVyT3JV
cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoKml0KTsKK30KKwordm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnVucmVnaXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKCkKK3sK
KyAgICBIYXNoU2V0PFJlbmRlckxheWVyKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdmlld3Bv
cnRDb25zdHJhaW5lZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyTGF5ZXIq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB1bnJlZ2lzdGVyVmlld3BvcnRDb25zdHJhaW5l
ZExheWVyKCppdCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aW5kb3dTY3Jl
ZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogewogICAgIGlmIChtX2xh
eWVyVXBkYXRlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgJKHJldmlzaW9uIDEzMzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEg
KzM0LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRml4ZWRQb3NpdGlvblZp
ZXdwb3J0Q29uc3RyYWludHM7CiBjbGFzcyBHcmFwaGljc0xheWVyOwogY2xhc3MgR3JhcGhpY3NM
YXllclVwZGF0ZXI7CiBjbGFzcyBSZW5kZXJFbWJlZGRlZE9iamVjdDsKIGNsYXNzIFJlbmRlclBh
cnQ7CiBjbGFzcyBTY3JvbGxpbmdDb29yZGluYXRvcjsKK2NsYXNzIFN0aWNreVBvc2l0aW9uVmll
d3BvcnRDb25zdHJhaW50czsKICNpZiBFTkFCTEUoVklERU8pCiBjbGFzcyBSZW5kZXJWaWRlbzsK
ICNlbmRpZgpAQCAtMjI4LDYgKzIzMCwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRvY3VtZW50
QmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKCk7CiAKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0Q29u
c3RyYWludFN0YXR1cyhSZW5kZXJMYXllciopOworICAgIHZvaWQgcmVtb3ZlVmlld3BvcnRDb25z
dHJhaW5lZExheWVyKFJlbmRlckxheWVyKik7CisKKyAgICB2b2lkIHJlZ2lzdGVyQWxsVmlld3Bv
cnRDb25zdHJhaW5lZExheWVycygpOworICAgIHZvaWQgdW5yZWdpc3RlckFsbFZpZXdwb3J0Q29u
c3RyYWluZWRMYXllcnMoKTsKKwogICAgIHZvaWQgcmVzZXRUcmFja2VkUmVwYWludFJlY3RzKCk7
CiAgICAgdm9pZCBzZXRUcmFja3NSZXBhaW50cyhib29sKTsKIApAQCAtMzE5LDYgKzMyNywxMyBA
QCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xs
aW5nKGNvbnN0IFJlbmRlckxheWVyKikgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0NvbXBvc2l0
aW5nRm9ySW5kaXJlY3RSZWFzb24oUmVuZGVyT2JqZWN0KiwgYm9vbCBoYXNDb21wb3NpdGVkRGVz
Y2VuZGFudHMsIGJvb2wgaGFzM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRzLCBSZW5kZXJMYXllcjo6
SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiYpIGNvbnN0OwogCisgICAgdm9pZCBhZGRWaWV3cG9y
dENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXIqKTsKKyAgICB2b2lkIHJlZ2lzdGVyT3JVcGRh
dGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXIqKTsKKyAgICB2b2lkIHVucmVn
aXN0ZXJWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXIqKTsKKworICAgIGNvbnN0
IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIGNvbXB1dGVGaXhlZFZpZXdwb3J0Q29u
c3RyYWludHMoUmVuZGVyTGF5ZXIqKTsKKyAgICBjb25zdCBTdGlja3lQb3NpdGlvblZpZXdwb3J0
Q29uc3RyYWludHMgY29tcHV0ZVN0aWNreVZpZXdwb3J0Q29uc3RyYWludHMoUmVuZGVyTGF5ZXIq
KTsKKwogICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxMYXllcihSb290TGF5ZXJBdHRhY2htZW50KSBj
b25zdDsKICAgICBib29sIHJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3Q7
CiAgICAgYm9vbCByZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdDsKQEAgLTM2
NSw2ICszODAsOSBAQCBwcml2YXRlOgogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX2NsaXBM
YXllcjsKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9zY3JvbGxMYXllcjsKIAorICAgIEhh
c2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CisgICAgSGFz
aFNldDxSZW5kZXJMYXllcio+IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRpbmdVcGRh
dGU7CisKICAgICAvLyBFbmNsb3NpbmcgbGF5ZXIgZm9yIG92ZXJmbG93IGNvbnRyb2xzIGFuZCB0
aGUgY2xpcHBpbmcgbGF5ZXIKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9vdmVyZmxvd0Nv
bnRyb2xzSG9zdExheWVyOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzMzNTEpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0xMS0w
MiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTAwMQorICAgICAgICBQYWdlcyB3aXRoIHBv
c2l0aW9uOmZpeGVkIGVsZW1lbnRzIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHNjcm9sbCBvbiAK
KyAgICAgICAgdGhlIHNjcm9sbGluZyB0aHJlYWQKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5n
LQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA4NTczMTU+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHRlc3RzLgorICAgICAgICAqIHBsYXRm
b3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvdGlsZWQtZHJhd2luZy9maXhlZC9hYnNvbHV0ZS1pbnNpZGUtZml4ZWQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9hYnNv
bHV0ZS1pbnNpZGUtZml4ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL3Rp
bGVkLWRyYXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXctZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhl
ZC1wb3NpdGlvbi1vdXQtb2Ytdmlldy1uZWdhdGl2ZS16aW5kZXgtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhlZC1wb3Np
dGlvbi1vdXQtb2Ytdmlldy1uZWdhdGl2ZS16aW5kZXguaHRtbDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZp
ZXcuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4
ZWQvZm91ci1iYXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
L3RpbGVkLWRyYXdpbmcvZml4ZWQvZm91ci1iYXJzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL25lc3RlZC1maXhlZC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL25lc3Rl
ZC1maXhlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2lu
Zy9maXhlZC9wZXJjZW50YWdlLWluc2lkZS1maXhlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL3BlcmNlbnRhZ2UtaW5zaWRl
LWZpeGVkLmh0bWw6IEFkZGVkLgorCisgICAgICAgIFRoZXNlIHR3byB0ZXN0cyBhcmUgc3VwcG9z
ZWQgdG8gYmUgaW4gInNsb3cgc2Nyb2xsaW5nIiBtb2RlLiBOb3cgdGhhdCAKKyAgICAgICAgZml4
ZWQgZWxlbWVudHMgY2FuIHNjcm9sbCAiZmFzdCwiIHdlIG5lZWQgc29tZXRoaW5nIGVsc2UgdG8g
Zm9yY2UgCisgICAgICAgIHNsb3cgc2Nyb2xsaW5nLiBXZSBzaG91bGQgcHJvYmFibHkganVzdCBh
ZGQgc29tZXRoaW5nIHRvIAorICAgICAgICB3aW5kb3cuaW50ZXJuYWxzIHRvIGRvIHRoYXQsIGJ1
dCBpbiB0aGUgbWVhbnRpbWUsIAorICAgICAgICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6Zml4ZWQg
d2lsbCB3b3JrLgorICAgICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3Njcm9sbGlu
Zy10cmVlLXNsb3ctc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvdGlsZWQtZHJhd2luZy9zY3JvbGxpbmctdHJlZS1zbG93LXNjcm9sbGluZy5odG1sOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3RpbGUtY292ZXJhZ2Utc2xvdy1zY3Jv
bGxpbmctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5n
L3RpbGUtY292ZXJhZ2Utc2xvdy1zY3JvbGxpbmcuaHRtbDoKKwogMjAxMi0xMS0wMiAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgU1VCUElY
RUxfTEFZT1VUIG9uIE1hYwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRy
YXdpbmcvc2Nyb2xsaW5nLXRyZWUtc2xvdy1zY3JvbGxpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3Njcm9sbGluZy10
cmVlLXNsb3ctc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTMzMzQ3KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nLXRyZWUtc2xvdy1z
Y3JvbGxpbmctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogKFNj
cm9sbGluZyBub2RlCiAgICh2aWV3cG9ydCByZWN0IDAgMCA4MDAgNjAwKQogICAoY29udGVudHMg
c2l6ZSA4MDAgNjAwKQotICAoU2Nyb2xsaW5nIG9uIG1haW4gdGhyZWFkIGJlY2F1c2U6IEhhcyB2
aWV3cG9ydCBjb25zdHJhaW5lZCBvYmplY3RzIHdpdGhvdXQgc3VwcG9ydGluZyBmaXhlZCBsYXll
cnMsICkKKyAgKFNjcm9sbGluZyBvbiBtYWluIHRocmVhZCBiZWNhdXNlOiBIYXMgc2xvdyByZXBh
aW50IG9iamVjdHMsICkKICkKIApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVk
LWRyYXdpbmcvc2Nyb2xsaW5nLXRyZWUtc2xvdy1zY3JvbGxpbmcuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9zY3JvbGxpbmctdHJlZS1z
bG93LXNjcm9sbGluZy5odG1sCShyZXZpc2lvbiAxMzMzNDcpCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9zY3JvbGxpbmctdHJlZS1zbG93LXNjcm9sbGluZy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsOCBAQAogICAgICAgICAuYm94IHsKICAgICAgICAg
ICAgIGhlaWdodDogMTAwcHg7CiAgICAgICAgICAgICB3aWR0aDogMTAwcHg7Ci0gICAgICAgICAg
ICBwb3NpdGlvbjogZml4ZWQ7IC8qIEF0IHRoaXMgdGltZSwgcG9zaXRpb246Zml4ZWQgZm9yY2Vz
IHNsb3cgbW9kZS4gKi8KKyAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtcmVw
ZWF0aW5nLWxpbmVhci1ncmFkaWVudChyZWQgMTAlLCBncmVlbiAxMCUsIGdyZWVuIDMwJSk7Cisg
ICAgICAgICAgICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkOyAvKiBBdCB0aGlzIHRpbWUs
IGJhY2tncm91bmQtYXR0YWNobWVudDpmaXhlZCBmb3JjZXMgc2xvdyBtb2RlLiAqLwogICAgICAg
ICB9CiAgICAgPC9zdHlsZT4KICAgICA8c2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL3RpbGVkLWRyYXdpbmcvdGlsZS1jb3ZlcmFnZS1zbG93LXNjcm9sbGluZy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdp
bmcvdGlsZS1jb3ZlcmFnZS1zbG93LXNjcm9sbGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDEz
MzM0NykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3RpbGUtY292
ZXJhZ2Utc2xvdy1zY3JvbGxpbmctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMiwx
MyArMTIsNiBAQAogICAgICAgKGNoaWxkcmVuIDEKICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKICAg
ICAgICAgICAodmlzaWJsZSByZWN0IDAuMDAsIDAuMDAgMC4wMCB4IDAuMDApCi0gICAgICAgICAg
KGNoaWxkcmVuIDEKLSAgICAgICAgICAgIChHcmFwaGljc0xheWVyCi0gICAgICAgICAgICAgIChw
b3NpdGlvbiA4LjAwIDEzLjAwKQotICAgICAgICAgICAgICAoYm91bmRzIDEwMC4wMCAxMDAuMDAp
Ci0gICAgICAgICAgICAgICh2aXNpYmxlIHJlY3QgMC4wMCwgMC4wMCAxMDAuMDAgeCAxMDAuMDAp
Ci0gICAgICAgICAgICApCi0gICAgICAgICAgKQogICAgICAgICApCiAgICAgICApCiAgICAgKQpJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvdGlsZS1jb3ZlcmFn
ZS1zbG93LXNjcm9sbGluZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy90aWxlZC1kcmF3aW5nL3RpbGUtY292ZXJhZ2Utc2xvdy1zY3JvbGxpbmcuaHRtbAkocmV2
aXNpb24gMTMzMzQ3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcv
dGlsZS1jb3ZlcmFnZS1zbG93LXNjcm9sbGluZy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02LDcg
KzYsOCBAQAogICAgICAgICAuYm94IHsKICAgICAgICAgICAgIGhlaWdodDogMTAwcHg7CiAgICAg
ICAgICAgICB3aWR0aDogMTAwcHg7Ci0gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7IC8qIEF0
IHRoaXMgdGltZSwgcG9zaXRpb246Zml4ZWQgZm9yY2VzIHNsb3cgbW9kZS4gKi8KKyAgICAgICAg
ICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudChy
ZWQgMTAlLCBncmVlbiAxMCUsIGdyZWVuIDMwJSk7CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWF0
dGFjaG1lbnQ6IGZpeGVkOyAvKiBBdCB0aGlzIHRpbWUsIGJhY2tncm91bmQtYXR0YWNobWVudDpm
aXhlZCBmb3JjZXMgc2xvdyBtb2RlLiAqLwogICAgICAgICB9CiAgICAgPC9zdHlsZT4KICAgICA8
c2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4
ZWQvYWJzb2x1dGUtaW5zaWRlLWZpeGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9hYnNvbHV0ZS1pbnNpZGUt
Zml4ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvYWJzb2x1dGUtaW5zaWRlLWZpeGVkLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorKFNjcm9sbGluZyBub2RlCisgICh2aWV3
cG9ydCByZWN0IDAgMCA3ODUgNjAwKQorICAoY29udGVudHMgc2l6ZSA3ODUgMjcxMCkKKyAgKHJl
cXVlc3RlZCBzY3JvbGwgcG9zaXRpb24gMCAyMDApCisgIChjaGlsZHJlbiAxCisgICAgKEZpeGVk
IG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VMZWZ0IEFuY2hvckVkZ2VUb3Ap
CisgICAgICAodmlld3BvcnQgcmVjdCBhdCBsYXN0IGxheW91dDogMC4wMCAyMDAuMDAgNzg1LjAw
IDYwMC4wMCkKKyAgICAgIChsYXllciBwb3NpdGlvbiBhdCBsYXN0IGxheW91dCA4LjAwIDguMDAp
CisgICAgKQorICApCispCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1k
cmF3aW5nL2ZpeGVkL2Fic29sdXRlLWluc2lkZS1maXhlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2Fic29sdXRlLWluc2lk
ZS1maXhlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3Rp
bGVkLWRyYXdpbmcvZml4ZWQvYWJzb2x1dGUtaW5zaWRlLWZpeGVkLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxoZWFkPgorICAg
IDxzdHlsZT4KKyAgICAgICAgYm9keSB7CisgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAg
ICAgICBoZWlnaHQ6IDI1MDBweDsKKyAgICAgICAgfQorCisgICAgICAgIC5ib3ggeworICAgICAg
ICAgIGhlaWdodDogMTAwcHg7CisgICAgICAgICAgd2lkdGg6IDEwMHB4OworICAgICAgICB9CisK
KyAgICAgICAgLm91dGVyIHsKKyAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKKyAgICAgICAg
ICAgIGxlZnQ6IDEwcHg7CisgICAgICAgICAgICB0b3A6IDEwcHg7CisgICAgICAgICAgICB3aWR0
aDogMTAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgICAgICAgb3V0bGlu
ZTogMnB4IHNvbGlkIGJsYWNrOworICAgICAgICB9CisKKyAgICAgICAgLndyYXBwZXIgeworICAg
ICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBn
cmVlbjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLmluZGljYXRvciB7CisgICAgICAg
ICAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgICAgICAgICAgbWFyZ2luLXRvcDogMjEwcHg7CisgICAg
ICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKyAg
ICA8c2NyaXB0PgorICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsK
KyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gZG9TY3JvbGwoKQorICAgICAgeworICAgICAgICB3
aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8o
MCwgMjAwKTsKKyAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykgeworICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdHMnKS5pbm5lclRleHQgPSBpbnRlcm5hbHMu
c2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KGRvY3VtZW50KTsKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgIH0KKyAgICAgICAgfSwgMTApOworICAgICAgfQor
ICAgICAgCisgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvU2Nyb2xsLCBm
YWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgPCEtLSBUaGUgZ3JlZW4g
Ym94IHNob3VsZCBvYnNjdXJlIHRoZSByZWQgYm94IC0tPgorICA8cHJlIGlkPSJyZXN1bHRzIj48
L3ByZT4KKyAgPGRpdiBjbGFzcz0iaW5kaWNhdG9yIGJveCI+PC9kaXY+CisgIDxkaXYgY2xhc3M9
Im91dGVyIGJveCI+CisgICAgPGRpdiBjbGFzcz0id3JhcHBlciBib3giPgorICAgIDwvZGl2Pgor
ICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2lu
Zy9maXhlZC9maXhlZC1wb3NpdGlvbi1vdXQtb2Ytdmlldy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhl
ZC1wb3NpdGlvbi1vdXQtb2Ytdmlldy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIgQEAKKyhTY3JvbGxpbmcgbm9kZQorICAodmlld3BvcnQgcmVjdCAwIDAgNzg1IDYwMCkK
KyAgKGNvbnRlbnRzIHNpemUgNzg1IDEwMjEpCisgIChTY3JvbGxpbmcgb24gbWFpbiB0aHJlYWQg
YmVjYXVzZTogSGFzIG5vbi1sYXllciBmaXhlZCBvYmplY3RzLCApCisgIChjaGlsZHJlbiAxCisg
ICAgKEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VMZWZ0IEFuY2hv
ckVkZ2VUb3ApCisgICAgICAodmlld3BvcnQgcmVjdCBhdCBsYXN0IGxheW91dDogMC4wMCAwLjAw
IDc4NS4wMCA2MDAuMDApCisgICAgKQorICApCispCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3LW5l
Z2F0aXZlLXppbmRleC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXct
bmVnYXRpdmUtemluZGV4LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12
aWV3LW5lZ2F0aXZlLXppbmRleC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTIgQEAKKyhTY3JvbGxpbmcgbm9kZQorICAodmlld3BvcnQgcmVjdCAwIDAgNzg1IDYwMCkKKyAg
KGNvbnRlbnRzIHNpemUgNzg1IDEwMjEpCisgIChTY3JvbGxpbmcgb24gbWFpbiB0aHJlYWQgYmVj
YXVzZTogSGFzIG5vbi1sYXllciBmaXhlZCBvYmplY3RzLCApCisgIChjaGlsZHJlbiAxCisgICAg
KEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VMZWZ0IEFuY2hvckVk
Z2VUb3ApCisgICAgICAodmlld3BvcnQgcmVjdCBhdCBsYXN0IGxheW91dDogMC4wMCAwLjAwIDc4
NS4wMCA2MDAuMDApCisgICAgKQorICApCispCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3LW5lZ2F0
aXZlLXppbmRleC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90
aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3LW5lZ2F0aXZlLXpp
bmRleC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVk
LWRyYXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXctbmVnYXRpdmUtemluZGV4
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8
aHRtbD4KKzxoZWFkPgorICA8c3R5bGU+CisgICAgLmZpeGVkIHsKKyAgICAgIHBvc2l0aW9uOiBm
aXhlZDsKKyAgICAgIHdpZHRoOiAxMHB4OworICAgICAgaGVpZ2h0OiAxMHB4OworICAgIH0KKyAg
PC9zdHlsZT4KKworICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKSB7CisgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCisgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2Nyb2xsaW5nVHJl
ZSIpLmlubmVyVGV4dCA9IHdpbmRvdy5pbnRlcm5hbHMuc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0
KGRvY3VtZW50KTsKKyAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAg
fSwgMTApOworICAgICAgfSwgZmFsc2UpOworICAgIH0KKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+CisK
Kzxib2R5PgorICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDEwMDBweCI+CisgICAgPHByZSBpZD0ic2Ny
b2xsaW5nVHJlZSI+PC9wcmU+CisgIDwvZGl2PgorCisgIDxkaXYgY2xhc3M9ImZpeGVkIiBzdHls
ZT0iei1pbmRleDogLTE7IHRvcDogLTEwMHB4Ij48L2Rpdj4KKyAgPGRpdiBjbGFzcz0iZml4ZWQi
IHN0eWxlPSJ6LWluZGV4OiAtMTsgdG9wOiAwcHg7IGxlZnQ6IDEwMDBweCI+PC9kaXY+CisKKyAg
PGRpdiBjbGFzcz0iZml4ZWQiIHN0eWxlPSJ0b3A6IDBweDsgbGVmdDogMHB4Ij48L2Rpdj4KKzwv
Ym9keT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRy
YXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXcuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhlZC1wb3Np
dGlvbi1vdXQtb2Ytdmlldy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXcuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1s
PgorPGhlYWQ+CisgIDxzdHlsZT4KKyAgICAuZml4ZWQgeworICAgICAgcG9zaXRpb246IGZpeGVk
OworICAgICAgd2lkdGg6IDEwcHg7CisgICAgICBoZWlnaHQ6IDEwcHg7CisgICAgfQorICA8L3N0
eWxlPgorCisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisK
KyAgICAgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc2Nyb2xsaW5nVHJlZScpLmlubmVyVGV4dCA9IGludGVybmFscy5zY3JvbGxpbmdTdGF0ZVRy
ZWVBc1RleHQoZG9jdW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7CisgIDwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keT4KKyAgPGRpdiBzdHlsZT0iaGVpZ2h0OiAxMDAwcHgiPgorICAg
IDxwcmUgaWQ9InNjcm9sbGluZ1RyZWUiPjwvcHJlPgorICA8L2Rpdj4KKworICA8ZGl2IGNsYXNz
PSJmaXhlZCIgc3R5bGU9InRvcDogLTEwMHB4Ij48L2Rpdj4KKyAgPGRpdiBjbGFzcz0iZml4ZWQi
IHN0eWxlPSJ0b3A6IDBweDsgbGVmdDogMTAwMHB4Ij48L2Rpdj4KKworICA8ZGl2IGNsYXNzPSJm
aXhlZCIgc3R5bGU9InRvcDogMHB4OyBsZWZ0OiAwcHgiPjwvZGl2PgorPC9ib2R5PgorPC9odG1s
PgorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9m
b3VyLWJhcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZvdXItYmFycy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9mb3Vy
LWJhcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3IEBACisoU2Nyb2xs
aW5nIG5vZGUKKyAgKHZpZXdwb3J0IHJlY3QgMCAwIDc4NSA2MDApCisgIChjb250ZW50cyBzaXpl
IDc4NSAyMjIxKQorICAocmVxdWVzdGVkIHNjcm9sbCBwb3NpdGlvbiAwIDIwMCkKKyAgKGNoaWxk
cmVuIDQKKyAgICAoRml4ZWQgbm9kZQorICAgICAgKGFuY2hvciBlZGdlczogQW5jaG9yRWRnZUxl
ZnQgQW5jaG9yRWRnZVRvcCkKKyAgICAgICh2aWV3cG9ydCByZWN0IGF0IGxhc3QgbGF5b3V0OiAw
LjAwIDIwMC4wMCA3ODUuMDAgNjAwLjAwKQorICAgICkKKyAgICAoRml4ZWQgbm9kZQorICAgICAg
KGFuY2hvciBlZGdlczogQW5jaG9yRWRnZUxlZnQgQW5jaG9yRWRnZVRvcCkKKyAgICAgICh2aWV3
cG9ydCByZWN0IGF0IGxhc3QgbGF5b3V0OiAwLjAwIDIwMC4wMCA3ODUuMDAgNjAwLjAwKQorICAg
ICAgKGxheWVyIHBvc2l0aW9uIGF0IGxhc3QgbGF5b3V0IDEwLjAwIDIwMC4wMCkKKyAgICApCisg
ICAgKEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VSaWdodCBBbmNo
b3JFZGdlVG9wKQorICAgICAgKHZpZXdwb3J0IHJlY3QgYXQgbGFzdCBsYXlvdXQ6IDAuMDAgMjAw
LjAwIDc4NS4wMCA2MDAuMDApCisgICAgICAobGF5ZXIgcG9zaXRpb24gYXQgbGFzdCBsYXlvdXQg
NjAxLjAwIDIwMC4wMCkKKyAgICApCisgICAgKEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRn
ZXM6IEFuY2hvckVkZ2VMZWZ0IEFuY2hvckVkZ2VCb3R0b20pCisgICAgICAodmlld3BvcnQgcmVj
dCBhdCBsYXN0IGxheW91dDogMC4wMCAyMDAuMDAgNzg1LjAwIDYwMC4wMCkKKyAgICAgIChsYXll
ciBwb3NpdGlvbiBhdCBsYXN0IGxheW91dCAwLjAwIDUxNi4wMCkKKyAgICApCisgICkKKykKK1Ro
aXMgaXMgdGhlIHRvcCBiYXIuIFRoaXMgaXMgdGhlIGxlZnQgYmFyLiBUaGlzIGlzIHRoZSByaWdo
dCBiYXIuIFRoaXMgaXMgdGhlIGJvdHRvbSBiYXIuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9mb3VyLWJhcnMuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9mb3VyLWJhcnMuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5n
L2ZpeGVkL2ZvdXItYmFycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACis8IURP
Q1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBuYW1lPSJhcHBsZS1tb2Jp
bGUtd2ViLWFwcC1jYXBhYmxlIiBjb250ZW50PSJ5ZXMiPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgICBib2R5IHsKKyAgICAgICAgaGVpZ2h0OiAyMjAw
cHg7CisgICAgICB9CisgICAgICAKKyAgICAgIC5maXhlZCB7CisgICAgICAgIHBvc2l0aW9uOiBm
aXhlZDsKKyAgICAgICAgdG9wOiAwOworICAgICAgICBsZWZ0OiAwOworICAgICAgICBtYXJnaW46
IDEwcHg7CisgICAgICAgIGhlaWdodDogNTBweDsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiYSgwLCAxMjgsIDAsIDAuOCk7CisgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOwor
ICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAxMHB4IGJsYWNrOworICAgICAgfQorICAg
ICAgCisgICAgICAudG9wLCAuYm90dG9tIHsKKyAgICAgICAgd2lkdGg6IDk2JTsKKyAgICAgIH0K
KworICAgICAgLmxlZnQgeworICAgICAgICB0b3A6IDIwMHB4OworICAgICAgICBsZWZ0OiAxMHB4
OworICAgICAgICB3aWR0aDogMTUwcHg7CisgICAgICAgIGhlaWdodDogMzAwcHg7CisgICAgICB9
CisKKyAgICAgIC5yaWdodCB7CisgICAgICAgIHRvcDogMjAwcHg7CisgICAgICAgIGxlZnQ6IGF1
dG87CisgICAgICAgIHJpZ2h0OiAxMHB4OworICAgICAgICB3aWR0aDogMTUwcHg7CisgICAgICAg
IGhlaWdodDogMzAwcHg7CisgICAgICB9CisgICAgICAKKyAgICAgIC5ib3R0b20geworICAgICAg
ICB0b3A6IGF1dG87CisgICAgICAgIGJvdHRvbTogMTBweDsKKyAgICAgIH0KKyAgICAgIAorICAg
IDwvc3R5bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0
Zi04Ij4KKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAg
ICB9CisKKyAgICAgIGZ1bmN0aW9uIGRvU2Nyb2xsKCkKKyAgICAgIHsKKyAgICAgICAgd2luZG93
LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDIw
MCk7CisgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0cycpLmlubmVyVGV4dCA9IHdpbmRvdy5pbnRlcm5h
bHMuc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KGRvY3VtZW50KTsKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgIH0KKyAgICAgICAgfSwgMTApOworICAgICAg
fQorICAgICAgCisgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvU2Nyb2xs
LCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHByZSBpZD0icmVz
dWx0cyI+PC9wcmU+CisKKzxkaXYgY2xhc3M9ImZpeGVkIHRvcCI+CisgIFRoaXMgaXMgdGhlIHRv
cCBiYXIuCis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZpeGVkIGxlZnQiPgorICBUaGlzIGlzIHRoZSBs
ZWZ0IGJhci4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZml4ZWQgcmlnaHQiPgorICBUaGlzIGlzIHRo
ZSByaWdodCBiYXIuCis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZpeGVkIGJvdHRvbSI+CisgIFRoaXMg
aXMgdGhlIGJvdHRvbSBiYXIuCis8L2Rpdj4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZpeGVkLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQt
ZHJhd2luZy9maXhlZC9uZXN0ZWQtZml4ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZpeGVk
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorKFNjcm9sbGluZyBu
b2RlCisgICh2aWV3cG9ydCByZWN0IDAgMCA3ODUgNjAwKQorICAoY29udGVudHMgc2l6ZSA3ODUg
MjIxMykKKyAgKHJlcXVlc3RlZCBzY3JvbGwgcG9zaXRpb24gMCAyMDApCisgIChjaGlsZHJlbiAx
CisgICAgKEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VMZWZ0IEFu
Y2hvckVkZ2VUb3ApCisgICAgICAodmlld3BvcnQgcmVjdCBhdCBsYXN0IGxheW91dDogMC4wMCAy
MDAuMDAgNzg1LjAwIDYwMC4wMCkKKyAgICApCisgICkKKykKKwpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZpeGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVz
dGVkLWZpeGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
dGlsZWQtZHJhd2luZy9maXhlZC9uZXN0ZWQtZml4ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKworPGhlYWQ+CisgICAgPHN0eWxl
IHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAgICAgYm9keSB7CisgICAgICAg
ICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICBoZWlnaHQ6IDIyMDBweDsKKyAgICAgICAgfQor
CisgICAgICAgIC5ib3ggeworICAgICAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICAgICAgd2lk
dGg6IDEwMHB4OworICAgICAgICB9CisKKyAgICAgICAgLm91dGVyIHsKKyAgICAgICAgICAgIHBv
c2l0aW9uOiBmaXhlZDsKKyAgICAgICAgICAgIHRvcDogMHB4OworICAgICAgICAgICAgei1pbmRl
eDogMTsgLyogbWFrZXMgdGhpcyBhIHN0YWNraW5nIGNvbnRleHQgKi8KKyAgICAgICAgICAgIGJh
Y2tncm91bmQ6IGJsdWU7CisgICAgICAgIH0KKworICAgICAgICAuaW5uZXIgeworICAgICAgICAg
ICAgcG9zaXRpb246IGZpeGVkOworICAgICAgICAgICAgdG9wOiAxMjBweDsKKyAgICAgICAgICAg
IGxlZnQ6IDEyMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZDogZ3JlZW47CisgICAgICAgIH0K
KyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0
PSJ1dGYtOCI+CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwor
ICAgICAgfQorCisgICAgICBmdW5jdGlvbiBkb1Njcm9sbCgpCisgICAgICB7CisgICAgICAgIHdp
bmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygw
LCAyMDApOworICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdHMnKS5pbm5lclRleHQgPSB3aW5kb3cuaW50
ZXJuYWxzLnNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dChkb2N1bWVudCk7CisgICAgICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sIDEwKTsKKyAg
ICAgIH0KKyAgICAgIAorICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Nj
cm9sbCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPHByZSBp
ZD0icmVzdWx0cyI+PC9wcmU+CisgICAgPGRpdiBjbGFzcz0ib3V0ZXIgYm94Ij4KKyAgICAgICAg
PGRpdiBjbGFzcz0iaW5uZXIgYm94Ij48L2Rpdj4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL3Bl
cmNlbnRhZ2UtaW5zaWRlLWZpeGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9wZXJjZW50YWdlLWluc2lkZS1m
aXhlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvdGlsZWQtZHJhd2luZy9maXhlZC9wZXJjZW50YWdlLWluc2lkZS1maXhlZC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKyhTY3JvbGxpbmcgbm9kZQorICAodmll
d3BvcnQgcmVjdCAwIDAgNzg1IDYwMCkKKyAgKGNvbnRlbnRzIHNpemUgNzg1IDI1MTMpCisgIChy
ZXF1ZXN0ZWQgc2Nyb2xsIHBvc2l0aW9uIDAgMjAwKQorICAoY2hpbGRyZW4gMQorICAgIChGaXhl
ZCBub2RlCisgICAgICAoYW5jaG9yIGVkZ2VzOiBBbmNob3JFZGdlTGVmdCBBbmNob3JFZGdlVG9w
KQorICAgICAgKHZpZXdwb3J0IHJlY3QgYXQgbGFzdCBsYXlvdXQ6IDAuMDAgMjAwLjAwIDc4NS4w
MCA2MDAuMDApCisgICAgICAobGF5ZXIgcG9zaXRpb24gYXQgbGFzdCBsYXlvdXQgMC4wMCAxMy4w
MCkKKyAgICApCisgICkKKykKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVk
LWRyYXdpbmcvZml4ZWQvcGVyY2VudGFnZS1pbnNpZGUtZml4ZWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9wZXJjZW50YWdl
LWluc2lkZS1maXhlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvcGVyY2VudGFnZS1pbnNpZGUtZml4ZWQuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKworPGhl
YWQ+CisgICAgPHN0eWxlPgorICAgICAgICBib2R5IHsKKyAgICAgICAgICAgIG1hcmdpbjogMDsK
KyAgICAgICAgICAgIGhlaWdodDogMjUwMHB4OworICAgICAgICB9CisKKyAgICAgICAgLmJveCB7
CisgICAgICAgICAgaGVpZ2h0OiAxMDBweDsKKyAgICAgICAgICB3aWR0aDogMTAwcHg7CisgICAg
ICAgIH0KKworICAgICAgICAud3JhcHBlciB7CisgICAgICAgICAgcG9zaXRpb246IGZpeGVkOwor
ICAgICAgICAgIHdpZHRoOiA1MCU7CisgICAgICAgICAgaGVpZ2h0OiA1MCU7CisgICAgICAgICAg
Ym9yZGVyOiAyMHB4IHNvbGlkIGdyYXk7CisgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogc2ls
dmVyOworICAgICAgICAgIHotaW5kZXg6IDA7CisgICAgICAgIH0KKworICAgICAgICAuaW5uZXIg
eworICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgICAgICAgbWFyZ2luLWxl
ZnQ6LTUwcHg7CisgICAgICAgICAgICBtYXJnaW4tdG9wOi0xMDBweDsKKyAgICAgICAgICAgIHRv
cDogMTAwJTsKKyAgICAgICAgICAgIGxlZnQ6IDUwJTsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6
IGdyZWVuOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKyAgICA8c2NyaXB0PgorICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OworICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgIH0KKworICAgICAgZnVu
Y3Rpb24gZG9TY3JvbGwoKQorICAgICAgeworICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMjAwKTsKKyAgICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdyZXN1bHRzJykuaW5uZXJUZXh0ID0gd2luZG93LmludGVybmFscy5zY3JvbGxpbmdTdGF0
ZVRyZWVBc1RleHQoZG9jdW1lbnQpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7CisgICAgICAgICAgfQorICAgICAgICB9LCAxMCk7CisgICAgICB9CisgICAgICAKKyAgICAg
IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9TY3JvbGwsIGZhbHNlKTsKKyAgICA8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDwhLS0gVGhlIGdyYXkgYm94IHNob3VsZCB0
YWtlIHVwIHRoZSB0b3AgbGVmdCBxdWFkcmFudCBvZiB0aGUgd2ViIGFyZWEuCisgICAgICAgICBU
aGUgZ3JlZW4gYm94IHNob3VsZCBiZSBhbGlnbmVkIHdpdGggdGhlIGluc2lkZSBlZGdlIG9mIHRo
ZSBwYWxlciBncmF5IGJveCwgaW4gdGhlIGJvdHRvbSBtaWRkbGUuCisgICAgLS0+CisgICAgPHBy
ZSBpZD0icmVzdWx0cyI+PC9wcmU+CisgICAgPGRpdiBjbGFzcz0id3JhcHBlciI+CisgICAgICA8
ZGl2IGNsYXNzPSJpbm5lciBib3giPjwvZGl2PgorICAgIDwvZGl2PgorPC9ib2R5PgorPC9odG1s
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172370</attachid>
            <date>2012-11-05 11:39:14 -0800</date>
            <delta_ts>2012-11-05 12:48:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>85575</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzUwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MSBAQAorMjAxMi0xMS0wNSAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMTAwMQorICAgICAgICBQYWdlcyB3aXRoIHBvc2l0aW9uOmZp
eGVkIGVsZW1lbnRzIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHNjcm9sbCBvbiAKKyAgICAgICAg
dGhlIHNjcm9sbGluZyB0aHJlYWQKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMTA4NTczMTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHR3byBuZXcgY2xhc3Nlcy4gU2Ny
b2xsaW5nU3RhdGVGaXhlZE5vZGUgaXMgYSBjbGFzcyAKKyAgICAgICAgdG8gcmVwcmVzZW50IGZp
eGVkIG5vZGVzIGluIHRoZSBzdGF0ZSB0cmVlLCBhbmQgCisgICAgICAgIFNjcm9sbGluZ1RyZWVG
aXhlZE5vZGUgcmVwcmVzZW50cyBmaXhlZCBub2RlIGluIHRoZSBzY3JvbGxpbmcgdHJlZSAKKyAg
ICAgICAgb3ZlciBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgV2hlbiB3ZSBhcmUgKG5vbi1wcm9n
cmFtYXRpY2FsbHkpIHNjcm9sbGluZyBmaXhlZCBvYmplY3RzIG9uIHRoZSAKKyAgICAgICAgc2Ny
b2xsaW5nIHRocmVhZCwgd2UgZG8gbm90IHdhbnQgdG8gZG8gYW55IHdvcmsgaGVyZS4gCisgICAg
ICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1
cGRhdGVGaXhlZEVsZW1lbnRzQWZ0ZXJTY3JvbGxpbmcpOgorCisgICAgICAgIFdoZW5ldmVyIHdl
IHN5bmMgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYWluIGZyYW1lJ3MgbGF5ZXIsIHdlIGhhdmUgdG8g
CisgICAgICAgIGRvIHRoZSBzYW1lIGZvciBzY3JvbGxpbmcgdHJlZSBjaGlsZHJlbi4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRp
b24pOgorCisgICAgICAgIE5ldyBTY3JvbGxpbmdOb2RlVHlwZSAtLSBGaXhlZE5vZGUsIHlheSEg
QW5kIHR3byBuZXcgZnVuY3Rpb25zIAorICAgICAgICBzcGVjaWZpYyB0byBkZWFsaW5nIHdpdGgg
Rml4ZWROb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVZpZXdw
b3J0Q29uc3RyYWluZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzeW5jQ2hpbGRQb3NpdGlvbnMpOgorCisgICAgICAgIFRoaXMgaXMgdGhlIG5ldyBjbGFz
cyB0aGF0IHJlcHJlc2VudHMgZml4ZWQgbm9kZXMgaW4gdGhlIHN0YXRlIHRyZWUuIAorICAgICAg
ICBBbGwgb2YgdGhlIGNoYW5nZWQgcHJvcGVydGllcyBhcmUgc3RvcmVkIHdpdGhpbiAKKyAgICAg
ICAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMuCisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6U2Nyb2xsaW5nU3Rh
dGVGaXhlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6
On5TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZTo6dXBkYXRlQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nU3RhdGVGaXhlZE5vZGU6OmR1bXBQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OnZpZXdwb3J0Q29uc3RyYWludHMpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSk6CisKKyAgICAgICAgTWFrZSBz
dXJlIHRvIGNyZWF0ZSB0aGUgcmlnaHQgdHlwZSBvZiBjbG9uZSBmb3IgZWFjaCBub2RlLgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGU6OmNsb25lQW5kUmVzZXQpOgorCisgICAgICAgIE5v
dyB0aGF0IG1fY2hpbGRyZW4gbWF5IGJlIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCwgSSBmb3Vu
ZCB0aGlzIAorICAgICAgICBidWcuIFdlIGVuY291bnRlciBpdCB3aGVuIHRoZSBwYXJhbWV0ZXIg
dG8gcmVtb3ZlQ2hpbGQgaXMgdGhpcyBhbmQgd2UgCisgICAgICAgIHdhbnQgdG8gcmVtb3ZlIGFs
bCBvZiBvdXIgY2hpbGRyZW4uIEluIHRoYXQgY2FzZSwgdGhpcyBpcyBvYnZpb3VzbHkgCisgICAg
ICAgIG5vdCBmb3VuZCBpbiBpdHMgb3duIGNoaWxkIGFycmF5LgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nU3RhdGVOb2RlOjpyZW1vdmVDaGlsZCk6CisKKyAgICAgICAgU2Nyb2xsaW5nU3Rh
dGVOb2RlIG5vdyBjYWNoZXMgdGhlIEdyYXBoaWNzTGF5ZXIgaW4gYWRkaXRpb24gdG8gdGhlIAor
ICAgICAgICBQbGF0Zm9ybUxheWVyLiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gc3luYyB0aGUgR3Jh
cGhpY3NMYXllciBwb3NpdGlvbiAKKyAgICAgICAgYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWVzLgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjppc1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6Z3JhcGhpY3NMYXllcik6Cisg
ICAgICAgIChTY3JvbGxpbmdTdGF0ZU5vZGUpOgorCisgICAgICAgIEhhbmRsZSBmaXhlZCBub2Rl
cy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnVwZGF0ZVRyZWVGcm9tU3RhdGVOb2RlKToKKworICAg
ICAgICBOZXcgZnVuY3Rpb24gcGFyZW50U2Nyb2xsUG9zaXRpb25EaWRDaGFuZ2UoKSBpcyBjYWxs
ZWQgb24gY2hpbGRyZW4gCisgICAgICAgIHdoZW4gdGhlIHBhcmVudCBoYXMgc2Nyb2xsZWQuCisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaDoKKyAgICAgICAgKFNj
cm9sbGluZ1RyZWVOb2RlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZS5oOgorICAgICAgICAoU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUpOgor
CisgICAgICAgIFJldHVybiB0cnVlIGZvciBzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKS4g
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLmg6
CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvck1hYyk6CisKKyAgICAgICAgSGFuZGxlIGZp
eGVkIG5vZGVzLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGlu
YXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjph
dHRhY2hUb1N0YXRlVHJlZSk6CisKKyAgICAgICAgTm93IHRoYXQgbV9jaGlsZHJlbiBjYW4gYmUg
bm9uLW51bGwgSSBjYXVnaHQgdGhpcyBwcmUtZXhpc3RpbmcgYnVnIAorICAgICAgICB3aGVyZSB3
ZSB3b3VsZCBjb21lIHRpbWVzIHJlbW92ZSBhIG5vZGUgd2l0aG91dCB1cGRhdGluZyB0aGUgSGFz
aE1hcC4gCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhhdCBieSBjb25zb2xpZGF0aW5nIHRo
ZSByZW1vdmFsIGludG8gb25lIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWM6OmRldGFjaEZyb21TdGF0ZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmNsZWFyU3RhdGVUcmVlKToKKworICAgICAgICBVcGRh
dGUgdGhlIEdyYXBoaWNzTGF5ZXJzIHRvIHJlZmxlY3QgdGhlIG5ldyBwb3NpdGlvbiB0aGF0IHRo
ZSAKKyAgICAgICAgU2Nyb2xsaW5nIHRocmVhZCBoYXMgbW92ZWQgdGhlIHVuZGVybHlpbmcgQ0FM
YXllciB0byBhbHJlYWR5LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JN
YWM6OnN5bmNDaGlsZFBvc2l0aW9ucyk6CisKKyAgICAgICAgUGFzcyBuZXcgY29uc3RyYWludHMg
b3ZlciB0byB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgbm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjp1cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTm9kZSk6CisK
KyAgICAgICAgQ2FjaGUgdGhlIEdyYXBoaWNzTGF5ZXIgaW4gYWRkaXRpb24gdG8gdGhlIFBsYXRm
b3JtTGF5ZXIuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1N0YXRlTm9k
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xs
TGF5ZXIpOgorCisgICAgICAgIEhlcmUgaXMgdGhlIG5ldyBjbGFzcyB0aGF0IHJlcHJlc2VudHMg
Zml4ZWQgbm9kZXMgb3ZlciBvbiB0aGUgCisgICAgICAgIHNjcm9sbGluZyB0aHJlYWQuIAorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTY3JvbGxpbmdUcmVlRml4ZWROb2RlKToK
KyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVGaXhlZE5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRml4
ZWROb2RlOjpTY3JvbGxpbmdUcmVlRml4ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1RyZWVGaXhlZE5vZGU6On5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OnVwZGF0ZSk6CisKKyAgICAgICAgVGhpcyBp
cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gcmUtcG9zaXRpb24gdGhlIGZpeGVkIG9iamVjdCB3
aGVuIAorICAgICAgICBpdHMgcGFyZW50IGhhcyBzY3JvbGxlZCBzbyB0aGF0IGl0IGFwcGVhcnMg
dG8gaGF2ZSBub3QgbW92ZWQgYXQgYWxsLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZTo6cGFyZW50U2Nyb2xsUG9zaXRpb25EaWRDaGFuZ2UpOgorCisgICAgICAgIFdo
ZW5ldmVyIHdlIGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYSBzY3JvbGxpbmcgbGF5ZXIsIHRlbGwg
b3VyIAorICAgICAgICBjaGlsZHJlbi4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbik6CisKKyAgICAg
ICAgSGFuZGxlIGZpeGVkIG5vZGVzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjphdHRhY2hU
b1Njcm9sbGluZ0Nvb3JkaW5hdG9yKToKKworICAgICAgICBkZXRhY2hGcm9tU2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCBpdCBjYW4gYmUgCisgICAgICAg
IGNhbGxlZCBmcm9tIFJlbmRlckxheWVyQ29tcG9zaXRvciBmb3IgZml4ZWQgbm9kZXMuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAgICAgICAoUmVuZGVyTGF5
ZXJCYWNraW5nKToKKworICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3IgdGFrZXMgY29udHJv
bCBvZiBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBmaXhlZCAKKyAgICAgICAgbm9kZXMgdG8vZnJv
bSB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpkaWRGbHVzaENoYW5nZXNGb3JMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVJlbW92ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRNb3ZlT25zY3JlZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsTW92ZU9mZnNjcmVlbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsZWFyQmFja2luZ0Zv
ckxheWVySW5jbHVkaW5nRGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6aXNSb290bW9z
dEZpeGVkT3JTdGlja3lMYXllcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlVmlld3BvcnRDb25zdHJhaW50U3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVmlld3BvcnRD
b25zdHJhaW5lZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVtb3ZlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZVZpZXdwb3J0Q29uc3RyYWludHMpOgorICAgICAg
ICAoV2ViQ29yZTo6bmVhcmVzdFNjcm9sbGluZ0Nvb3JkaW5hdG9yQW5jZXN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWdpc3Rlck9yVXBkYXRlVmlld3Bv
cnRDb25zdHJhaW5lZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dW5yZWdpc3RlclZpZXdwb3J0Q29uc3RyYWluZWRMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5l
ZExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVucmVn
aXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFJl
bmRlckxheWVyQ29tcG9zaXRvcik6CisKIDIwMTItMTEtMDUgIEdlbmV2aWV2ZSBNYWsgIDxnbWFr
QHJpbS5jb20+CiAKICAgICAgICAgW0JMQUNLQkVSUlldIFVwZGF0ZSB0b3VjaCBjb2RlIHRvIHJl
ZmxlY3QgdG91Y2ggcmVmYWN0b3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMzUwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzMzNyw2ICszMzM3LDEwIEBACiAJCTkzQzA5QTdGMEIwNjRFRUYwMDVBQkQ0RCAvKiBFdmVu
dEhhbmRsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0MwOUE3RTBCMDY0RUVGMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyTWFjLm1tICovOyB9
OwogCQk5M0MwOUE4MTBCMDY0RjAwMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzA5QTgwMEIwNjRGMDAw
MDVBQkQ0RCAvKiBFdmVudEhhbmRsZXIuY3BwICovOyB9OwogCQk5M0MwOUM4NjBCMDY1N0FBMDA1
QUJENEQgLyogU2Nyb2xsVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzQzA5Qzg1MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3JvbGxUeXBlcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTkzQzM4QkZF
MTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0MzOEJGQzE2NDQ3M0M3MDAw
OTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwICovOyB9OworCQk5M0MzOEJGRjE2
NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzM4QkZEMTY0NDczQzcwMDA5MUVC
MiAvKiBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5oICovOyB9OworCQk5M0MzOEMwMzE2NDQ3M0RE
MDAwOTFFQjIgLyogU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDMzhDMDExNjQ0NzNERDAwMDkxRUIyIC8qIFNj
cm9sbGluZ1RyZWVGaXhlZE5vZGUuaCAqLzsgfTsKKwkJOTNDMzhDMDQxNjQ0NzNERDAwMDkxRUIy
IC8qIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0MzOEMwMjE2NDQ3M0REMDAwOTFFQjIgLyogU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZS5tbSAqLzsgfTsKIAkJOTNDNDQyMDAwRjgxM0FFMTAwQzFBNjM0IC8qIENv
bGxlY3Rpb25UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0M0NDFGRjBGODEzQUUxMDBDMUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0M0QTQxNTE2MjlE
RjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzRBNDEzMTYyOURGNUEwMEMz
RUI2RSAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oICovOyB9OwogCQk5M0M0QTQx
NjE2MjlERjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0M0QTQxNDE2MjlE
RjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0gKi87IH07CkBA
IC0xMDU2Myw2ICsxMDU2NywxMCBAQAogCQk5M0MwOUE3RTBCMDY0RUVGMDA1QUJENEQgLyogRXZl
bnRIYW5kbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RXZlbnRIYW5kbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0MwOUE4
MDBCMDY0RjAwMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50SGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzQzA5Qzg1MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3JvbGxUeXBlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxUeXBlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5M0MzOEJGQzE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3Rh
dGVGaXhlZE5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Ny
b2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
M0MzOEJGRDE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNDMzhDMDExNjQ0NzNERDAwMDkxRUIyIC8q
IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5M0MzOEMwMjE2NDQ3M0REMDAwOTFFQjIgLyogU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzQ0MUZGMEY4MTNBRTEw
MEMxQTYzNCAvKiBDb2xsZWN0aW9uVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb2xsZWN0aW9uVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0M0
QTQxMzE2MjlERjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDNEE0MTQxNjI5REY1QTAw
QzNFQjZFIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDYzOCw2ICsxNDY0Niw4IEBACiAJ
CQkJMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi8s
CiAJCQkJMUFGNjJFRTQxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cCAqLywKIAkJCQkxQUY2MkVFNTE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaCAqLywKKwkJCQk5M0MzOEJGQzE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVG
aXhlZE5vZGUuY3BwICovLAorCQkJCTkzQzM4QkZEMTY0NDczQzcwMDA5MUVCMiAvKiBTY3JvbGxp
bmdTdGF0ZUZpeGVkTm9kZS5oICovLAogCQkJCTkzMUNCRDA2MTYxQTQ0RTkwMEU0Qzg3NCAvKiBT
Y3JvbGxpbmdTdGF0ZU5vZGUuY3BwICovLAogCQkJCTkzMUNCRDA3MTYxQTQ0RTkwMEU0Qzg3NCAv
KiBTY3JvbGxpbmdTdGF0ZU5vZGUuaCAqLywKIAkJCQk5MzFDQkQwODE2MUE0NEU5MDBFNEM4NzQg
LyogU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcCAqLywKQEAgLTE0NjYzLDYgKzE0Njcz
LDggQEAKIAkJCQkxQUY2MkVFMzE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNYWMubW0gKi8sCiAJCQkJOTMxQ0JEMTIxNjFBNDRGODAwRTRDODc0IC8qIFNjcm9sbGluZ1N0
YXRlTm9kZU1hYy5tbSAqLywKIAkJCQkxQUY2MkYyMzE0REFGRTkxMDA0MTU1NkMgLyogU2Nyb2xs
aW5nVGhyZWFkTWFjLm1tICovLAorCQkJCTkzQzM4QzAxMTY0NDczREQwMDA5MUVCMiAvKiBTY3Jv
bGxpbmdUcmVlRml4ZWROb2RlLmggKi8sCisJCQkJOTNDMzhDMDIxNjQ0NzNERDAwMDkxRUIyIC8q
IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUubW0gKi8sCiAJCQkJMUEzNTg2MkExNTI1MjI1NDAwMjJB
NjU5IC8qIFNjcm9sbGluZ1RyZWVNYWMubW0gKi8sCiAJCQkJOTNDNEE0MTMxNjI5REY1QTAwQzNF
QjZFIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmggKi8sCiAJCQkJOTNDNEE0MTQx
NjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tICovLApA
QCAtMjU2NzMsNiArMjU2ODUsOCBAQAogCQkJCTUwOTMzMzUwMTYzQjBFNDMwMDA5OUE2MCAvKiBD
dXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MEQzMjg1ODE2
M0IzMTNGMDAxNjExMUUgLyogVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzRkZGRjlBOTE1OUQ5QTU1MDAyMEJCRDUgLyogV2ViS2l0Q1NTVmlld3Bv
cnRSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5M0MzOEJGRjE2NDQ3M0M3MDAwOTFFQjIgLyog
U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzQzM4QzAzMTY0
NDczREQwMDA5MUVCMiAvKiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTI4NzU2LDYgKzI4NzcwLDggQEAKIAkJCQkzRkZGRjlBODE1OUQ5QTU1MDAyMEJCRDUgLyog
V2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGRkMwMjJCMTY0
M0I3MTAwMDRFMTYzOCAvKiBOb2RlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZG
QzAyMkQxNjQzQjcyNjAwNEUxNjM4IC8qIEVsZW1lbnRSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk5M0MzOEJGRTE2NDQ3M0M3MDAwOTFFQjIgLyogU2Nyb2xsaW5nU3RhdGVGaXhlZE5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTNDMzhDMDQxNjQ0NzNERDAwMDkxRUIyIC8qIFNj
cm9sbGluZ1RyZWVGaXhlZE5vZGUubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDEzMzUwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0NSwxMyArMTg0NSw0NCBAQCB2b2lk
IEZyYW1lVmlldzo6cmVwYWludEZpeGVkRWxlbWVudHNBZnRlCiAgICAgfQogfQogCitib29sIEZy
YW1lVmlldzo6c2hvdWxkVXBkYXRlRml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCkKK3sKKyNp
ZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5w
YWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJ
ZiB0aGUgc2Nyb2xsaW5nIHRocmVhZCBpcyB1cGRhdGluZyB0aGUgZml4ZWQgZWxlbWVudHMsIHRo
ZW4gdGhlIEZyYW1lVmlldyBzaG91bGQgbm90IHVwZGF0ZSB0aGVtIGFzIHdlbGwuCisgICAgaWYg
KHBhZ2UtPm1haW5GcmFtZSgpICE9IG1fZnJhbWUpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICBpZiAoIXNjcm9sbGluZ0Nvb3JkaW5hdG9yKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnN1cHBv
cnRzRml4ZWRQb3NpdGlvbkxheWVycygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChzY3JvbGxpbmdDb29yZGluYXRvci0+c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9u
TWFpblRocmVhZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpblByb2dyYW1t
YXRpY1Njcm9sbCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlRml4
ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgaWYgKCFzaG91bGRVcGRhdGVGaXhlZEVsZW1lbnRzQWZ0ZXJTY3JvbGxpbmco
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1fbmVzdGVkTGF5b3V0Q291bnQgPD0gMSAm
JiBoYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJW
aWV3KiByb290ID0gcm9vdFJlbmRlcmVyKHRoaXMpKSB7CisgICAgICAgIGlmIChSZW5kZXJWaWV3
KiByb290ID0gcm9vdFJlbmRlcmVyKHRoaXMpKQogICAgICAgICAgICAgcm9vdC0+Y29tcG9zaXRv
cigpLT51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZU9uU2Nyb2xsKTsK
LSAgICAgICAgfQogICAgIH0KICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
CShyZXZpc2lvbiAxMzM1MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTAsNiArMzkwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0
ZUNhbkJsaXRPblNjcm9sbFJlY3Vyc2l2ZWx5KCk7CiAgICAgYm9vbCBjb250ZW50c0luQ29tcG9z
aXRlZExheWVyKCkgY29uc3Q7CiAKKyAgICBib29sIHNob3VsZFVwZGF0ZUZpeGVkRWxlbWVudHNB
ZnRlclNjcm9sbGluZygpOworCiAgICAgdm9pZCBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChSZW5k
ZXJPYmplY3QqLCBTY3JvbGxiYXJNb2RlJiBoTW9kZSwgU2Nyb2xsYmFyTW9kZSYgdk1vZGUpOwog
ICAgIHZvaWQgYXBwbHlQYWdpbmF0aW9uVG9WaWV3cG9ydCgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb25zdHJhaW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmgJKHJl
dmlzaW9uIDEzMzUwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z0NvbnN0cmFpbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE1ICs0Niw2IEBAIHB1YmxpYzoK
ICAgICAgICAgQW5jaG9yRWRnZUJvdHRvbSA9IDEgPDwgMwogICAgIH07CiAgICAgdHlwZWRlZiB1
bnNpZ25lZCBBbmNob3JFZGdlczsKLSAgICAKLSAgICBWaWV3cG9ydENvbnN0cmFpbnRzKCkKLSAg
ICAgICAgOiBtX2FuY2hvckVkZ2VzKDApCi0gICAgeyB9Ci0KLSAgICBWaWV3cG9ydENvbnN0cmFp
bnRzKFZpZXdwb3J0Q29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQotICAgICAgICA6IG1fYWxpZ25t
ZW50T2Zmc2V0KGNvbnN0cmFpbnRzLT5hbGlnbm1lbnRPZmZzZXQoKSkKLSAgICAgICAgLCBtX2Fu
Y2hvckVkZ2VzKGNvbnN0cmFpbnRzLT5hbmNob3JFZGdlcygpKQotICAgIHsgfQogCiAgICAgdmly
dHVhbCB+Vmlld3BvcnRDb25zdHJhaW50cygpIHsgfQogICAgIApAQCAtNjksNiArNjAsMTUgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0QWxpZ25tZW50T2Zmc2V0KGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0KSB7IG1fYWxpZ25tZW50T2Zmc2V0ID0gb2Zmc2V0OyB9CiAKIHByb3RlY3RlZDoKKyAgICBW
aWV3cG9ydENvbnN0cmFpbnRzKCkKKyAgICAgICAgOiBtX2FuY2hvckVkZ2VzKDApCisgICAgeyB9
CisKKyAgICBWaWV3cG9ydENvbnN0cmFpbnRzKGNvbnN0IFZpZXdwb3J0Q29uc3RyYWludHMmIGNv
bnN0cmFpbnRzKQorICAgICAgICA6IG1fYWxpZ25tZW50T2Zmc2V0KGNvbnN0cmFpbnRzLmFsaWdu
bWVudE9mZnNldCgpKQorICAgICAgICAsIG1fYW5jaG9yRWRnZXMoY29uc3RyYWludHMuYW5jaG9y
RWRnZXMoKSkKKyAgICB7IH0KKwogICAgIEZsb2F0U2l6ZSBtX2FsaWdubWVudE9mZnNldDsKICAg
ICBBbmNob3JFZGdlcyBtX2FuY2hvckVkZ2VzOwogfTsKQEAgLTc4LDEwICs3OCwxMCBAQCBwdWJs
aWM6CiAgICAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMoKQogICAgIHsgfQogCi0g
ICAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMoRml4ZWRQb3NpdGlvblZpZXdwb3J0
Q29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQorICAgIEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0
cmFpbnRzKGNvbnN0IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzJiBjb25zdHJhaW50
cykKICAgICAgICAgOiBWaWV3cG9ydENvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKQotICAgICAgICAs
IG1fdmlld3BvcnRSZWN0QXRMYXN0TGF5b3V0KGNvbnN0cmFpbnRzLT52aWV3cG9ydFJlY3RBdExh
c3RMYXlvdXQoKSkKLSAgICAgICAgLCBtX2xheWVyUG9zaXRpb25BdExhc3RMYXlvdXQoY29uc3Ry
YWludHMtPmxheWVyUG9zaXRpb25BdExhc3RMYXlvdXQoKSkKKyAgICAgICAgLCBtX3ZpZXdwb3J0
UmVjdEF0TGFzdExheW91dChjb25zdHJhaW50cy52aWV3cG9ydFJlY3RBdExhc3RMYXlvdXQoKSkK
KyAgICAgICAgLCBtX2xheWVyUG9zaXRpb25BdExhc3RMYXlvdXQoY29uc3RyYWludHMubGF5ZXJQ
b3NpdGlvbkF0TGFzdExheW91dCgpKQogICAgIHsgfQogCiAgICAgdmlydHVhbCBDb25zdHJhaW50
VHlwZSBjb25zdHJhaW50VHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIEZpeGVkUG9zaXRp
b25Db25zdGFpbnQ7IH07CkBAIC05NCw2ICs5NCwxNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgRmxv
YXRQb2ludCYgbGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
ZXJQb3NpdGlvbkF0TGFzdExheW91dDsgfQogICAgIHZvaWQgc2V0TGF5ZXJQb3NpdGlvbkF0TGFz
dExheW91dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgeyBtX2xheWVyUG9zaXRpb25BdExhc3RM
YXlvdXQgPSBwb2ludDsgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZpeGVkUG9zaXRp
b25WaWV3cG9ydENvbnN0cmFpbnRzJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2FsaWdubWVudE9mZnNldCA9PSBvdGhlci5tX2FsaWdubWVudE9mZnNldAorICAgICAgICAg
ICAgJiYgbV9hbmNob3JFZGdlcyA9PSBvdGhlci5tX2FuY2hvckVkZ2VzCisgICAgICAgICAgICAm
JiBtX3ZpZXdwb3J0UmVjdEF0TGFzdExheW91dCA9PSBvdGhlci5tX3ZpZXdwb3J0UmVjdEF0TGFz
dExheW91dAorICAgICAgICAgICAgJiYgbV9sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0ID09IG90
aGVyLm1fbGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dDsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMmIG90aGVyKSBjb25z
dCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCiBwcml2YXRlOgogICAgIEZsb2F0UmVj
dCBtX3ZpZXdwb3J0UmVjdEF0TGFzdExheW91dDsKICAgICBGbG9hdFBvaW50IG1fbGF5ZXJQb3Np
dGlvbkF0TGFzdExheW91dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDEzMzUwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQwLDggKzI0MCwxMCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjp1cGRhdGVNYWluRnJhCiAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyID0g
c2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkgewogICAgICAgICBpZiAocHJvZ3Jh
bW1hdGljU2Nyb2xsKQogICAgICAgICAgICAgc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKC1mcmFt
ZVZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgc2Nyb2xsTGF5ZXItPnN5bmNQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQ
b3NpdGlvbigpKTsKKyAgICAgICAgICAgIHN5bmNDaGlsZFBvc2l0aW9ucyhmcmFtZVZpZXctPnZp
c2libGVDb250ZW50UmVjdCgpKTsKKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGlu
YXRvci5oCShyZXZpc2lvbiAxMzM1MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjZGVmaW5lIFNjcm9sbGluZ0Nvb3JkaW5hdG9yX2gKIAogI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5o
IgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTQ3LDEw
ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgdW5zaWduZWQgTWFpblRocmVh
ZFNjcm9sbGluZ1JlYXNvbnM7CiB0eXBlZGVmIHVpbnQ2NF90IFNjcm9sbGluZ05vZGVJRDsKIAot
ZW51bSBTY3JvbGxpbmdOb2RlVHlwZSB7Ci0gICAgU2Nyb2xsaW5nTm9kZQotICAgIC8vIEZJWE1F
OiBUaGlzIHdpbGwgc29vbiBjb250YWluIG90aGVyIHR5cGVzIHN1Y2ggYXMgRml4ZWROb2RlLgot
fTsKK2VudW0gU2Nyb2xsaW5nTm9kZVR5cGUgeyBTY3JvbGxpbmdOb2RlLCBGaXhlZE5vZGUgfTsK
IAogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZVZpZXc7CkBAIC01OCw5ICs1Niw3IEBAIGNsYXNz
IEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVnaW9uOwogY2xhc3MgU2Nyb2xs
YWJsZUFyZWE7Ci1jbGFzcyBTY3JvbGxpbmdTdGF0ZU5vZGU7Ci1jbGFzcyBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU7Ci1jbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CitjbGFzcyBWaWV3cG9y
dENvbnN0cmFpbnRzOwogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKIGNsYXNzIFNj
cm9sbGluZ1RyZWU7CkBAIC0xMTcsNiArMTEzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2Ny
b2xsaW5nTm9kZUlEIGF0dGFjaFRvU3RhdGVUcmVlKFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxp
bmdOb2RlSUQgbmV3Tm9kZUlELCBTY3JvbGxpbmdOb2RlSUQgLypwYXJlbnRJRCovKSB7IHJldHVy
biBuZXdOb2RlSUQ7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZShTY3Jv
bGxpbmdOb2RlSUQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0YXRlVHJlZSgpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTm9kZShTY3JvbGxpbmdO
b2RlSUQsIGNvbnN0IFZpZXdwb3J0Q29uc3RyYWludHMmLCBHcmFwaGljc0xheWVyKikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHN5bmNDaGlsZFBvc2l0aW9ucyhjb25zdCBMYXlvdXRSZWN0JikgeyB9
CiAgICAgdmlydHVhbCBTdHJpbmcgc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KCkgY29uc3Q7CiAK
ICAgICAvLyBHZW5lcmF0ZWQgYSB1bmlxdWUgaWQgZm9yIHNjcm9sbCBsYXllcnMuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVGaXhlZE5vZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3Jv
bGxpbmdTdGF0ZUZpeGVkTm9kZS5oIgorCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgi
CisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworI2lm
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFz
c093blB0cjxTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZT4gU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6
OmNyZWF0ZShTY3JvbGxpbmdTdGF0ZVRyZWUqIHN0YXRlVHJlZSwgU2Nyb2xsaW5nTm9kZUlEIG5v
ZGVJRCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
KHN0YXRlVHJlZSwgbm9kZUlEKSk7Cit9CisKK1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlOjpTY3Jv
bGxpbmdTdGF0ZUZpeGVkTm9kZShTY3JvbGxpbmdTdGF0ZVRyZWUqIHRyZWUsIFNjcm9sbGluZ05v
ZGVJRCBub2RlSUQpCisgICAgOiBTY3JvbGxpbmdTdGF0ZU5vZGUodHJlZSwgbm9kZUlEKQorICAg
ICwgbV9jaGFuZ2VkUHJvcGVydGllcygwKQoreworfQorCitTY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZTo6U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUm
IG5vZGUpCisgICAgOiBTY3JvbGxpbmdTdGF0ZU5vZGUobm9kZSkKKyAgICAsIG1fY29uc3RyYWlu
dHMoRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMobm9kZS52aWV3cG9ydENvbnN0cmFp
bnRzKCkpKQorICAgICwgbV9jaGFuZ2VkUHJvcGVydGllcyhub2RlLmNoYW5nZWRQcm9wZXJ0aWVz
KCkpCit7Cit9CisKK1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlOjp+U2Nyb2xsaW5nU3RhdGVGaXhl
ZE5vZGUoKQoreworfQorCitQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gU2Nyb2xsaW5n
U3RhdGVGaXhlZE5vZGU6OmNsb25lKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9s
bGluZ1N0YXRlRml4ZWROb2RlKCp0aGlzKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVGaXhl
ZE5vZGU6OnVwZGF0ZUNvbnN0cmFpbnRzKGNvbnN0IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0
cmFpbnRzJiBjb25zdHJhaW50cykKK3sKKyAgICBpZiAobV9jb25zdHJhaW50cyA9PSBjb25zdHJh
aW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRz
OworICAgIG1fY2hhbmdlZFByb3BlcnRpZXMgPSBWaWV3cG9ydENvbnN0cmFpbnRzOworICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKK30KKwor
dm9pZCBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6ZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVhbSYg
dHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgdHMgPDwgIigiIDw8ICJGaXhlZCBub2RlIiA8
PCAiXG4iOworCisgICAgaWYgKG1fY29uc3RyYWludHMuYW5jaG9yRWRnZXMoKSkgeworICAgICAg
ICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CisgICAgICAgIHRzIDw8ICIoYW5jaG9yIGVk
Z2VzOiAiOworICAgICAgICBpZiAobV9jb25zdHJhaW50cy5oYXNBbmNob3JFZGdlKFZpZXdwb3J0
Q29uc3RyYWludHM6OkFuY2hvckVkZ2VMZWZ0KSkKKyAgICAgICAgICAgIHRzIDw8ICJBbmNob3JF
ZGdlTGVmdCAiOworICAgICAgICBpZiAobV9jb25zdHJhaW50cy5oYXNBbmNob3JFZGdlKFZpZXdw
b3J0Q29uc3RyYWludHM6OkFuY2hvckVkZ2VSaWdodCkpCisgICAgICAgICAgICB0cyA8PCAiQW5j
aG9yRWRnZVJpZ2h0ICI7CisgICAgICAgIGlmIChtX2NvbnN0cmFpbnRzLmhhc0FuY2hvckVkZ2Uo
Vmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZVRvcCkpCisgICAgICAgICAgICB0cyA8PCAi
QW5jaG9yRWRnZVRvcCI7CisgICAgICAgIGlmIChtX2NvbnN0cmFpbnRzLmhhc0FuY2hvckVkZ2Uo
Vmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZUJvdHRvbSkpCisgICAgICAgICAgICB0cyA8
PCAiQW5jaG9yRWRnZUJvdHRvbSI7CisgICAgICAgIHRzIDw8ICIpXG4iOworICAgIH0KKworICAg
IGlmICghbV9jb25zdHJhaW50cy5hbGlnbm1lbnRPZmZzZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOworICAgICAgICB0cyA8PCAiKGFsaWdubWVu
dCBvZmZzZXQgIiA8PCBtX2NvbnN0cmFpbnRzLmFsaWdubWVudE9mZnNldCgpLndpZHRoKCkgPDwg
IiAiIDw8IG1fY29uc3RyYWludHMuYWxpZ25tZW50T2Zmc2V0KCkuaGVpZ2h0KCkgPDwgIilcbiI7
CisgICAgfQorCisgICAgaWYgKCFtX2NvbnN0cmFpbnRzLnZpZXdwb3J0UmVjdEF0TGFzdExheW91
dCgpLmlzRW1wdHkoKSkgeworICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7Cisg
ICAgICAgIEZsb2F0UmVjdCB2aWV3cG9ydFJlY3QgPSBtX2NvbnN0cmFpbnRzLnZpZXdwb3J0UmVj
dEF0TGFzdExheW91dCgpOworICAgICAgICB0cyA8PCAiKHZpZXdwb3J0IHJlY3QgYXQgbGFzdCBs
YXlvdXQ6ICIgPDwgdmlld3BvcnRSZWN0LngoKSA8PCAiICIgPDwgdmlld3BvcnRSZWN0LnkoKSA8
PCAiICIgPDwgdmlld3BvcnRSZWN0LndpZHRoKCkgPDwgIiAiIDw8IHZpZXdwb3J0UmVjdC5oZWln
aHQoKSA8PCAiKVxuIjsKKyAgICB9CisKKyAgICBpZiAobV9jb25zdHJhaW50cy5sYXllclBvc2l0
aW9uQXRMYXN0TGF5b3V0KCkgIT0gRmxvYXRQb2ludCgpKSB7CisgICAgICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQgKyAxKTsKKyAgICAgICAgdHMgPDwgIihsYXllciBwb3NpdGlvbiBhdCBsYXN0
IGxheW91dCAiIDw8IG1fY29uc3RyYWludHMubGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dCgpLngo
KSA8PCAiICIgPDwgbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KCkueSgp
IDw8ICIpXG4iOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlRml4
ZWROb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nU3RhdGVGaXhl
ZE5vZGVfaAorCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIlNj
cm9sbGluZ0NvbnN0cmFpbnRzLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCisK
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzOworCitjbGFzcyBTY3JvbGxpbmdTdGF0
ZUZpeGVkTm9kZSA6IHB1YmxpYyBTY3JvbGxpbmdTdGF0ZU5vZGUgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlPiBjcmVhdGUoU2Nyb2xsaW5n
U3RhdGVUcmVlKiwgU2Nyb2xsaW5nTm9kZUlEKTsKKworICAgIHZpcnR1YWwgUGFzc093blB0cjxT
Y3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lKCk7CisKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0
ZUZpeGVkTm9kZSgpOworCisgICAgZW51bSBDaGFuZ2VkUHJvcGVydHlGb3JGaXhlZCB7CisgICAg
ICAgIFZpZXdwb3J0Q29uc3RyYWludHMgPSAxIDw8IDAKKyAgICB9OworCisgICAgdmlydHVhbCB1
bnNpZ25lZCBjaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY2hh
bmdlZFByb3BlcnRpZXM7IH0KKworICAgIHZvaWQgdXBkYXRlQ29uc3RyYWludHMoY29uc3QgRml4
ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMmKTsKKyAgICBjb25zdCBGaXhlZFBvc2l0aW9u
Vmlld3BvcnRDb25zdHJhaW50cyYgdmlld3BvcnRDb25zdHJhaW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RyYWludHM7IH0KKworcHJpdmF0ZToKKyAgICBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZShTY3JvbGxpbmdTdGF0ZVRyZWUqLCBTY3JvbGxpbmdOb2RlSUQpOworICAgIFNjcm9sbGluZ1N0
YXRlRml4ZWROb2RlKGNvbnN0IFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlJik7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNGaXhlZE5vZGUoKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBtX2NoYW5nZWRQcm9wZXJ0aWVzOyB9CisgICAgdmlydHVhbCB2b2lkIHJlc2V0Q2hhbmdlZFBy
b3BlcnRpZXMoKSBPVkVSUklERSB7IG1fY2hhbmdlZFByb3BlcnRpZXMgPSAwOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0
IE9WRVJSSURFOworCisgICAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMgbV9jb25z
dHJhaW50czsKKyAgICB1bnNpZ25lZCBtX2NoYW5nZWRQcm9wZXJ0aWVzOworfTsKKworaW5saW5l
IFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlKiB0b1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlKFNjcm9s
bGluZ1N0YXRlTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQoIW5vZGUgfHwgbm9kZS0+aXNGaXhl
ZE5vZGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
Kj4obm9kZSk7Cit9CisgICAgCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVu
bmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUoY29uc3QgU2Ny
b2xsaW5nU3RhdGVGaXhlZE5vZGUqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2VuZGlmIC8vIFNjcm9sbGluZ1N0
YXRlRml4ZWROb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkocmV2aXNpb24gMTMzNTA5KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNj
cm9sbGluZ1N0YXRlTm9kZS5oIgogCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUu
aCIKICNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFt
LmgiCiAKQEAgLTYxLDcgKzYyLDcgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlOjp+U2Nyb2xsaW5nU3Rh
dGVOb2RlKAogCiBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gU2Nyb2xsaW5nU3RhdGVO
b2RlOjpjbG9uZUFuZFJlc2V0KCkKIHsKLSAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlPiBjbG9uZSA9IGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUo
KnRvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKHRoaXMpKSk7CisgICAgT3duUHRyPFNjcm9s
bGluZ1N0YXRlTm9kZT4gY2xvbmUgPSB0aGlzLT5jbG9uZSgpOwogCiAgICAgLy8gTm93IHRoYXQg
dGhpcyBub2RlIGlzIGNsb25lZCwgcmVzZXQgb3VyIGNoYW5nZSBwcm9wZXJ0aWVzLgogICAgIHNl
dFNjcm9sbExheWVyRGlkQ2hhbmdlKGZhbHNlKTsKQEAgLTk2LDcgKzk3LDExIEBAIHZvaWQgU2Ny
b2xsaW5nU3RhdGVOb2RlOjpyZW1vdmVDaGlsZChTY3IKICAgICBpZiAoIW1fY2hpbGRyZW4pCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChzaXplX3QgaW5kZXggPSBtX2NoaWxkcmVuLT5maW5k
KG5vZGUpKSB7CisgICAgc2l6ZV90IGluZGV4ID0gbV9jaGlsZHJlbi0+ZmluZChub2RlKTsKKwor
ICAgIC8vIFRoZSBpbmRleCB3aWxsIGJlIG5vdEZvdW5kIGlmIHRoZSBub2RlIHRvIHJlbW92ZSBp
cyBhIGRlZXBlci10aGFuLTEtbGV2ZWwgZGVzY2VuZGFudCBvcgorICAgIC8vIGlmIG5vZGUgaXMg
dGhlIHJvb3Qgc3RhdGUgbm9kZS4KKyAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKICAgICAg
ICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmRpZFJlbW92ZU5vZGUobm9kZS0+c2Nyb2xsaW5nTm9k
ZUlEKCkpOwogICAgICAgICBtX2NoaWxkcmVuLT5yZW1vdmUoaW5kZXgpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZU5vZGUuaAkocmV2aXNpb24gMTMzNTA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5
LDEwIEBAIHB1YmxpYzoKICAgICBTY3JvbGxpbmdTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVUcmVl
KiwgU2Nyb2xsaW5nTm9kZUlEKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZU5vZGUoKTsK
IAotICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsaW5nTm9kZSgpIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRml4ZWROb2RlKCkgeyByZXR1cm4gZmFsc2U7
IH0KIAorICAgIHZpcnR1YWwgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lKCkg
PSAwOwogICAgIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiBjbG9uZUFuZFJlc2V0KCk7
CiAgICAgdm9pZCBjbG9uZUFuZFJlc2V0Q2hpbGRyZW4oU2Nyb2xsaW5nU3RhdGVOb2RlKik7CiAK
QEAgLTU5LDggKzYxLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNldENoYW5nZWRQ
cm9wZXJ0aWVzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIYXNDaGFuZ2VkUHJvcGVydGll
cygpIHsgc2V0U2Nyb2xsTGF5ZXJEaWRDaGFuZ2UodHJ1ZSk7IH0KIAorICAgIEdyYXBoaWNzTGF5
ZXIqIGdyYXBoaWNzTGF5ZXIoKSB7IHJldHVybiBtX2dyYXBoaWNzTGF5ZXI7IH0KICAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybVNjcm9sbExheWVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTY3Jv
bGxMYXllcihjb25zdCBHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRTY3JvbGxMYXllcihH
cmFwaGljc0xheWVyKik7CiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihQbGF0Zm9ybUxheWVyKik7
CiAKICAgICBib29sIHNjcm9sbExheWVyRGlkQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxMYXllckRpZENoYW5nZTsgfQpAQCAtMTAzLDYgKzEwNiw3IEBAIHByaXZhdGU6CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3BsYXRmb3JtU2Nyb2xs
TGF5ZXI7CiAjZW5kaWYKKyAgICBHcmFwaGljc0xheWVyKiBtX2dyYXBoaWNzTGF5ZXI7CiAKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAkocmV2aXNpb24gMTMzNTA5KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTEgQEAgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjp+U2Nyb2xsaW5nUwogewogfQogCitQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRl
Tm9kZT4gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjbG9uZSgpCit7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKnRoaXMpKTsKK30KKwog
dm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFZpZXdwb3J0UmVjdChjb25zdCBJ
bnRSZWN0JiB2aWV3cG9ydFJlY3QpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRSZWN0ID09IHZpZXdw
b3J0UmVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAxMzM1MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBjbGFzcyBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUgOiBwdWJsCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8U2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBjcmVhdGUoU2Nyb2xsaW5nU3RhdGVUcmVlKiwgU2Ny
b2xsaW5nTm9kZUlEKTsKIAotICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShjb25zdCBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8U2Ny
b2xsaW5nU3RhdGVOb2RlPiBjbG9uZSgpOworCiAgICAgdmlydHVhbCB+U2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKCk7CiAKICAgICBlbnVtIENoYW5nZWRQcm9wZXJ0eSB7CkBAIC02MCw3ICs2
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSAxIDw8IDEy
LAogICAgIH07CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUoKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xs
aW5nTm9kZSgpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBo
YXNDaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY2hhbmdlZFBy
b3BlcnRpZXM7IH0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYW5nZWRQcm9wZXJ0aWVzKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQpAQCAtMTExLDYgKzEx
Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUoU2Nyb2xsaW5nU3RhdGVUcmVlKiwgU2Nyb2xsaW5nTm9kZUlEKTsKKyAgICBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJik7CiAK
ICAgICB1bnNpZ25lZCBtX2NoYW5nZWRQcm9wZXJ0aWVzOwogCkBAIC0xMzksNyArMTQxLDcgQEAg
cHJpdmF0ZToKIAogaW5saW5lIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogdG9TY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlKQogewotICAgIEFT
U0VSVCghbm9kZSB8fCBub2RlLT5pc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpKTsKKyAg
ICBBU1NFUlQoIW5vZGUgfHwgbm9kZS0+aXNTY3JvbGxpbmdOb2RlKCkpOwogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqPihub2RlKTsKIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUu
Y3BwCShyZXZpc2lvbiAxMzM1MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVUcmVl
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVGhyZWFkLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgpAQCAtMTYyLDkgKzE2MywxMyBAQCB2b2lkIFNjcm9sbGluZ1RyZWU6OnVwZGF0ZVRyZWVGcm9t
U3RhdGVOCiAgICAgICAgICAgICBtX25vZGVNYXAuc2V0KHN0YXRlTm9kZS0+c2Nyb2xsaW5nTm9k
ZUlEKCksIG1fcm9vdE5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgbV9yb290Tm9kZS0+dXBkYXRl
KHN0YXRlTm9kZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW4g
dGhlIGZ1dHVyZSwgd2Ugd2lsbCBoYXZlIG1vcmUgdGhhbiBqdXN0IFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlLCBzbyB3ZSdsbCBoYXZlIHRvCi0gICAgICAgICAgICAvLyBmaWd1cmUgb3V0IHdo
aWNoIHR5cGUgb2Ygbm9kZSB0byBjcmVhdGUuCi0gICAgICAgICAgICBPd25QdHI8U2Nyb2xsaW5n
VHJlZU5vZGU+IG5ld05vZGUgPSBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKHRo
aXMpOworICAgICAgICAgICAgT3duUHRyPFNjcm9sbGluZ1RyZWVOb2RlPiBuZXdOb2RlOworICAg
ICAgICAgICAgaWYgKHN0YXRlTm9kZS0+aXNTY3JvbGxpbmdOb2RlKCkpCisgICAgICAgICAgICAg
ICAgbmV3Tm9kZSA9IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpjcmVhdGUodGhpcyk7Cisg
ICAgICAgICAgICBlbHNlIGlmIChzdGF0ZU5vZGUtPmlzRml4ZWROb2RlKCkpCisgICAgICAgICAg
ICAgICAgbmV3Tm9kZSA9IFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OmNyZWF0ZSh0aGlzKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIFNjcm9sbGluZ1RyZWVOb2RlKiBuZXdOb2RlUmF3UHRyID0gbmV3Tm9kZS5nZXQo
KTsKICAgICAgICAgICAgIG1fbm9kZU1hcC5zZXQoc3RhdGVOb2RlLT5zY3JvbGxpbmdOb2RlSUQo
KSwgbmV3Tm9kZVJhd1B0cik7CiAgICAgICAgICAgICBTY3JvbGxpbmdUcmVlTm9kZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX25vZGVNYXAuZmluZChzdGF0ZU5vZGUtPnBhcmVudCgpLT5zY3Jv
bGxpbmdOb2RlSUQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZS5oCShyZXZpc2lvbiAxMzM1MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDEw
IEBAIE9CSkNfQ0xBU1MgQ0FMYXllcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50
UG9pbnQ7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZU5vZGU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVRy
ZWU7CiBjbGFzcyBTY3JvbGxpbmdUcmVlTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlOwotY2xhc3MgU2Nyb2xsaW5nU3RhdGVUcmVlOwogCiAvLyBUaGUgU2Nyb2xsaW5nVHJl
ZSBjbGFzcyBsaXZlcyBhbG1vc3QgZXhjbHVzaXZlbHkgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQg
YW5kIG1hbmFnZXMgdGhlCiAvLyBoaWVyYXJjaHkgb2Ygc2Nyb2xsYWJsZSByZWdpb25zIG9uIHRo
ZSBwYWdlLiBJdCdzIGFsc28gcmVzcG9uc2libGUgZm9yIGRpc3BhdGNoaW5nIGV2ZW50cwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9k
ZS5oCShyZXZpc2lvbiAxMzM1MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlOworY2xh
c3MgU2Nyb2xsaW5nU3RhdGVOb2RlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OworCiBjbGFzcyBTY3JvbGxpbmdUcmVlTm9kZSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgU2Ny
b2xsaW5nVHJlZU5vZGUoU2Nyb2xsaW5nVHJlZSopOwpAQCAtNDIsNiArNDYsOCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFNjcm9sbGluZ1N0YXRlTm9kZSopID0gMDsKIAor
ICAgIHZpcnR1YWwgdm9pZCBwYXJlbnRTY3JvbGxQb3NpdGlvbkRpZENoYW5nZShjb25zdCBJbnRS
ZWN0JiB2aWV3cG9ydFJlY3QpID0gMDsKKwogICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdO
b2RlSUQoKSBjb25zdCB7IHJldHVybiBtX25vZGVJRDsgfQogICAgIHZvaWQgc2V0U2Nyb2xsaW5n
Tm9kZUlEKFNjcm9sbGluZ05vZGVJRCBub2RlSUQpIHsgbV9ub2RlSUQgPSBub2RlSUQ7IH0KIApA
QCAtNTQsMTMgKzYwLDE1IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBTY3JvbGxpbmdUcmVl
KiBzY3JvbGxpbmdUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdUcmVlOyB9CiAKKyAg
ICB0eXBlZGVmIFZlY3RvcjxPd25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+ID4gU2Nyb2xsaW5nVHJl
ZUNoaWxkcmVuVmVjdG9yOworICAgIE93blB0cjxTY3JvbGxpbmdUcmVlQ2hpbGRyZW5WZWN0b3I+
IG1fY2hpbGRyZW47CisKIHByaXZhdGU6CiAgICAgU2Nyb2xsaW5nVHJlZSogbV9zY3JvbGxpbmdU
cmVlOwogCiAgICAgU2Nyb2xsaW5nTm9kZUlEIG1fbm9kZUlEOwogCiAgICAgU2Nyb2xsaW5nVHJl
ZU5vZGUqIG1fcGFyZW50OwotICAgIE93blB0cjxWZWN0b3I8T3duUHRyPFNjcm9sbGluZ1RyZWVO
b2RlPiA+ID4gbV9jaGlsZHJlbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGUuaAkocmV2aXNpb24gMTMzNTA5KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNiArNDYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFNjcm9sbGluZ1N0YXRl
Tm9kZSopIE9WRVJSSURFOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbXBsZW1lbnQgdGhp
cyB3aGVuIHdlIHN1cHBvcnQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVzIGFzIGNoaWxkcmVu
LgorICAgIHZpcnR1YWwgdm9pZCBwYXJlbnRTY3JvbGxQb3NpdGlvbkRpZENoYW5nZShjb25zdCBJ
bnRSZWN0JiAvKnZpZXdwb3J0UmVjdCovKSBPVkVSUklERSB7IH0KKwogICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKSA9IDA7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRv
ck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdDb29yZGluYXRvck1hYy5oCShyZXZpc2lvbiAxMzM1MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBTY3JvbGxpbmdTdGF0ZU5vZGU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU7
CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVRyZWU7CisKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjIDogcHVibGljIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHsKIHB1YmxpYzoKICAgICBleHBsaWNp
dCBTY3JvbGxpbmdDb29yZGluYXRvck1hYyhQYWdlKik7CkBAIC03NSw2ICs3OSwxNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBTdHJpbmcgc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KCkgY29uc3Qg
T1ZFUlJJREU7CiAKIHByaXZhdGU6CisgICAgLy8gUmV0dXJuIHdoZXRoZXIgdGhpcyBzY3JvbGxp
bmcgY29vcmRpbmF0b3IgY2FuIGtlZXAgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGZpeGVkIHRvIHRo
ZWlyCisgICAgLy8gY29udGFpbmVycyB3aGlsZSBzY3JvbGxpbmcuCisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgdGhlIFNjcm9sbGluZ1N0
YXRlTm9kZSBmb3IgdGhlIGdpdmVuIHZpZXdwb3J0IGNvbnN0cmFpbmVkIG9iamVjdC4KKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZE5vZGUoU2Nyb2xsaW5nTm9kZUlE
LCBjb25zdCBWaWV3cG9ydENvbnN0cmFpbnRzJiwgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOwor
CisgICAgLy8gQ2FsbGVkIHRvIHN5bmNoIHRoZSBHcmFwaGljc0xheWVyIHBvc2l0aW9ucyBmb3Ig
Y2hpbGQgbGF5ZXJzIHdoZW4gdGhlaXIgQ0FMYXllcnMgaGF2ZSBiZWVuIG1vdmVkIGJ5IHRoZSBz
Y3JvbGxpbmcgdGhyZWFkLgorICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2hpbGRQb3NpdGlvbnMoY29u
c3QgTGF5b3V0UmVjdCYgdmlld3BvcnRSZWN0KSBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgdm9p
ZCByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyop
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKIApAQCAtMTA5LDYgKzEyMyw4
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lckZp
cmVkKFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjPiopOwogICAgIHZvaWQgY29tbWl0VHJl
ZVN0YXRlKCk7CiAKKyAgICB2b2lkIHJlbW92ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKik7CisK
ICAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKICAg
ICBSZWZQdHI8U2Nyb2xsaW5nVHJlZT4gbV9zY3JvbGxpbmdUcmVlOwogICAgIFRpbWVyPFNjcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjPiBtX3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQkocmV2aXNpb24gMTMzNTA5KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1h
dG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNsdWRlICJTY3Jv
bGxpbmdTdGF0ZUZpeGVkTm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogI2luY2x1ZGUgIlNjcm9s
bGluZ1RocmVhZC5oIgpAQCAtMjUxLDEyICsyNTMsMTkgQEAgU2Nyb2xsaW5nTm9kZUlEIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjOgogICAgIH0gZWxzZSB7CiAgICAgICAgIFNjcm9sbGluZ1N0YXRl
Tm9kZSogcGFyZW50ID0gc3RhdGVOb2RlRm9ySUQocGFyZW50SUQpOwogICAgICAgICBzd2l0Y2gg
KG5vZGVUeXBlKSB7CisgICAgICAgIGNhc2UgRml4ZWROb2RlOiB7CisgICAgICAgICAgICBBU1NF
UlQoc3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkpOworICAgICAgICAgICAgT3duUHRyPFNj
cm9sbGluZ1N0YXRlRml4ZWROb2RlPiBmaXhlZE5vZGUgPSBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZTo6Y3JlYXRlKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLmdldCgpLCBuZXdOb2RlSUQpOworICAgICAg
ICAgICAgbmV3Tm9kZSA9IGZpeGVkTm9kZS5nZXQoKTsKKyAgICAgICAgICAgIHBhcmVudC0+YXBw
ZW5kQ2hpbGQoZml4ZWROb2RlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBjYXNlIFNjcm9sbGluZ05vZGU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgY2hpbGQgbm9kZXMuIFRoaXMgYXNzZXJ0aW9u
IHNob3VsZCBiZSByZW1vdmVkIHdoZW4gd2UgZG8uCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
Y3VycmVudGx5IG9ubHkgc3VwcG9ydCBjaGlsZCBub2RlcyB0aGF0IGFyZSBmaXhlZC4KICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgUGFzc093blB0cjxTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+IHNjcm9sbGluZ05vZGUgPSBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OmNyZWF0ZShtX3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKSwgbmV3Tm9kZUlE
KTsKKyAgICAgICAgICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+IHNjcm9s
bGluZ05vZGUgPSBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OmNyZWF0ZShtX3Njcm9sbGlu
Z1N0YXRlVHJlZS5nZXQoKSwgbmV3Tm9kZUlEKTsKICAgICAgICAgICAgIG5ld05vZGUgPSBzY3Jv
bGxpbmdOb2RlLmdldCgpOwotICAgICAgICAgICAgcGFyZW50LT5hcHBlbmRDaGlsZChzY3JvbGxp
bmdOb2RlKTsKKyAgICAgICAgICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQoc2Nyb2xsaW5nTm9kZS5y
ZWxlYXNlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVs
dDoKQEAgLTI2OCw2ICsyNzcsMTggQEAgU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWFjOgogICAgIHJldHVybiBuZXdOb2RlSUQ7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JNYWM6OnJlbW92ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlKQoreworICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOworCisgICAgLy8gU2Nyb2xsaW5n
U3RhdGVUcmVlOjpyZW1vdmVOb2RlKCkgd2lsbCBkZXN0cm95IGNoaWxkcmVuLCBzbyB3ZSBoYXZl
IHRvIG1ha2Ugc3VyZSB3ZSByZW1vdmUgdGhvc2UgY2hpbGRyZW4KKyAgICAvLyBmcm9tIHRoZSBI
YXNoTWFwLgorICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxpbmdOb2RlSUQ+JiByZW1vdmVkTm9kZXMg
PSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3ZlZE5vZGVzKCk7CisgICAgc2l6ZV90IHNpemUg
PSByZW1vdmVkTm9kZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICBtX3N0YXRlTm9kZU1hcC5yZW1vdmUocmVtb3ZlZE5vZGVzW2ldKTsKK30K
Kwogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZGV0YWNoRnJvbVN0YXRlVHJlZShTY3Jv
bGxpbmdOb2RlSUQgc2Nyb2xsTGF5ZXJJRCkKIHsKICAgICBpZiAoIXNjcm9sbExheWVySUQpCkBA
IC0yNzgsMjAgKzI5OSwxMiBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpkZXRhY2hG
cm9tCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+cmVtb3ZlTm9kZShub2RlKTsKLQotICAgIC8vIFNjcm9sbGluZ1N0YXRlVHJlZTo6
cmVtb3ZlTm9kZSgpIHdpbGwgZGVzdHJveSBjaGlsZHJlbiwgc28gd2UgaGF2ZSB0byBtYWtlIHN1
cmUgd2UgcmVtb3ZlIHRob3NlIGNoaWxkcmVuCi0gICAgLy8gZnJvbSB0aGUgSGFzaE1hcC4KLSAg
ICBjb25zdCBWZWN0b3I8U2Nyb2xsaW5nTm9kZUlEPiYgcmVtb3ZlZE5vZGVzID0gbV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnJlbW92ZWROb2RlcygpOwotICAgIHNpemVfdCBzaXplID0gcmVtb3ZlZE5v
ZGVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgbV9zdGF0ZU5vZGVNYXAucmVtb3ZlKHJlbW92ZWROb2Rlc1tpXSk7CisgICAgcmVtb3ZlTm9k
ZShub2RlKTsKIH0KIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6Y2xlYXJTdGF0ZVRy
ZWUoKQogewotICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPnJlbW92ZU5vZGUobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7
CisgICAgcmVtb3ZlTm9kZShtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsK
IH0KIAogU2Nyb2xsaW5nU3RhdGVOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6c3RhdGVO
b2RlRm9ySUQoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbExheWVySUQpCkBAIC0zNzAsNiArMzgzLDM0
IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZU1haW4KICAgICAgICAgc2Ny
b2xsTGF5ZXItPnNldFBvc2l0aW9uKC1mcmFtZVZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOwogfQog
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpzeW5jQ2hpbGRQb3NpdGlvbnMoY29uc3Qg
TGF5b3V0UmVjdCYgdmlld3BvcnRSZWN0KQoreworICAgIFZlY3RvcjxPd25QdHI8U2Nyb2xsaW5n
U3RhdGVOb2RlPiA+KiBjaGlsZHJlbiA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVO
b2RlKCktPmNoaWxkcmVuKCk7CisgICAgaWYgKCFjaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRklYTUU6IFdlJ2xsIGhhdmUgdG8gdHJhdmVyc2UgZGVlcGVyIGludG8gdGhlIHRy
ZWUgYXQgc29tZSBwb2ludC4KKyAgICBzaXplX3Qgc2l6ZSA9IGNoaWxkcmVuLT5zaXplKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgU2Nyb2xsaW5n
U3RhdGVGaXhlZE5vZGUqIGNoaWxkID0gdG9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZShjaGlsZHJl
bi0+YXQoaSkuZ2V0KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gY2hpbGQtPnZp
ZXdwb3J0Q29uc3RyYWludHMoKS5sYXllclBvc2l0aW9uRm9yVmlld3BvcnRSZWN0KHZpZXdwb3J0
UmVjdCk7CisgICAgICAgIGNoaWxkLT5ncmFwaGljc0xheWVyKCktPnNldFBvc2l0aW9uKHBvc2l0
aW9uKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OnVwZGF0ZVZp
ZXdwb3J0Q29uc3RyYWluZWROb2RlKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIGNvbnN0IFZpZXdw
b3J0Q29uc3RyYWludHMmIGNvbnN0cmFpbnRzLCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVy
KQoreworICAgIEFTU0VSVChzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSk7CisKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgc3RpY2t5IHBvc2l0aW9uIGhlcmUhCisgICAgaWYg
KGNvbnN0cmFpbnRzLmNvbnN0cmFpbnRUeXBlKCkgPT0gVmlld3BvcnRDb25zdHJhaW50czo6U3Rp
Y2t5UG9zaXRpb25Db25zdHJhaW50KQorICAgICAgICByZXR1cm47CisKKyAgICBTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZSogbm9kZSA9IHRvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUoc3RhdGVOb2Rl
Rm9ySUQobm9kZUlEKSk7CisgICAgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKGdyYXBoaWNzTGF5ZXIs
IG5vZGUpOworICAgIG5vZGUtPnVwZGF0ZUNvbnN0cmFpbnRzKChjb25zdCBGaXhlZFBvc2l0aW9u
Vmlld3BvcnRDb25zdHJhaW50cyYpY29uc3RyYWludHMpOworfQorCiB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpCiB7CiAgICAgaWYgKG1fc2Ny
b2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXIuaXNBY3RpdmUoKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1N0YXRl
Tm9kZU1hYy5tbQkocmV2aXNpb24gMTMzNTA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvbWFjL1Njcm9sbGluZ1N0YXRlTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMs
NyArNDMsNyBAQCB2b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXIoCiAgICAg
bV9wbGF0Zm9ybVNjcm9sbExheWVyID0gcGxhdGZvcm1MYXllcjsKIH0KIAotdm9pZCBTY3JvbGxp
bmdTdGF0ZU5vZGU6OnNldFNjcm9sbExheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIpCit2b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NM
YXllciogZ3JhcGhpY3NMYXllcikKIHsKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybVNjcm9s
bExheWVyID0gZ3JhcGhpY3NMYXllciA/IGdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6
IG5pbDsKIApAQCAtNTEsNiArNTEsOCBAQCB2b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6c2V0U2Ny
b2xsTGF5ZXIoCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGxhdGZvcm1TY3JvbGxMYXllciA9
IHBsYXRmb3JtU2Nyb2xsTGF5ZXI7CisgICAgbV9ncmFwaGljc0xheWVyID0gZ3JhcGhpY3NMYXll
cjsKKwogICAgIG1fc2Nyb2xsTGF5ZXJEaWRDaGFuZ2UgPSB0cnVlOwogICAgIG1fc2Nyb2xsaW5n
U3RhdGVUcmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyh0cnVlKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGVfaAorI2Rl
ZmluZSBTY3JvbGxpbmdUcmVlRml4ZWROb2RlX2gKKworI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JP
TExJTkcpCisKKyNpbmNsdWRlICJTY3JvbGxpbmdDb25zdHJhaW50cy5oIgorI2luY2x1ZGUgIlNj
cm9sbGluZ1RyZWVOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NM
QVNTIENBTGF5ZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRml4ZWRQb3NpdGlv
blZpZXdwb3J0Q29uc3RyYWludHM7CisKK2NsYXNzIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUgOiBw
dWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU+IGNyZWF0ZShTY3JvbGxpbmdUcmVlKik7CisKKyAgICB2
aXJ0dWFsIH5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKCk7CisKK3ByaXZhdGU6CisgICAgU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZShTY3JvbGxpbmdUcmVlKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlKFNjcm9sbGluZ1N0YXRlTm9kZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYXJl
bnRTY3JvbGxQb3NpdGlvbkRpZENoYW5nZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpIE9W
RVJSSURFOworCisgICAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMgbV9jb25zdHJh
aW50czsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9sYXllcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNl
bmRpZiAvLyBTY3JvbGxpbmdUcmVlRml4ZWROb2RlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRml4ZWROb2Rl
Lm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVGaXhlZE5vZGUubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZp
eGVkTm9kZS5oIgorCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUg
IlNjcm9sbGluZ1N0YXRlRml4ZWROb2RlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZUZpeGVkTm9k
ZT4gU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUqIHNjcm9sbGlu
Z1RyZWUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlRml4ZWROb2Rl
KHNjcm9sbGluZ1RyZWUpKTsKK30KKworU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6U2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZShTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKQorICAgIDogU2Nyb2xs
aW5nVHJlZU5vZGUoc2Nyb2xsaW5nVHJlZSkKKyAgICAsIG1fY29uc3RyYWludHMoRml4ZWRQb3Np
dGlvblZpZXdwb3J0Q29uc3RyYWludHMoKSkKK3sKK30KKworU2Nyb2xsaW5nVHJlZUZpeGVkTm9k
ZTo6flNjcm9sbGluZ1RyZWVGaXhlZE5vZGUoKQoreworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVG
aXhlZE5vZGU6OnVwZGF0ZShTY3JvbGxpbmdTdGF0ZU5vZGUqIHN0YXRlTm9kZSkKK3sKKyAgICBT
Y3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSogc3RhdGUgPSB0b1Njcm9sbGluZ1N0YXRlRml4ZWROb2Rl
KHN0YXRlTm9kZSk7CisKKyAgICBpZiAoc3RhdGUtPnNjcm9sbExheWVyRGlkQ2hhbmdlKCkpCisg
ICAgICAgIG1fbGF5ZXIgPSBzdGF0ZS0+cGxhdGZvcm1TY3JvbGxMYXllcigpOworCisgICAgaWYg
KHN0YXRlTm9kZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
OjpWaWV3cG9ydENvbnN0cmFpbnRzKQorICAgICAgICBtX2NvbnN0cmFpbnRzID0gc3RhdGUtPnZp
ZXdwb3J0Q29uc3RyYWludHMoKTsKK30KKworc3RhdGljIGlubGluZSBDR1BvaW50IG9wZXJhdG9y
KihDR1BvaW50JiBhLCBjb25zdCBDR1NpemUmIGIpCit7CisgICAgcmV0dXJuIENHUG9pbnRNYWtl
KGEueCAqIGIud2lkdGgsIGEueSAqIGIuaGVpZ2h0KTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVl
Rml4ZWROb2RlOjpwYXJlbnRTY3JvbGxQb3NpdGlvbkRpZENoYW5nZShjb25zdCBJbnRSZWN0JiB2
aWV3cG9ydFJlY3QpCit7CisgICAgRmxvYXRQb2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJh
aW50cy5sYXllclBvc2l0aW9uRm9yVmlld3BvcnRSZWN0KHZpZXdwb3J0UmVjdCk7CisKKyAgICBD
R1JlY3QgbGF5ZXJCb3VuZHMgPSBbbV9sYXllci5nZXQoKSBib3VuZHNdOworICAgIENHUG9pbnQg
YW5jaG9yUG9pbnQgPSBbbV9sYXllci5nZXQoKSBhbmNob3JQb2ludF07CisgICAgQ0dQb2ludCBu
ZXdQb3NpdGlvbiA9IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmFsaWdubWVudE9mZnNl
dCgpICsgYW5jaG9yUG9pbnQgKiBsYXllckJvdW5kcy5zaXplOworICAgIFttX2xheWVyLmdldCgp
IHNldFBvc2l0aW9uOm5ld1Bvc2l0aW9uXTsKKworICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2l6ZV90IHNpemUgPSBtX2NoaWxkcmVuLT5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW4tPmF0
KGkpLT5wYXJlbnRTY3JvbGxQb3NpdGlvbkRpZENoYW5nZSh2aWV3cG9ydFJlY3QpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xM
SU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQkocmV2aXNpb24g
MTMzNTA5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNiArMjc1LDEzIEBA
IHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNldFMKIHsKICAgICBBU1NFUlQo
IXNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSk7CiAgICAgbV9z
Y3JvbGxMYXllci5nZXQoKS5wb3NpdGlvbiA9IENHUG9pbnRNYWtlKC1wb3NpdGlvbi54KCkgKyBz
Y3JvbGxPcmlnaW4oKS54KCksIC1wb3NpdGlvbi55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCkpOwor
CisgICAgaWYgKCFtX2NoaWxkcmVuKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qgc2l6
ZSA9IG1fY2hpbGRyZW4tPnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgbV9jaGlsZHJlbi0+YXQoaSktPnBhcmVudFNjcm9sbFBvc2l0aW9uRGlk
Q2hhbmdlKEludFJlY3QocG9zaXRpb24sIHZpZXdwb3J0UmVjdCgpLnNpemUoKSkpOwogfQogCiBJ
bnRQb2ludCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6bWluaW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAxMzM1MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMiw3ICsx
MDEyLDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjphdHRhY2hUb1Njcm9sbGkKICAgICBp
ZiAoIXNjcm9sbGluZ0Nvb3JkaW5hdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY3JvbGxp
bmdOb2RlVHlwZSBub2RlVHlwZSA9IFNjcm9sbGluZ05vZGU7CisgICAgLy8gRklYTUU6IFdoZW4g
d2Ugc3VwcG9ydCBvdmVyZmxvdyBhcmVhcywgd2Ugd2lsbCBoYXZlIHRvIHJlZmluZSB0aGlzIGZv
ciBvdmVyZmxvdyBhcmVhcyB0aGF0IGFyZSBhbHNvCisgICAgLy8gcG9zaXRvbjpmaXhlZC4KKyAg
ICBTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZTsKKyAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUo
KS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQorICAgICAgICBub2RlVHlwZSA9IEZpeGVk
Tm9kZTsKKyAgICBlbHNlCisgICAgICAgIG5vZGVUeXBlID0gU2Nyb2xsaW5nTm9kZTsKKwogICAg
IFNjcm9sbGluZ05vZGVJRCBwYXJlbnRJRCA9IHBhcmVudCA/IHBhcmVudC0+c2Nyb2xsTGF5ZXJJ
RCgpIDogMDsKICAgICBtX3Njcm9sbExheWVySUQgPSBzY3JvbGxpbmdDb29yZGluYXRvci0+YXR0
YWNoVG9TdGF0ZVRyZWUobm9kZVR5cGUsIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT51bmlxdWVTY3Jv
bGxMYXllcklEKCksIHBhcmVudElEKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHJldmlzaW9uIDEzMzUwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
OTAsNiArOTAsNyBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NMYXllciogc2Nyb2xsaW5nQ29udGVu
dHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci5nZXQoKTsg
fQogCiAgICAgdm9pZCBhdHRhY2hUb1Njcm9sbGluZ0Nvb3JkaW5hdG9yKFJlbmRlckxheWVyQmFj
a2luZyogcGFyZW50KTsKKyAgICB2b2lkIGRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcigp
OwogICAgIHVpbnQ2NF90IHNjcm9sbExheWVySUQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbExh
eWVySUQ7IH0KICAgICAKICAgICBib29sIGhhc01hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1f
bWFza0xheWVyICE9IDA7IH0KQEAgLTIwNCw4ICsyMDUsNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0OwogICAgIGJvb2wgdXBkYXRlU2Nyb2xs
aW5nTGF5ZXJzKGJvb2wgc2Nyb2xsaW5nTGF5ZXJzKTsKIAotICAgIHZvaWQgZGV0YWNoRnJvbVNj
cm9sbGluZ0Nvb3JkaW5hdG9yKCk7Ci0KICAgICBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBw
YWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVyKCkgY29uc3Q7CiAgICAgCiAgICAgSW50U2l6ZSBj
b250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lv
biAxMzM1MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIlJlbmRl
clZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKICNpbmNsdWRlICJTY3Jv
bGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGls
ZWRCYWNraW5nLmgiCkBAIC0zMTIsMTAgKzMxMywyMCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6Zmx1c2hQZW5kaW5nCiAgICAgCiAgICAgQVNTRVJUKG1fZmx1c2hpbmdMYXllcnMpOwog
ICAgIG1fZmx1c2hpbmdMYXllcnMgPSBmYWxzZTsKKworICAgIGlmICghbV92aWV3cG9ydENvbnN0
cmFpbmVkTGF5ZXJzTmVlZGluZ1VwZGF0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgSGFzaFNldDxS
ZW5kZXJMYXllcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3ZpZXdwb3J0Q29uc3RyYWluZWRM
YXllcnNOZWVkaW5nVXBkYXRlLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8UmVuZGVyTGF5
ZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnNOZWVk
aW5nVXBkYXRlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHJlZ2lzdGVy
T3JVcGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoKml0KTsKKyAgICAgICAgCisgICAgICAg
IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVyc05lZWRpbmdVcGRhdGUuY2xlYXIoKTsKKyAgICB9
CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRGbHVzaENoYW5nZXNGb3JMYXll
cihSZW5kZXJMYXllciopCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkRmx1c2hDaGFu
Z2VzRm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQogeworICAgIGlmIChtX3ZpZXdwb3J0Q29u
c3RyYWluZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKQorICAgICAgICBtX3ZpZXdwb3J0Q29uc3Ry
YWluZWRMYXllcnNOZWVkaW5nVXBkYXRlLmFkZChsYXllcik7CiB9CiAKIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpub3RpZnlGbHVzaEJlZm9yZURpc3BsYXlSZWZyZXNoKGNvbnN0IEdyYXBo
aWNzTGF5ZXIqKQpAQCAtNTM1LDYgKzU0Niw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVCYWNraW4KIAogICAgICAgICAgICAgbGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgfQorCisgICAgICAgIC8vIE5lZWQgdG8gYWRkIGZvciBldmVyeSBjb21wb3NpdGluZyBsYXll
ciwgYmVjYXVzZSBhIGNvbXBvc2l0ZWQgbGF5ZXIgbWF5IGNoYW5nZSBmcm9tIGJlaW5nIG5vbi1m
aXhlZCB0byBmaXhlZC4KKyAgICAgICAgdXBkYXRlVmlld3BvcnRDb25zdHJhaW50U3RhdHVzKGxh
eWVyKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobGF5ZXItPmJhY2tpbmcoKSkgewogICAg
ICAgICAgICAgLy8gSWYgd2UncmUgcmVtb3ZpbmcgYmFja2luZyBvbiBhIHJlZmxlY3Rpb24sIGNs
ZWFyIHRoZSBzb3VyY2UgR3JhcGhpY3NMYXllcidzIHBvaW50ZXIgdG8KQEAgLTU0Nyw2ICs1NjEs
OCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luCiAgICAgICAgICAg
ICAgICAgICAgIGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIo
MCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZW1v
dmVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIobGF5ZXIpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBsYXllci0+Y2xlYXJCYWNraW5nKCk7CiAgICAgICAgICAgICBsYXllckNoYW5nZWQgPSB0
cnVlOwpAQCAtNjU4LDYgKzY3NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXll
cldpbGxCZVIKICAgICBpZiAoIWNoaWxkLT5pc0NvbXBvc2l0ZWQoKSB8fCBwYXJlbnQtPnJlbmRl
cmVyKCktPmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
cmVtb3ZlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKGNoaWxkKTsKICAgICByZXBhaW50SW5Db21w
b3NpdGVkQW5jZXN0b3IoY2hpbGQsIGNoaWxkLT5iYWNraW5nKCktPmNvbXBvc2l0ZWRCb3VuZHMo
KSk7CiAKICAgICBzZXRDb21wb3NpdGluZ1BhcmVudChjaGlsZCwgMCk7CkBAIC0xNDA0LDggKzE0
MjEsMTAgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsZWFyQmFja2luZwogICAgIGlm
ICghbGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsYXllci0+aXNDb21wb3NpdGVk
KCkpCisgICAgaWYgKGxheWVyLT5pc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICByZW1vdmVWaWV3
cG9ydENvbnN0cmFpbmVkTGF5ZXIobGF5ZXIpOwogICAgICAgICBsYXllci0+Y2xlYXJCYWNraW5n
KCk7CisgICAgfQogICAgIAogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGN1cnJMYXllciA9IGxheWVy
LT5maXJzdENoaWxkKCk7IGN1cnJMYXllcjsgY3VyckxheWVyID0gY3VyckxheWVyLT5uZXh0U2li
bGluZygpKQogICAgICAgICBjbGVhckJhY2tpbmdGb3JMYXllckluY2x1ZGluZ0Rlc2NlbmRhbnRz
KGN1cnJMYXllcik7CkBAIC0yNTM2LDYgKzI1NTUsMTY3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpkZXZpY2VPclBhZ2UKICAgICAgICAgcm9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKIH0KIAorc3RhdGljIGJv
b2wgaXNSb290bW9zdEZpeGVkT3JTdGlja3lMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCit7Cisg
ICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5pc1N0aWNreVBvc2l0aW9uZWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0
aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9y
IChSZW5kZXJMYXllciogc3RhY2tpbmdDb250ZXh0ID0gbGF5ZXItPnN0YWNraW5nQ29udGV4dCgp
OyBzdGFja2luZ0NvbnRleHQ7IHN0YWNraW5nQ29udGV4dCA9IHN0YWNraW5nQ29udGV4dC0+c3Rh
Y2tpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgaWYgKHN0YWNraW5nQ29udGV4dC0+aXNDb21wb3Np
dGVkKCkgJiYgc3RhY2tpbmdDb250ZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigp
ID09IEZpeGVkUG9zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVW
aWV3cG9ydENvbnN0cmFpbnRTdGF0dXMoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChp
c1Jvb3Rtb3N0Rml4ZWRPclN0aWNreUxheWVyKGxheWVyKSkKKyAgICAgICAgYWRkVmlld3BvcnRD
b25zdHJhaW5lZExheWVyKGxheWVyKTsKKyAgICBlbHNlCisgICAgICAgIHJlbW92ZVZpZXdwb3J0
Q29uc3RyYWluZWRMYXllcihsYXllcik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjphZGRWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAg
IG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVycy5hZGQobGF5ZXIpOworICAgIHJlZ2lzdGVyT3JV
cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIobGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVtb3ZlVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVy
KiBsYXllcikKK3sKKyAgICBpZiAoIW1fdmlld3BvcnRDb25zdHJhaW5lZExheWVycy5jb250YWlu
cyhsYXllcikpCisgICAgICAgIHJldHVybjsKKworICAgIHVucmVnaXN0ZXJWaWV3cG9ydENvbnN0
cmFpbmVkTGF5ZXIobGF5ZXIpOworICAgIG1fdmlld3BvcnRDb25zdHJhaW5lZExheWVycy5yZW1v
dmUobGF5ZXIpOworfQorCitjb25zdCBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVGaXhlZFZpZXdwb3J0Q29uc3RyYWludHMoUmVu
ZGVyTGF5ZXIqIGxheWVyKQoreworICAgIEFTU0VSVChsYXllci0+aXNDb21wb3NpdGVkKCkpOwor
CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXctPmZyYW1lVmlldygpOwor
ICAgIExheW91dFJlY3Qgdmlld3BvcnRSZWN0ID0gZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJl
Y3QoKTsKKworICAgIEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIGNvbnN0cmFpbnRz
ID0gRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMoKTsKKworICAgIEdyYXBoaWNzTGF5
ZXIqIGdyYXBoaWNzTGF5ZXIgPSBsYXllci0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCk7CisK
KyAgICBjb25zdHJhaW50cy5zZXRMYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KGdyYXBoaWNzTGF5
ZXItPnBvc2l0aW9uKCkpOworICAgIGNvbnN0cmFpbnRzLnNldFZpZXdwb3J0UmVjdEF0TGFzdExh
eW91dCh2aWV3cG9ydFJlY3QpOworICAgICAgICAKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBs
YXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlLT5sZWZ0KCkuaXNBdXRv
KCkpCisgICAgICAgIGNvbnN0cmFpbnRzLmFkZEFuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50
czo6QW5jaG9yRWRnZUxlZnQpOworCisgICAgaWYgKCFzdHlsZS0+cmlnaHQoKS5pc0F1dG8oKSkK
KyAgICAgICAgY29uc3RyYWludHMuYWRkQW5jaG9yRWRnZShWaWV3cG9ydENvbnN0cmFpbnRzOjpB
bmNob3JFZGdlUmlnaHQpOworCisgICAgaWYgKCFzdHlsZS0+dG9wKCkuaXNBdXRvKCkpCisgICAg
ICAgIGNvbnN0cmFpbnRzLmFkZEFuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9y
RWRnZVRvcCk7CisKKyAgICBpZiAoIXN0eWxlLT5ib3R0b20oKS5pc0F1dG8oKSkKKyAgICAgICAg
Y29uc3RyYWludHMuYWRkQW5jaG9yRWRnZShWaWV3cG9ydENvbnN0cmFpbnRzOjpBbmNob3JFZGdl
Qm90dG9tKTsKKworICAgIC8vIElmIGxlZnQgYW5kIHJpZ2h0IGFyZSBhdXRvLCB1c2UgbGVmdC4K
KyAgICBpZiAoc3R5bGUtPmxlZnQoKS5pc0F1dG8oKSAmJiBzdHlsZS0+cmlnaHQoKS5pc0F1dG8o
KSkKKyAgICAgICAgY29uc3RyYWludHMuYWRkQW5jaG9yRWRnZShWaWV3cG9ydENvbnN0cmFpbnRz
OjpBbmNob3JFZGdlTGVmdCk7CisKKyAgICAvLyBJZiB0b3AgYW5kIGJvdHRvbSBhcmUgYXV0bywg
dXNlIHRvcC4KKyAgICBpZiAoc3R5bGUtPnRvcCgpLmlzQXV0bygpICYmIHN0eWxlLT5ib3R0b20o
KS5pc0F1dG8oKSkKKyAgICAgICAgY29uc3RyYWludHMuYWRkQW5jaG9yRWRnZShWaWV3cG9ydENv
bnN0cmFpbnRzOjpBbmNob3JFZGdlVG9wKTsKKyAgICAgICAgCisgICAgcmV0dXJuIGNvbnN0cmFp
bnRzOworfQorCitjb25zdCBTdGlja3lQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlU3RpY2t5Vmlld3BvcnRDb25zdHJhaW50cyhSZW5kZXJM
YXllciogbGF5ZXIpCit7CisgICAgQVNTRVJUKGxheWVyLT5pc0NvbXBvc2l0ZWQoKSk7CisKKyAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCk7CisgICAg
TGF5b3V0UmVjdCB2aWV3cG9ydFJlY3QgPSBmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgp
OworCisgICAgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzID0g
U3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzKCk7CisKKyAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVuZGVyZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGxheWVyLT5yZW5kZXJl
cigpKTsKKworICAgIHJlbmRlcmVyLT5jb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhj
b25zdHJhaW50cywgdmlld3BvcnRSZWN0KTsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIgPSBsYXllci0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCk7CisKKyAgICBjb25zdHJh
aW50cy5zZXRMYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KGdyYXBoaWNzTGF5ZXItPnBvc2l0aW9u
KCkpOworICAgIGNvbnN0cmFpbnRzLnNldFN0aWNreU9mZnNldEF0TGFzdExheW91dChyZW5kZXJl
ci0+c3RpY2t5UG9zaXRpb25PZmZzZXQoKSk7CisKKyAgICByZXR1cm4gY29uc3RyYWludHM7Cit9
CisKK3N0YXRpYyBSZW5kZXJMYXllckJhY2tpbmcqIG5lYXJlc3RTY3JvbGxpbmdDb29yZGluYXRv
ckFuY2VzdG9yKFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICBSZW5kZXJMYXllciogYW5jZXN0
b3IgPSBsYXllci0+cGFyZW50KCk7CisgICAgd2hpbGUgKGFuY2VzdG9yKSB7CisgICAgICAgIGlm
IChSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBhbmNlc3Rvci0+YmFja2luZygpKSB7Cisg
ICAgICAgICAgICBpZiAoYmFja2luZy0+c2Nyb2xsTGF5ZXJJRCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBiYWNraW5nOworICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZSBmaXhlZCBlbGVt
ZW50IGlzIGluc2lkZSBhbiBvdmVyZmxvdyByZWdpb24sIHRoZW4gd2UgY2FuJ3Qgc2Nyb2xsIGl0
IHdpdGggdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLgorICAgICAgICAvLyBXZSB3aWxsIGJlIGFi
bGUgdG8gZml4IHRoaXMgd2hlbiB3ZSBnZXQgb3ZlcmZsb3cgcmVnaW9ucyBzY3JvbGxpbmcgd2l0
aCB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IuCisgICAgICAgIGlmIChsYXllci0+c2Nyb2xsc092
ZXJmbG93KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgYW5jZXN0b3IgPSBhbmNl
c3Rvci0+cGFyZW50KCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZWdpc3Rlck9yVXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZExheWVy
KFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQg
c3RpY2t5IHBvc2l0aW9uIGhlcmUhIEFuZCB3ZSBzaG91bGQgZXZlbnR1YWxsIHN1cHBvcnQgZml4
ZWQvc3RpY2t5IGVsZW1lbnRzCisgICAgLy8gdGhhdCBhcmUgaW5zaWRlIG5vbi1tYWluIGZyYW1l
cyBvbmNlIHdlIGdldCBub24tbWFpbiBmcmFtZXMgc2Nyb2xsaW5nIHdpdGggdGhlIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLgorICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS0+aXNTdGlja3lQb3NpdGlv
bmVkKCkgfHwgbV9yZW5kZXJWaWV3LT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICBpZiAoIXNjcm9sbGluZ0Nv
b3JkaW5hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5zdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSB8fCAhbGF5ZXItPnBhcmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCkt
PnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbik7CisgICAgQVNTRVJUKG1fdmlld3BvcnRDb25z
dHJhaW5lZExheWVycy5jb250YWlucyhsYXllcikpOworICAgIEFTU0VSVChsYXllci0+aXNDb21w
b3NpdGVkKCkpOworCisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXItPmJh
Y2tpbmcoKTsKKyAgICBpZiAoIWJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9s
bGluZ05vZGVJRCBub2RlSUQgPSBiYWNraW5nLT5zY3JvbGxMYXllcklEKCk7CisgICAgaWYgKCFu
b2RlSUQpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBwYXJlbnQgPSBuZWFyZXN0U2Ny
b2xsaW5nQ29vcmRpbmF0b3JBbmNlc3RvcihsYXllcik7CisgICAgICAgIGlmICghcGFyZW50KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBiYWNraW5nLT5hdHRhY2hUb1Njcm9sbGluZ0Nv
b3JkaW5hdG9yKHBhcmVudCk7CisgICAgICAgIG5vZGVJRCA9IGJhY2tpbmctPnNjcm9sbExheWVy
SUQoKTsKKyAgICB9CisKKyAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPmlzU3RpY2t5UG9zaXRp
b25lZCgpKQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+dXBkYXRlVmlld3BvcnRDb25z
dHJhaW5lZE5vZGUobm9kZUlELCBjb21wdXRlU3RpY2t5Vmlld3BvcnRDb25zdHJhaW50cyhsYXll
ciksIGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKSk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxp
bmdDb29yZGluYXRvci0+dXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZE5vZGUobm9kZUlELCBjb21w
dXRlRml4ZWRWaWV3cG9ydENvbnN0cmFpbnRzKGxheWVyKSwgYmFja2luZy0+Z3JhcGhpY3NMYXll
cigpKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVucmVnaXN0ZXJWaWV3cG9y
dENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIEFTU0VSVChtX3Zp
ZXdwb3J0Q29uc3RyYWluZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKKworICAgIGlmIChSZW5k
ZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllci0+YmFja2luZygpKQorICAgICAgICBiYWNr
aW5nLT5kZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKK30KKwogdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBk
aXNwbGF5SUQpCiB7CiAgICAgaWYgKG1fbGF5ZXJVcGRhdGVyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gMTMz
NTA5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50czsKIGNsYXNzIEdyYXBo
aWNzTGF5ZXI7CiBjbGFzcyBHcmFwaGljc0xheWVyVXBkYXRlcjsKIGNsYXNzIFJlbmRlckVtYmVk
ZGVkT2JqZWN0OwogY2xhc3MgUmVuZGVyUGFydDsKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OworY2xhc3MgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzOwogI2lmIEVOQUJMRShW
SURFTykKIGNsYXNzIFJlbmRlclZpZGVvOwogI2VuZGlmCkBAIC0yMjgsNiArMjMwLDkgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBkb2N1bWVudEJhY2tncm91bmRDb2xvckRpZENoYW5nZSgpOwogCisg
ICAgdm9pZCB1cGRhdGVWaWV3cG9ydENvbnN0cmFpbnRTdGF0dXMoUmVuZGVyTGF5ZXIqKTsKKyAg
ICB2b2lkIHJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXllciopOworCiAg
ICAgdm9pZCByZXNldFRyYWNrZWRSZXBhaW50UmVjdHMoKTsKICAgICB2b2lkIHNldFRyYWNrc1Jl
cGFpbnRzKGJvb2wpOwogCkBAIC0zMTksNiArMzI0LDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyTGF5ZXIq
KSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JJbmRpcmVjdFJlYXNvbihS
ZW5kZXJPYmplY3QqLCBib29sIGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cywgYm9vbCBoYXMzRFRy
YW5zZm9ybWVkRGVzY2VuZGFudHMsIFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVh
c29uJikgY29uc3Q7CiAKKyAgICB2b2lkIGFkZFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5k
ZXJMYXllciopOworICAgIHZvaWQgcmVnaXN0ZXJPclVwZGF0ZVZpZXdwb3J0Q29uc3RyYWluZWRM
YXllcihSZW5kZXJMYXllciopOworICAgIHZvaWQgdW5yZWdpc3RlclZpZXdwb3J0Q29uc3RyYWlu
ZWRMYXllcihSZW5kZXJMYXllciopOworCisgICAgY29uc3QgRml4ZWRQb3NpdGlvblZpZXdwb3J0
Q29uc3RyYWludHMgY29tcHV0ZUZpeGVkVmlld3BvcnRDb25zdHJhaW50cyhSZW5kZXJMYXllciop
OworICAgIGNvbnN0IFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBjb21wdXRlU3Rp
Y2t5Vmlld3BvcnRDb25zdHJhaW50cyhSZW5kZXJMYXllciopOworCiAgICAgYm9vbCByZXF1aXJl
c1Njcm9sbExheWVyKFJvb3RMYXllckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIGJvb2wgcmVxdWly
ZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzVmVy
dGljYWxTY3JvbGxiYXJMYXllcigpIGNvbnN0OwpAQCAtMzY1LDYgKzM3Nyw5IEBAIHByaXZhdGU6
CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fY2xpcExheWVyOwogICAgIE93blB0cjxHcmFw
aGljc0xheWVyPiBtX3Njcm9sbExheWVyOwogCisgICAgSGFzaFNldDxSZW5kZXJMYXllcio+IG1f
dmlld3BvcnRDb25zdHJhaW5lZExheWVyczsKKyAgICBIYXNoU2V0PFJlbmRlckxheWVyKj4gbV92
aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzTmVlZGluZ1VwZGF0ZTsKKwogICAgIC8vIEVuY2xvc2lu
ZyBsYXllciBmb3Igb3ZlcmZsb3cgY29udHJvbHMgYW5kIHRoZSBjbGlwcGluZyBsYXllcgogICAg
IE93blB0cjxHcmFwaGljc0xheWVyPiBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXI7CiAKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEzMzUwOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTExLTA1ICBCZXRoIERha2luICA8YmRha2lu
QGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAxMDAxCisgICAgICAgIFBhZ2VzIHdpdGggcG9zaXRpb246Zml4ZWQgZWxlbWVudHMg
c2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gc2Nyb2xsIG9uIAorICAgICAgICB0aGUgc2Nyb2xsaW5n
IHRocmVhZAorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xMDg1NzMxNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBOZXcgdGVzdHMuCisgICAgICAgICogcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcv
Zml4ZWQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVk
L2Fic29sdXRlLWluc2lkZS1maXhlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2Fic29sdXRlLWluc2lkZS1maXhlZC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhl
ZC1wb3NpdGlvbi1vdXQtb2Ytdmlldy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3
LW5lZ2F0aXZlLXppbmRleC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3LW5lZ2F0
aXZlLXppbmRleC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJh
d2luZy9maXhlZC9maXhlZC1wb3NpdGlvbi1vdXQtb2Ytdmlldy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9mb3VyLWJhcnMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9m
b3VyLWJhcnMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdp
bmcvZml4ZWQvbmVzdGVkLWZpeGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZpeGVkLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL3BlcmNlbnRhZ2UtaW5z
aWRlLWZpeGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL3Rp
bGVkLWRyYXdpbmcvZml4ZWQvcGVyY2VudGFnZS1pbnNpZGUtZml4ZWQuaHRtbDogQWRkZWQuCisK
KyAgICAgICAgVGhlc2UgdHdvIHRlc3RzIGFyZSBzdXBwb3NlZCB0byBiZSBpbiAic2xvdyBzY3Jv
bGxpbmciIG1vZGUuIE5vdyB0aGF0IAorICAgICAgICBmaXhlZCBlbGVtZW50cyBjYW4gc2Nyb2xs
ICJmYXN0LCIgd2UgbmVlZCBzb21ldGhpbmcgZWxzZSB0byBmb3JjZSAKKyAgICAgICAgc2xvdyBz
Y3JvbGxpbmcuIFdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGFkZCBzb21ldGhpbmcgdG8gCisgICAg
ICAgIHdpbmRvdy5pbnRlcm5hbHMgdG8gZG8gdGhhdCwgYnV0IGluIHRoZSBtZWFudGltZSwgCisg
ICAgICAgIGJhY2tncm91bmQtYXR0YWNobWVudDpmaXhlZCB3aWxsIHdvcmsuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nLXRyZWUtc2xvdy1zY3JvbGxpbmct
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3Njcm9s
bGluZy10cmVlLXNsb3ctc2Nyb2xsaW5nLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vbWFjL3Rp
bGVkLWRyYXdpbmcvdGlsZS1jb3ZlcmFnZS1zbG93LXNjcm9sbGluZy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvdGlsZS1jb3ZlcmFnZS1zbG93LXNj
cm9sbGluZy5odG1sOgorCiAyMDEyLTExLTA1ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTWFyayBjc3MzL2ZpbHRlcnMvY3Vz
dG9tL2N1c3RvbS1maWx0ZXItYW5pbWF0aW9uLmh0bWwKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy90aWxlZC1kcmF3aW5nL3Njcm9sbGluZy10cmVlLXNsb3ctc2Nyb2xsaW5nLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJh
d2luZy9zY3JvbGxpbmctdHJlZS1zbG93LXNjcm9sbGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDEzMzUwOSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3Njcm9s
bGluZy10cmVlLXNsb3ctc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIChTY3JvbGxpbmcgbm9kZQogICAodmlld3BvcnQgcmVjdCAwIDAgODAwIDYw
MCkKICAgKGNvbnRlbnRzIHNpemUgODAwIDYwMCkKLSAgKFNjcm9sbGluZyBvbiBtYWluIHRocmVh
ZCBiZWNhdXNlOiBIYXMgdmlld3BvcnQgY29uc3RyYWluZWQgb2JqZWN0cyB3aXRob3V0IHN1cHBv
cnRpbmcgZml4ZWQgbGF5ZXJzLCApCisgIChTY3JvbGxpbmcgb24gbWFpbiB0aHJlYWQgYmVjYXVz
ZTogSGFzIHNsb3cgcmVwYWludCBvYmplY3RzLCApCiApCiAKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3Njcm9sbGluZy10cmVlLXNsb3ctc2Nyb2xsaW5nLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcv
c2Nyb2xsaW5nLXRyZWUtc2xvdy1zY3JvbGxpbmcuaHRtbAkocmV2aXNpb24gMTMzNTA5KQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvc2Nyb2xsaW5nLXRyZWUtc2xv
dy1zY3JvbGxpbmcuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDggQEAKICAgICAgICAg
LmJveCB7CiAgICAgICAgICAgICBoZWlnaHQ6IDEwMHB4OwogICAgICAgICAgICAgd2lkdGg6IDEw
MHB4OwotICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkOyAvKiBBdCB0aGlzIHRpbWUsIHBvc2l0
aW9uOmZpeGVkIGZvcmNlcyBzbG93IG1vZGUuICovCisgICAgICAgICAgICBiYWNrZ3JvdW5kLWlt
YWdlOiAtd2Via2l0LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQocmVkIDEwJSwgZ3JlZW4gMTAl
LCBncmVlbiAzMCUpOworICAgICAgICAgICAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsg
LyogQXQgdGhpcyB0aW1lLCBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6Zml4ZWQgZm9yY2VzIHNsb3cg
bW9kZS4gKi8KICAgICAgICAgfQogICAgIDwvc3R5bGU+CiAgICAgPHNjcmlwdD4KSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL3RpbGUtY292ZXJhZ2Utc2xvdy1z
Y3JvbGxpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy90aWxlZC1kcmF3aW5nL3RpbGUtY292ZXJhZ2Utc2xvdy1zY3JvbGxpbmctZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAxMzM1MDkpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQt
ZHJhd2luZy90aWxlLWNvdmVyYWdlLXNsb3ctc2Nyb2xsaW5nLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIsMTMgKzEyLDYgQEAKICAgICAgIChjaGlsZHJlbiAxCiAgICAgICAgIChH
cmFwaGljc0xheWVyCiAgICAgICAgICAgKHZpc2libGUgcmVjdCAwLjAwLCAwLjAwIDAuMDAgeCAw
LjAwKQotICAgICAgICAgIChjaGlsZHJlbiAxCi0gICAgICAgICAgICAoR3JhcGhpY3NMYXllcgot
ICAgICAgICAgICAgICAocG9zaXRpb24gOC4wMCAxMy4wMCkKLSAgICAgICAgICAgICAgKGJvdW5k
cyAxMDAuMDAgMTAwLjAwKQotICAgICAgICAgICAgICAodmlzaWJsZSByZWN0IDAuMDAsIDAuMDAg
MTAwLjAwIHggMTAwLjAwKQotICAgICAgICAgICAgKQotICAgICAgICAgICkKICAgICAgICAgKQog
ICAgICAgKQogICAgICkKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3
aW5nL3RpbGUtY292ZXJhZ2Utc2xvdy1zY3JvbGxpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy90aWxlLWNvdmVyYWdlLXNsb3ctc2Ny
b2xsaW5nLmh0bWwJKHJldmlzaW9uIDEzMzUwOSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy90aWxlZC1kcmF3aW5nL3RpbGUtY292ZXJhZ2Utc2xvdy1zY3JvbGxpbmcuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtNiw3ICs2LDggQEAKICAgICAgICAgLmJveCB7CiAgICAgICAgICAgICBoZWln
aHQ6IDEwMHB4OwogICAgICAgICAgICAgd2lkdGg6IDEwMHB4OwotICAgICAgICAgICAgcG9zaXRp
b246IGZpeGVkOyAvKiBBdCB0aGlzIHRpbWUsIHBvc2l0aW9uOmZpeGVkIGZvcmNlcyBzbG93IG1v
ZGUuICovCisgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LXJlcGVhdGluZy1s
aW5lYXItZ3JhZGllbnQocmVkIDEwJSwgZ3JlZW4gMTAlLCBncmVlbiAzMCUpOworICAgICAgICAg
ICAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZDsgLyogQXQgdGhpcyB0aW1lLCBiYWNrZ3Jv
dW5kLWF0dGFjaG1lbnQ6Zml4ZWQgZm9yY2VzIHNsb3cgbW9kZS4gKi8KICAgICAgICAgfQogICAg
IDwvc3R5bGU+CiAgICAgPHNjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90
aWxlZC1kcmF3aW5nL2ZpeGVkL2Fic29sdXRlLWluc2lkZS1maXhlZC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQv
YWJzb2x1dGUtaW5zaWRlLWZpeGVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2Fic29sdXRlLWluc2lkZS1m
aXhlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKyhTY3JvbGxp
bmcgbm9kZQorICAodmlld3BvcnQgcmVjdCAwIDAgNzg1IDYwMCkKKyAgKGNvbnRlbnRzIHNpemUg
Nzg1IDI3MTApCisgIChyZXF1ZXN0ZWQgc2Nyb2xsIHBvc2l0aW9uIDAgMjAwKQorICAoY2hpbGRy
ZW4gMQorICAgIChGaXhlZCBub2RlCisgICAgICAoYW5jaG9yIGVkZ2VzOiBBbmNob3JFZGdlTGVm
dCBBbmNob3JFZGdlVG9wKQorICAgICAgKHZpZXdwb3J0IHJlY3QgYXQgbGFzdCBsYXlvdXQ6IDAu
MDAgMjAwLjAwIDc4NS4wMCA2MDAuMDApCisgICAgICAobGF5ZXIgcG9zaXRpb24gYXQgbGFzdCBs
YXlvdXQgOC4wMCA4LjAwKQorICAgICkKKyAgKQorKQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9hYnNvbHV0ZS1pbnNpZGUtZml4ZWQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhl
ZC9hYnNvbHV0ZS1pbnNpZGUtZml4ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2Fic29sdXRlLWluc2lkZS1maXhlZC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorCis8aGVhZD4KKyAgICA8c3R5bGU+CisgICAgICAgIGJvZHkgeworICAgICAgICAgICAgbWFy
Z2luOiAwOworICAgICAgICAgICAgaGVpZ2h0OiAyNTAwcHg7CisgICAgICAgIH0KKworICAgICAg
ICAuYm94IHsKKyAgICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgICAgIHdpZHRoOiAxMDBw
eDsKKyAgICAgICAgfQorCisgICAgICAgIC5vdXRlciB7CisgICAgICAgICAgICBwb3NpdGlvbjog
Zml4ZWQ7CisgICAgICAgICAgICBsZWZ0OiAxMHB4OworICAgICAgICAgICAgdG9wOiAxMHB4Owor
ICAgICAgICAgICAgd2lkdGg6IDEwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAxMDBweDsKKyAg
ICAgICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCBibGFjazsKKyAgICAgICAgfQorCisgICAgICAg
IC53cmFwcGVyIHsKKyAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogZ3JlZW47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC5pbmRp
Y2F0b3IgeworICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OworICAgICAgICAgIG1hcmdpbi10
b3A6IDIxMHB4OworICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICAgICAgfQor
ICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdD4KKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikg
eworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIGRvU2Nyb2xsKCkKKyAg
ICAgIHsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
d2luZG93LnNjcm9sbFRvKDAsIDIwMCk7CisgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMp
IHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzJykuaW5uZXJU
ZXh0ID0gaW50ZXJuYWxzLnNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dChkb2N1bWVudCk7CisgICAg
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0s
IDEwKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xv
YWQnLCBkb1Njcm9sbCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cisg
IDwhLS0gVGhlIGdyZWVuIGJveCBzaG91bGQgb2JzY3VyZSB0aGUgcmVkIGJveCAtLT4KKyAgPHBy
ZSBpZD0icmVzdWx0cyI+PC9wcmU+CisgIDxkaXYgY2xhc3M9ImluZGljYXRvciBib3giPjwvZGl2
PgorICA8ZGl2IGNsYXNzPSJvdXRlciBib3giPgorICAgIDxkaXYgY2xhc3M9IndyYXBwZXIgYm94
Ij4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhlZC1wb3NpdGlvbi1vdXQt
b2Ytdmlldy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXctZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRy
YXdpbmcvZml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXctZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACisoU2Nyb2xsaW5nIG5vZGUKKyAgKHZpZXdwb3J0IHJl
Y3QgMCAwIDc4NSA2MDApCisgIChjb250ZW50cyBzaXplIDc4NSAxMDIxKQorICAoU2Nyb2xsaW5n
IG9uIG1haW4gdGhyZWFkIGJlY2F1c2U6IEhhcyBub24tbGF5ZXIgZml4ZWQgb2JqZWN0cywgKQor
ICAoY2hpbGRyZW4gMQorICAgIChGaXhlZCBub2RlCisgICAgICAoYW5jaG9yIGVkZ2VzOiBBbmNo
b3JFZGdlTGVmdCBBbmNob3JFZGdlVG9wKQorICAgICAgKHZpZXdwb3J0IHJlY3QgYXQgbGFzdCBs
YXlvdXQ6IDAuMDAgMC4wMCA3ODUuMDAgNjAwLjAwKQorICAgICkKKyAgKQorKQorCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhlZC1wb3NpdGlv
bi1vdXQtb2Ytdmlldy1uZWdhdGl2ZS16aW5kZXgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0
aW9uLW91dC1vZi12aWV3LW5lZ2F0aXZlLXppbmRleC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhlZC1w
b3NpdGlvbi1vdXQtb2Ytdmlldy1uZWdhdGl2ZS16aW5kZXgtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyIEBACisoU2Nyb2xsaW5nIG5vZGUKKyAgKHZpZXdwb3J0IHJlY3Qg
MCAwIDc4NSA2MDApCisgIChjb250ZW50cyBzaXplIDc4NSAxMDIxKQorICAoU2Nyb2xsaW5nIG9u
IG1haW4gdGhyZWFkIGJlY2F1c2U6IEhhcyBub24tbGF5ZXIgZml4ZWQgb2JqZWN0cywgKQorICAo
Y2hpbGRyZW4gMQorICAgIChGaXhlZCBub2RlCisgICAgICAoYW5jaG9yIGVkZ2VzOiBBbmNob3JF
ZGdlTGVmdCBBbmNob3JFZGdlVG9wKQorICAgICAgKHZpZXdwb3J0IHJlY3QgYXQgbGFzdCBsYXlv
dXQ6IDAuMDAgMC4wMCA3ODUuMDAgNjAwLjAwKQorICAgICkKKyAgKQorKQorCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhlZC1wb3NpdGlvbi1v
dXQtb2Ytdmlldy1uZWdhdGl2ZS16aW5kZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9maXhlZC1wb3NpdGlvbi1vdXQtb2Yt
dmlldy1uZWdhdGl2ZS16aW5kZXguaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3
LW5lZ2F0aXZlLXppbmRleC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACis8IURP
Q1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKyAgPHN0eWxlPgorICAgIC5maXhlZCB7Cisg
ICAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgICB3aWR0aDogMTBweDsKKyAgICAgIGhlaWdodDog
MTBweDsKKyAgICB9CisgIDwvc3R5bGU+CisKKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgdGVzdFJ1bm5lci5kdW1w
QXNUZXh0KCk7CisgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKworICAgICAgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgd2luZG93
LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInNjcm9sbGluZ1RyZWUiKS5pbm5lclRleHQgPSB3aW5kb3cuaW50ZXJuYWxzLnNjcm9sbGlu
Z1N0YXRlVHJlZUFzVGV4dChkb2N1bWVudCk7CisgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgICAgIH0sIDEwKTsKKyAgICAgIH0sIGZhbHNlKTsKKyAgICB9CisgIDwvc2Ny
aXB0PgorPC9oZWFkPgorCis8Ym9keT4KKyAgPGRpdiBzdHlsZT0iaGVpZ2h0OiAxMDAwcHgiPgor
ICAgIDxwcmUgaWQ9InNjcm9sbGluZ1RyZWUiPjwvcHJlPgorICA8L2Rpdj4KKworICA8ZGl2IGNs
YXNzPSJmaXhlZCIgc3R5bGU9InotaW5kZXg6IC0xOyB0b3A6IC0xMDBweCI+PC9kaXY+CisgIDxk
aXYgY2xhc3M9ImZpeGVkIiBzdHlsZT0iei1pbmRleDogLTE7IHRvcDogMHB4OyBsZWZ0OiAxMDAw
cHgiPjwvZGl2PgorCisgIDxkaXYgY2xhc3M9ImZpeGVkIiBzdHlsZT0idG9wOiAwcHg7IGxlZnQ6
IDBweCI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9uLW91dC1vZi12aWV3Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcv
Zml4ZWQvZml4ZWQtcG9zaXRpb24tb3V0LW9mLXZpZXcuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL2ZpeGVkLXBvc2l0aW9u
LW91dC1vZi12aWV3Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKzwhRE9DVFlQ
RSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgorICA8c3R5bGU+CisgICAgLmZpeGVkIHsKKyAgICAg
IHBvc2l0aW9uOiBmaXhlZDsKKyAgICAgIHdpZHRoOiAxMHB4OworICAgICAgaGVpZ2h0OiAxMHB4
OworICAgIH0KKyAgPC9zdHlsZT4KKworICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+
CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
ZHVtcEFzVGV4dCgpOworCisgICAgICAgIGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3Njcm9sbGluZ1RyZWUnKS5pbm5lclRleHQgPSBpbnRlcm5hbHMu
c2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KGRvY3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFs
c2UpOworICA8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxkaXYgc3R5bGU9ImhlaWdo
dDogMTAwMHB4Ij4KKyAgICA8cHJlIGlkPSJzY3JvbGxpbmdUcmVlIj48L3ByZT4KKyAgPC9kaXY+
CisKKyAgPGRpdiBjbGFzcz0iZml4ZWQiIHN0eWxlPSJ0b3A6IC0xMDBweCI+PC9kaXY+CisgIDxk
aXYgY2xhc3M9ImZpeGVkIiBzdHlsZT0idG9wOiAwcHg7IGxlZnQ6IDEwMDBweCI+PC9kaXY+CisK
KyAgPGRpdiBjbGFzcz0iZml4ZWQiIHN0eWxlPSJ0b3A6IDBweDsgbGVmdDogMHB4Ij48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVk
LWRyYXdpbmcvZml4ZWQvZm91ci1iYXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQtZHJhd2luZy9maXhlZC9mb3VyLWJhcnMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRy
YXdpbmcvZml4ZWQvZm91ci1iYXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyNyBAQAorKFNjcm9sbGluZyBub2RlCisgICh2aWV3cG9ydCByZWN0IDAgMCA3ODUgNjAwKQor
ICAoY29udGVudHMgc2l6ZSA3ODUgMjIyMSkKKyAgKHJlcXVlc3RlZCBzY3JvbGwgcG9zaXRpb24g
MCAyMDApCisgIChjaGlsZHJlbiA0CisgICAgKEZpeGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRn
ZXM6IEFuY2hvckVkZ2VMZWZ0IEFuY2hvckVkZ2VUb3ApCisgICAgICAodmlld3BvcnQgcmVjdCBh
dCBsYXN0IGxheW91dDogMC4wMCAyMDAuMDAgNzg1LjAwIDYwMC4wMCkKKyAgICApCisgICAgKEZp
eGVkIG5vZGUKKyAgICAgIChhbmNob3IgZWRnZXM6IEFuY2hvckVkZ2VMZWZ0IEFuY2hvckVkZ2VU
b3ApCisgICAgICAodmlld3BvcnQgcmVjdCBhdCBsYXN0IGxheW91dDogMC4wMCAyMDAuMDAgNzg1
LjAwIDYwMC4wMCkKKyAgICAgIChsYXllciBwb3NpdGlvbiBhdCBsYXN0IGxheW91dCAxMC4wMCAy
MDAuMDApCisgICAgKQorICAgIChGaXhlZCBub2RlCisgICAgICAoYW5jaG9yIGVkZ2VzOiBBbmNo
b3JFZGdlUmlnaHQgQW5jaG9yRWRnZVRvcCkKKyAgICAgICh2aWV3cG9ydCByZWN0IGF0IGxhc3Qg
bGF5b3V0OiAwLjAwIDIwMC4wMCA3ODUuMDAgNjAwLjAwKQorICAgICAgKGxheWVyIHBvc2l0aW9u
IGF0IGxhc3QgbGF5b3V0IDYwMS4wMCAyMDAuMDApCisgICAgKQorICAgIChGaXhlZCBub2RlCisg
ICAgICAoYW5jaG9yIGVkZ2VzOiBBbmNob3JFZGdlTGVmdCBBbmNob3JFZGdlQm90dG9tKQorICAg
ICAgKHZpZXdwb3J0IHJlY3QgYXQgbGFzdCBsYXlvdXQ6IDAuMDAgMjAwLjAwIDc4NS4wMCA2MDAu
MDApCisgICAgICAobGF5ZXIgcG9zaXRpb24gYXQgbGFzdCBsYXlvdXQgMC4wMCA1MTYuMDApCisg
ICAgKQorICApCispCitUaGlzIGlzIHRoZSB0b3AgYmFyLiBUaGlzIGlzIHRoZSBsZWZ0IGJhci4g
VGhpcyBpcyB0aGUgcmlnaHQgYmFyLiBUaGlzIGlzIHRoZSBib3R0b20gYmFyLgpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvZm91ci1iYXJzLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4
ZWQvZm91ci1iYXJzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvdGlsZWQtZHJhd2luZy9maXhlZC9mb3VyLWJhcnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4NSBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEg
bmFtZT0iYXBwbGUtbW9iaWxlLXdlYi1hcHAtY2FwYWJsZSIgY29udGVudD0ieWVzIj4KKyAgICA8
c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgICAgYm9keSB7CisgICAg
ICAgIGhlaWdodDogMjIwMHB4OworICAgICAgfQorICAgICAgCisgICAgICAuZml4ZWQgeworICAg
ICAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgICAgIHRvcDogMDsKKyAgICAgICAgbGVmdDogMDsK
KyAgICAgICAgbWFyZ2luOiAxMHB4OworICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgICAgIGJh
Y2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTI4LCAwLCAwLjgpOworICAgICAgICBib3JkZXI6IDJw
eCBzb2xpZCBibGFjazsKKyAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMTBweCBibGFj
azsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLnRvcCwgLmJvdHRvbSB7CisgICAgICAgIHdpZHRo
OiA5NiU7CisgICAgICB9CisKKyAgICAgIC5sZWZ0IHsKKyAgICAgICAgdG9wOiAyMDBweDsKKyAg
ICAgICAgbGVmdDogMTBweDsKKyAgICAgICAgd2lkdGg6IDE1MHB4OworICAgICAgICBoZWlnaHQ6
IDMwMHB4OworICAgICAgfQorCisgICAgICAucmlnaHQgeworICAgICAgICB0b3A6IDIwMHB4Owor
ICAgICAgICBsZWZ0OiBhdXRvOworICAgICAgICByaWdodDogMTBweDsKKyAgICAgICAgd2lkdGg6
IDE1MHB4OworICAgICAgICBoZWlnaHQ6IDMwMHB4OworICAgICAgfQorICAgICAgCisgICAgICAu
Ym90dG9tIHsKKyAgICAgICAgdG9wOiBhdXRvOworICAgICAgICBib3R0b206IDEwcHg7CisgICAg
ICB9CisgICAgICAKKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAg
ICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworICAgICAgfQorCisgICAgICBmdW5jdGlvbiBkb1Njcm9sbCgpCisgICAgICB7
CisgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgIHdpbmRv
dy5zY3JvbGxUbygwLCAyMDApOworICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewor
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdHMnKS5pbm5lclRleHQg
PSB3aW5kb3cuaW50ZXJuYWxzLnNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dChkb2N1bWVudCk7Cisg
ICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICB9CisgICAgICAg
IH0sIDEwKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
J2xvYWQnLCBkb1Njcm9sbCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
CisKKzxwcmUgaWQ9InJlc3VsdHMiPjwvcHJlPgorCis8ZGl2IGNsYXNzPSJmaXhlZCB0b3AiPgor
ICBUaGlzIGlzIHRoZSB0b3AgYmFyLgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmaXhlZCBsZWZ0Ij4K
KyAgVGhpcyBpcyB0aGUgbGVmdCBiYXIuCis8L2Rpdj4KKzxkaXYgY2xhc3M9ImZpeGVkIHJpZ2h0
Ij4KKyAgVGhpcyBpcyB0aGUgcmlnaHQgYmFyLgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJmaXhlZCBi
b3R0b20iPgorICBUaGlzIGlzIHRoZSBib3R0b20gYmFyLgorPC9kaXY+CisKKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVk
L25lc3RlZC1maXhlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZpeGVkLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2Zp
eGVkL25lc3RlZC1maXhlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIg
QEAKKyhTY3JvbGxpbmcgbm9kZQorICAodmlld3BvcnQgcmVjdCAwIDAgNzg1IDYwMCkKKyAgKGNv
bnRlbnRzIHNpemUgNzg1IDIyMTMpCisgIChyZXF1ZXN0ZWQgc2Nyb2xsIHBvc2l0aW9uIDAgMjAw
KQorICAoY2hpbGRyZW4gMQorICAgIChGaXhlZCBub2RlCisgICAgICAoYW5jaG9yIGVkZ2VzOiBB
bmNob3JFZGdlTGVmdCBBbmNob3JFZGdlVG9wKQorICAgICAgKHZpZXdwb3J0IHJlY3QgYXQgbGFz
dCBsYXlvdXQ6IDAuMDAgMjAwLjAwIDc4NS4wMCA2MDAuMDApCisgICAgKQorICApCispCisKSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL25lc3RlZC1m
aXhlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1k
cmF3aW5nL2ZpeGVkL25lc3RlZC1maXhlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvbmVzdGVkLWZpeGVkLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxo
ZWFkPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgICAg
IGJvZHkgeworICAgICAgICAgICAgbWFyZ2luOiAwOworICAgICAgICAgICAgaGVpZ2h0OiAyMjAw
cHg7CisgICAgICAgIH0KKworICAgICAgICAuYm94IHsKKyAgICAgICAgICBoZWlnaHQ6IDEwMHB4
OworICAgICAgICAgIHdpZHRoOiAxMDBweDsKKyAgICAgICAgfQorCisgICAgICAgIC5vdXRlciB7
CisgICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgICAgICAgICB0b3A6IDBweDsKKyAg
ICAgICAgICAgIHotaW5kZXg6IDE7IC8qIG1ha2VzIHRoaXMgYSBzdGFja2luZyBjb250ZXh0ICov
CisgICAgICAgICAgICBiYWNrZ3JvdW5kOiBibHVlOworICAgICAgICB9CisKKyAgICAgICAgLmlu
bmVyIHsKKyAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKKyAgICAgICAgICAgIHRvcDogMTIw
cHg7CisgICAgICAgICAgICBsZWZ0OiAxMjBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IGdy
ZWVuOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7
CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB0ZXN0UnVubmVy
LmR1bXBBc1RleHQoKTsKKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gZG9TY3JvbGwoKQorICAg
ICAgeworICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICB3
aW5kb3cuc2Nyb2xsVG8oMCwgMjAwKTsKKyAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
IHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzJykuaW5uZXJU
ZXh0ID0gd2luZG93LmludGVybmFscy5zY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHQoZG9jdW1lbnQp
OworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgfQorICAg
ICAgICB9LCAxMCk7CisgICAgICB9CisgICAgICAKKyAgICAgIHdpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCdsb2FkJywgZG9TY3JvbGwsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorICAgIDxwcmUgaWQ9InJlc3VsdHMiPjwvcHJlPgorICAgIDxkaXYgY2xhc3M9Im91dGVy
IGJveCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImlubmVyIGJveCI+PC9kaXY+CisgICAgPC9kaXY+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdGlsZWQt
ZHJhd2luZy9maXhlZC9wZXJjZW50YWdlLWluc2lkZS1maXhlZC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvcGVy
Y2VudGFnZS1pbnNpZGUtZml4ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcvZml4ZWQvcGVyY2VudGFnZS1pbnNpZGUt
Zml4ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACisoU2Nyb2xs
aW5nIG5vZGUKKyAgKHZpZXdwb3J0IHJlY3QgMCAwIDc4NSA2MDApCisgIChjb250ZW50cyBzaXpl
IDc4NSAyNTEzKQorICAocmVxdWVzdGVkIHNjcm9sbCBwb3NpdGlvbiAwIDIwMCkKKyAgKGNoaWxk
cmVuIDEKKyAgICAoRml4ZWQgbm9kZQorICAgICAgKGFuY2hvciBlZGdlczogQW5jaG9yRWRnZUxl
ZnQgQW5jaG9yRWRnZVRvcCkKKyAgICAgICh2aWV3cG9ydCByZWN0IGF0IGxhc3QgbGF5b3V0OiAw
LjAwIDIwMC4wMCA3ODUuMDAgNjAwLjAwKQorICAgICAgKGxheWVyIHBvc2l0aW9uIGF0IGxhc3Qg
bGF5b3V0IDAuMDAgMTMuMDApCisgICAgKQorICApCispCisKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL3BlcmNlbnRhZ2UtaW5zaWRlLWZpeGVkLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3RpbGVkLWRyYXdpbmcv
Zml4ZWQvcGVyY2VudGFnZS1pbnNpZGUtZml4ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy90aWxlZC1kcmF3aW5nL2ZpeGVkL3BlcmNlbnRhZ2UtaW5zaWRl
LWZpeGVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+CisKKzxoZWFkPgorICAgIDxzdHlsZT4KKyAgICAgICAgYm9keSB7CisgICAgICAg
ICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICBoZWlnaHQ6IDI1MDBweDsKKyAgICAgICAgfQor
CisgICAgICAgIC5ib3ggeworICAgICAgICAgIGhlaWdodDogMTAwcHg7CisgICAgICAgICAgd2lk
dGg6IDEwMHB4OworICAgICAgICB9CisKKyAgICAgICAgLndyYXBwZXIgeworICAgICAgICAgIHBv
c2l0aW9uOiBmaXhlZDsKKyAgICAgICAgICB3aWR0aDogNTAlOworICAgICAgICAgIGhlaWdodDog
NTAlOworICAgICAgICAgIGJvcmRlcjogMjBweCBzb2xpZCBncmF5OworICAgICAgICAgIGJhY2tn
cm91bmQtY29sb3I6IHNpbHZlcjsKKyAgICAgICAgICB6LWluZGV4OiAwOworICAgICAgICB9CisK
KyAgICAgICAgLmlubmVyIHsKKyAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAg
ICAgICAgIG1hcmdpbi1sZWZ0Oi01MHB4OworICAgICAgICAgICAgbWFyZ2luLXRvcDotMTAwcHg7
CisgICAgICAgICAgICB0b3A6IDEwMCU7CisgICAgICAgICAgICBsZWZ0OiA1MCU7CisgICAgICAg
ICAgICBiYWNrZ3JvdW5kOiBncmVlbjsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+CisgICAgPHNj
cmlwdD4KKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAg
ICB9CisKKyAgICAgIGZ1bmN0aW9uIGRvU2Nyb2xsKCkKKyAgICAgIHsKKyAgICAgICAgd2luZG93
LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDIw
MCk7CisgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0cycpLmlubmVyVGV4dCA9IHdpbmRvdy5pbnRlcm5h
bHMuc2Nyb2xsaW5nU3RhdGVUcmVlQXNUZXh0KGRvY3VtZW50KTsKKyAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgIH0KKyAgICAgICAgfSwgMTApOworICAgICAg
fQorICAgICAgCisgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvU2Nyb2xs
LCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8IS0tIFRoZSBn
cmF5IGJveCBzaG91bGQgdGFrZSB1cCB0aGUgdG9wIGxlZnQgcXVhZHJhbnQgb2YgdGhlIHdlYiBh
cmVhLgorICAgICAgICAgVGhlIGdyZWVuIGJveCBzaG91bGQgYmUgYWxpZ25lZCB3aXRoIHRoZSBp
bnNpZGUgZWRnZSBvZiB0aGUgcGFsZXIgZ3JheSBib3gsIGluIHRoZSBib3R0b20gbWlkZGxlLgor
ICAgIC0tPgorICAgIDxwcmUgaWQ9InJlc3VsdHMiPjwvcHJlPgorICAgIDxkaXYgY2xhc3M9Indy
YXBwZXIiPgorICAgICAgPGRpdiBjbGFzcz0iaW5uZXIgYm94Ij48L2Rpdj4KKyAgICA8L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="186653"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>