<?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>25431</bug_id>
          
          <creation_ts>2009-04-27 14:17:29 -0700</creation_ts>
          <short_desc>Simplify how SVG containers paint (and likely fix bugs by doing so)</short_desc>
          <delta_ts>2009-04-28 17:10:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>25403</blocked>
    
    <blocked>25432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>juraj.sukop</cc>
    
    <cc>krit</cc>
    
    <cc>mattxg</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>119022</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-27 14:17:29 -0700</bug_when>
    <thetext>Simplify how SVG containers paint (and likely fix bugs by doing so)

See attached patch (with long ChangeLog entry).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119023</commentid>
    <comment_count>1</comment_count>
      <attachid>29827</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-27 14:18:32 -0700</bug_when>
    <thetext>Created attachment 29827
Simplify how SVG containers paint

 21 files changed, 302 insertions(+), 203 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119076</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-04-28 03:28:12 -0700</bug_when>
    <thetext>About  &quot;FIXME: Should we still render filters?&quot; in RenderSVGRoot. I think so, yes. I understand it that way, that you want to stop rendering process, if the root-element is empty. E.g. a empty &lt;g&gt;, right? The spec want to continue on empty elements for filters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119112</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-28 10:44:02 -0700</bug_when>
    <thetext>Yeah, there are likely lots of filter bugs in our tree right now that we can&apos;t test because we have filters off.  Filters still kinda need to be re-written some day anyway. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119118</commentid>
    <comment_count>4</comment_count>
      <attachid>29827</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-28 11:16:42 -0700</bug_when>
    <thetext>Comment on attachment 29827
Simplify how SVG containers paint

&gt;  bool RenderSVGContainer::selfWillPaint() const
&gt;  {
&gt;  #if ENABLE(SVG_FILTERS)
&gt; @@ -121,29 +110,29 @@ void RenderSVGContainer::paint(PaintInfo&amp; paintInfo, int, int)
&gt;       // Spec: groups w/o children still may render filter content.
&gt;      if (!firstChild() &amp;&amp; !selfWillPaint())
&gt;          return;
&gt; -    
&gt; -    paintInfo.context-&gt;save();
&gt; -    applyContentTransforms(paintInfo);
&gt;  
&gt; -    SVGResourceFilter* filter = 0;
&gt; -    PaintInfo savedInfo(paintInfo);
&gt; +    PaintInfo childPaintInfo(paintInfo);
&gt;  
&gt; -    FloatRect boundingBox = repaintRectInLocalCoordinates();
&gt; -    if (paintInfo.phase == PaintPhaseForeground)
&gt; -        prepareToRenderSVGContent(this, paintInfo, boundingBox, filter); 
&gt; +    childPaintInfo.context-&gt;save();
&gt; +
&gt; +    // Let the RenderSVGViewportContainer subclass clip if necessary
&gt; +    applyViewportClip(childPaintInfo);
&gt;  
&gt; -    applyAdditionalTransforms(paintInfo);
&gt; +    applyTransformToPaintInfo(childPaintInfo, localToParentTransform());
&gt; +
&gt; +    SVGResourceFilter* filter = 0;
&gt; +    FloatRect boundingBox = repaintRectInLocalCoordinates();
&gt; +    if (childPaintInfo.phase == PaintPhaseForeground)
&gt; +        prepareToRenderSVGContent(this, childPaintInfo, boundingBox, filter);
&gt;  
&gt; -    // default implementation. Just pass paint through to the children
&gt; -    PaintInfo childInfo(paintInfo);
&gt; -    childInfo.paintingRoot = paintingRootForChildren(paintInfo);
&gt; +    childPaintInfo.paintingRoot = paintingRootForChildren(childPaintInfo);
&gt;      for (RenderObject* child = firstChild(); child; child = child-&gt;nextSibling())
&gt; -        child-&gt;paint(childInfo, 0, 0);
&gt; +        child-&gt;paint(childPaintInfo, 0, 0);
&gt;  
&gt;      if (paintInfo.phase == PaintPhaseForeground)
&gt; -        finishRenderSVGContent(this, paintInfo, boundingBox, filter, savedInfo.context);
&gt; +        finishRenderSVGContent(this, childPaintInfo, boundingBox, filter, paintInfo.context);

Can we start to optimize painting by skipping children that are entirely clipped out?

&gt; +void RenderSVGImage::computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect&amp; repaintRect, bool fixed)
&gt;  {
&gt; -    // FIXME: handle non-root repaintContainer
&gt; -    return m_absoluteBounds;
&gt; +    // Translate to coords in our parent renderer, and then call computeRectForRepaint on our parent
&gt; +    repaintRect = localToParentTransform().mapRect(repaintRect);
&gt; +    parent()-&gt;computeRectForRepaint(repaintContainer, repaintRect, fixed);
&gt;  }

It&apos;s a shame we can&apos;t just fall back on RenderBox::computeRectForRepaint(). If we fixed that to be more
HTML-agnostic, could we?

&gt;  void RenderSVGRoot::calcViewport()
&gt; @@ -204,35 +182,59 @@ void RenderSVGRoot::calcViewport()
&gt;      if (!selfNeedsLayout() &amp;&amp; !svg-&gt;hasRelativeValues())
&gt;          return;
&gt;  
&gt; -    SVGLength width = svg-&gt;width();
&gt; -    SVGLength height = svg-&gt;height();
&gt;      if (!svg-&gt;hasSetContainerSize()) {
&gt; -        m_viewport = FloatRect(0, 0, width.value(svg), height.value(svg));
&gt; -        return;
&gt; +        // In the normal case of &lt;svg&gt; being stand-alone or in a CSSBoxModel object we use
&gt; +        // RenderBox::width()/height() (which pulls data from RenderStyle)
&gt; +        m_viewportSize = FloatSize(width(), height());
&gt; +    } else {
&gt; +        // In the SVGImage case grab the SVGLength values off of SVGSVGElement and use
&gt; +        // the special relativeWidthValue accessors which respect the specified containerSize
&gt; +        SVGLength width = svg-&gt;width();
&gt; +        SVGLength height = svg-&gt;height();
&gt; +        float viewportWidth = (width.unitType() == LengthTypePercentage) ? svg-&gt;relativeWidthValue() : width.value(svg);
&gt; +        float viewportHeight = (height.unitType() == LengthTypePercentage) ? svg-&gt;relativeHeightValue() : height.value(svg);
&gt; +        m_viewportSize = FloatSize(viewportWidth, viewportHeight);

Does this logic deserve to be wrapped in its own method?

&gt;  TransformationMatrix RenderSVGRoot::localToParentTransform() const
&gt;  {
&gt; -    TransformationMatrix offsetTranslation;
&gt; -    offsetTranslation.translate(x(), y());
&gt; -    return localToParentTransformWithoutCSSParentOffset() * offsetTranslation;
&gt; +    IntSize parentToBorderBoxOffset = parentOriginToBorderBox();
&gt; +
&gt; +    TransformationMatrix borderBoxOriginToParentOrigin;
&gt; +    borderBoxOriginToParentOrigin.translate(parentToBorderBoxOffset.width(), parentToBorderBoxOffset.height());
&gt; +
&gt; +    return localToBorderBoxTransform() * borderBoxOriginToParentOrigin;
&gt;  }

Some tests with &lt;svg&gt; inside transformed HTML would be good to see if this all works.

&gt; +void RenderSVGText::computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect&amp; repaintRect, bool fixed)
&gt; +{
&gt; +    // Translate to coords in our parent renderer, and then call computeRectForRepaint on our parent
&gt; +    repaintRect = localToParentTransform().mapRect(repaintRect);
&gt; +    parent()-&gt;computeRectForRepaint(repaintContainer, repaintRect, fixed);
&gt;  }

Again, it&apos;s a shame we can&apos;t just drop into RenderBox::computeRectForRepaint()

&gt; +    bool calculateLocalTransform();

What does the return value mean?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119135</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-28 12:04:13 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 29827 [review])
&gt; Can we start to optimize painting by skipping children that are entirely
&gt; clipped out?

Would we do that by clipping the damage rect and then checking against the clipped damage rect?

&gt; It&apos;s a shame we can&apos;t just fall back on RenderBox::computeRectForRepaint(). If
&gt; we fixed that to be more HTML-agnostic, could we?

We could, I think that&apos;s fodder for a separate bug though.  And actually, I&apos;m not sure it will matter as the goal is to move all SVG renderers onto RenderSVGModelObject, and then they&apos;ll all share one computeRectForRepaint anyway.

&gt; &gt;  void RenderSVGRoot::calcViewport()
&gt; Does this logic deserve to be wrapped in its own method?

Which logic?  calcViewport is the wrapper.  I do wonder if the SVGRoot for the SVGImage case shouldn&apos;t be a different renderer all together...

&gt; Some tests with &lt;svg&gt; inside transformed HTML would be good to see if this all
&gt; works.

I don&apos;t think there are any of those yet.  I&apos;ve never dealt with transformed HTML, but yes, I expect much of this works.

&gt; &gt; +    bool calculateLocalTransform();
&gt;
&gt; What does the return value mean?

No clue.  That&apos;s all legacy code.  I&apos;ll remove the return value.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119143</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-28 12:34:43 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; &gt; +    bool calculateLocalTransform();
&gt; &gt;
&gt; &gt; What does the return value mean?
&gt; 
&gt; No clue.  That&apos;s all legacy code.  I&apos;ll remove the return value.

Actually, I still need to remove localTransform() from RenderObject.  I&apos;ll fix this all in a later patch.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119147</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-28 12:37:43 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/platform/mac/svg/custom/circle-move-invalidation-expected.txt
	M	LayoutTests/platform/mac/svg/custom/svg-float-border-padding-expected.txt
	M	LayoutTests/platform/mac/svg/custom/viewport-update2-expected.txt
	M	WebCore/ChangeLog
	M	WebCore/rendering/RenderPath.cpp
	M	WebCore/rendering/RenderSVGContainer.cpp
	M	WebCore/rendering/RenderSVGContainer.h
	M	WebCore/rendering/RenderSVGImage.cpp
	M	WebCore/rendering/RenderSVGImage.h
	M	WebCore/rendering/RenderSVGModelObject.cpp
	M	WebCore/rendering/RenderSVGModelObject.h
	M	WebCore/rendering/RenderSVGRoot.cpp
	M	WebCore/rendering/RenderSVGRoot.h
	M	WebCore/rendering/RenderSVGText.cpp
	M	WebCore/rendering/RenderSVGText.h
	M	WebCore/rendering/RenderSVGViewportContainer.cpp
	M	WebCore/rendering/RenderSVGViewportContainer.h
	M	WebCore/rendering/SVGRenderSupport.cpp
	M	WebCore/rendering/SVGRenderSupport.h
	M	WebCore/rendering/SVGRootInlineBox.cpp
Committed r42950
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119165</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-28 14:41:58 -0700</bug_when>
    <thetext>*** Bug 19366 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119220</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-28 17:10:42 -0700</bug_when>
    <thetext>*** Bug 24633 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29827</attachid>
            <date>2009-04-27 14:18:32 -0700</date>
            <delta_ts>2009-04-28 11:16:42 -0700</delta_ts>
            <desc>Simplify how SVG containers paint</desc>
            <filename>Simplify-how-SVG-containers-paint.patch</filename>
            <type>text/plain</type>
            <size>45318</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YTQ4OWM5OWM5ZWQ5ZjRlZDY1MjYzODAxNTg5NWIyZWIwNDk0MzJkOApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmYjI5Mzku
LmIzZjFlNWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0wNC0yNyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU2ltcGxpZnkgaG93IFNWRyBjb250YWluZXJzIHBhaW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTQzMQorCisgICAgICAgIEFs
bCB0aHJlZSBvZiB0aGVzZSBjaGFuZ2VzIGFyZSBwcm9ncmVzc2lvbnMuCisgICAgICAgIFdlJ3Jl
IG5vdyByZXNwZWN0aW5nIGJvcmRlciBhbmQgcGFkZGluZyBpbiBhYnNvbHV0ZVRyYW5zZm9ybSgp
CisgICAgICAgIHdoaWNoIGNoYW5nZXMgdGhlIGR1bXBlZCBjb29yZGluYXRlcyBmb3IgdGhlc2Ug
dGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL2N1c3RvbS9jaXJjbGUtbW92ZS1p
bnZhbGlkYXRpb24tZXhwZWN0ZWQudHh0OiAxcHggYm9yZGVyIGNhdXNlcyBwYXRoIG9mZnNldAor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvY3VzdG9tL3N2Zy1mbG9hdC1ib3JkZXItcGFkZGlu
Zy1leHBlY3RlZC50eHQ6IG5vdyByZXNwZWN0cyAyMHB4IG9mIGJvcmRlci9wYWRkaW5nCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdmlld3BvcnQtdXBkYXRlMi1leHBlY3RlZC50
eHQ6IG5vdyByZXNwZWN0cyA1cHggb2YgYm9yZGVyL3BhZGRpbmcsIFNWRyBvcmlnaW4gaXMgZWZm
ZWN0aXZlbHkgNSw1IChub3QgMCwwKQorCiAyMDA5LTA0LTI3ICBDaHJpcyBGbGVpemFjaCAgPGNm
bGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aCBEYWtpbi4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvY3VzdG9tL2NpcmNsZS1tb3Zl
LWludmFsaWRhdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3Zn
L2N1c3RvbS9jaXJjbGUtbW92ZS1pbnZhbGlkYXRpb24tZXhwZWN0ZWQudHh0CmluZGV4IDcwMTBl
NzEuLmE5YjA5ZTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvY3Vz
dG9tL2NpcmNsZS1tb3ZlLWludmFsaWRhdGlvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vY2lyY2xlLW1vdmUtaW52YWxpZGF0aW9uLWV4cGVj
dGVkLnR4dApAQCAtNCw4ICs0LDggQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MzU2CiAgIFJl
bmRlckJsb2NrIHtodG1sfSBhdCAoMCwwKSBzaXplIDgwMHgzNTYKICAgICBSZW5kZXJCb2R5IHti
b2R5fSBhdCAoOCw4KSBzaXplIDc4NHgzNDAKICAgICAgIFJlbmRlckJsb2NrIChhbm9ueW1vdXMp
IGF0ICgwLDApIHNpemUgNzg0eDMwNgotICAgICAgICBSZW5kZXJTVkdSb290IHtzdmd9IGF0ICgx
OTYuNzUsMTk2Ljc1KSBzaXplIDc1LjUweDc1LjUwCi0gICAgICAgICAgUmVuZGVyUGF0aCB7Y2ly
Y2xlfSBhdCAoMTk2Ljc1LDE5Ni43NSkgc2l6ZSA3NS41MHg3NS41MCBbZmlsbD17W3R5cGU9U09M
SURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJNMzUwLjAwLDMwMC4wMCBMMzQ5LjkwLDMwMy4x
NCBMMzQ5LjYxLDMwNi4yNyBMMzQ5LjExLDMwOS4zNyBMMzQ4LjQzLDMxMi40MyBMMzQ3LjU1LDMx
NS40NSBMMzQ2LjQ5LDMxOC40MSBMMzQ1LjI0LDMyMS4yOSBMMzQzLjgyLDMyNC4wOSBMMzQyLjIy
LDMyNi43OSBMMzQwLjQ1LDMyOS4zOSBMMzM4LjUzLDMzMS44NyBMMzM2LjQ1LDMzNC4yMyBMMzM0
LjIzLDMzNi40NSBMMzMxLjg3LDMzOC41MyBMMzI5LjM5LDM0MC40NSBMMzI2Ljc5LDM0Mi4yMiBM
MzI0LjA5LDM0My44MiBMMzIxLjI5LDM0NS4yNCBMMzE4LjQxLDM0Ni40OSBMMzE1LjQ1LDM0Ny41
NSBMMzEyLjQzLDM0OC40MyBMMzA5LjM3LDM0OS4xMSBMMzA2LjI3LDM0OS42MSBMMzAzLjE0LDM0
OS45MCBMMzAwLjAwLDM1MC4wMCBMMjk2Ljg2LDM0OS45MCBMMjkzLjczLDM0OS42MSBMMjkwLjYz
LDM0OS4xMSBMMjg3LjU3LDM0OC40MyBMMjg0LjU1LDM0Ny41NSBMMjgxLjU5LDM0Ni40OSBMMjc4
LjcxLDM0NS4yNCBMMjc1LjkxLDM0My44MiBMMjczLjIxLDM0Mi4yMiBMMjcwLjYxLDM0MC40NSBM
MjY4LjEzLDMzOC41MyBMMjY1Ljc3LDMzNi40NSBMMjYzLjU1LDMzNC4yMyBMMjYxLjQ3LDMzMS44
NyBMMjU5LjU1LDMyOS4zOSBMMjU3Ljc4LDMyNi43OSBMMjU2LjE4LDMyNC4wOSBMMjU0Ljc2LDMy
MS4yOSBMMjUzLjUxLDMxOC40MSBMMjUyLjQ1LDMxNS40NSBMMjUxLjU3LDMxMi40MyBMMjUwLjg5
LDMwOS4zNyBMMjUwLjM5LDMwNi4yNyBMMjUwLjEwLDMwMy4xNCBMMjUwLjAwLDMwMC4wMCBMMjUw
LjEwLDI5Ni44NiBMMjUwLjM5LDI5My43MyBMMjUwLjg5LDI5MC42MyBMMjUxLjU3LDI4Ny41NyBM
MjUyLjQ1LDI4NC41NSBMMjUzLjUxLDI4MS41OSBMMjU0Ljc2LDI3OC43MSBMMjU2LjE4LDI3NS45
MSBMMjU3Ljc4LDI3My4yMSBMMjU5LjU1LDI3MC42MSBMMjYxLjQ3LDI2OC4xMyBMMjYzLjU1LDI2
NS43NyBMMjY1Ljc3LDI2My41NSBMMjY4LjEzLDI2MS40NyBMMjcwLjYxLDI1OS41NSBMMjczLjIx
LDI1Ny43OCBMMjc1LjkxLDI1Ni4xOCBMMjc4LjcxLDI1NC43NiBMMjgxLjU5LDI1My41MSBMMjg0
LjU1LDI1Mi40NSBMMjg3LjU3LDI1MS41NyBMMjkwLjYzLDI1MC44OSBMMjkzLjczLDI1MC4zOSBM
Mjk2Ljg2LDI1MC4xMCBMMzAwLjAwLDI1MC4wMCBMMzAzLjE0LDI1MC4xMCBMMzA2LjI3LDI1MC4z
OSBMMzA5LjM3LDI1MC44OSBMMzEyLjQzLDI1MS41NyBMMzE1LjQ1LDI1Mi40NSBMMzE4LjQxLDI1
My41MSBMMzIxLjI5LDI1NC43NiBMMzI0LjA5LDI1Ni4xOCBMMzI2Ljc5LDI1Ny43OCBMMzI5LjM5
LDI1OS41NSBMMzMxLjg3LDI2MS40NyBMMzM0LjIzLDI2My41NSBMMzM2LjQ1LDI2NS43NyBMMzM4
LjUzLDI2OC4xMyBMMzQwLjQ1LDI3MC42MSBMMzQyLjIyLDI3My4yMSBMMzQzLjgyLDI3NS45MSBM
MzQ1LjI0LDI3OC43MSBMMzQ2LjQ5LDI4MS41OSBMMzQ3LjU1LDI4NC41NSBMMzQ4LjQzLDI4Ny41
NyBMMzQ5LjExLDI5MC42MyBMMzQ5LjYxLDI5My43MyBMMzQ5LjkwLDI5Ni44NiBaIl0KKyAgICAg
ICAgUmVuZGVyU1ZHUm9vdCB7c3ZnfSBhdCAoMTk3Ljc1LDE5Ny43NSkgc2l6ZSA3NS41MHg3NS41
MAorICAgICAgICAgIFJlbmRlclBhdGgge2NpcmNsZX0gYXQgKDE5Ny43NSwxOTcuNzUpIHNpemUg
NzUuNTB4NzUuNTAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9I0ZGMDAwMF19XSBbZGF0YT0i
TTM1MC4wMCwzMDAuMDAgTDM0OS45MCwzMDMuMTQgTDM0OS42MSwzMDYuMjcgTDM0OS4xMSwzMDku
MzcgTDM0OC40MywzMTIuNDMgTDM0Ny41NSwzMTUuNDUgTDM0Ni40OSwzMTguNDEgTDM0NS4yNCwz
MjEuMjkgTDM0My44MiwzMjQuMDkgTDM0Mi4yMiwzMjYuNzkgTDM0MC40NSwzMjkuMzkgTDMzOC41
MywzMzEuODcgTDMzNi40NSwzMzQuMjMgTDMzNC4yMywzMzYuNDUgTDMzMS44NywzMzguNTMgTDMy
OS4zOSwzNDAuNDUgTDMyNi43OSwzNDIuMjIgTDMyNC4wOSwzNDMuODIgTDMyMS4yOSwzNDUuMjQg
TDMxOC40MSwzNDYuNDkgTDMxNS40NSwzNDcuNTUgTDMxMi40MywzNDguNDMgTDMwOS4zNywzNDku
MTEgTDMwNi4yNywzNDkuNjEgTDMwMy4xNCwzNDkuOTAgTDMwMC4wMCwzNTAuMDAgTDI5Ni44Niwz
NDkuOTAgTDI5My43MywzNDkuNjEgTDI5MC42MywzNDkuMTEgTDI4Ny41NywzNDguNDMgTDI4NC41
NSwzNDcuNTUgTDI4MS41OSwzNDYuNDkgTDI3OC43MSwzNDUuMjQgTDI3NS45MSwzNDMuODIgTDI3
My4yMSwzNDIuMjIgTDI3MC42MSwzNDAuNDUgTDI2OC4xMywzMzguNTMgTDI2NS43NywzMzYuNDUg
TDI2My41NSwzMzQuMjMgTDI2MS40NywzMzEuODcgTDI1OS41NSwzMjkuMzkgTDI1Ny43OCwzMjYu
NzkgTDI1Ni4xOCwzMjQuMDkgTDI1NC43NiwzMjEuMjkgTDI1My41MSwzMTguNDEgTDI1Mi40NSwz
MTUuNDUgTDI1MS41NywzMTIuNDMgTDI1MC44OSwzMDkuMzcgTDI1MC4zOSwzMDYuMjcgTDI1MC4x
MCwzMDMuMTQgTDI1MC4wMCwzMDAuMDAgTDI1MC4xMCwyOTYuODYgTDI1MC4zOSwyOTMuNzMgTDI1
MC44OSwyOTAuNjMgTDI1MS41NywyODcuNTcgTDI1Mi40NSwyODQuNTUgTDI1My41MSwyODEuNTkg
TDI1NC43NiwyNzguNzEgTDI1Ni4xOCwyNzUuOTEgTDI1Ny43OCwyNzMuMjEgTDI1OS41NSwyNzAu
NjEgTDI2MS40NywyNjguMTMgTDI2My41NSwyNjUuNzcgTDI2NS43NywyNjMuNTUgTDI2OC4xMywy
NjEuNDcgTDI3MC42MSwyNTkuNTUgTDI3My4yMSwyNTcuNzggTDI3NS45MSwyNTYuMTggTDI3OC43
MSwyNTQuNzYgTDI4MS41OSwyNTMuNTEgTDI4NC41NSwyNTIuNDUgTDI4Ny41NywyNTEuNTcgTDI5
MC42MywyNTAuODkgTDI5My43MywyNTAuMzkgTDI5Ni44NiwyNTAuMTAgTDMwMC4wMCwyNTAuMDAg
TDMwMy4xNCwyNTAuMTAgTDMwNi4yNywyNTAuMzkgTDMwOS4zNywyNTAuODkgTDMxMi40MywyNTEu
NTcgTDMxNS40NSwyNTIuNDUgTDMxOC40MSwyNTMuNTEgTDMyMS4yOSwyNTQuNzYgTDMyNC4wOSwy
NTYuMTggTDMyNi43OSwyNTcuNzggTDMyOS4zOSwyNTkuNTUgTDMzMS44NywyNjEuNDcgTDMzNC4y
MywyNjMuNTUgTDMzNi40NSwyNjUuNzcgTDMzOC41MywyNjguMTMgTDM0MC40NSwyNzAuNjEgTDM0
Mi4yMiwyNzMuMjEgTDM0My44MiwyNzUuOTEgTDM0NS4yNCwyNzguNzEgTDM0Ni40OSwyODEuNTkg
TDM0Ny41NSwyODQuNTUgTDM0OC40MywyODcuNTcgTDM0OS4xMSwyOTAuNjMgTDM0OS42MSwyOTMu
NzMgTDM0OS45MCwyOTYuODYgWiJdCiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMzAy
LDI4OCkgc2l6ZSA0eDE4CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDMwMiwyODgpIHdpZHRoIDQ6
ICIgIgogICAgICAgICBSZW5kZXJCUiB7YnJ9IGF0ICgzMDYsMjg4KSBzaXplIDB4MTgKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvY3VzdG9tL3N2Zy1mbG9hdC1ib3Jk
ZXItcGFkZGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL2N1
c3RvbS9zdmctZmxvYXQtYm9yZGVyLXBhZGRpbmctZXhwZWN0ZWQudHh0CmluZGV4IGY0YzAyMzAu
LmMwMTlkYjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvY3VzdG9t
L3N2Zy1mbG9hdC1ib3JkZXItcGFkZGluZy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vc3ZnLWZsb2F0LWJvcmRlci1wYWRkaW5nLWV4cGVjdGVk
LnR4dApAQCAtMTAsOCArMTAsOCBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg1MTYKICAgICAg
IFJlbmRlckJsb2NrIHtwfSBhdCAoMCwzNCkgc2l6ZSA3ODR4MTgKICAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzU0eDE4CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggMzU0OiAiVGhlcmUgc2hvdWxkIGJlIGEgcmVkLCB3aGl0ZSBhbmQgYmx1ZSBwYXR0
ZXJuIGJlbG93IHRoaXMiCi0gICAgICBSZW5kZXJTVkdSb290IHtzdmd9IGF0ICgxOCw4Nikgc2l6
ZSAxMDB4MTAwCi0gICAgICAgIFJlbmRlclBhdGgge3JlY3R9IGF0ICgxOCw4Nikgc2l6ZSAxMDB4
MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDAwRkZdfV0gW2RhdGE9Ik0wLjAwLDAu
MDAgTDEwMC4wMCwwLjAwIEwxMDAuMDAsMTAwLjAwIEwwLjAwLDEwMC4wMCBaIl0KKyAgICAgIFJl
bmRlclNWR1Jvb3Qge3N2Z30gYXQgKDM4LDEwNikgc2l6ZSAxMDB4MTAwCisgICAgICAgIFJlbmRl
clBhdGgge3JlY3R9IGF0ICgzOCwxMDYpIHNpemUgMTAweDEwMCBbZmlsbD17W3R5cGU9U09MSURd
IFtjb2xvcj0jMDAwMEZGXX1dIFtkYXRhPSJNMC4wMCwwLjAwIEwxMDAuMDAsMC4wMCBMMTAwLjAw
LDEwMC4wMCBMMC4wMCwxMDAuMDAgWiJdCiAgICAgICBSZW5kZXJCbG9jayB7cH0gYXQgKDAsMjI4
KSBzaXplIDc4NHgxOAogICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAz
NTN4MTgKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzNTM6ICJUaGVyZSBzaG91
bGQgYmUgYSByZWQsIHdoaXRlIGFuZCBibHVlIHBhdHRlcm4gYWJvdmUgdGhpcyIKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvY3VzdG9tL3ZpZXdwb3J0LXVwZGF0ZTIt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdmlld3Bv
cnQtdXBkYXRlMi1leHBlY3RlZC50eHQKaW5kZXggNWUyYWQyYy4uMzUyM2VkZiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdmlld3BvcnQtdXBkYXRlMi1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9jdXN0b20vdmll
d3BvcnQtdXBkYXRlMi1leHBlY3RlZC50eHQKQEAgLTEsNiArMSw2IEBACiBsYXllciBhdCAoMCww
KSBzaXplIDgwMHg2MDAKICAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKIGxheWVy
IGF0ICgwLDApIHNpemUgMTEweDExMAotICBSZW5kZXJTVkdSb290IHtzdmd9IGF0ICgtMTAwLC0x
MDApIHNpemUgMzAweDMwMAotICAgIFJlbmRlclBhdGgge3JlY3R9IGF0ICgtMTAwLC0xMDApIHNp
emUgMzAweDMwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jRkYwMDAwXX1dIFtkYXRhPSJN
LTEwMC4wMCwtMTAwLjAwIEwyMDAuMDAsLTEwMC4wMCBMMjAwLjAwLDIwMC4wMCBMLTEwMC4wMCwy
MDAuMDAgWiJdCi0gICAgUmVuZGVyUGF0aCB7cmVjdH0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwIFtm
aWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0wLjAwLDAuMDAgTDEw
MC4wMCwwLjAwIEwxMDAuMDAsMTAwLjAwIEwwLjAwLDEwMC4wMCBaIl0KKyAgUmVuZGVyU1ZHUm9v
dCB7c3ZnfSBhdCAoLTk1LC05NSkgc2l6ZSAzMDB4MzAwCisgICAgUmVuZGVyUGF0aCB7cmVjdH0g
YXQgKC05NSwtOTUpIHNpemUgMzAweDMwMCBbZmlsbD17W3R5cGU9U09MSURdIFtjb2xvcj0jRkYw
MDAwXX1dIFtkYXRhPSJNLTEwMC4wMCwtMTAwLjAwIEwyMDAuMDAsLTEwMC4wMCBMMjAwLjAwLDIw
MC4wMCBMLTEwMC4wMCwyMDAuMDAgWiJdCisgICAgUmVuZGVyUGF0aCB7cmVjdH0gYXQgKDUsNSkg
c2l6ZSAxMDB4MTAwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9
Ik0wLjAwLDAuMDAgTDEwMC4wMCwwLjAwIEwxMDAuMDAsMTAwLjAwIEwwLjAwLDEwMC4wMCBaIl0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDMzZjA2NC4uOTJiZTZiYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MiBAQAorMjAwOS0wNC0yNyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU2ltcGxpZnkgaG93IFNWRyBjb250YWluZXJzIHBhaW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTQzMQorCisgICAgICAgIE1v
dmVkIGZpbHRlckJvdW5kaW5nQm94KCkgZnJvbSBSZW5kZXJTVkdNb2RlbE9iamVjdCB0byBTVkdS
ZW5kZXJTdXBwb3J0IHRvIHNoYXJlIHdpdGggb3RoZXIgY2xhc3Nlcy4KKyAgICAgICAgR2F2ZSBS
ZW5kZXJTVkdUZXh0IGEgbW9kZXJuIGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50IGFuZCBj
b21wdXRlUmVjdEZvclJlcGFpbnQuCisgICAgICAgIFJlbmRlclNWR1RleHQgbm93IGFwcGxpZXMg
dHJhbnNmb3JtcyBhdCBwYWludCgpIHRpbWUgaW5zdGVhZCBvZiBkdXJpbmcgY2h1bmsgZHJhdyB0
aW1lCisgICAgICAgIHRoaXMgc2hvdWxkIGJlIG11Y2ggbW9yZSBlZmZpY2llbnQuCisKKyAgICAg
ICAgRml4ZWQgdGhlIG9yZGVyIGluIHdoaWNoIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIGFw
cGxpZWQKKyAgICAgICAgdHJhbnNmb3JtcyBhbmQgY2xpcHMuICBXZSBub3cgY2xpcCB0byB0aGUg
dmlld3BvcnQgZmlyc3QgYW5kIGFwcGx5CisgICAgICAgIGFsbCB0cmFuc2Zvcm1zIGF0IG9uY2Uu
ICBBbHNvIHNpbmNlIHRoZSB2aWV3cG9ydCBsb2dpYyBpcyBub3cgb25seQorICAgICAgICBpbnNp
ZGUgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgKGluc3RlYWQgb2YgaW5zaWRlIFJlbmRlclNW
R0NvbnRhaW5lcikKKyAgICAgICAgd2UgYWx3YXlzIGtub3cgd2UgaGF2ZSBhIHZpZXdwb3J0LiAg
V2Ugbm93IHVzZSBvbmx5IHZpZXdwb3J0U2l6ZSBpbnN0ZWFkIG9mCisgICAgICAgIHZpZXdwb3J0
KCkgc2luY2UgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXJzIGNhbid0IGhhdmUgeC95IG9mZnNl
dHMuCisKKyAgICAgICAgV2Ugbm93IGNvcnJlY3RseSB0cmFuc2Zvcm0gdGhlIFBhaW50SW5mbzo6
cmVjdCAoZGFtYWdlIHJlY3QpIHdoZW4gYXBwbHlpbmcgdHJhbnNmb3Jtcy4KKyAgICAgICAgVGhp
cyBhbGxvd2VkIHVzIHRvIGFwcGx5IHRoZSB0cmFuc2Zvcm0gZHVyaW5nIHRleHQgcGFpbnQoKSBp
bnN0ZWFkIG9mIGF0IGNodW5rIHBhaW50CisgICAgICAgIHRpbWUuIFByZXZpb3VzbHkgd2UgaGFk
IHRvIGFwcGx5IHRoZSB0cmFuc2Zvcm0gZHVyaW5nIGNodW5rIHBhaW50IHRpbWUgYmVjYXVzZQor
ICAgICAgICBSZW5kZXJCbG9jayAoc3VwZXJjbGFzcyBvZiBSZW5kZXJTVkdCbG9jaykgd291bGQg
Y2hlY2sgaW50ZXJzZWN0aW9uIHdpdGggdGhlIGRhbWFnZVJlY3QKKyAgICAgICAgYmVmb3JlIHRl
bGxpbmcgYW55IG9mIHRoZSBpbmxpbmVzIHRvIGRyYXcuICBOb3cgdGhhdCB3ZSBhZGp1c3QgdGhl
IGRhbWFnZSByZWN0IGNvcnJlY3RseQorICAgICAgICB3ZSBwYXNzIHRoZSBpbnRlcnNlY3Rpb24g
Y2hlY2sgY29ycmVjdGx5ISAgKFRoaXMgcHJvYmFibHkgZml4ZWQgc29tZSA8dGV4dD4gcmVkcmF3
IGJ1Z3MKKyAgICAgICAgYnV0IHNpbmNlIEkgc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRob3NlIHRv
IGZpeCwgSSd2ZSBub3QgdHJpZWQgdG8gd3JpdGUgYWRkaXRpb25hbCB0ZXN0cworICAgICAgICB0
byBjb3ZlciB0aGVzZSBwb3RlbnRpYWwgZml4ZXMgeWV0LikKKworICAgICAgICBTVkdSb290SW5s
aW5lQm94IG5vIGxvbmdlciBuZWVkcyB0byBkZWFsIHdpdGggdHJhbnNmb3JtcyBhdCBjaHVuayBw
YWludCB0aW1lLCB5YXkhCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpwYWludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdDb250YWluZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5l
cjo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTVkdDb250YWluZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5l
cjo6YXBwbHlWaWV3cG9ydENsaXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6bGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6Y2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6OmNvbXB1dGVS
ZWN0Rm9yUmVwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6c2VsZldpbGxQYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSb290Ojp2aWV3cG9ydFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Um9vdDo6Y2FsY1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Omxv
Y2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9v
dDo6cGFyZW50T3JpZ2luVG9Cb3JkZXJCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Um9vdDo6Ym9yZGVyT3JpZ2luVG9Db250ZW50Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jvb3Q6OmxvY2FsVG9SZXBhaW50Q29udGFpbmVyVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmNvbXB1dGVSZWN0
Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1RleHQ6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6YXBwbHlWaWV3cG9ydENsaXApOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlckJvdW5k
aW5nQm94Rm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUcmFuc2Zvcm1Ub1Bh
aW50SW5mbyk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdSb290SW5saW5lQm94UGFpbnRXYWxrZXI6OmNodW5rU3RhcnRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpwYWludCk6CisKIDIwMDktMDQtMjcgIENocmlz
IEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBC
ZXRoIERha2luLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAppbmRleCA0OGYwY2FhLi5hYmZkOTk0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcApAQCAtMTQwLDcgKzE0MCw3IEBAIEZsb2F0UmVj
dCBSZW5kZXJQYXRoOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0CiAKICAg
ICAvLyBNYXJrZXJzIGFuZCBmaWx0ZXJzIGNhbiBwYWludCBvdXRzaWRlIG9mIHRoZSBzdHJva2Ug
cGF0aAogICAgIG1fY2FjaGVkTG9jYWxSZXBhaW50UmVjdC51bml0ZShtX21hcmtlckJvdW5kcyk7
Ci0gICAgbV9jYWNoZWRMb2NhbFJlcGFpbnRSZWN0LnVuaXRlKGZpbHRlckJvdW5kaW5nQm94KCkp
OworICAgIG1fY2FjaGVkTG9jYWxSZXBhaW50UmVjdC51bml0ZShmaWx0ZXJCb3VuZGluZ0JveEZv
clJlbmRlcmVyKHRoaXMpKTsKIAogICAgIHJldHVybiBtX2NhY2hlZExvY2FsUmVwYWludFJlY3Q7
CiB9CkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBSZW5kZXJQYXRoOjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgaW50LCBpbnQpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNh
dENUTShsb2NhbFRyYW5zZm9ybSgpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RN
KGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSk7CiAKICAgICBTVkdSZXNvdXJjZUZpbHRlciogZmls
dGVyID0gMDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFp
bmVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKaW5kZXgg
NmVlZTAxYy4uYjI1NTZjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIu
Y3BwCkBAIC05MSwxNyArOTEsNiBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCkK
ICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHQ29udGFpbmVy
OjphcHBseUNvbnRlbnRUcmFuc2Zvcm1zKFBhaW50SW5mbyYgcGFpbnRJbmZvKQotewotICAgIGlm
ICghbG9jYWxUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCkpCi0gICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5jb25jYXRDVE0obG9jYWxUcmFuc2Zvcm0oKSk7Ci19Ci0KLXZvaWQgUmVuZGVyU1ZHQ29u
dGFpbmVyOjphcHBseUFkZGl0aW9uYWxUcmFuc2Zvcm1zKFBhaW50SW5mbyYpCi17Ci0gICAgLy8g
bm8tb3AKLX0KLQogYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnNlbGZXaWxsUGFpbnQoKSBjb25z
dAogewogI2lmIEVOQUJMRShTVkdfRklMVEVSUykKQEAgLTEyMSwyOSArMTEwLDI5IEBAIHZvaWQg
UmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQp
CiAgICAgIC8vIFNwZWM6IGdyb3VwcyB3L28gY2hpbGRyZW4gc3RpbGwgbWF5IHJlbmRlciBmaWx0
ZXIgY29udGVudC4KICAgICBpZiAoIWZpcnN0Q2hpbGQoKSAmJiAhc2VsZldpbGxQYWludCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAg
ICBhcHBseUNvbnRlbnRUcmFuc2Zvcm1zKHBhaW50SW5mbyk7CiAKLSAgICBTVkdSZXNvdXJjZUZp
bHRlciogZmlsdGVyID0gMDsKLSAgICBQYWludEluZm8gc2F2ZWRJbmZvKHBhaW50SW5mbyk7Cisg
ICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CiAKLSAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwotICAgIGlmIChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCi0gICAgICAgIHByZXBhcmVU
b1JlbmRlclNWR0NvbnRlbnQodGhpcywgcGFpbnRJbmZvLCBib3VuZGluZ0JveCwgZmlsdGVyKTsg
CisgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworCisgICAgLy8gTGV0IHRoZSBS
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciBzdWJjbGFzcyBjbGlwIGlmIG5lY2Vzc2FyeQorICAg
IGFwcGx5Vmlld3BvcnRDbGlwKGNoaWxkUGFpbnRJbmZvKTsKIAotICAgIGFwcGx5QWRkaXRpb25h
bFRyYW5zZm9ybXMocGFpbnRJbmZvKTsKKyAgICBhcHBseVRyYW5zZm9ybVRvUGFpbnRJbmZvKGNo
aWxkUGFpbnRJbmZvLCBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkpOworCisgICAgU1ZHUmVzb3Vy
Y2VGaWx0ZXIqIGZpbHRlciA9IDA7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBpZiAoY2hpbGRQYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCisgICAgICAgIHByZXBhcmVUb1JlbmRlclNWR0NvbnRl
bnQodGhpcywgY2hpbGRQYWludEluZm8sIGJvdW5kaW5nQm94LCBmaWx0ZXIpOwogCi0gICAgLy8g
ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4gSnVzdCBwYXNzIHBhaW50IHRocm91Z2ggdG8gdGhlIGNo
aWxkcmVuCi0gICAgUGFpbnRJbmZvIGNoaWxkSW5mbyhwYWludEluZm8pOwotICAgIGNoaWxkSW5m
by5wYWludGluZ1Jvb3QgPSBwYWludGluZ1Jvb3RGb3JDaGlsZHJlbihwYWludEluZm8pOworICAg
IGNoaWxkUGFpbnRJbmZvLnBhaW50aW5nUm9vdCA9IHBhaW50aW5nUm9vdEZvckNoaWxkcmVuKGNo
aWxkUGFpbnRJbmZvKTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+
cGFpbnQoY2hpbGRJbmZvLCAwLCAwKTsKKyAgICAgICAgY2hpbGQtPnBhaW50KGNoaWxkUGFpbnRJ
bmZvLCAwLCAwKTsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVn
cm91bmQpCi0gICAgICAgIGZpbmlzaFJlbmRlclNWR0NvbnRlbnQodGhpcywgcGFpbnRJbmZvLCBi
b3VuZGluZ0JveCwgZmlsdGVyLCBzYXZlZEluZm8uY29udGV4dCk7CisgICAgICAgIGZpbmlzaFJl
bmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIGJvdW5kaW5nQm94LCBmaWx0ZXIs
IHBhaW50SW5mby5jb250ZXh0KTsKIAotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7
CisgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogCiAgICAgLy8gRklYTUU6
IFRoaXMgcmVhbGx5IHNob3VsZCBiZSBkcmF3biBmcm9tIGxvY2FsIGNvb3JkaW5hdGVzLCBidXQg
Y3VycmVudGx5IHdlIGhhY2sgaXQKICAgICAvLyB0byBhdm9pZCBvdXIgY2xpcCBraWxsaW5nIG91
ciBvdXRsaW5lIHJlY3QuICBUaHVzIHdlIHRyYW5zbGF0ZSBvdXIKQEAgLTE3NCw3ICsxNjMsNyBA
QCBGbG9hdFJlY3QgUmVuZGVyU1ZHQ29udGFpbmVyOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0CiAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gY29tcHV0ZUNvbnRhaW5l
ckJvdW5kaW5nQm94KHRoaXMsIHRydWUpOwogCiAgICAgLy8gQSBmaWx0ZXIgb24gdGhpcyBjb250
YWluZXIgY2FuIHBhaW50IG91dHNpZGUgb2YgdGhlIHVuaW9uIG9mIHRoZSBjaGlsZCByZXBhaW50
IHJlY3RzCi0gICAgcmVwYWludFJlY3QudW5pdGUoZmlsdGVyQm91bmRpbmdCb3goKSk7CisgICAg
cmVwYWludFJlY3QudW5pdGUoZmlsdGVyQm91bmRpbmdCb3hGb3JSZW5kZXJlcih0aGlzKSk7CiAK
ICAgICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdDb250YWluZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRh
aW5lci5oCmluZGV4IDljMjRiNjAuLmZmNDE5N2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0NvbnRhaW5lci5oCkBAIC01OCw4ICs1OCw5IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBhcHBseUNvbnRlbnRUcmFuc2Zvcm1zKFBhaW50SW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBh
cHBseUFkZGl0aW9uYWxUcmFuc2Zvcm1zKFBhaW50SW5mbyYpOworCisgICAgLy8gVGhpcyBhbGxv
d3MgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgdG8gaG9vayBpbiBhdCB0aGUgcmlnaHQgdGlt
ZSBpbiBwYWludCgpCisgICAgdmlydHVhbCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5m
byYpIHsgfQogCiBwcml2YXRlOgogICAgIGJvb2wgc2VsZldpbGxQYWludCgpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCmluZGV4IGE1Zjc4NTIuLjhmODM0MGMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKQEAgLTMsOCArMyw3IEBACiAgICAgQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgICAgQ29weXJpZ2h0IChDKSAyMDA3
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICAgIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDA5LCBHb29n
bGUsIEluYy4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBv
aW50ZXJFdmVudHNIaXRSdWxlcy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAi
U1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgpAQCAtMTUwLDggKzE1MCw2IEBAIHZvaWQgUmVuZGVy
U1ZHSW1hZ2U6OmxheW91dCgpCiAgICAgU1ZHSW1hZ2VFbGVtZW50KiBpbWFnZSA9IHN0YXRpY19j
YXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgbV9sb2NhbEJvdW5kcyA9IEZsb2F0
UmVjdChpbWFnZS0+eCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPnkoKS52YWx1ZShpbWFnZSksIGlt
YWdlLT53aWR0aCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPmhlaWdodCgpLnZhbHVlKGltYWdlKSk7
CiAKLSAgICBjYWxjdWxhdGVBYnNvbHV0ZUJvdW5kcygpOwotCiAgICAgcmVwYWludGVyLnJlcGFp
bnRBZnRlckxheW91dCgpOwogICAgIAogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKQEAgLTIx
OCw3ICsyMTYsMTIgQEAgRmxvYXRSZWN0IFJlbmRlclNWR0ltYWdlOjpvYmplY3RCb3VuZGluZ0Jv
eCgpIGNvbnN0CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdJbWFnZTo6cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX2xvY2FsQm91bmRzOworICAgIEZs
b2F0UmVjdCByZXBhaW50UmVjdCA9IG1fbG9jYWxCb3VuZHM7CisKKyAgICAvLyBGaWx0ZXJzIGNh
biBwYWludCBvdXRzaWRlIHRoZSBpbWFnZSBjb250ZW50CisgICAgcmVwYWludFJlY3QudW5pdGUo
ZmlsdGVyQm91bmRpbmdCb3hGb3JSZW5kZXJlcih0aGlzKSk7CisKKyAgICByZXR1cm4gcmVwYWlu
dFJlY3Q7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmltYWdlQ2hhbmdlZChXcmFwcGVkSW1h
Z2VQdHIgaW1hZ2UsIGNvbnN0IEludFJlY3QqIHJlY3QpCkBAIC0yMjksMjggKzIzMiwyNCBAQCB2
b2lkIFJlbmRlclNWR0ltYWdlOjppbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyIGltYWdlLCBj
b25zdCBJbnRSZWN0KiByZWN0KQogICAgIHJlcGFpbnRSZWN0YW5nbGUoYWJzb2x1dGVDbGlwcGVk
T3ZlcmZsb3dSZWN0KCkpOyAgICAvLyBGSVhNRTogSXNuJ3QgdGhpcyBqdXN0IHJlcGFpbnQoKT8K
IH0KIAotdm9pZCBSZW5kZXJTVkdJbWFnZTo6Y2FsY3VsYXRlQWJzb2x1dGVCb3VuZHMoKQorSW50
UmVjdCBSZW5kZXJTVkdJbWFnZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCiB7Ci0gICAgLy8gRklYTUU6IGJyb2tl
biB3aXRoIENTUyB0cmFuc2Zvcm1zCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUmVjdCA9IGFic29s
dXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsK
LQotI2lmIEVOQUJMRShTVkdfRklMVEVSUykKLSAgICAvLyBGaWx0ZXJzIGNhbiBleHBhbmQgdGhl
IGJvdW5kaW5nIGJveAotICAgIFNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0ZXJC
eUlkKGRvY3VtZW50KCksIHN0eWxlKCktPnN2Z1N0eWxlKCktPmZpbHRlcigpKTsKLSAgICBpZiAo
ZmlsdGVyKQotICAgICAgICBhYnNvbHV0ZVJlY3QudW5pdGUoZmlsdGVyLT5maWx0ZXJCQm94Rm9y
SXRlbUJCb3goYWJzb2x1dGVSZWN0KSk7Ci0jZW5kaWYKLQotICAgIGlmICghYWJzb2x1dGVSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgYWJzb2x1dGVSZWN0LmluZmxhdGUoMSk7IC8vIGluZmxhdGUg
MSBwaXhlbCBmb3IgYW50aWFsaWFzaW5nCi0KLSAgICBtX2Fic29sdXRlQm91bmRzID0gZW5jbG9z
aW5nSW50UmVjdChhYnNvbHV0ZVJlY3QpOworICAgIC8vIFJldHVybiBlYXJseSBmb3IgYW55IGNh
c2VzIHdoZXJlIHdlIGRvbid0IGFjdHVhbGx5IHBhaW50CisgICAgaWYgKHN0eWxlKCktPnZpc2li
aWxpdHkoKSAhPSBWSVNJQkxFICYmICFlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVu
dCgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgLy8gUGFzcyBvdXIgbG9jYWwg
cGFpbnQgcmVjdCB0byBjb21wdXRlUmVjdEZvclJlcGFpbnQoKSB3aGljaCB3aWxsCisgICAgLy8g
bWFwIHRvIHBhcmVudCBjb29yZHMgYW5kIHJlY3Vyc2UgdXAgdGhlIHBhcmVudCBjaGFpbi4KKyAg
ICBJbnRSZWN0IHJlcGFpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpKTsKKyAgICBjb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRh
aW5lciwgcmVwYWludFJlY3QpOworICAgIHJldHVybiByZXBhaW50UmVjdDsKIH0KIAotSW50UmVj
dCBSZW5kZXJTVkdJbWFnZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovKQordm9pZCBSZW5kZXJTVkdJbWFnZTo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCkKIHsKLSAgICAvLyBGSVhNRTog
aGFuZGxlIG5vbi1yb290IHJlcGFpbnRDb250YWluZXIKLSAgICByZXR1cm4gbV9hYnNvbHV0ZUJv
dW5kczsKKyAgICAvLyBUcmFuc2xhdGUgdG8gY29vcmRzIGluIG91ciBwYXJlbnQgcmVuZGVyZXIs
IGFuZCB0aGVuIGNhbGwgY29tcHV0ZVJlY3RGb3JSZXBhaW50IG9uIG91ciBwYXJlbnQKKyAgICBy
ZXBhaW50UmVjdCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0
KTsKKyAgICBwYXJlbnQoKS0+Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIs
IHJlcGFpbnRSZWN0LCBmaXhlZCk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFkZEZvY3Vz
UmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQsIGludCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCmluZGV4IDg4OTNjMzQuLjZjOGIxMjIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaApAQCAtNDgsNiArNDgsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7Cisg
ICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYs
IGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCB0b3BMZXZlbCA9IHRy
dWUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250
ZXh0KiwgaW50IHR4LCBpbnQgdHkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxP
YmplY3QuY3BwCmluZGV4IGQzODJmNmYuLjczZjQ0ZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKQEAgLTEwMywxNiArMTAzLDYgQEAgdm9pZCBSZW5kZXJT
VkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJv
b2wpCiAgICAgcXVhZHMuYXBwZW5kKGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKIH0K
IAotRmxvYXRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0OjpmaWx0ZXJCb3VuZGluZ0JveCgpIGNv
bnN0Ci17Ci0jaWYgRU5BQkxFKFNWR19GSUxURVJTKQotICAgIFNWR1Jlc291cmNlRmlsdGVyKiBm
aWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIHN0eWxlKCktPnN2Z1N0eWxlKCktPmZp
bHRlcigpKTsKLSAgICBpZiAoZmlsdGVyKQotICAgICAgICByZXR1cm4gZmlsdGVyLT5maWx0ZXJC
Qm94Rm9ySXRlbUJCb3gob2JqZWN0Qm91bmRpbmdCb3goKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
RmxvYXRSZWN0KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAppbmRleCA0
NDBmNzM5Li45NTYyNzkyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0
LmgKQEAgLTU4LDEwICs1OCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVR
dWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wgZml4ZWQsIFRyYW5zZm9ybVN0
YXRlJikgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICAvLyBSZXR1cm5zIHRoZSBib3VuZGluZyBi
b3ggZm9yIHRoZSBmaWx0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0IChpZiBhbnkpCi0g
ICAgRmxvYXRSZWN0IGZpbHRlckJvdW5kaW5nQm94KCkgY29uc3Q7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IDE2Yjk1MGYuLjZlYTM2ZWEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC04NCw4ICs4NCw2IEBAIHZvaWQgUmVuZGVyU1ZHUm9v
dDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKLSAgICBjYWxjVmll
d3BvcnQoKTsKLQogICAgIC8vIEFyYml0cmFyeSBhZmZpbmUgdHJhbnNmb3JtcyBhcmUgaW5jb21w
YXRpYmxlIHdpdGggTGF5b3V0U3RhdGUuCiAgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3RhdGUo
KTsKIApAQCAtOTcsNiArOTUsOCBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmxheW91dCgpCiAgICAg
U1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7
CiAgICAgc2V0V2lkdGgoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCgpICogc3ZnLT5jdXJyZW50U2Nh
bGUoKSkpOwogICAgIHNldEhlaWdodChzdGF0aWNfY2FzdDxpbnQ+KGhlaWdodCgpICogc3ZnLT5j
dXJyZW50U2NhbGUoKSkpOworCisgICAgY2FsY1ZpZXdwb3J0KCk7CiAgICAgCiAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoc2VsZk5lZWRzTGF5b3V0KCkpIC8vIGVpdGhl
ciBib3VuZHMgb3IgdHJhbnNmb3JtIGNoYW5nZWQsIGZvcmNlIGtpZHMgdG8gcmVsYXlvdXQKQEAg
LTExMiwzNSArMTEyLDE1IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKICAgICBzZXRO
ZWVkc0xheW91dChmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUm9vdDo6YXBwbHlDb250ZW50
VHJhbnNmb3JtcyhQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KQorYm9vbCBSZW5kZXJTVkdSb290OjpzZWxmV2lsbFBhaW50KCkgY29uc3QKIHsKLSAgICAvLyBU
cmFuc2xhdGUgZnJvbSBwYXJlbnQgb2Zmc2V0cyAoaHRtbCByZW5kZXJlcnMpIHRvIGEgcmVsYXRp
dmUgdHJhbnNmb3JtIChzdmcgcmVuZGVyZXJzKQotICAgIEludFBvaW50IG9yaWdpbjsKLSAgICBv
cmlnaW4ubW92ZShwYXJlbnRYLCBwYXJlbnRZKTsKLSAgICBvcmlnaW4ubW92ZSh4KCksIHkoKSk7
Ci0gICAgb3JpZ2luLm1vdmUoYm9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSk7Ci0gICAgb3JpZ2lu
Lm1vdmUocGFkZGluZ0xlZnQoKSwgcGFkZGluZ1RvcCgpKTsKLQotICAgIGlmIChvcmlnaW4ueCgp
IHx8IG9yaWdpbi55KCkpIHsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgpKSk7
Ci0gICAgICAgIHBhaW50SW5mby5yZWN0Lm1vdmUoLW9yaWdpbi54KCksIC1vcmlnaW4ueSgpKTsK
LSAgICB9Ci0KLSAgICAvLyBSZXNwZWN0IHNjcm9sbCBvZmZzZXQgY2F1c2VkIGJ5IGh0bWwgcGFy
ZW50cwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IFJlbmRlckJveDo6YWJzb2x1dGVU
cmFuc2Zvcm0oKTsKLSAgICBwYWludEluZm8ucmVjdC5tb3ZlKHN0YXRpY19jYXN0PGludD4oY3Rt
LmUoKSksIHN0YXRpY19jYXN0PGludD4oY3RtLmYoKSkpOwotCi0gICAgU1ZHU1ZHRWxlbWVudCog
c3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgcGFpbnRJbmZv
LmNvbnRleHQtPmNvbmNhdENUTShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnNjYWxlKHN2Zy0+Y3Vy
cmVudFNjYWxlKCkpKTsKLQotICAgIGlmICghdmlld3BvcnQoKS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgaWYgKHN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFKQotICAgICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdCh2aWV3cG9ydCgpKSk7IC8vIEZJ
WE1FOiBFdmVudHVhbGx5IHdlJ2xsIHdhbnQgZmxvYXQtcHJlY2lzaW9uIGNsaXBwaW5nCi0gICAg
ICAgIAotICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKFRyYW5zZm9ybWF0aW9u
TWF0cml4KCkudHJhbnNsYXRlKHZpZXdwb3J0KCkueCgpLCB2aWV3cG9ydCgpLnkoKSkpOwotICAg
IH0KLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0oVHJhbnNmb3JtYXRpb25NYXRy
aXgoKS50cmFuc2xhdGUoc3ZnLT5jdXJyZW50VHJhbnNsYXRlKCkueCgpLCBzdmctPmN1cnJlbnRU
cmFuc2xhdGUoKS55KCkpKTsKKyNpZiBFTkFCTEUoU1ZHX0ZJTFRFUlMpCisgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBTVkdSZXNv
dXJjZUZpbHRlciogZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+
ZmlsdGVyKCkpOworICAgIGlmIChmaWx0ZXIpCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlm
CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpCkBAIC0xNDgsMzkgKzEy
OCwzNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgcGFyZW50WCwgaW50IHBhcmVudFkpCiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNhbGNWaWV3cG9ydCgpOwot
Ci0gICAgLy8gQSB2YWx1ZSBvZiB6ZXJvIGRpc2FibGVzIHJlbmRlcmluZyBvZiB0aGUgZWxlbWVu
dC4gCi0gICAgaWYgKHZpZXdwb3J0KCkud2lkdGgoKSA8PSAwLiB8fCB2aWV3cG9ydCgpLmhlaWdo
dCgpIDw9IDAuKQotICAgICAgICByZXR1cm47CisgICAgSW50UG9pbnQgcGFyZW50T3JpZ2luSW5D
b250YWluZXIocGFyZW50WCwgcGFyZW50WSk7CisgICAgSW50UG9pbnQgYm9yZGVyQm94T3JpZ2lu
Q29udGFpbmVyID0gcGFyZW50T3JpZ2luSW5Db250YWluZXIgKyBJbnRTaXplKHgoKSwgeSgpKTsK
IAotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgZXhpc3QgZm9yIDxzdmc+IHJlbmRlcmVycwogICAg
IGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pKSAK
LSAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHgoKSArIHBhcmVudFgsIHko
KSArIHBhcmVudFkpOworICAgICAgICBwYWludEJveERlY29yYXRpb25zKHBhaW50SW5mbywgYm9y
ZGVyQm94T3JpZ2luQ29udGFpbmVyLngoKSwgYm9yZGVyQm94T3JpZ2luQ29udGFpbmVyLnkoKSk7
CiAKLSAgICBpZiAoIWZpcnN0Q2hpbGQoKSkgewotI2lmIEVOQUJMRShTVkdfRklMVEVSUykKLSAg
ICAgICAgLy8gU3BlYzogZ3JvdXBzIHcvbyBjaGlsZHJlbiBzdGlsbCBtYXkgcmVuZGVyIGZpbHRl
ciBjb250ZW50LgotICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHls
ZSgpLT5zdmdTdHlsZSgpOwotICAgICAgICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gZ2V0
RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+ZmlsdGVyKCkpOwotICAgICAgICBpZiAo
IWZpbHRlcikKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBBbiBl
bXB0eSB2aWV3cG9ydCBkaXNhYmxlcyByZW5kZXJpbmcuICBGSVhNRTogU2hvdWxkIHdlIHN0aWxs
IHJlbmRlciBmaWx0ZXJzPworICAgIGlmICh2aWV3cG9ydFNpemUoKS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIERvbid0IHBhaW50IGlmIHdlIGRvbid0IGhhdmUga2lkcywg
ZXhjZXB0IGlmIHdlIGhhdmUgZmlsdGVycyB3ZSBzaG91bGQgcGFpbnQgdGhvc2UuCisgICAgaWYg
KCFmaXJzdENoaWxkKCkgJiYgIXNlbGZXaWxsUGFpbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCisg
ICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIFBhaW50SW5mbyBiZWNhdXNlIGFwcGx5VHJhbnNmb3Jt
VG9QYWludEluZm8gd2lsbCBtb2RpZnkgdGhlIGRhbWFnZSByZWN0LgogICAgIFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CiAgICAgY2hpbGRQYWludElu
Zm8uY29udGV4dC0+c2F2ZSgpOwotIAotICAgIGFwcGx5Q29udGVudFRyYW5zZm9ybXMoY2hpbGRQ
YWludEluZm8sIHBhcmVudFgsIHBhcmVudFkpOwogCi0gICAgU1ZHUmVzb3VyY2VGaWx0ZXIqIGZp
bHRlciA9IDA7CisgICAgLy8gU1ZHIGRvZXMgbm90IHN1cHBvcnQgaW5kZXBlbmRlbnQgeC95IGNs
aXBwaW5nCisgICAgaWYgKHN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFKQorICAgICAg
ICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5jbGlwKG92ZXJmbG93Q2xpcFJlY3QoYm9yZGVyQm94
T3JpZ2luQ29udGFpbmVyLngoKSwgYm9yZGVyQm94T3JpZ2luQ29udGFpbmVyLnkoKSkpOwogCisg
ICAgLy8gQ29udmVydCBmcm9tIGNvbnRhaW5lciBvZmZzZXRzIChodG1sIHJlbmRlcmVycykgdG8g
YSByZWxhdGl2ZSB0cmFuc2Zvcm0gKHN2ZyByZW5kZXJlcnMpLgorICAgIC8vIFRyYW5zZm9ybSBm
cm9tIG91ciBwYWludCBjb250YWluZXIncyBjb29yZGluYXRlIHN5c3RlbSB0byBvdXIgbG9jYWwg
Y29vcmRzLgorICAgIGFwcGx5VHJhbnNmb3JtVG9QYWludEluZm8oY2hpbGRQYWludEluZm8sIGxv
Y2FsVG9SZXBhaW50Q29udGFpbmVyVHJhbnNmb3JtKHBhcmVudE9yaWdpbkluQ29udGFpbmVyKSk7
CisKKyAgICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gMDsKICAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwogICAgIGlmIChjaGls
ZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgcHJlcGFy
ZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbywgYm91bmRpbmdCb3gsIGZp
bHRlcik7CiAKLSAgICBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVt
ZW50Kj4obm9kZSgpKTsKLSAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0oc3Zn
LT52aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCksIGhlaWdodCgpKSk7CiAgICAgUmVuZGVy
Qm94OjpwYWludChjaGlsZFBhaW50SW5mbywgMCwgMCk7CiAKICAgICBpZiAoY2hpbGRQYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCkBAIC0xODgsMTMgKzE2NiwxMyBAQCB2
b2lkIFJlbmRlclNWR1Jvb3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50
WCwgaW50IHBhcmVudFkpCiAKICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7
CiAKLSAgICBpZiAoKGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8
IGNoaWxkUGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUo
KS0+b3V0bGluZVdpZHRoKCkgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCi0g
ICAgICAgIHBhaW50T3V0bGluZShjaGlsZFBhaW50SW5mby5jb250ZXh0LCBwYXJlbnRYLCBwYXJl
bnRZLCB3aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUoKSk7CisgICAgaWYgKChwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VT
ZWxmT3V0bGluZSkgJiYgc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYgc3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEUpCisgICAgICAgIHBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4
dCwgYm9yZGVyQm94T3JpZ2luQ29udGFpbmVyLngoKSwgYm9yZGVyQm94T3JpZ2luQ29udGFpbmVy
LnkoKSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0eWxlKCkpOwogfQogCi1GbG9hdFJlY3QgUmVuZGVy
U1ZHUm9vdDo6dmlld3BvcnQoKSBjb25zdAorY29uc3QgRmxvYXRTaXplJiBSZW5kZXJTVkdSb290
Ojp2aWV3cG9ydFNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtX3ZpZXdwb3J0OworICAgIHJl
dHVybiBtX3ZpZXdwb3J0U2l6ZTsKIH0KIAogdm9pZCBSZW5kZXJTVkdSb290OjpjYWxjVmlld3Bv
cnQoKQpAQCAtMjA0LDM1ICsxODIsNTkgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpjYWxjVmlld3Bv
cnQoKQogICAgIGlmICghc2VsZk5lZWRzTGF5b3V0KCkgJiYgIXN2Zy0+aGFzUmVsYXRpdmVWYWx1
ZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU1ZHTGVuZ3RoIHdpZHRoID0gc3ZnLT53aWR0
aCgpOwotICAgIFNWR0xlbmd0aCBoZWlnaHQgPSBzdmctPmhlaWdodCgpOwogICAgIGlmICghc3Zn
LT5oYXNTZXRDb250YWluZXJTaXplKCkpIHsKLSAgICAgICAgbV92aWV3cG9ydCA9IEZsb2F0UmVj
dCgwLCAwLCB3aWR0aC52YWx1ZShzdmcpLCBoZWlnaHQudmFsdWUoc3ZnKSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgLy8gSW4gdGhlIG5vcm1hbCBjYXNlIG9mIDxzdmc+IGJlaW5nIHN0YW5k
LWFsb25lIG9yIGluIGEgQ1NTQm94TW9kZWwgb2JqZWN0IHdlIHVzZQorICAgICAgICAvLyBSZW5k
ZXJCb3g6OndpZHRoKCkvaGVpZ2h0KCkgKHdoaWNoIHB1bGxzIGRhdGEgZnJvbSBSZW5kZXJTdHls
ZSkKKyAgICAgICAgbV92aWV3cG9ydFNpemUgPSBGbG9hdFNpemUod2lkdGgoKSwgaGVpZ2h0KCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEluIHRoZSBTVkdJbWFnZSBjYXNlIGdyYWIgdGhl
IFNWR0xlbmd0aCB2YWx1ZXMgb2ZmIG9mIFNWR1NWR0VsZW1lbnQgYW5kIHVzZQorICAgICAgICAv
LyB0aGUgc3BlY2lhbCByZWxhdGl2ZVdpZHRoVmFsdWUgYWNjZXNzb3JzIHdoaWNoIHJlc3BlY3Qg
dGhlIHNwZWNpZmllZCBjb250YWluZXJTaXplCisgICAgICAgIFNWR0xlbmd0aCB3aWR0aCA9IHN2
Zy0+d2lkdGgoKTsKKyAgICAgICAgU1ZHTGVuZ3RoIGhlaWdodCA9IHN2Zy0+aGVpZ2h0KCk7Cisg
ICAgICAgIGZsb2F0IHZpZXdwb3J0V2lkdGggPSAod2lkdGgudW5pdFR5cGUoKSA9PSBMZW5ndGhU
eXBlUGVyY2VudGFnZSkgPyBzdmctPnJlbGF0aXZlV2lkdGhWYWx1ZSgpIDogd2lkdGgudmFsdWUo
c3ZnKTsKKyAgICAgICAgZmxvYXQgdmlld3BvcnRIZWlnaHQgPSAoaGVpZ2h0LnVuaXRUeXBlKCkg
PT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2UpID8gc3ZnLT5yZWxhdGl2ZUhlaWdodFZhbHVlKCkgOiBo
ZWlnaHQudmFsdWUoc3ZnKTsKKyAgICAgICAgbV92aWV3cG9ydFNpemUgPSBGbG9hdFNpemUodmll
d3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpOwogICAgIH0KLSAgICBtX3ZpZXdwb3J0ID0gRmxv
YXRSZWN0KDAsIDAsICh3aWR0aC51bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlKSA/
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmctPnJlbGF0aXZlV2lkdGhWYWx1
ZSgpIDogd2lkdGgudmFsdWUoc3ZnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChoZWlnaHQudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZSkgPwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3ZnLT5yZWxhdGl2ZUhlaWdodFZhbHVlKCkgOiBoZWln
aHQudmFsdWUoc3ZnKSk7CiB9CiAKLS8vIENvbW1vbmx5LCB3aGVuIGNhbGxpbmcgYSBSZW5kZXJC
b3g6OiBtZXRob2QsIFJlbmRlclNWR1Jvb3Qgd2FudHMgdG8gaW5jbHVkZQotLy8gYWxsIG9mIHRo
ZSBjb29yZGluYXRlIHNwYWNlIHRyYW5zZm9ybSAqZXhjZXB0KiBmb3IgdGhlIENTUyBwYXJlbnQg
b2Zmc2V0LgotVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb1BhcmVu
dFRyYW5zZm9ybVdpdGhvdXRDU1NQYXJlbnRPZmZzZXQoKSBjb25zdAorLy8gUmVuZGVyQm94IG1l
dGhvZHMgd2lsbCBleHBlY3QgY29vcmRpbmF0ZXMgdy9vIGFueSB0cmFuc2Zvcm1zIGluIGNvb3Jk
aW5hdGVzCisvLyByZWxhdGl2ZSB0byBvdXIgYm9yZGVyQm94IG9yaWdpbi4gIFRoaXMgbWV0aG9k
IGdpdmVzIHVzIGV4YWN0bHkgdGhhdC4KK1RyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlclNWR1Jv
b3Q6OmxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGN0bTsKKyAgICBJbnRTaXplIGJvcmRlckFuZFBhZGRpbmcgPSBib3JkZXJPcmln
aW5Ub0NvbnRlbnRCb3goKTsKKyAgICBjdG0udHJhbnNsYXRlKGJvcmRlckFuZFBhZGRpbmcud2lk
dGgoKSwgYm9yZGVyQW5kUGFkZGluZy5oZWlnaHQoKSk7CiAgICAgU1ZHU1ZHRWxlbWVudCogc3Zn
ID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgY3RtLnNjYWxlKHN2
Zy0+Y3VycmVudFNjYWxlKCkpOwogICAgIGN0bS50cmFuc2xhdGUoc3ZnLT5jdXJyZW50VHJhbnNs
YXRlKCkueCgpLCBzdmctPmN1cnJlbnRUcmFuc2xhdGUoKS55KCkpOwotICAgIGN0bS50cmFuc2xh
dGUodmlld3BvcnQoKS54KCksIHZpZXdwb3J0KCkueSgpKTsKICAgICByZXR1cm4gc3ZnLT52aWV3
Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCksIGhlaWdodCgpKSAqIGN0bTsKIH0KIAorSW50U2l6
ZSBSZW5kZXJTVkdSb290OjpwYXJlbnRPcmlnaW5Ub0JvcmRlckJveCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEludFNpemUoeCgpLCB5KCkpOworfQorCitJbnRTaXplIFJlbmRlclNWR1Jvb3Q6OmJv
cmRlck9yaWdpblRvQ29udGVudEJveCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUoYm9y
ZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwor
fQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdSb290Ojpsb2NhbFRvUmVwYWludENv
bnRhaW5lclRyYW5zZm9ybShjb25zdCBJbnRQb2ludCYgcGFyZW50T3JpZ2luSW5Db250YWluZXIp
IGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VG9Db250YWluZXI7Cisg
ICAgcGFyZW50VG9Db250YWluZXIudHJhbnNsYXRlKHBhcmVudE9yaWdpbkluQ29udGFpbmVyLngo
KSwgcGFyZW50T3JpZ2luSW5Db250YWluZXIueSgpKTsKKyAgICByZXR1cm4gbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybSgpICogcGFyZW50VG9Db250YWluZXI7Cit9CisKIFRyYW5zZm9ybWF0aW9uTWF0
cml4IFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAogewotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG9mZnNldFRyYW5zbGF0aW9uOwotICAgIG9mZnNldFRyYW5z
bGF0aW9uLnRyYW5zbGF0ZSh4KCksIHkoKSk7Ci0gICAgcmV0dXJuIGxvY2FsVG9QYXJlbnRUcmFu
c2Zvcm1XaXRob3V0Q1NTUGFyZW50T2Zmc2V0KCkgKiBvZmZzZXRUcmFuc2xhdGlvbjsKKyAgICBJ
bnRTaXplIHBhcmVudFRvQm9yZGVyQm94T2Zmc2V0ID0gcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3go
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGJvcmRlckJveE9yaWdpblRvUGFyZW50T3Jp
Z2luOworICAgIGJvcmRlckJveE9yaWdpblRvUGFyZW50T3JpZ2luLnRyYW5zbGF0ZShwYXJlbnRU
b0JvcmRlckJveE9mZnNldC53aWR0aCgpLCBwYXJlbnRUb0JvcmRlckJveE9mZnNldC5oZWlnaHQo
KSk7CisKKyAgICByZXR1cm4gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpICogYm9yZGVyQm94
T3JpZ2luVG9QYXJlbnRPcmlnaW47CiB9CiAKIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQg
YmUgcmVtb3ZlZCBhcyBzb29uIGFzIGNhbGxlcnMgdG8gUmVuZGVyQm94OjphYnNvbHV0ZVRyYW5z
Zm9ybSgpIGNhbiBiZSByZW1vdmVkLgpAQCAtMjYxLDcgKzI2Myw3IEBAIFRyYW5zZm9ybWF0aW9u
TWF0cml4IFJlbmRlclNWR1Jvb3Q6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKIHZvaWQgUmVuZGVy
U1ZHUm9vdDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBJbnRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCkKIHsKICAgICAv
LyBBcHBseSBvdXIgbG9jYWwgdHJhbnNmb3JtcyAoZXhjZXB0IGZvciB4L3kgdHJhbnNsYXRpb24p
IGFuZCBjYWxsIFJlbmRlckJveCdzIG1ldGhvZCB0byBoYW5kbGUgYWxsIHRoZSBub3JtYWwgQ1NT
IEJveCBtb2RlbCBiaXRzCi0gICAgcmVwYWludFJlY3QgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
V2l0aG91dENTU1BhcmVudE9mZnNldCgpLm1hcFJlY3QocmVwYWludFJlY3QpOworICAgIHJlcGFp
bnRSZWN0ID0gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpLm1hcFJlY3QocmVwYWludFJlY3Qp
OwogICAgIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIs
IHJlcGFpbnRSZWN0LCBmaXhlZCk7CiB9CiAKQEAgLTI3Miw3ICsyNzQsNyBAQCBib29sIFJlbmRl
clNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZQogICAgIGludCBzeCA9IChfdHggLSBzdGF0aWNfY2FzdDxpbnQ+KGN0bS5l
KCkpKTsgLy8gc2Nyb2xsIG9mZnNldAogICAgIGludCBzeSA9IChfdHkgLSBzdGF0aWNfY2FzdDxp
bnQ+KGN0bS5mKCkpKTsgLy8gc2Nyb2xsIG9mZnNldAogIAotICAgIGlmICghdmlld3BvcnQoKS5p
c0VtcHR5KCkKKyAgICBpZiAoIXZpZXdwb3J0U2l6ZSgpLmlzRW1wdHkoKQogICAgICAgICAmJiBz
dHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPSElEREVOCiAgICAgICAgICYmIHN0eWxlKCktPm92ZXJm
bG93WSgpID09IE9ISURERU4pIHsKICAgICAgICAgaW50IHR4ID0geCgpIC0gX3R4ICsgc3g7CkBA
IC0yODEsNyArMjgzLDYgQEAgYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICAgICAgLy8gQ2hl
Y2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCiAgICAgICAgIEludFJlY3Qgb3Zl
cmZsb3dCb3ggPSBvdmVyZmxvd1JlY3QoZmFsc2UpOwogICAgICAgICBvdmVyZmxvd0JveC5tb3Zl
KHR4LCB0eSk7Ci0gICAgICAgIGN0bS50cmFuc2xhdGUodmlld3BvcnQoKS54KCksIHZpZXdwb3J0
KCkueSgpKTsKICAgICAgICAgZG91YmxlIGxvY2FsWCwgbG9jYWxZOwogICAgICAgICBjdG0uaW52
ZXJzZSgpLm1hcChfeCAtIF90eCwgX3kgLSBfdHksIGxvY2FsWCwgbG9jYWxZKTsKICAgICAgICAg
aWYgKCFvdmVyZmxvd0JveC5jb250YWlucygoaW50KWxvY2FsWCwgKGludClsb2NhbFkpKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCmluZGV4IDY0OWM4NzkuLmYyZWRhNGUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSb290LmgKQEAgLTYzLDIwICs2MywyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdDsKIAotICAg
IEZsb2F0UmVjdCB2aWV3cG9ydCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1
dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwg
SW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpOwogCiBwcml2YXRlOgotICAgIHZvaWQg
Y2FsY1ZpZXdwb3J0KCk7IAotICAgIHZvaWQgYXBwbHlDb250ZW50VHJhbnNmb3JtcyhQYWludElu
Zm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworICAgIHZvaWQgY2FsY1ZpZXdwb3J0KCk7
CisgICAgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUoKSBjb25zdDsKKworICAgIGJvb2wg
c2VsZldpbGxQYWludCgpIGNvbnN0OwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxU
b1BhcmVudFRyYW5zZm9ybVdpdGhvdXRDU1NQYXJlbnRPZmZzZXQoKSBjb25zdDsKKyAgICBJbnRT
aXplIHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCkgY29uc3Q7CisgICAgSW50U2l6ZSBib3JkZXJP
cmlnaW5Ub0NvbnRlbnRCb3goKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2Nh
bFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybShjb25zdCBJbnRQb2ludCYgcGFyZW50T3JpZ2lu
SW5Db250YWluZXIpIGNvbnN0OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVG9Cb3Jk
ZXJCb3hUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2No
aWxkcmVuOwotICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0OworICAgIEZsb2F0U2l6ZSBtX3ZpZXdw
b3J0U2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVGV4dC5jcHAKaW5kZXggYzkxZDczYy4uOWJlMmU3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVGV4dC5jcHAKQEAgLTMzLDggKzMzLDEwIEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1
bGVzLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290
LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBv
cnQuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2luY2x1ZGUgIlNWR1Jvb3RJ
bmxpbmVCb3guaCIKICNpbmNsdWRlICJTVkdUZXh0RWxlbWVudC5oIgpAQCAtNDksMjIgKzUxLDI0
IEBAIFJlbmRlclNWR1RleHQ6OlJlbmRlclNWR1RleHQoU1ZHVGV4dEVsZW1lbnQqIG5vZGUpCiB7
CiB9CiAKLUludFJlY3QgUmVuZGVyU1ZHVGV4dDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovKQorSW50UmVjdCBS
ZW5kZXJTVkdUZXh0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lcikKIHsKLSAgICAvLyBGSVhNRTogaGFuZGxlIG5vbi1y
b290IHJlcGFpbnRDb250YWluZXIKLSAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSBhYnNvbHV0
ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0K
LSNpZiBFTkFCTEUoU1ZHX0ZJTFRFUlMpCi0gICAgLy8gRmlsdGVycyBjYW4gZXhwYW5kIHRoZSBi
b3VuZGluZyBib3gKLSAgICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gZ2V0RmlsdGVyQnlJ
ZChkb2N1bWVudCgpLCBzdHlsZSgpLT5zdmdTdHlsZSgpLT5maWx0ZXIoKSk7Ci0gICAgaWYgKGZp
bHRlcikKLSAgICAgICAgcmVwYWludFJlY3QudW5pdGUoZmlsdGVyLT5maWx0ZXJCQm94Rm9ySXRl
bUJCb3gocmVwYWludFJlY3QpKTsKLSNlbmRpZgotCi0gICAgaWYgKCFyZXBhaW50UmVjdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJlcGFpbnRSZWN0LmluZmxhdGUoMSk7IC8vIGluZmxhdGUgMSBwaXhl
bCBmb3IgYW50aWFsaWFzaW5nCisgICAgLy8gUmV0dXJuIGVhcmx5IGZvciBhbnkgY2FzZXMgd2hl
cmUgd2UgZG9uJ3QgYWN0dWFsbHkgcGFpbnQKKyAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgp
ICE9IFZJU0lCTEUgJiYgIWVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpCisg
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICAvLyBQYXNzIG91ciBsb2NhbCBwYWludCBy
ZWN0IHRvIGNvbXB1dGVSZWN0Rm9yUmVwYWludCgpIHdoaWNoIHdpbGwKKyAgICAvLyBtYXAgdG8g
cGFyZW50IGNvb3JkcyBhbmQgcmVjdXJzZSB1cCB0aGUgcGFyZW50IGNoYWluLgorICAgIEludFJl
Y3QgcmVwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkpOworICAgIGNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCBy
ZXBhaW50UmVjdCk7CisgICAgcmV0dXJuIHJlcGFpbnRSZWN0OworfQogCi0gICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QocmVwYWludFJlY3QpOwordm9pZCBSZW5kZXJTVkdUZXh0Ojpjb21wdXRl
UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIElu
dFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKQoreworICAgIC8vIFRyYW5zbGF0ZSB0byBj
b29yZHMgaW4gb3VyIHBhcmVudCByZW5kZXJlciwgYW5kIHRoZW4gY2FsbCBjb21wdXRlUmVjdEZv
clJlcGFpbnQgb24gb3VyIHBhcmVudAorICAgIHJlcGFpbnRSZWN0ID0gbG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpLm1hcFJlY3QocmVwYWludFJlY3QpOworICAgIHBhcmVudCgpLT5jb21wdXRlUmVj
dEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcmVwYWludFJlY3QsIGZpeGVkKTsKIH0KIAog
Ym9vbCBSZW5kZXJTVkdUZXh0OjpjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpCkBAIC0xNzgsOSAr
MTgyLDExIEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRR
dWFkPiYgcXVhZHMsIGJvb2wpCiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGludCwgaW50KQogeyAgIAotICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
IHBpKHBhaW50SW5mbyk7Ci0gICAgcGkucmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJz
ZSgpLm1hcFJlY3QocGkucmVjdCk7CisgICAgUGFpbnRJbmZvIHBpKHBhaW50SW5mbyk7CisgICAg
cGkuY29udGV4dC0+c2F2ZSgpOworICAgIGFwcGx5VHJhbnNmb3JtVG9QYWludEluZm8ocGksIGxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSk7CiAgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBpLCAwLCAw
KTsKKyAgICBwaS5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdU
ZXh0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CkBAIC0yMTksNiArMjI1LDkgQEAgRmxvYXRS
ZWN0IFJlbmRlclNWR1RleHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QK
IAogICAgICAgICByZXBhaW50UmVjdC5pbmZsYXRlKHN0cm9rZVdpZHRoKTsKICAgICB9CisKKyAg
ICByZXBhaW50UmVjdC51bml0ZShmaWx0ZXJCb3VuZGluZ0JveEZvclJlbmRlcmVyKHRoaXMpKTsK
KwogICAgIHJldHVybiByZXBhaW50UmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVGV4dC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5o
CmluZGV4IDg0MzRiNTIuLmVhYjk4NjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1RleHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmgKQEAg
LTM4LDI3ICszOCwzMiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVu
dCogbm9kZSk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7
IHJldHVybiAiUmVuZGVyU1ZHVGV4dCI7IH0KLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBpc1NW
R1RleHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgCi0gICAgYm9vbCBjYWxjdWxhdGVM
b2NhbFRyYW5zZm9ybSgpOwotICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9Ci0gICAgCisKKyAg
ICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHks
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKLSAgICAKKwogICAgIHZpcnR1YWwgYm9v
bCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0
b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOwogICAg
IHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCB0b3BM
ZXZlbCA9IHRydWUpOwogCiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKIAogICAgIHZp
cnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgdmlydHVhbCBG
bG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKLSAgICAKKwog
cHJpdmF0ZToKKyAgICBib29sIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7CisKKyAgICAvLyBG
SVhNRTogVGhpcyBjYW4gYmUgcmVtb3ZlZCB3aGVuIGxvY2FsVHJhbnNmb3JtKCkgaXMgcmVtb3Zl
ZCBmcm9tIFJlbmRlck9iamVjdAorICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9j
YWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CisKICAgICB2
aXJ0dWFsIFJvb3RJbmxpbmVCb3gqIGNyZWF0ZVJvb3RCb3goKTsKIAogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1fbG9jYWxUcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAKaW5kZXggYzNjMjVmZi4uNTM3ODZhZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcApAQCAt
NzYsMjIgKzc2LDEyIEBAIHZvaWQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhCiAgICAgUmVuZGVyU1ZHQ29u
dGFpbmVyOjpwYWludChwYWludEluZm8sIHBhcmVudFgsIHBhcmVudFkpOwogfQogCi12b2lkIFJl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjphcHBseUNvbnRlbnRUcmFuc2Zvcm1zKFBhaW50SW5m
byYgcGFpbnRJbmZvKQordm9pZCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6YXBwbHlWaWV3
cG9ydENsaXAoUGFpbnRJbmZvJiBwYWludEluZm8pCiB7Ci0gICAgaWYgKCF2aWV3cG9ydCgpLmlz
RW1wdHkoKSkgewotICAgICAgICBpZiAoc3R5bGUoKS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUp
Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KHZp
ZXdwb3J0KCkpKTsgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2UnbGwgd2FudCBmbG9hdC1wcmVjaXNp
b24gY2xpcHBpbmcKLSAgICAgICAgCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25jYXRD
VE0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKS50cmFuc2xhdGUodmlld3BvcnQoKS54KCksIHZpZXdw
b3J0KCkueSgpKSk7Ci0gICAgfQorICAgIGlmIChzdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPVklT
SUJMRSkKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdCh2
aWV3cG9ydCgpKSk7IC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlJ2xsIHdhbnQgZmxvYXQtcHJlY2lz
aW9uIGNsaXBwaW5nCiAKLSAgICBSZW5kZXJTVkdDb250YWluZXI6OmFwcGx5Q29udGVudFRyYW5z
Zm9ybXMocGFpbnRJbmZvKTsKLX0KLQotdm9pZCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6
YXBwbHlBZGRpdGlvbmFsVHJhbnNmb3JtcyhQYWludEluZm8mIHBhaW50SW5mbykKLXsKLSAgICBw
YWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKHZpZXdwb3J0VHJhbnNmb3JtKCkpOwotICAgIFJl
bmRlclNWR0NvbnRhaW5lcjo6YXBwbHlBZGRpdGlvbmFsVHJhbnNmb3JtcyhwYWludEluZm8pOwor
ICAgIFJlbmRlclNWR0NvbnRhaW5lcjo6YXBwbHlWaWV3cG9ydENsaXAocGFpbnRJbmZvKTsKIH0K
IAogRmxvYXRSZWN0IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjp2aWV3cG9ydCgpIGNvbnN0
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
ci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAppbmRl
eCBmODgwZTVmLi43ZDExMjc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lci5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmgKQEAgLTU2LDggKzU2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICB2b2lkIGNhbGNWaWV3cG9ydCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5Q29udGVudFRy
YW5zZm9ybXMoUGFpbnRJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5QWRkaXRpb25hbFRy
YW5zZm9ybXMoUGFpbnRJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlw
KFBhaW50SW5mbyYpOwogICAgIAogICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0OwogfTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggN2NkNGRkNy4uNTE0M2E2MSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKQEAgLTE4OSw2ICsxODksMjcgQEAg
RmxvYXRSZWN0IGNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3Qq
IGNvbnRhaW5lciwgYm9vbCBpbmNsdWQKICAgICByZXR1cm4gYm91bmRpbmdCb3g7CiB9CiAKK0Zs
b2F0UmVjdCBmaWx0ZXJCb3VuZGluZ0JveEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0KQoreworI2lmIEVOQUJMRShTVkdfRklMVEVSUykKKyAgICBTVkdSZXNvdXJjZUZpbHRl
ciogZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChvYmplY3QtPmRvY3VtZW50KCksIG9iamVjdC0+c3R5
bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsdGVyKCkpOworICAgIGlmIChmaWx0ZXIpCisgICAgICAgIHJl
dHVybiBmaWx0ZXItPmZpbHRlckJCb3hGb3JJdGVtQkJveChvYmplY3QtPm9iamVjdEJvdW5kaW5n
Qm94KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKKyNlbmRpZgorICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKK30KKwordm9pZCBhcHBseVRyYW5zZm9ybVRvUGFpbnRJbmZvKFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBsb2NhbFRvQW5jZXN0b3JUcmFuc2Zvcm0pCit7CisgICAgaWYgKGxvY2FsVG9BbmNlc3Rv
clRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBhaW50SW5m
by5jb250ZXh0LT5jb25jYXRDVE0obG9jYWxUb0FuY2VzdG9yVHJhbnNmb3JtKTsKKyAgICBwYWlu
dEluZm8ucmVjdCA9IGxvY2FsVG9BbmNlc3RvclRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChw
YWludEluZm8ucmVjdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBw
b3J0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmgKaW5kZXggMmM4NzIy
My4uN2I0NWRmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9y
dC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaApAQCAtMjYsNiAr
MjYsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBNb3N0IG9mIHRoaXMg
Y29kZSBzaG91bGQgbW92ZSB0byBSZW5kZXJTVkdNb2RlbE9iamVjdCBvbmNlCisvLyBhbGwgU1ZH
IHJlbmRlcmVycyBpbmhlcml0IGZyb20gUmVuZGVyU1ZHTW9kZWxPYmplY3QKKwogY2xhc3MgU1ZH
UmVzb3VyY2VGaWx0ZXI7CiB2b2lkIHByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyT2Jq
ZWN0KiwgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5n
Qm94LCBTVkdSZXNvdXJjZUZpbHRlciomLCBTVkdSZXNvdXJjZUZpbHRlciogcm9vdEZpbHRlciA9
IDApOwogdm9pZCBmaW5pc2hSZW5kZXJTVkdDb250ZW50KFJlbmRlck9iamVjdCosIFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgU1ZHUmVzb3Vy
Y2VGaWx0ZXIqJiwgR3JhcGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQpOwpAQCAtNDAsNiArNDMs
MTIgQEAgdm9pZCBjbGFtcEltYWdlQnVmZmVyU2l6ZVRvVmlld3BvcnQoUmVuZGVyT2JqZWN0Kiwg
SW50U2l6ZSYpOwogLy8gYW5kIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzIGluIFJlbmRl
clNWR1Jvb3QgYW5kIFJlbmRlclNWR0NvbnRhaW5lcgogRmxvYXRSZWN0IGNvbXB1dGVDb250YWlu
ZXJCb3VuZGluZ0JveChjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwgYm9vbCBpbmNsdWRl
QWxsUGFpbnRlZENvbnRlbnQpOwogCisvLyByZXR1cm5zIHRoZSBmaWx0ZXIgYm91bmRpbmcgYm94
IChvciB0aGUgZW1wdHkgcmVjdCBpZiBubyBmaWx0ZXIpIGluIGxvY2FsIGNvb3JkaW5hdGVzCitG
bG9hdFJlY3QgZmlsdGVyQm91bmRpbmdCb3hGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3Qq
KTsKKworLy8gVXNlZCBmb3IgdHJhbnNmb3JtaW5nIHRoZSBHcmFwaGljc0NvbnRleHQgYW5kIGRh
bWFnZSByZWN0IGJlZm9yZSBwYXNzaW5nIFBhaW50SW5mbyB0byBjaGlsZCByZW5kZXJlcnMuCit2
b2lkIGFwcGx5VHJhbnNmb3JtVG9QYWludEluZm8oUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxvY2FsVG9DaGlsZFRyYW5zZm9y
bSk7CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9TVkdSb290
SW5saW5lQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCmlu
ZGV4IDg4Yzc1NDIuLjc2NTUxNGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jv
b3RJbmxpbmVCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3gu
Y3BwCkBAIC00MDMsMTQgKzQwMyw3IEBAIHN0cnVjdCBTVkdSb290SW5saW5lQm94UGFpbnRXYWxr
ZXIgewogICAgICAgICBtX3BhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKICAgICAgICAgaWYg
KCFmbG93Qm94LT5pc1Jvb3RJbmxpbmVCb3goKSkKLSAgICAgICAgICAgIG1fcGFpbnRJbmZvLmNv
bnRleHQtPmNvbmNhdENUTShtX3Jvb3RCb3gtPnJlbmRlcmVyKCktPmxvY2FsVHJhbnNmb3JtKCkp
OwotCi0gICAgICAgIG1fcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShvYmplY3QtPmxvY2Fs
VHJhbnNmb3JtKCkpOwotCi0gICAgICAgIGlmICghZmxvd0JveC0+aXNSb290SW5saW5lQm94KCkp
IHsKICAgICAgICAgICAgIHByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQob2JqZWN0LCBtX3BhaW50
SW5mbywgbV9ib3VuZGluZ0JveCwgbV9maWx0ZXIsIG1fcm9vdEZpbHRlcik7Ci0gICAgICAgICAg
ICBtX3BhaW50SW5mby5yZWN0ID0gb2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpLmludmVyc2UoKS5t
YXBSZWN0KG1fcGFpbnRJbmZvLnJlY3QpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBj
aHVua0VuZENhbGxiYWNrKElubGluZUJveCogYm94KQpAQCAtNTg0LDkgKzU3Nyw3IEBAIHZvaWQg
U1ZHUm9vdElubGluZUJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHR4LCBpbnQgdHkpCiAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KHR4ICsgeCgpLCB0
eSArIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0ZXh0IHJl
bmRlcmluZwotICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0ocmVuZGVyZXIoKS0+bG9j
YWxUcmFuc2Zvcm0oKSk7CiAgICAgcHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChyZW5kZXJlcigp
LCBwYWludEluZm8sIGJvdW5kaW5nQm94LCBmaWx0ZXIpOwotICAgIHBhaW50SW5mby5jb250ZXh0
LT5jb25jYXRDVE0ocmVuZGVyZXIoKS0+bG9jYWxUcmFuc2Zvcm0oKS5pbnZlcnNlKCkpOwogIAog
ICAgIC8vIFJlbmRlciB0ZXh0LCBjaHVuay1ieS1jaHVuawogICAgIFNWR1Jvb3RJbmxpbmVCb3hQ
YWludFdhbGtlciB3YWxrZXJDYWxsYmFjayh0aGlzLCBmaWx0ZXIsIHBhaW50SW5mbywgdHgsIHR5
KTsK
</data>
<flag name="review"
          id="14935"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>