<?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>32446</bug_id>
          
          <creation_ts>2009-12-11 14:00:48 -0800</creation_ts>
          <short_desc>Content in &lt;iframe&gt; appearing in upper-left corner of WebView on http://webkit.org/blog/386/3d-transforms/</short_desc>
          <delta_ts>2010-05-04 22:41:47 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://webkit.org/blog/386/3d-transforms/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dpranke</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>170912</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-12-11 14:00:48 -0800</bug_when>
    <thetext>To reproduce:

1. Go to http://webkit.org/blog/386/3d-transforms/

The poster circle screenshot appears in the upper-left corner of the WebView, instead of beneath the 4th paragraph where its &lt;iframe&gt; is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170918</commentid>
    <comment_count>1</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-12-11 14:09:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/7465608&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219550</commentid>
    <comment_count>2</comment_count>
      <attachid>54815</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-04-30 11:46:23 -0700</bug_when>
    <thetext>Created attachment 54815
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219555</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-30 11:51:12 -0700</bug_when>
    <thetext>Attachment 54815 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKit/win/ChangeLog:5:  Line contains tab character.  [whitespace/tab] [5]
WebKit/win/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
WebKit/win/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
WebKit/win/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:5:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:14:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:15:  Line contains tab character.  [whitespace/tab] [5]
WebKit/win/WebView.cpp:6096:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/win/WebView.cpp:6097:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/win/WebView.h:886:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/rendering/RenderLayerBacking.cpp:240:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/rendering/RenderLayerBacking.cpp:241:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/rendering/RenderLayerBacking.cpp:242:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/rendering/RenderLayerBacking.cpp:244:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/rendering/RenderLayerBacking.cpp:245:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 22 in 7 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>219582</commentid>
    <comment_count>4</comment_count>
      <attachid>54815</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-04-30 13:00:10 -0700</bug_when>
    <thetext>Comment on attachment 54815
Patch

This patch has tabs.

I&apos;d like to see testcase with an iframe having borders and padding (with pixel results for Mac):

&lt;iframe style=&quot;border: 10px inset; padding: 15px src=&quot;composited.html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220700</commentid>
    <comment_count>5</comment_count>
      <attachid>55034</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-04 11:55:45 -0700</bug_when>
    <thetext>Created attachment 55034
Replacement Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220753</commentid>
    <comment_count>6</comment_count>
      <attachid>55034</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-05-04 13:56:04 -0700</bug_when>
    <thetext>Comment on attachment 55034
Replacement Patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================

&gt; +        Made composited iframes work on Windows
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=32446
&gt; +        
&gt; +        This builds on Simon&apos;s work to create compositing

I&apos;m flattered that you named me, but it would be more useful for someone
reading this in the future to either give a bug number, or svn revision
for the relevant changes.

&gt; Index: WebCore/platform/graphics/GraphicsLayer.cpp
&gt; ===================================================================
&gt;      writeIndent(ts, indent);
&gt;      ts &lt;&lt; &quot;(&quot; &lt;&lt; &quot;GraphicsLayer&quot;;
&gt;  
&gt; -    if (behavior &amp; LayerTreeAsTextDebug) {
&gt; +    if (behavior &amp; LayerTreeAsTextDebug)
&gt;          ts &lt;&lt; &quot; &quot; &lt;&lt; static_cast&lt;void*&gt;(const_cast&lt;GraphicsLayer*&gt;(this));
&gt; -        ts &lt;&lt; &quot; \&quot;&quot; &lt;&lt; m_name &lt;&lt; &quot;\&quot;&quot;;
&gt; -    }
&gt; +
&gt; +    ts &lt;&lt; &quot; \&quot;&quot; &lt;&lt; m_name &lt;&lt; &quot;\&quot;&quot;;
&gt;  
&gt;      ts &lt;&lt; &quot;\n&quot;;
&gt;      dumpProperties(ts, indent, behavior);
&gt; @@ -418,33 +418,8 @@ void GraphicsLayer::dumpProperties(TextS
&gt;      ts &lt;&lt; &quot;(anchor &quot; &lt;&lt; m_anchorPoint.x() &lt;&lt; &quot; &quot; &lt;&lt; m_anchorPoint.y() &lt;&lt; &quot;)\n&quot;;
&gt;  
&gt;      writeIndent(ts, indent + 1);
&gt; -    ts &lt;&lt; &quot;(bounds &quot; &lt;&lt; m_size.width() &lt;&lt; &quot; &quot; &lt;&lt; m_size.height() &lt;&lt; &quot;)\n&quot;;
&gt; -
&gt; -    writeIndent(ts, indent + 1);
&gt; -    ts &lt;&lt; &quot;(opacity &quot; &lt;&lt; m_opacity &lt;&lt; &quot;)\n&quot;;
&gt; -    
&gt; -    writeIndent(ts, indent + 1);
&gt; -    ts &lt;&lt; &quot;(usingTiledLayer &quot; &lt;&lt; m_usingTiledLayer &lt;&lt; &quot;)\n&quot;;
&gt; -
&gt; -    writeIndent(ts, indent + 1);
&gt; -    ts &lt;&lt; &quot;(preserves3D &quot; &lt;&lt; m_preserves3D &lt;&lt; &quot;)\n&quot;;
&gt; -
&gt; -    writeIndent(ts, indent + 1);
&gt; -    ts &lt;&lt; &quot;(drawsContent &quot; &lt;&lt; m_drawsContent &lt;&lt; &quot;)\n&quot;;
&gt; -
&gt; -    writeIndent(ts, indent + 1);
&gt;      ts &lt;&lt; &quot;(backfaceVisibility &quot; &lt;&lt; (m_backfaceVisibility ? &quot;visible&quot; : &quot;hidden&quot;) &lt;&lt; &quot;)\n&quot;;
&gt;  
&gt; -    if (behavior &amp; LayerTreeAsTextDebug) {
&gt; -        writeIndent(ts, indent + 1);
&gt; -        ts &lt;&lt; &quot;(&quot;;
&gt; -        if (m_client)
&gt; -            ts &lt;&lt; &quot;client &quot; &lt;&lt; static_cast&lt;void*&gt;(m_client);
&gt; -        else
&gt; -            ts &lt;&lt; &quot;no client&quot;;
&gt; -        ts &lt;&lt; &quot;)\n&quot;;
&gt; -    }
&gt; -
&gt;      writeIndent(ts, indent + 1);
&gt;      ts &lt;&lt; &quot;(backgroundColor &quot;;
&gt;      if (!m_backgroundColorSet)
&gt; @@ -454,16 +429,7 @@ void GraphicsLayer::dumpProperties(TextS
&gt;      ts &lt;&lt; &quot;)\n&quot;;
&gt;  
&gt;      writeIndent(ts, indent + 1);
&gt; -    ts &lt;&lt; &quot;(transform &quot;;
&gt; -    if (m_transform.isIdentity())
&gt; -        ts &lt;&lt; &quot;identity&quot;;
&gt; -    else {
&gt; -        ts &lt;&lt; &quot;[&quot; &lt;&lt; m_transform.m11() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m12() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m13() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m14() &lt;&lt; &quot;] &quot;;
&gt; -        ts &lt;&lt; &quot;[&quot; &lt;&lt; m_transform.m21() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m22() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m23() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m24() &lt;&lt; &quot;] &quot;;
&gt; -        ts &lt;&lt; &quot;[&quot; &lt;&lt; m_transform.m31() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m32() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m33() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m34() &lt;&lt; &quot;] &quot;;
&gt; -        ts &lt;&lt; &quot;[&quot; &lt;&lt; m_transform.m41() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m42() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m43() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m44() &lt;&lt; &quot;]&quot;;
&gt; -    }
&gt; -    ts &lt;&lt; &quot;)\n&quot;;
&gt; +    ts &lt;&lt; &quot;(bounds &quot; &lt;&lt; m_size.width() &lt;&lt; &quot; &quot; &lt;&lt; m_size.height() &lt;&lt; &quot;)\n&quot;;
&gt;  
&gt;      writeIndent(ts, indent + 1);
&gt;      ts &lt;&lt; &quot;(childrenTransform &quot;;
&gt; @@ -477,6 +443,18 @@ void GraphicsLayer::dumpProperties(TextS
&gt;      }
&gt;      ts &lt;&lt; &quot;)\n&quot;;
&gt;  
&gt; +    writeIndent(ts, indent + 1);
&gt; +    ts &lt;&lt; &quot;(drawsContent &quot; &lt;&lt; m_drawsContent &lt;&lt; &quot;)\n&quot;;
&gt; +
&gt; +    writeIndent(ts, indent + 1);
&gt; +    ts &lt;&lt; &quot;(masksToBounds &quot; &lt;&lt; m_masksToBounds &lt;&lt; &quot;)\n&quot;;
&gt; +
&gt; +    writeIndent(ts, indent + 1);
&gt; +    ts &lt;&lt; &quot;(opacity &quot; &lt;&lt; m_opacity &lt;&lt; &quot;)\n&quot;;
&gt; +    
&gt; +    writeIndent(ts, indent + 1);
&gt; +    ts &lt;&lt; &quot;(preserves3D &quot; &lt;&lt; m_preserves3D &lt;&lt; &quot;)\n&quot;;
&gt; +
&gt;      if (m_replicaLayer) {
&gt;          writeIndent(ts, indent + 1);
&gt;          ts &lt;&lt; &quot;(replica layer&quot;;
&gt; @@ -494,6 +472,31 @@ void GraphicsLayer::dumpProperties(TextS
&gt;          ts &lt;&lt; &quot;)\n&quot;;
&gt;      }
&gt;      
&gt; +    writeIndent(ts, indent + 1);
&gt; +    ts &lt;&lt; &quot;(transform &quot;;
&gt; +    if (m_transform.isIdentity())
&gt; +        ts &lt;&lt; &quot;identity&quot;;
&gt; +    else {
&gt; +        ts &lt;&lt; &quot;[&quot; &lt;&lt; m_transform.m11() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m12() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m13() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m14() &lt;&lt; &quot;] &quot;;
&gt; +        ts &lt;&lt; &quot;[&quot; &lt;&lt; m_transform.m21() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m22() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m23() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m24() &lt;&lt; &quot;] &quot;;
&gt; +        ts &lt;&lt; &quot;[&quot; &lt;&lt; m_transform.m31() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m32() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m33() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m34() &lt;&lt; &quot;] &quot;;
&gt; +        ts &lt;&lt; &quot;[&quot; &lt;&lt; m_transform.m41() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m42() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m43() &lt;&lt; &quot; &quot; &lt;&lt; m_transform.m44() &lt;&lt; &quot;]&quot;;
&gt; +    }
&gt; +    ts &lt;&lt; &quot;)\n&quot;;
&gt; +
&gt; +    writeIndent(ts, indent + 1);
&gt; +    ts &lt;&lt; &quot;(usingTiledLayer &quot; &lt;&lt; m_usingTiledLayer &lt;&lt; &quot;)\n&quot;;
&gt; +
&gt; +    if (behavior &amp; LayerTreeAsTextDebug) {
&gt; +        writeIndent(ts, indent + 1);
&gt; +        ts &lt;&lt; &quot;(&quot;;
&gt; +        if (m_client)
&gt; +            ts &lt;&lt; &quot;client &quot; &lt;&lt; static_cast&lt;void*&gt;(m_client);
&gt; +        else
&gt; +            ts &lt;&lt; &quot;no client&quot;;
&gt; +        ts &lt;&lt; &quot;)\n&quot;;
&gt; +    }
&gt; +
&gt;      if (m_children.size()) {
&gt;          writeIndent(ts, indent + 1);
&gt;          ts &lt;&lt; &quot;(children &quot; &lt;&lt; m_children.size() &lt;&lt; &quot;\n&quot;;

These changes should be done in a separate patch.

&gt; Index: WebCore/platform/graphics/win/GraphicsLayerCACF.cpp
&gt; ===================================================================
&gt;  void GraphicsLayerCACF::setName(const String&amp; name)
&gt;  {
&gt;      String longName = String::format(&quot;CALayer(%p) GraphicsLayer(%p) &quot;, m_layer.get(), this) + name;
&gt; -    GraphicsLayer::setName(longName);
&gt; +    GraphicsLayer::setName(name);
&gt;      
&gt;      m_layer-&gt;setName(longName);

The name-related changes should be done in a third patch.

&gt; Index: WebCore/rendering/RenderLayerBacking.cpp
&gt; ===================================================================

&gt; -#ifndef NDEBUG
&gt;      if (renderer()-&gt;node()) {
&gt;          if (renderer()-&gt;node()-&gt;isDocumentNode())
&gt;              m_graphicsLayer-&gt;setName(&quot;Document Node&quot;);
&gt; @@ -107,7 +107,6 @@ void RenderLayerBacking::createGraphicsL
&gt;          m_graphicsLayer-&gt;setName(&quot;Reflection&quot;);
&gt;      else
&gt;          m_graphicsLayer-&gt;setName(&quot;Anonymous Node&quot;);
&gt; -#endif  // NDEBUG

More name-related changes here; should be done in a third patch.

&gt;      m_graphicsLayer-&gt;setContentsRect(contentsBox());
&gt;      m_graphicsLayer-&gt;setDrawsContent(containsPaintedContent());
&gt; +
&gt; +    // If this is an iframe parent, update the iframe content&apos;s box
&gt; +    if (renderer()-&gt;isRenderIFrame()) {
&gt; +        HTMLIFrameElement* element = static_cast&lt;HTMLIFrameElement*&gt;(renderer()-&gt;node());
&gt; +        if (Document* contentDocument = element-&gt;contentDocument()) {
&gt; +            if (RenderView* view = contentDocument-&gt;renderView()) {
&gt; +                RenderLayerCompositor* iframeCompositor = view-&gt;compositor();
&gt; +                iframeCompositor-&gt;setContentsBox(contentsBox());

This is only necessary if the iframe contents are composited. I think you should test that here.

Maybe add a utility method to get the inner RenderLayerCompositor, given a RenderIFrame.

&gt;  void RenderLayerBacking::updateInternalHierarchy()
&gt; @@ -410,9 +420,7 @@ bool RenderLayerBacking::updateClippingL
&gt;      if (needsAncestorClip) {
&gt;          if (!m_ancestorClippingLayer) {
&gt;              m_ancestorClippingLayer = GraphicsLayer::create(this);
&gt; -#ifndef NDEBUG
&gt;              m_ancestorClippingLayer-&gt;setName(&quot;Ancestor clipping Layer&quot;);
&gt; -#endif
&gt;              m_ancestorClippingLayer-&gt;setMasksToBounds(true);
&gt;              layersChanged = true;
&gt;          }
&gt; @@ -425,9 +433,7 @@ bool RenderLayerBacking::updateClippingL
&gt;      if (needsDescendantClip) {
&gt;          if (!m_clippingLayer) {
&gt;              m_clippingLayer = GraphicsLayer::create(this);
&gt; -#ifndef NDEBUG
&gt;              m_clippingLayer-&gt;setName(&quot;Child clipping Layer&quot;);
&gt; -#endif
&gt;              m_clippingLayer-&gt;setMasksToBounds(true);
&gt;              layersChanged = true;
&gt;          }
&gt; @@ -449,9 +455,7 @@ bool RenderLayerBacking::updateForegroun
&gt;      if (needsForegroundLayer) {
&gt;          if (!m_foregroundLayer) {
&gt;              m_foregroundLayer = GraphicsLayer::create(this);
&gt; -#ifndef NDEBUG
&gt;              m_foregroundLayer-&gt;setName(&quot;Foreground&quot;);
&gt; -#endif
&gt;              m_foregroundLayer-&gt;setDrawsContent(true);
&gt;              m_foregroundLayer-&gt;setPaintingPhase(GraphicsLayerPaintForeground);
&gt;              layerChanged = true;
&gt; @@ -474,9 +478,7 @@ bool RenderLayerBacking::updateMaskLayer
&gt;      if (needsMaskLayer) {
&gt;          if (!m_maskLayer) {
&gt;              m_maskLayer = GraphicsLayer::create(this);
&gt; -#ifndef NDEBUG
&gt;              m_maskLayer-&gt;setName(&quot;Mask&quot;);
&gt; -#endif
&gt;              m_maskLayer-&gt;setDrawsContent(true);
&gt;              m_maskLayer-&gt;setPaintingPhase(GraphicsLayerPaintMask);
&gt;              layerChanged = true;

More name-related changes here; should be done in a third patch.

&gt; Index: WebCore/rendering/RenderLayerCompositor.cpp
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderLayerCompositor.cpp	(revision 58433)

&gt; -void RenderLayerCompositor::parentInRootLayer(RenderLayer* layer)

I assume this was unused, but your changelog doesn&apos;t mention it.

&gt; @@ -764,11 +752,33 @@ void RenderLayerCompositor::rebuildCompo
&gt;      }
&gt;      
&gt;      if (layerBacking) {
&gt; -        layerBacking-&gt;parentForSublayers()-&gt;setChildren(layerChildren);
&gt; +        if (layer-&gt;renderer()-&gt;isRenderIFrame()) {
&gt; +            // This is an iframe parent. Make it the parent of the iframe document&apos;s root
&gt; +            layerBacking-&gt;parentForSublayers()-&gt;removeAllChildren();

Rather than removeAllChildren() followed by addChild(), it&apos;s slightly more efficient to just do a setChildren().

&gt; +            HTMLIFrameElement* element = static_cast&lt;HTMLIFrameElement*&gt;(layer-&gt;renderer()-&gt;node());
&gt; +            if (Document* contentDocument = element-&gt;contentDocument()) {
&gt; +                if (RenderView* view = contentDocument-&gt;renderView()) {
&gt; +                    RenderLayerCompositor* iframeCompositor = view-&gt;compositor();

This would be another place to use that utility method.

&gt; +                    iframeCompositor-&gt;setContentsBox(layerBacking-&gt;contentsBox());

This may be redundant.

&gt; +void RenderLayerCompositor::setContentsBox(const IntRect&amp; contentsBox)

I don&apos;t think the name of this method stands alone. What are the &quot;contents&quot; of a RenderLayerCompositor?

What&apos;s really happening here is that some outside entity (i.e. the parent iframe) is imposing clipping
on the layers owned by this RenderLayerCompositor. That should be reflected in the name.

&gt; @@ -930,13 +940,27 @@ void RenderLayerCompositor::didMoveOnscr
&gt;      if (!m_rootPlatformLayer)
&gt;          return;
&gt;  
&gt; -    Frame* frame = m_renderView-&gt;frameView()-&gt;frame();
&gt; -    Page* page = frame ? frame-&gt;page() : 0;
&gt; -    if (!page)
&gt; -        return;
&gt; +    bool attached = false;
&gt; +    Element* ownerElement = m_renderView-&gt;document()-&gt;ownerElement();
&gt; +    if (ownerElement) {
&gt; +        RenderObject* renderer = ownerElement-&gt;renderer();
&gt; +        if (renderer &amp;&amp; renderer-&gt;isRenderIFrame()) {
&gt; +            // The layer will get hooked up via RenderLayerBacking::updateGraphicsLayerConfiguration()
&gt; +            // for the iframe&apos;s renderer in the parent document.
&gt; +            ownerElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
&gt; +            attached = true;
&gt; +        }
&gt; +    }
&gt;  
&gt; -    page-&gt;chrome()-&gt;client()-&gt;attachRootGraphicsLayer(frame, m_rootPlatformLayer.get());
&gt; -    m_rootLayerAttached = true;
&gt; +    if (!attached) {
&gt; +        Frame* frame = m_renderView-&gt;frameView()-&gt;frame();
&gt; +        Page* page = frame ? frame-&gt;page() : 0;
&gt; +        if (!page)
&gt; +            return;
&gt; +
&gt; +        page-&gt;chrome()-&gt;client()-&gt;attachRootGraphicsLayer(frame, m_rootPlatformLayer.get());
&gt; +    }
&gt; +    m_rootLayerAttached = true;    
&gt;  }
&gt;  
&gt;  void RenderLayerCompositor::willMoveOffscreen()
&gt; @@ -944,19 +968,44 @@ void RenderLayerCompositor::willMoveOffs
&gt;      if (!m_rootPlatformLayer || !m_rootLayerAttached)
&gt;          return;
&gt;  
&gt; -    Frame* frame = m_renderView-&gt;frameView()-&gt;frame();
&gt; -    Page* page = frame ? frame-&gt;page() : 0;
&gt; -    if (!page)
&gt; -        return;
&gt; +    bool detached = false;
&gt; +    Element* ownerElement = m_renderView-&gt;document()-&gt;ownerElement();
&gt; +    if (ownerElement) {
&gt; +        RenderObject* renderer = ownerElement-&gt;renderer();
&gt; +        if (renderer-&gt;isRenderIFrame()) {
&gt; +            // The layer will get hooked up via RenderLayerBacking::updateGraphicsLayerConfiguration()
&gt; +            // for the iframe&apos;s renderer in the parent document.
&gt; +            ownerElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
&gt; +            detached = true;

Would be nice to share this code in these two methods.

&gt;  void RenderLayerCompositor::updateRootLayerPosition()
&gt;  {
&gt; -    if (m_rootPlatformLayer)
&gt; -        m_rootPlatformLayer-&gt;setSize(FloatSize(m_renderView-&gt;rightLayoutOverflow(), m_renderView-&gt;bottomLayoutOverflow()));
&gt; +    if (m_rootPlatformLayer) {
&gt; +        // FIXME: Adjust the y position of the m_rootPlatformLayer if we are clipping by its top edge
&gt; +        // Eventually this will be taken care of by scrolling logic
&gt; +        // https://bugs.webkit.org/show_bug.cgi?id=38518
&gt; +        float height = m_renderView-&gt;bottomLayoutOverflow();
&gt; +        float yOffset = 0;
&gt; +
&gt; +        if (m_clippingLayer &amp;&amp; height &gt; m_clippingLayer-&gt;size().height())
&gt; +            yOffset = m_clippingLayer-&gt;size().height() - height;

I don&apos;t get why we need to do this Y flipping. We don&apos;t have Y-flipping code for other &quot;normal&quot; GraphicsLayers, so why do we need it here?

It it related to this?
&gt;      // The root layer does flipping if we need it on this platform.
&gt;      m_rootPlatformLayer-&gt;setGeometryOrientation(GraphicsLayer::compositingCoordinatesOrientation());
Maybe we shouldn&apos;t call setGeometryOrientation() on the m_rootPlatformLayer of iframes?

&gt;      m_rootPlatformLayer = GraphicsLayer::create(0);
&gt; +    m_rootPlatformLayer-&gt;setName(&quot;Root&quot;);

Part of the name changes.

&gt;      m_rootPlatformLayer-&gt;setSize(FloatSize(m_renderView-&gt;rightLayoutOverflow(), m_renderView-&gt;bottomLayoutOverflow()));
&gt;      m_rootPlatformLayer-&gt;setPosition(FloatPoint(0, 0));
&gt; +    m_rootPlatformLayer-&gt;setAnchorPoint(FloatPoint());

This may break Mac.

&gt; +    // Create a clipping layer if this is an iframe
&gt; +    Element* ownerElement = m_renderView-&gt;document()-&gt;ownerElement();
&gt; +    if (ownerElement) {

Need to call shouldPropagateCompositingToIFrameParent() here (and maybe in some other places too).

&gt; Index: LayoutTests/ChangeLog

I&apos;d like to see some more Layout Tests for this.
1. One that dynamically switches the iframe contents document into compositing mode after loading.
2. One that dynamically switches the iframe contents document out of compositing mode after loading.
3. One that dynamically resizes a composited iframe.

I think I&apos;d like to see one more patch for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220887</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-04 17:13:32 -0700</bug_when>
    <thetext>&gt; &gt;      m_graphicsLayer-&gt;setContentsRect(contentsBox());
&gt; &gt;      m_graphicsLayer-&gt;setDrawsContent(containsPaintedContent());
&gt; &gt; +
&gt; &gt; +    // If this is an iframe parent, update the iframe content&apos;s box
&gt; &gt; +    if (renderer()-&gt;isRenderIFrame()) {
&gt; &gt; +        HTMLIFrameElement* element = static_cast&lt;HTMLIFrameElement*&gt;(renderer()-&gt;node());
&gt; &gt; +        if (Document* contentDocument = element-&gt;contentDocument()) {
&gt; &gt; +            if (RenderView* view = contentDocument-&gt;renderView()) {
&gt; &gt; +                RenderLayerCompositor* iframeCompositor = view-&gt;compositor();
&gt; &gt; +                iframeCompositor-&gt;setContentsBox(contentsBox());
&gt; 
&gt; This is only necessary if the iframe contents are composited. I think you
&gt; should test that here.
&gt; 
&gt; Maybe add a utility method to get the inner RenderLayerCompositor, given a
&gt; RenderIFrame.

I&apos;m not sure what you mean by that. I&apos;ve added logic to setContentsBox() to make sure the clippingLayer exists. I believe that if it does and there is a compositor, we have compositing layers, right? If not, let me know how to do more tests to ensure this.

&gt; &gt; @@ -764,11 +752,33 @@ void RenderLayerCompositor::rebuildCompo
&gt; &gt;      }
&gt; &gt;      
&gt; &gt;      if (layerBacking) {
&gt; &gt; -        layerBacking-&gt;parentForSublayers()-&gt;setChildren(layerChildren);
&gt; &gt; +        if (layer-&gt;renderer()-&gt;isRenderIFrame()) {
&gt; &gt; +            // This is an iframe parent. Make it the parent of the iframe document&apos;s root
&gt; &gt; +            layerBacking-&gt;parentForSublayers()-&gt;removeAllChildren();
&gt; 
&gt; Rather than removeAllChildren() followed by addChild(), it&apos;s slightly more
&gt; efficient to just do a setChildren().

I can&apos;t see how that could be. setChildren() calls removeAllChildren() followed by addChild() on each child passed in a Vector. This avoids creating the Vector. We could add a setChild() method, but I don&apos;t think that&apos;s necessary at this point.
&gt; &gt;  void RenderLayerCompositor::willMoveOffscreen()
&gt; &gt; @@ -944,19 +968,44 @@ void RenderLayerCompositor::willMoveOffs
&gt; &gt;      if (!m_rootPlatformLayer || !m_rootLayerAttached)
&gt; &gt;          return;
&gt; &gt;  
&gt; &gt; -    Frame* frame = m_renderView-&gt;frameView()-&gt;frame();
&gt; &gt; -    Page* page = frame ? frame-&gt;page() : 0;
&gt; &gt; -    if (!page)
&gt; &gt; -        return;
&gt; &gt; +    bool detached = false;
&gt; &gt; +    Element* ownerElement = m_renderView-&gt;document()-&gt;ownerElement();
&gt; &gt; +    if (ownerElement) {
&gt; &gt; +        RenderObject* renderer = ownerElement-&gt;renderer();
&gt; &gt; +        if (renderer-&gt;isRenderIFrame()) {
&gt; &gt; +            // The layer will get hooked up via RenderLayerBacking::updateGraphicsLayerConfiguration()
&gt; &gt; +            // for the iframe&apos;s renderer in the parent document.
&gt; &gt; +            ownerElement-&gt;setNeedsStyleRecalc(SyntheticStyleChange);
&gt; &gt; +            detached = true;
&gt; 
&gt; Would be nice to share this code in these two methods.

Because of the detached flag setting, I don&apos;t think a function would make this any more clear. And it&apos;s just 2 uses that are right next to each other. I don&apos;t think we save enough to make it worth it.

&gt; 
&gt; &gt;  void RenderLayerCompositor::updateRootLayerPosition()
&gt; &gt;  {
&gt; &gt; -    if (m_rootPlatformLayer)
&gt; &gt; -        m_rootPlatformLayer-&gt;setSize(FloatSize(m_renderView-&gt;rightLayoutOverflow(), m_renderView-&gt;bottomLayoutOverflow()));
&gt; &gt; +    if (m_rootPlatformLayer) {
&gt; &gt; +        // FIXME: Adjust the y position of the m_rootPlatformLayer if we are clipping by its top edge
&gt; &gt; +        // Eventually this will be taken care of by scrolling logic
&gt; &gt; +        // https://bugs.webkit.org/show_bug.cgi?id=38518
&gt; &gt; +        float height = m_renderView-&gt;bottomLayoutOverflow();
&gt; &gt; +        float yOffset = 0;
&gt; &gt; +
&gt; &gt; +        if (m_clippingLayer &amp;&amp; height &gt; m_clippingLayer-&gt;size().height())
&gt; &gt; +            yOffset = m_clippingLayer-&gt;size().height() - height;
&gt; 
&gt; I don&apos;t get why we need to do this Y flipping. We don&apos;t have Y-flipping code
&gt; for other &quot;normal&quot; GraphicsLayers, so why do we need it here?
&gt; 
&gt; It it related to this?
&gt; &gt;      // The root layer does flipping if we need it on this platform.
&gt; &gt;      m_rootPlatformLayer-&gt;setGeometryOrientation(GraphicsLayer::compositingCoordinatesOrientation());
&gt; Maybe we shouldn&apos;t call setGeometryOrientation() on the m_rootPlatformLayer of
&gt; iframes?

No. This is a hard fought solution. I think it has to be that other uses are setting the position relative to the lower left edge as a natural fallout of the CG rendering model. I&apos;ve tried every combination of geometry orientation and anchor point. Nothing has the desired effect.
&gt; 
&gt; &gt; +    // Create a clipping layer if this is an iframe
&gt; &gt; +    Element* ownerElement = m_renderView-&gt;document()-&gt;ownerElement();
&gt; &gt; +    if (ownerElement) {
&gt; 
&gt; Need to call shouldPropagateCompositingToIFrameParent() here (and maybe in some
&gt; other places too).

I don&apos;t feel comfortable adding that call here, unless there&apos;s a test case showing that there&apos;s a problem. You should open a new bug if you find such a test case. Not having this here may make multiply nested iframes not work. But adding it might make multiply nested iframes crash. We need a new bug so we can decide if this is important enough to fix now or if it can wait.


&gt; 
&gt; &gt; Index: LayoutTests/ChangeLog
&gt; 
&gt; I&apos;d like to see some more Layout Tests for this.
&gt; 1. One that dynamically switches the iframe contents document into compositing
&gt; mode after loading.
&gt; 2. One that dynamically switches the iframe contents document out of
&gt; compositing mode after loading.
&gt; 3. One that dynamically resizes a composited iframe.

At this point, the test cases submitted test the error reported. We need to fix the current bug and deal with additional problems with separate bug reports.

A new patch is on its way...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220894</commentid>
    <comment_count>8</comment_count>
      <attachid>55077</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-04 17:31:30 -0700</bug_when>
    <thetext>Created attachment 55077
Patch with suggested changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220935</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-05-04 18:50:56 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/58797</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220940</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-05-04 19:05:16 -0700</bug_when>
    <thetext>Committed r58798: &lt;http://trac.webkit.org/changeset/58798&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220966</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-05-04 22:41:47 -0700</bug_when>
    <thetext>This caused bug 38565.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54815</attachid>
            <date>2010-04-30 11:46:23 -0700</date>
            <delta_ts>2010-05-04 11:55:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>32446.patch</filename>
            <type>text/plain</type>
            <size>8540</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODU4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDQtMzAgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJCUlGcmFtZXMg
d2l0aCBjb21wb3NpdGVkIGNvbnRlbnQgYXJlIG5vdyBwcm9wZXJseSBhZGRlZCB0byB0aGUgbGF5
ZXIgaGllcmFyY2h5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjQ0NgorCQkKKwkJSWYgaWZyYW1lIGNvbnRlbnQgaXMgY29tcG9zaXRlZCwgaXQncyBJ
RnJhbWVFbGVtZW50IG5vdyBnZXRzIGEgR3JhcGhpY3NMYXllciwgd2hpY2gKKwkJbWFrZXMgYSBs
YXllciBoaWVyYXJjaHkgaW4gdGhlIGlmcmFtZSBjb250ZW50J3MgcGFyZW50IGRvY3VtZW50LiBU
aGUgaWZyYW1lIGNvbnRlbnQncworCQlsYXllciByb290IGlzIGNvbm5lY3RlZCB0byB0aGUgSUZy
YW1lRWxlbWVudCdzIEdyYXBoaWNzTGF5ZXIgaW4gdGhlIHNhbWUgd2F5IHRoYXQKKwkJbWVkaWEg
bGF5ZXJzIGFyZSBwYXJlbnRlZC4gVGhlIElGcmFtZUVsZW1lbnQncyBHcmFwaGljc0xheWVyIGFj
dHMgYXMgdGhlIGNsaXBwaW5nCisJCWxheWVyIGZvciB0aGUgaWZyYW1lIGNvbnRlbnQuCisJCQor
CQlTdGlsbCBub3QgZG9uZSBpcyBkZWFsaW5nIHdpdGggc2Nyb2xsaW5nIGlmcmFtZSBjb250ZW50
LiBCdXQgdGhpcyBpcyBhIHNlcGFyYXRlIGJ1ZworCQl3aGljaCBoYXBwZW5zIG9uIE1hYyBhcyB3
ZWxsLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisKIDIwMTAtMDQtMzAg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgQ2FybHNvbi4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcAkocmV2aXNpb24gNTg0MzMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCkBAIC0yMzAsNiArMjMxLDIxIEBAIGJvb2wgUmVuZGVy
TGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQtPmdyYXBoaWNzQ29udGV4
dDNEKCkpOwogICAgIH0KICNlbmRpZgorICAgIGVsc2UgaWYgKHJlbmRlcmVyKCktPmlzUmVuZGVy
SUZyYW1lKCkpIHsKKyAgICAgICAgSFRNTElGcmFtZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KHJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAgICAgIGlm
IChEb2N1bWVudCogY29udGVudERvY3VtZW50ID0gZWxlbWVudC0+Y29udGVudERvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gY29udGVudERvY3VtZW50LT5y
ZW5kZXJWaWV3KCkpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3IqIGlm
cmFtZUNvbXBvc2l0b3IgPSB2aWV3LT5jb21wb3NpdG9yKCk7CisgICAgICAgICAgICAgICAgR3Jh
cGhpY3NMYXllciogaWZyYW1lUm9vdExheWVyID0gaWZyYW1lQ29tcG9zaXRvci0+cm9vdFBsYXRm
b3JtTGF5ZXIoKTsKKwkJCQlpZiAoaWZyYW1lUm9vdExheWVyKSB7CisJCQkJCWlmcmFtZVJvb3RM
YXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgpKTsKKwkJCQkJaWZyYW1lUm9vdExheWVy
LT5zZXRHZW9tZXRyeU9yaWVudGF0aW9uKEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNUb3BEb3duKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRD
b250ZW50c1RvTWVkaWEoaWZyYW1lUm9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworCQkJCQlt
X2dyYXBoaWNzTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisJCQkJfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQogCiAgICAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlZDsK
IH0KQEAgLTgyMyw3ICs4MzksMTEgQEAgRmxvYXRQb2ludCBSZW5kZXJMYXllckJhY2tpbmc6OmNv
bnRlbnRzVAogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRpbmdHb2VzVG9XaW5kb3co
KSBjb25zdAogewotICAgIHJldHVybiBtX293bmluZ0xheWVyLT5pc1Jvb3RMYXllcigpOworICAg
IGlmICghbV9vd25pbmdMYXllci0+aXNSb290TGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gSWZyYW1lIHJvb3QgbGF5ZXJzIHBhaW50IGludG8gYmFja2luZyBzdG9yZS4K
KyAgICByZXR1cm4gIXRvUmVuZGVyVmlldyhyZW5kZXJlcigpKS0+ZG9jdW1lbnQoKS0+b3duZXJF
bGVtZW50KCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWRE
aXNwbGF5KCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAkocmV2aXNpb24gNTg0MzMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjQsNiArNjY0LDcgQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUNvbXBvcwogICAgIGhvc3RpbmdMYXllci0+cmVtb3Zl
QWxsQ2hpbGRyZW4oKTsKIH0KIAorLy8gRklYTUU6IHJlbW92ZT8KIHZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpwYXJlbnRJblJvb3RMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCiB7CiAgICAg
QVNTRVJUKGxheWVyLT5pc0NvbXBvc2l0ZWQoKSk7CkBAIC05MzAsMTMgKzkzMSwyNyBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkTW92ZU9uc2NyCiAgICAgaWYgKCFtX3Jvb3RQbGF0
Zm9ybUxheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBGcmFtZSogZnJhbWUgPSBtX3JlbmRl
clZpZXctPmZyYW1lVmlldygpLT5mcmFtZSgpOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZy
YW1lLT5wYWdlKCkgOiAwOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIGJv
b2wgYXR0YWNoZWQgPSBmYWxzZTsKKyAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX3JlbmRl
clZpZXctPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpOworICAgIGlmIChvd25lckVsZW1lbnQp
IHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVy
ZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1JlbmRlcklGcmFtZSgp
KSB7CisgICAgICAgICAgICAvLyBUaGUgbGF5ZXIgd2lsbCBnZXQgaG9va2VkIHVwIHZpYSBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkKKyAgICAg
ICAgICAgIC8vIGZvciB0aGUgaWZyYW1lJ3MgcmVuZGVyZXIgaW4gdGhlIHBhcmVudCBkb2N1bWVu
dC4KKyAgICAgICAgICAgIG93bmVyRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0
aWNTdHlsZUNoYW5nZSk7CisgICAgICAgICAgICBhdHRhY2hlZCA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9CiAKLSAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmF0dGFjaFJvb3RHcmFwaGlj
c0xheWVyKGZyYW1lLCBtX3Jvb3RQbGF0Zm9ybUxheWVyLmdldCgpKTsKLSAgICBtX3Jvb3RMYXll
ckF0dGFjaGVkID0gdHJ1ZTsKKyAgICBpZiAoIWF0dGFjaGVkKSB7CisgICAgICAgIEZyYW1lKiBm
cmFtZSA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7CisgICAgICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOworICAgICAgICBpZiAoIXBhZ2UpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5h
dHRhY2hSb290R3JhcGhpY3NMYXllcihmcmFtZSwgbV9yb290UGxhdGZvcm1MYXllci5nZXQoKSk7
CisgICAgfQorICAgIG1fcm9vdExheWVyQXR0YWNoZWQgPSB0cnVlOyAgICAKIH0KIAogdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxNb3ZlT2Zmc2NyZWVuKCkKQEAgLTk0NCwxMiArOTU5
LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsTW92ZU9mZnMKICAgICBpZiAo
IW1fcm9vdFBsYXRmb3JtTGF5ZXIgfHwgIW1fcm9vdExheWVyQXR0YWNoZWQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmZy
YW1lKCk7Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7Ci0gICAg
aWYgKCFwYWdlKQotICAgICAgICByZXR1cm47CisgICAgYm9vbCBkZXRhY2hlZCA9IGZhbHNlOwor
ICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fcmVuZGVyVmlldy0+ZG9jdW1lbnQoKS0+b3du
ZXJFbGVtZW50KCk7CisgICAgaWYgKG93bmVyRWxlbWVudCkgeworICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpOworICAgICAgICBpZiAocmVu
ZGVyZXItPmlzUmVuZGVySUZyYW1lKCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBsYXllciB3aWxs
IGdldCBob29rZWQgdXAgdmlhIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXll
ckNvbmZpZ3VyYXRpb24oKQorICAgICAgICAgICAgLy8gZm9yIHRoZSBpZnJhbWUncyByZW5kZXJl
ciBpbiB0aGUgcGFyZW50IGRvY3VtZW50LgorICAgICAgICAgICAgb3duZXJFbGVtZW50LT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgIGRldGFj
aGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIHBhZ2UtPmNocm9tZSgpLT5jbGll
bnQoKS0+YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoZnJhbWUsIDApOworICAgIGlmICghZGV0YWNo
ZWQpIHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKS0+
ZnJhbWUoKTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7
CisgICAgICAgIGlmICghcGFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBwYWdl
LT5jaHJvbWUoKS0+Y2xpZW50KCktPmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKGZyYW1lLCAwKTsK
KyAgICB9CiAgICAgbV9yb290TGF5ZXJBdHRhY2hlZCA9IGZhbHNlOwogfQogCkluZGV4OiBXZWJL
aXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2
aXNpb24gNTg1ODcpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE4IEBACisyMDEwLTA0LTMwICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCQlJRnJhbWVzIHdp
dGggY29tcG9zaXRlZCBjb250ZW50IGFyZSBub3cgcHJvcGVybHkgYWRkZWQgdG8gdGhlIGxheWVy
IGhpZXJhcmNoeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzI0NDYKKwkJCisJCVRoaXMgc2ltcGx5IHBhc3NlcyB0aGUgRnJhbWUgZG93biB0byB0aGUg
V2ViVmlldyBhbmQgaWdub3JlcyBhbGwgc2V0Um9vdENoaWxkTGF5ZXIKKwkJY2FsbHMgb3RoZXIg
dGhhbiB0aGUgb25lIGZvciB0aGUgdWx0aW1hdGUgcm9vdCBvZiB0aGUgZG9jdW1lbnQuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAqIFdl
YlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6c2V0Um9vdENoaWxkTGF5ZXIpOgorICAgICAg
ICAqIFdlYlZpZXcuaDoKKwogMjAxMC0wNC0yOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBX
ZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5j
cHAJKHJldmlzaW9uIDU4NDMzKQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjA5MSw4ICs2MDkxLDExIEBAIHZvaWQgV2ViVmlldzo6ZG93bmxvYWRVUkwoY29u
c3QgS1VSTCYgdXIKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLXZvaWQg
V2ViVmlldzo6c2V0Um9vdENoaWxkTGF5ZXIoV2ViQ29yZTo6V0tDQUNGTGF5ZXIqIGxheWVyKQor
dm9pZCBXZWJWaWV3OjpzZXRSb290Q2hpbGRMYXllcihGcmFtZSogZnJhbWUsIFdlYkNvcmU6OldL
Q0FDRkxheWVyKiBsYXllcikKIHsKKwlpZiAoZnJhbWUgIT0gY29yZShtX21haW5GcmFtZSkpCisJ
CXJldHVybjsKKwogICAgIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcobGF5ZXIgPyB0cnVlIDog
ZmFsc2UpOwogICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJl
ci0+c2V0Um9vdENoaWxkTGF5ZXIobGF5ZXIpOwpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHJldmlzaW9uIDU4NDMzKQorKysg
V2ViS2l0L3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTg4Myw3ICs4ODMsNyBAQCBw
dWJsaWM6CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRS
b290TGF5ZXJOZWVkc0Rpc3BsYXkoKSB7IGlmIChtX2xheWVyUmVuZGVyZXIpIG1fbGF5ZXJSZW5k
ZXJlci0+c2V0TmVlZHNEaXNwbGF5KCk7IH0KLSAgICB2b2lkIHNldFJvb3RDaGlsZExheWVyKFdl
YkNvcmU6OldLQ0FDRkxheWVyKiBsYXllcik7CisJdm9pZCBzZXRSb290Q2hpbGRMYXllcihXZWJD
b3JlOjpGcmFtZSogZnJhbWUsIFdlYkNvcmU6OldLQ0FDRkxheWVyKiBsYXllcik7CiAjZW5kaWYK
IAogICAgIHZvaWQgZW50ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CkluZGV4
OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZp
c2lvbiA1ODQzMykKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk4LDcgKzc5OCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpyZXF1ZXN0R2VvbG9jYXRpb24KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZy
YW1lLCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewotICAgIG1fd2ViVmlldy0+c2V0
Um9vdENoaWxkTGF5ZXIoZ3JhcGhpY3NMYXllciA/IHN0YXRpY19jYXN0PFdLQ0FDRkxheWVyKj4o
Z3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpKSA6IDApOworICAgIG1fd2ViVmlldy0+c2V0
Um9vdENoaWxkTGF5ZXIoZnJhbWUsIGdyYXBoaWNzTGF5ZXIgPyBzdGF0aWNfY2FzdDxXS0NBQ0ZM
YXllcio+KGdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkgOiAwKTsKIH0KIAogdm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKQo=
</data>
<flag name="review"
          id="38870"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55034</attachid>
            <date>2010-05-04 11:55:45 -0700</date>
            <delta_ts>2010-05-04 17:31:30 -0700</delta_ts>
            <desc>Replacement Patch</desc>
            <filename>32446.patch</filename>
            <type>text/plain</type>
            <size>37449</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODc2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDUtMDQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
ZGUgY29tcG9zaXRlZCBpZnJhbWVzIHdvcmsgb24gV2luZG93cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI0NDYKKyAgICAgICAgCisgICAgICAgIFRo
aXMgYnVpbGRzIG9uIFNpbW9uJ3Mgd29yayB0byBjcmVhdGUgY29tcG9zaXRpbmcKKyAgICAgICAg
bGF5ZXJzIGluIHRoZSBwYXJlbnQgZG9jdW1lbnQgd2hlbiBhbiBpZnJhbWUgaGFzIGEgY29tcG9z
aXRpbmcKKyAgICAgICAgbGF5ZXIuIFRoZSBwYXJlbnQgZG9jdW1lbnQgaGFzIGEgbGF5ZXIgZm9y
IHRoZSBpZnJhbWUgZWxlbWVudCAKKyAgICAgICAgYW5kIGJ1aWxkcyBhIGxheWVyIHRyZWUgdG8g
dGhlIHBhZ2Ugcm9vdC4gVGhlIGxheWVyIHRyZWUgZm9yIHRoZQorICAgICAgICBpZnJhbWUgZG9j
dW1lbnQgaXMgdGhlbiBwYXJlbnRlZCB0byB0aGUgaWZyYW1lIGVsZW1lbnQncyAKKyAgICAgICAg
R3JhcGhpY3NMYXllci4KKyAgICAgICAgCisgICAgICAgIFRoZSBSZW5kZXJMYXllckNvbXBvc2l0
b3IgZm9yIHRoZSBpZnJhbWUgZG9jdW1lbnQgKHdoaWNoIG93bnMgdGhlCisgICAgICAgIHJvb3Qg
b2YgdGhlIGxheWVyIHRyZWUpIG5vdyBoYXMgYSBjbGlwcGluZ0xheWVyIHdoaWNoIGlzIHRoZSAK
KyAgICAgICAgcGFyZW50IG9mIHRoZSBsYXllciB0cmVlIHJvb3Qgc28gaXQgY2FuIGJlIGNsaXBw
ZWQgdG8gdGhlIHBhcmVudAorICAgICAgICBpZnJhbWUncyBib3VuZHMsIHRha2luZyBpbnRvIGFj
Y291bnQgYm9yZGVycywgcGFkZGluZywgZXRjLiBpbgorICAgICAgICB0aGUgcGFyZW50IGlmcmFt
ZSBlbGVtZW50LgorCisgICAgICAgIFRlc3Q6IGNvbXBvc2l0aW5nL2lmcmFtZXMvY29tcG9zaXRl
ZC1wYXJlbnQtaWZyYW1lLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuY3BwOlVwZGF0ZWQgZHVtcExheWVyIHRvIG91dHB1dCBtb3JlIGluZm8gYWJvdXQg
dGhlIHRyZWUKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmR1bXBMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNwcDpDaGFuZ2Ugc2V0
TmFtZSBzbyBpdCBvbmx5IGRpc3BsYXlzIHRoZSBwYXNzZWQgaW4gbmFtZSwgd2l0aG91dCB0aGUg
Q0FMYXllciBhZGRyZXNzZXMKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQUNGOjpz
ZXROYW1lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDpNYWtl
IGNhbGxzIHRvIFJlbmRlckxheWVyQ29tcG9zaXRvciB0byBzZXQgdGhlIGNsaXBwaW5nIGJvdW5k
cyBmb3IgaWZyYW1lIGNvbnRlbnQKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcDpIb29rIHRoZSBpZnJhbWUgY29udGVudCB0byB0aGUgcGFyZW50IGlmcmFtZSBl
bGVtZW50CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorCiAy
MDEwLTA0LTI5ICBKb2huIEdyZWdnICA8am9obm55Z0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERtaXRyeSBUaXRvdi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gNTg0MzMpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsMTAgKzM5
OCwxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXI6OmR1bXBMYXllcihUZXh0U3RyZWFtCiAgICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAgdHMgPDwgIigiIDw8ICJHcmFwaGljc0xheWVyIjsK
IAotICAgIGlmIChiZWhhdmlvciAmIExheWVyVHJlZUFzVGV4dERlYnVnKSB7CisgICAgaWYgKGJl
aGF2aW9yICYgTGF5ZXJUcmVlQXNUZXh0RGVidWcpCiAgICAgICAgIHRzIDw8ICIgIiA8PCBzdGF0
aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDxHcmFwaGljc0xheWVyKj4odGhpcykpOwotICAgICAg
ICB0cyA8PCAiIFwiIiA8PCBtX25hbWUgPDwgIlwiIjsKLSAgICB9CisKKyAgICB0cyA8PCAiIFwi
IiA8PCBtX25hbWUgPDwgIlwiIjsKIAogICAgIHRzIDw8ICJcbiI7CiAgICAgZHVtcFByb3BlcnRp
ZXModHMsIGluZGVudCwgYmVoYXZpb3IpOwpAQCAtNDE4LDMzICs0MTgsOCBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXI6OmR1bXBQcm9wZXJ0aWVzKFRleHRTCiAgICAgdHMgPDwgIihhbmNob3IgIiA8PCBt
X2FuY2hvclBvaW50LngoKSA8PCAiICIgPDwgbV9hbmNob3JQb2ludC55KCkgPDwgIilcbiI7CiAK
ICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7Ci0gICAgdHMgPDwgIihib3VuZHMgIiA8
PCBtX3NpemUud2lkdGgoKSA8PCAiICIgPDwgbV9zaXplLmhlaWdodCgpIDw8ICIpXG4iOwotCi0g
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOwotICAgIHRzIDw8ICIob3BhY2l0eSAiIDw8
IG1fb3BhY2l0eSA8PCAiKVxuIjsKLSAgICAKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsg
MSk7Ci0gICAgdHMgPDwgIih1c2luZ1RpbGVkTGF5ZXIgIiA8PCBtX3VzaW5nVGlsZWRMYXllciA8
PCAiKVxuIjsKLQotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKLSAgICB0cyA8PCAi
KHByZXNlcnZlczNEICIgPDwgbV9wcmVzZXJ2ZXMzRCA8PCAiKVxuIjsKLQotICAgIHdyaXRlSW5k
ZW50KHRzLCBpbmRlbnQgKyAxKTsKLSAgICB0cyA8PCAiKGRyYXdzQ29udGVudCAiIDw8IG1fZHJh
d3NDb250ZW50IDw8ICIpXG4iOwotCi0gICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOwog
ICAgIHRzIDw8ICIoYmFja2ZhY2VWaXNpYmlsaXR5ICIgPDwgKG1fYmFja2ZhY2VWaXNpYmlsaXR5
ID8gInZpc2libGUiIDogImhpZGRlbiIpIDw8ICIpXG4iOwogCi0gICAgaWYgKGJlaGF2aW9yICYg
TGF5ZXJUcmVlQXNUZXh0RGVidWcpIHsKLSAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCAr
IDEpOwotICAgICAgICB0cyA8PCAiKCI7Ci0gICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAg
ICAgIHRzIDw8ICJjbGllbnQgIiA8PCBzdGF0aWNfY2FzdDx2b2lkKj4obV9jbGllbnQpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB0cyA8PCAibm8gY2xpZW50IjsKLSAgICAgICAgdHMgPDwg
IilcbiI7Ci0gICAgfQotCiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOwogICAgIHRz
IDw8ICIoYmFja2dyb3VuZENvbG9yICI7CiAgICAgaWYgKCFtX2JhY2tncm91bmRDb2xvclNldCkK
QEAgLTQ1NCwxNiArNDI5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyhU
ZXh0UwogICAgIHRzIDw8ICIpXG4iOwogCiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEp
OwotICAgIHRzIDw8ICIodHJhbnNmb3JtICI7Ci0gICAgaWYgKG1fdHJhbnNmb3JtLmlzSWRlbnRp
dHkoKSkKLSAgICAgICAgdHMgPDwgImlkZW50aXR5IjsKLSAgICBlbHNlIHsKLSAgICAgICAgdHMg
PDwgIlsiIDw8IG1fdHJhbnNmb3JtLm0xMSgpIDw8ICIgIiA8PCBtX3RyYW5zZm9ybS5tMTIoKSA8
PCAiICIgPDwgbV90cmFuc2Zvcm0ubTEzKCkgPDwgIiAiIDw8IG1fdHJhbnNmb3JtLm0xNCgpIDw8
ICJdICI7Ci0gICAgICAgIHRzIDw8ICJbIiA8PCBtX3RyYW5zZm9ybS5tMjEoKSA8PCAiICIgPDwg
bV90cmFuc2Zvcm0ubTIyKCkgPDwgIiAiIDw8IG1fdHJhbnNmb3JtLm0yMygpIDw8ICIgIiA8PCBt
X3RyYW5zZm9ybS5tMjQoKSA8PCAiXSAiOwotICAgICAgICB0cyA8PCAiWyIgPDwgbV90cmFuc2Zv
cm0ubTMxKCkgPDwgIiAiIDw8IG1fdHJhbnNmb3JtLm0zMigpIDw8ICIgIiA8PCBtX3RyYW5zZm9y
bS5tMzMoKSA8PCAiICIgPDwgbV90cmFuc2Zvcm0ubTM0KCkgPDwgIl0gIjsKLSAgICAgICAgdHMg
PDwgIlsiIDw8IG1fdHJhbnNmb3JtLm00MSgpIDw8ICIgIiA8PCBtX3RyYW5zZm9ybS5tNDIoKSA8
PCAiICIgPDwgbV90cmFuc2Zvcm0ubTQzKCkgPDwgIiAiIDw8IG1fdHJhbnNmb3JtLm00NCgpIDw8
ICJdIjsKLSAgICB9Ci0gICAgdHMgPDwgIilcbiI7CisgICAgdHMgPDwgIihib3VuZHMgIiA8PCBt
X3NpemUud2lkdGgoKSA8PCAiICIgPDwgbV9zaXplLmhlaWdodCgpIDw8ICIpXG4iOwogCiAgICAg
d3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOwogICAgIHRzIDw8ICIoY2hpbGRyZW5UcmFuc2Zv
cm0gIjsKQEAgLTQ3Nyw2ICs0NDMsMTggQEAgdm9pZCBHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVy
dGllcyhUZXh0UwogICAgIH0KICAgICB0cyA8PCAiKVxuIjsKIAorICAgIHdyaXRlSW5kZW50KHRz
LCBpbmRlbnQgKyAxKTsKKyAgICB0cyA8PCAiKGRyYXdzQ29udGVudCAiIDw8IG1fZHJhd3NDb250
ZW50IDw8ICIpXG4iOworCisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOworICAgIHRz
IDw8ICIobWFza3NUb0JvdW5kcyAiIDw8IG1fbWFza3NUb0JvdW5kcyA8PCAiKVxuIjsKKworICAg
IHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKKyAgICB0cyA8PCAiKG9wYWNpdHkgIiA8PCBt
X29wYWNpdHkgPDwgIilcbiI7CisgICAgCisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEp
OworICAgIHRzIDw8ICIocHJlc2VydmVzM0QgIiA8PCBtX3ByZXNlcnZlczNEIDw8ICIpXG4iOwor
CiAgICAgaWYgKG1fcmVwbGljYUxheWVyKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRl
bnQgKyAxKTsKICAgICAgICAgdHMgPDwgIihyZXBsaWNhIGxheWVyIjsKQEAgLTQ5NCw2ICs0NzIs
MzEgQEAgdm9pZCBHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyhUZXh0UwogICAgICAgICB0
cyA8PCAiKVxuIjsKICAgICB9CiAgICAgCisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEp
OworICAgIHRzIDw8ICIodHJhbnNmb3JtICI7CisgICAgaWYgKG1fdHJhbnNmb3JtLmlzSWRlbnRp
dHkoKSkKKyAgICAgICAgdHMgPDwgImlkZW50aXR5IjsKKyAgICBlbHNlIHsKKyAgICAgICAgdHMg
PDwgIlsiIDw8IG1fdHJhbnNmb3JtLm0xMSgpIDw8ICIgIiA8PCBtX3RyYW5zZm9ybS5tMTIoKSA8
PCAiICIgPDwgbV90cmFuc2Zvcm0ubTEzKCkgPDwgIiAiIDw8IG1fdHJhbnNmb3JtLm0xNCgpIDw8
ICJdICI7CisgICAgICAgIHRzIDw8ICJbIiA8PCBtX3RyYW5zZm9ybS5tMjEoKSA8PCAiICIgPDwg
bV90cmFuc2Zvcm0ubTIyKCkgPDwgIiAiIDw8IG1fdHJhbnNmb3JtLm0yMygpIDw8ICIgIiA8PCBt
X3RyYW5zZm9ybS5tMjQoKSA8PCAiXSAiOworICAgICAgICB0cyA8PCAiWyIgPDwgbV90cmFuc2Zv
cm0ubTMxKCkgPDwgIiAiIDw8IG1fdHJhbnNmb3JtLm0zMigpIDw8ICIgIiA8PCBtX3RyYW5zZm9y
bS5tMzMoKSA8PCAiICIgPDwgbV90cmFuc2Zvcm0ubTM0KCkgPDwgIl0gIjsKKyAgICAgICAgdHMg
PDwgIlsiIDw8IG1fdHJhbnNmb3JtLm00MSgpIDw8ICIgIiA8PCBtX3RyYW5zZm9ybS5tNDIoKSA8
PCAiICIgPDwgbV90cmFuc2Zvcm0ubTQzKCkgPDwgIiAiIDw8IG1fdHJhbnNmb3JtLm00NCgpIDw8
ICJdIjsKKyAgICB9CisgICAgdHMgPDwgIilcbiI7CisKKyAgICB3cml0ZUluZGVudCh0cywgaW5k
ZW50ICsgMSk7CisgICAgdHMgPDwgIih1c2luZ1RpbGVkTGF5ZXIgIiA8PCBtX3VzaW5nVGlsZWRM
YXllciA8PCAiKVxuIjsKKworICAgIGlmIChiZWhhdmlvciAmIExheWVyVHJlZUFzVGV4dERlYnVn
KSB7CisgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKKyAgICAgICAgdHMgPDwg
IigiOworICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICB0cyA8PCAiY2xpZW50ICIg
PDwgc3RhdGljX2Nhc3Q8dm9pZCo+KG1fY2xpZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdHMgPDwgIm5vIGNsaWVudCI7CisgICAgICAgIHRzIDw8ICIpXG4iOworICAgIH0KKwogICAg
IGlmIChtX2NoaWxkcmVuLnNpemUoKSkgewogICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50
ICsgMSk7CiAgICAgICAgIHRzIDw8ICIoY2hpbGRyZW4gIiA8PCBtX2NoaWxkcmVuLnNpemUoKSA8
PCAiXG4iOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXll
ckNBQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzTGF5ZXJDQUNGLmNwcAkocmV2aXNpb24gNTg0MzMpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
Niw3ICsyNTYsNyBAQCBHcmFwaGljc0xheWVyQ0FDRjo6fkdyYXBoaWNzTGF5ZXJDQUNGKCkKIHZv
aWQgR3JhcGhpY3NMYXllckNBQ0Y6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAg
IFN0cmluZyBsb25nTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJDQUxheWVyKCVwKSBHcmFwaGljc0xh
eWVyKCVwKSAiLCBtX2xheWVyLmdldCgpLCB0aGlzKSArIG5hbWU7Ci0gICAgR3JhcGhpY3NMYXll
cjo6c2V0TmFtZShsb25nTmFtZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TmFtZShuYW1lKTsK
ICAgICAKICAgICBtX2xheWVyLT5zZXROYW1lKGxvbmdOYW1lKTsKIH0KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gNTg0MzMpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
SUZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCkBAIC05
Myw3ICs5NCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVHcmFwaGljc0wKIHsK
ICAgICBtX2dyYXBoaWNzTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CiAgICAg
Ci0jaWZuZGVmIE5ERUJVRwogICAgIGlmIChyZW5kZXJlcigpLT5ub2RlKCkpIHsKICAgICAgICAg
aWYgKHJlbmRlcmVyKCktPm5vZGUoKS0+aXNEb2N1bWVudE5vZGUoKSkKICAgICAgICAgICAgIG1f
Z3JhcGhpY3NMYXllci0+c2V0TmFtZSgiRG9jdW1lbnQgTm9kZSIpOwpAQCAtMTA3LDcgKzEwNyw2
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjcmVhdGVHcmFwaGljc0wKICAgICAgICAgbV9n
cmFwaGljc0xheWVyLT5zZXROYW1lKCJSZWZsZWN0aW9uIik7CiAgICAgZWxzZQogICAgICAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldE5hbWUoIkFub255bW91cyBOb2RlIik7Ci0jZW5kaWYgIC8vIE5E
RUJVRwogCiAgICAgdXBkYXRlTGF5ZXJPcGFjaXR5KHJlbmRlcmVyKCktPnN0eWxlKCkpOwogICAg
IHVwZGF0ZUxheWVyVHJhbnNmb3JtKHJlbmRlcmVyKCktPnN0eWxlKCkpOwpAQCAtMzg0LDYgKzM4
MywxNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAKICAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzUmVjdChjb250ZW50c0JveCgpKTsKICAgICBtX2dy
YXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudChjb250YWluc1BhaW50ZWRDb250ZW50KCkpOwor
CisgICAgLy8gSWYgdGhpcyBpcyBhbiBpZnJhbWUgcGFyZW50LCB1cGRhdGUgdGhlIGlmcmFtZSBj
b250ZW50J3MgYm94CisgICAgaWYgKHJlbmRlcmVyKCktPmlzUmVuZGVySUZyYW1lKCkpIHsKKyAg
ICAgICAgSFRNTElGcmFtZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1l
RWxlbWVudCo+KHJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAgICAgIGlmIChEb2N1bWVudCogY29u
dGVudERvY3VtZW50ID0gZWxlbWVudC0+Y29udGVudERvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
IGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gY29udGVudERvY3VtZW50LT5yZW5kZXJWaWV3KCkpIHsK
KyAgICAgICAgICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3IqIGlmcmFtZUNvbXBvc2l0b3Ig
PSB2aWV3LT5jb21wb3NpdG9yKCk7CisgICAgICAgICAgICAgICAgaWZyYW1lQ29tcG9zaXRvci0+
c2V0Q29udGVudHNCb3goY29udGVudHNCb3goKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbnRlcm5hbEhpZXJh
cmNoeSgpCkBAIC00MTAsOSArNDIwLDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZUNsaXBwaW5nTAogICAgIGlmIChuZWVkc0FuY2VzdG9yQ2xpcCkgewogICAgICAgICBpZiAoIW1f
YW5jZXN0b3JDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdM
YXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCiAgICAg
ICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+c2V0TmFtZSgiQW5jZXN0b3IgY2xpcHBp
bmcgTGF5ZXIiKTsKLSNlbmRpZgogICAgICAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXIt
PnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CiAgICAgICAgICAgICBsYXllcnNDaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgfQpAQCAtNDI1LDkgKzQzMyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVDbGlwcGluZ0wKICAgICBpZiAobmVlZHNEZXNjZW5kYW50Q2xpcCkgewogICAgICAg
ICBpZiAoIW1fY2xpcHBpbmdMYXllcikgewogICAgICAgICAgICAgbV9jbGlwcGluZ0xheWVyID0g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwotI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAg
IG1fY2xpcHBpbmdMYXllci0+c2V0TmFtZSgiQ2hpbGQgY2xpcHBpbmcgTGF5ZXIiKTsKLSNlbmRp
ZgogICAgICAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwog
ICAgICAgICAgICAgbGF5ZXJzQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KQEAgLTQ0OSw5ICs0
NTUsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRm9yZWdyb3VuCiAgICAgaWYg
KG5lZWRzRm9yZWdyb3VuZExheWVyKSB7CiAgICAgICAgIGlmICghbV9mb3JlZ3JvdW5kTGF5ZXIp
IHsKICAgICAgICAgICAgIG1fZm9yZWdyb3VuZExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRl
KHRoaXMpOwotI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIG1fZm9yZWdyb3VuZExheWVyLT5z
ZXROYW1lKCJGb3JlZ3JvdW5kIik7Ci0jZW5kaWYKICAgICAgICAgICAgIG1fZm9yZWdyb3VuZExh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CiAgICAgICAgICAgICBtX2ZvcmVncm91bmRMYXll
ci0+c2V0UGFpbnRpbmdQaGFzZShHcmFwaGljc0xheWVyUGFpbnRGb3JlZ3JvdW5kKTsKICAgICAg
ICAgICAgIGxheWVyQ2hhbmdlZCA9IHRydWU7CkBAIC00NzQsOSArNDc4LDcgQEAgYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZU1hc2tMYXllcgogICAgIGlmIChuZWVkc01hc2tMYXllcikg
ewogICAgICAgICBpZiAoIW1fbWFza0xheWVyKSB7CiAgICAgICAgICAgICBtX21hc2tMYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAg
ICBtX21hc2tMYXllci0+c2V0TmFtZSgiTWFzayIpOwotI2VuZGlmCiAgICAgICAgICAgICBtX21h
c2tMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwogICAgICAgICAgICAgbV9tYXNrTGF5ZXIt
PnNldFBhaW50aW5nUGhhc2UoR3JhcGhpY3NMYXllclBhaW50TWFzayk7CiAgICAgICAgICAgICBs
YXllckNoYW5nZWQgPSB0cnVlOwpAQCAtODIzLDcgKzgyNSwxMSBAQCBGbG9hdFBvaW50IFJlbmRl
ckxheWVyQmFja2luZzo6Y29udGVudHNUCiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWlu
dGluZ0dvZXNUb1dpbmRvdygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPmlz
Um9vdExheWVyKCk7CisgICAgaWYgKCFtX293bmluZ0xheWVyLT5pc1Jvb3RMYXllcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZnJhbWUgcm9vdCBsYXllcnMgcGFpbnQgaW50
byBiYWNraW5nIHN0b3JlLgorICAgIHJldHVybiAhdG9SZW5kZXJWaWV3KHJlbmRlcmVyKCkpLT5k
b2N1bWVudCgpLT5vd25lckVsZW1lbnQoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnNldENvbnRlbnRzTmVlZERpc3BsYXkoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiA1ODQzMykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElGcmFt
ZUVsZW1lbnQuaCIKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICNpbmNsdWRl
ICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC02NjQsMTkg
KzY2NSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZW1vdmVDb21wb3MKICAgICBo
b3N0aW5nTGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpwYXJlbnRJblJvb3RMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCi17Ci0gICAg
QVNTRVJUKGxheWVyLT5pc0NvbXBvc2l0ZWQoKSk7Ci0KLSAgICBHcmFwaGljc0xheWVyKiBsYXll
ckFuY2hvciA9IGxheWVyLT5iYWNraW5nKCktPmNoaWxkRm9yU3VwZXJsYXllcnMoKTsKLQotICAg
IGlmIChsYXllckFuY2hvci0+cGFyZW50KCkgIT0gbV9yb290UGxhdGZvcm1MYXllcikgewotICAg
ICAgICBsYXllckFuY2hvci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgICAgICBpZiAobV9yb290
UGxhdGZvcm1MYXllcikKLSAgICAgICAgICAgIG1fcm9vdFBsYXRmb3JtTGF5ZXItPmFkZENoaWxk
KGxheWVyQW5jaG9yKTsKLSAgICB9Ci19Ci0KICNpZiBFTkFCTEUoVklERU8pCiBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y2FuQWNjZWxlcmF0ZVZpZGVvUmVuZGVyaW5nKFJlbmRlclZpZGVv
KiBvKSBjb25zdAogewpAQCAtNzY0LDExICs3NTIsMzMgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlYnVpbGRDb21wbwogICAgIH0KICAgICAKICAgICBpZiAobGF5ZXJCYWNraW5nKSB7
Ci0gICAgICAgIGxheWVyQmFja2luZy0+cGFyZW50Rm9yU3VibGF5ZXJzKCktPnNldENoaWxkcmVu
KGxheWVyQ2hpbGRyZW4pOworICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVy
SUZyYW1lKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaWZyYW1lIHBhcmVudC4gTWFr
ZSBpdCB0aGUgcGFyZW50IG9mIHRoZSBpZnJhbWUgZG9jdW1lbnQncyByb290CisgICAgICAgICAg
ICBsYXllckJhY2tpbmctPnBhcmVudEZvclN1YmxheWVycygpLT5yZW1vdmVBbGxDaGlsZHJlbigp
OworCisgICAgICAgICAgICBIVE1MSUZyYW1lRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxJRnJhbWVFbGVtZW50Kj4obGF5ZXItPnJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAgICAg
ICAgICBpZiAoRG9jdW1lbnQqIGNvbnRlbnREb2N1bWVudCA9IGVsZW1lbnQtPmNvbnRlbnREb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBjb250ZW50
RG9jdW1lbnQtPnJlbmRlclZpZXcoKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJMYXll
ckNvbXBvc2l0b3IqIGlmcmFtZUNvbXBvc2l0b3IgPSB2aWV3LT5jb21wb3NpdG9yKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmcmFtZUNvbXBvc2l0b3ItPnNldENvbnRlbnRzQm94KGxheWVyQmFj
a2luZy0+Y29udGVudHNCb3goKSk7CisKKyAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NMYXll
ciogaWZyYW1lUm9vdExheWVyID0gaWZyYW1lQ29tcG9zaXRvci0+cm9vdFBsYXRmb3JtTGF5ZXIo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlmcmFtZVJvb3RMYXllcikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxheWVyQmFja2luZy0+cGFyZW50Rm9yU3VibGF5ZXJzKCktPmFkZENoaWxk
KGlmcmFtZVJvb3RMYXllcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGxheWVyQmFja2luZy0+cGFyZW50Rm9yU3VibGF5ZXJz
KCktPnNldENoaWxkcmVuKGxheWVyQ2hpbGRyZW4pOwogICAgICAgICBjaGlsZExheWVyc09mRW5j
bG9zaW5nTGF5ZXIuYXBwZW5kKGxheWVyQmFja2luZy0+Y2hpbGRGb3JTdXBlcmxheWVycygpKTsK
ICAgICB9CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRDb250ZW50c0JveChj
b25zdCBJbnRSZWN0JiBjb250ZW50c0JveCkKK3sKKyAgICBtX2NsaXBwaW5nTGF5ZXItPnNldFBv
c2l0aW9uKEZsb2F0UG9pbnQoY29udGVudHNCb3gueCgpLCBjb250ZW50c0JveC55KCkpKTsKKyAg
ICBtX2NsaXBwaW5nTGF5ZXItPnNldFNpemUoRmxvYXRTaXplKGNvbnRlbnRzQm94LndpZHRoKCks
IGNvbnRlbnRzQm94LmhlaWdodCgpKSk7Cit9CisKIC8vIFRoaXMganVzdCB1cGRhdGVzIGxheWVy
IGdlb21ldHJ5IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGhpZXJhcmNoeS4KIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllclRyZWVHZW9tZXRyeShSZW5kZXJMYXllciogbGF5ZXIp
CiB7CkBAIC05MjIsNyArOTMyLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cm9vdAogCiBHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJvb3RQbGF0
Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yb290UGxhdGZvcm1MYXllci5nZXQo
KTsKKyAgICByZXR1cm4gbV9jbGlwcGluZ0xheWVyID8gbV9jbGlwcGluZ0xheWVyLmdldCgpIDog
bV9yb290UGxhdGZvcm1MYXllci5nZXQoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmRpZE1vdmVPbnNjcmVlbigpCkBAIC05MzAsMTMgKzk0MCwyNyBAQCB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6ZGlkTW92ZU9uc2NyCiAgICAgaWYgKCFtX3Jvb3RQbGF0Zm9ybUxheWVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBGcmFtZSogZnJhbWUgPSBtX3JlbmRlclZpZXctPmZy
YW1lVmlldygpLT5mcmFtZSgpOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSA/IGZyYW1lLT5wYWdl
KCkgOiAwOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgYXR0YWNo
ZWQgPSBmYWxzZTsKKyAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBtX3JlbmRlclZpZXctPmRv
Y3VtZW50KCktPm93bmVyRWxlbWVudCgpOworICAgIGlmIChvd25lckVsZW1lbnQpIHsKKyAgICAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1JlbmRlcklGcmFtZSgpKSB7CisgICAg
ICAgICAgICAvLyBUaGUgbGF5ZXIgd2lsbCBnZXQgaG9va2VkIHVwIHZpYSBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkKKyAgICAgICAgICAgIC8v
IGZvciB0aGUgaWZyYW1lJ3MgcmVuZGVyZXIgaW4gdGhlIHBhcmVudCBkb2N1bWVudC4KKyAgICAg
ICAgICAgIG93bmVyRWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNo
YW5nZSk7CisgICAgICAgICAgICBhdHRhY2hlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CiAK
LSAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKGZy
YW1lLCBtX3Jvb3RQbGF0Zm9ybUxheWVyLmdldCgpKTsKLSAgICBtX3Jvb3RMYXllckF0dGFjaGVk
ID0gdHJ1ZTsKKyAgICBpZiAoIWF0dGFjaGVkKSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1f
cmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBm
cmFtZSA/IGZyYW1lLT5wYWdlKCkgOiAwOworICAgICAgICBpZiAoIXBhZ2UpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5hdHRhY2hSb290
R3JhcGhpY3NMYXllcihmcmFtZSwgbV9yb290UGxhdGZvcm1MYXllci5nZXQoKSk7CisgICAgfQor
ICAgIG1fcm9vdExheWVyQXR0YWNoZWQgPSB0cnVlOyAgICAKIH0KIAogdm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OndpbGxNb3ZlT2Zmc2NyZWVuKCkKQEAgLTk0NCwxOSArOTY4LDQ0IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsTW92ZU9mZnMKICAgICBpZiAoIW1fcm9vdFBs
YXRmb3JtTGF5ZXIgfHwgIW1fcm9vdExheWVyQXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCktPmZyYW1lKCk7Ci0g
ICAgUGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7Ci0gICAgaWYgKCFwYWdl
KQotICAgICAgICByZXR1cm47CisgICAgYm9vbCBkZXRhY2hlZCA9IGZhbHNlOworICAgIEVsZW1l
bnQqIG93bmVyRWxlbWVudCA9IG1fcmVuZGVyVmlldy0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50
KCk7CisgICAgaWYgKG93bmVyRWxlbWVudCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXItPmlz
UmVuZGVySUZyYW1lKCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBsYXllciB3aWxsIGdldCBob29r
ZWQgdXAgdmlhIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckNvbmZpZ3Vy
YXRpb24oKQorICAgICAgICAgICAgLy8gZm9yIHRoZSBpZnJhbWUncyByZW5kZXJlciBpbiB0aGUg
cGFyZW50IGRvY3VtZW50LgorICAgICAgICAgICAgb3duZXJFbGVtZW50LT5zZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgICAgIGRldGFjaGVkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZGV0YWNoZWQpIHsKKyAgICAgICAgRnJh
bWUqIGZyYW1lID0gbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKS0+ZnJhbWUoKTsKKyAgICAgICAg
UGFnZSogcGFnZSA9IGZyYW1lID8gZnJhbWUtPnBhZ2UoKSA6IDA7CisgICAgICAgIGlmICghcGFn
ZSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+
YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoZnJhbWUsIDApOworICAgICAgICBwYWdlLT5jaHJvbWUo
KS0+Y2xpZW50KCktPmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKGZyYW1lLCAwKTsKKyAgICB9CiAg
ICAgbV9yb290TGF5ZXJBdHRhY2hlZCA9IGZhbHNlOwogfQogCiB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlUm9vdExheWVyUG9zaXRpb24oKQogewotICAgIGlmIChtX3Jvb3RQbGF0
Zm9ybUxheWVyKQotICAgICAgICBtX3Jvb3RQbGF0Zm9ybUxheWVyLT5zZXRTaXplKEZsb2F0U2l6
ZShtX3JlbmRlclZpZXctPnJpZ2h0TGF5b3V0T3ZlcmZsb3coKSwgbV9yZW5kZXJWaWV3LT5ib3R0
b21MYXlvdXRPdmVyZmxvdygpKSk7CisgICAgaWYgKG1fcm9vdFBsYXRmb3JtTGF5ZXIpIHsKKyAg
ICAgICAgLy8gRklYTUU6IEFkanVzdCB0aGUgeSBwb3NpdGlvbiBvZiB0aGUgbV9yb290UGxhdGZv
cm1MYXllciBpZiB3ZSBhcmUgY2xpcHBpbmcgYnkgaXRzIHRvcCBlZGdlCisgICAgICAgIC8vIEV2
ZW50dWFsbHkgdGhpcyB3aWxsIGJlIHRha2VuIGNhcmUgb2YgYnkgc2Nyb2xsaW5nIGxvZ2ljCisg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODUxOAor
ICAgICAgICBmbG9hdCBoZWlnaHQgPSBtX3JlbmRlclZpZXctPmJvdHRvbUxheW91dE92ZXJmbG93
KCk7CisgICAgICAgIGZsb2F0IHlPZmZzZXQgPSAwOworCisgICAgICAgIGlmIChtX2NsaXBwaW5n
TGF5ZXIgJiYgaGVpZ2h0ID4gbV9jbGlwcGluZ0xheWVyLT5zaXplKCkuaGVpZ2h0KCkpCisgICAg
ICAgICAgICB5T2Zmc2V0ID0gbV9jbGlwcGluZ0xheWVyLT5zaXplKCkuaGVpZ2h0KCkgLSBoZWln
aHQ7CisKKyAgICAgICAgbV9yb290UGxhdGZvcm1MYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2lu
dCgwLCB5T2Zmc2V0KSk7CisgICAgICAgIG1fcm9vdFBsYXRmb3JtTGF5ZXItPnNldFNpemUoRmxv
YXRTaXplKG1fcmVuZGVyVmlldy0+cmlnaHRMYXlvdXRPdmVyZmxvdygpLCBoZWlnaHQpKTsKKyAg
ICB9CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRTdGFydEFjY2VsZXJhdGVk
QW5pbWF0aW9uKCkKQEAgLTExNTEsMTQgKzEyMDAsMzEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmVuc3VyZVJvb3RQbAogICAgICAgICByZXR1cm47CiAKICAgICBtX3Jvb3RQbGF0Zm9y
bUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApOworICAgIG1fcm9vdFBsYXRmb3JtTGF5
ZXItPnNldE5hbWUoIlJvb3QiKTsKICAgICBtX3Jvb3RQbGF0Zm9ybUxheWVyLT5zZXRTaXplKEZs
b2F0U2l6ZShtX3JlbmRlclZpZXctPnJpZ2h0TGF5b3V0T3ZlcmZsb3coKSwgbV9yZW5kZXJWaWV3
LT5ib3R0b21MYXlvdXRPdmVyZmxvdygpKSk7CiAgICAgbV9yb290UGxhdGZvcm1MYXllci0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAgbV9yb290UGxhdGZvcm1MYXllci0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgpKTsKKwogICAgIC8vIFRoZSByb290IGxheWVyIGRvZXMg
ZmxpcHBpbmcgaWYgd2UgbmVlZCBpdCBvbiB0aGlzIHBsYXRmb3JtLgogICAgIG1fcm9vdFBsYXRm
b3JtTGF5ZXItPnNldEdlb21ldHJ5T3JpZW50YXRpb24oR3JhcGhpY3NMYXllcjo6Y29tcG9zaXRp
bmdDb29yZGluYXRlc09yaWVudGF0aW9uKCkpOwogCiAgICAgLy8gTmVlZCB0byBjbGlwIHRvIHBy
ZXZlbnQgdHJhbnNmb3JtZWQgY29udGVudCBzaG93aW5nIG91dHNpZGUgdGhpcyBmcmFtZQogICAg
IG1fcm9vdFBsYXRmb3JtTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CiAgICAgCisgICAg
Ly8gQ3JlYXRlIGEgY2xpcHBpbmcgbGF5ZXIgaWYgdGhpcyBpcyBhbiBpZnJhbWUKKyAgICBFbGVt
ZW50KiBvd25lckVsZW1lbnQgPSBtX3JlbmRlclZpZXctPmRvY3VtZW50KCktPm93bmVyRWxlbWVu
dCgpOworICAgIGlmIChvd25lckVsZW1lbnQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyICYm
IHJlbmRlcmVyLT5pc1JlbmRlcklGcmFtZSgpKSB7CisgICAgICAgICAgICBtX2NsaXBwaW5nTGF5
ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoMCk7CisgICAgICAgICAgICBtX2NsaXBwaW5nTGF5
ZXItPnNldEdlb21ldHJ5T3JpZW50YXRpb24oR3JhcGhpY3NMYXllcjo6Y29tcG9zaXRpbmdDb29y
ZGluYXRlc09yaWVudGF0aW9uKCkpOworICAgICAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRO
YW1lKCJpZnJhbWUgQ2xpcHBpbmciKTsKKyAgICAgICAgICAgIG1fY2xpcHBpbmdMYXllci0+c2V0
TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICAgICAgICAgIG1fY2xpcHBpbmdMYXllci0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludCgpKTsKKyAgICAgICAgICAgIG1fY2xpcHBpbmdMYXllci0+YWRk
Q2hpbGQobV9yb290UGxhdGZvcm1MYXllci5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBkaWRNb3ZlT25zY3JlZW4oKTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgJKHJldmlzaW9uIDU4NDMzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsOCBA
QCBwdWJsaWM6CiAgICAgLy8gdGhlaXIgcGFyZW50IGRvY3VtZW50LgogICAgIHN0YXRpYyBib29s
IHNob3VsZFByb3BhZ2F0ZUNvbXBvc2l0aW5nVG9JRnJhbWVQYXJlbnQoKTsKIAorICAgIHZvaWQg
c2V0Q29udGVudHNCb3goY29uc3QgSW50UmVjdCYgY29udGVudHNCb3gpOworCiBwcml2YXRlOgog
ICAgIC8vIFdoZXRoZXIgdGhlIGdpdmVuIFJMIG5lZWRzIGEgY29tcG9zaXRpbmcgbGF5ZXIuCiAg
ICAgYm9vbCBuZWVkc1RvQmVDb21wb3NpdGVkKGNvbnN0IFJlbmRlckxheWVyKikgY29uc3Q7CkBA
IC0xNzIsOCArMTc0LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldENvbXBvc2l0aW5nUGFyZW50
KFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kZXJMYXllciogcGFyZW50TGF5ZXIpOwogICAg
IHZvaWQgcmVtb3ZlQ29tcG9zaXRlZENoaWxkcmVuKFJlbmRlckxheWVyKik7CiAKLSAgICB2b2lk
IHBhcmVudEluUm9vdExheWVyKFJlbmRlckxheWVyKik7Ci0KICAgICBib29sIGxheWVySGFzM0RD
b250ZW50KGNvbnN0IFJlbmRlckxheWVyKikgY29uc3Q7CiAKICAgICB2b2lkIGVuc3VyZVJvb3RQ
bGF0Zm9ybUxheWVyKCk7CkBAIC0xOTgsNiArMTk4LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
Y29tcG9zaXRpbmc7CiAgICAgYm9vbCBtX3Jvb3RMYXllckF0dGFjaGVkOwogICAgIGJvb2wgbV9j
b21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkOworCisgICAgLy8gRW5jbG9zaW5nIGNsaXBwaW5n
IGxheWVyIGZvciBpZnJhbWUgY29udGVudAorICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX2Ns
aXBwaW5nTGF5ZXI7CiAgICAgCiAjaWYgUFJPRklMRV9MQVlFUl9SRUJVSUxECiAgICAgaW50IG1f
cm9vdExheWVyVXBkYXRlQ291bnQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1ODc2NSkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisKKzIwMTAt
MDUtMDQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hZGUgY29tcG9zaXRlZCBpZnJhbWVz
IHdvcmsgb24gV2luZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzI0NDYKKyAgICAgICAgCisgICAgICAgIEkndmUgYWRkZWQgb25lIG5ldyB0ZXN0
IChjb21wb3NpdGVkLXBhcmVudC1pZnJhbWUuaHRtbCkgd2hpY2gKKyAgICAgICAgc2hvd3MgYm90
aCB0aGUgcGFyZW50IGlmcmFtZSBhbmQgdGhlIGlmcmFtZSBjb250ZW50cyBkb2N1bWVudAorICAg
ICAgICB3aXRoIGNvbXBvc2l0aW5nLiBJdCBhbHNvIHNob3dzIGNvcnJlY3QgYmVoYXZpb3Igd2l0
aCBjbGlwcGluZywKKyAgICAgICAgYm9yZGVycywgbWFyZ2lucywgcGFkZGluZyBhbmQgc2hhZG93
cy4gSXQgYWxzbyBzZXRzIHRoZSBpZnJhbWUKKyAgICAgICAgc2l6ZSBhcyBhIHBlcmNlbnQgb2Yg
dGhlIHBhZ2UgdG8gc2hvdyBjb3JyZWN0IHJlc2l6aW5nIGJlaGF2aW9yLgorICAgICAgICBUaGUg
ZXhpc3RpbmcgY29tcG9zaXRlZC1pZnJhbWUuaHRtbCBoYXMgYmVlbiBjaGFuZ2VkIHNpbWlsYXJs
eQorICAgICAgICBidXQgd2l0aG91dCB0aGUgcGFnZSByZXNpemluZy4gVGhlIGV4aXN0aW5nIHBy
ZXNlcnZlLTNkLXN3aXRjaGluZy5odG1sCisgICAgICAgIHRlc3QgbmVlZGVkIG5ldyByZXN1bHRz
IGJlY2F1c2Ugb2YgY2hhbmdlcyB0byB0aGUgbGF5ZXIgZHVtcGVyLgorCisgICAgICAgICogY29t
cG9zaXRpbmcvZ2VvbWV0cnkvcHJlc2VydmUtM2Qtc3dpdGNoaW5nLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBjb21wb3NpdGluZy9pZnJhbWVzL2NvbXBvc2l0ZWQtaWZyYW1lLmh0bWw6CisgICAg
ICAgICogY29tcG9zaXRpbmcvaWZyYW1lcy9jb21wb3NpdGVkLXBhcmVudC1pZnJhbWUuaHRtbDog
QWRkZWQuCisgICAgICAgICogY29tcG9zaXRpbmcvaWZyYW1lcy9yZXNvdXJjZXMvY29tcG9zaXRl
ZC1zdWJmcmFtZS5odG1sOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9pZnJh
bWVzL2NvbXBvc2l0ZWQtaWZyYW1lLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vY29tcG9zaXRpbmcvaWZyYW1lcy9jb21wb3NpdGVkLXBhcmVudC1pZnJhbWUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKwogMjAxMC0wNC0yOSAgSm9obiBHcmVnZyAgPGpvaG5ueWdAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEbWl0cnkgVGl0b3YuCkluZGV4OiBMYXlvdXRUZXN0
cy9jb21wb3NpdGluZy9nZW9tZXRyeS9wcmVzZXJ2ZS0zZC1zd2l0Y2hpbmctZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L3ByZXNlcnZl
LTNkLXN3aXRjaGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU4NzY0KQorKysgTGF5b3V0VGVz
dHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvcHJlc2VydmUtM2Qtc3dpdGNoaW5nLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMSw3NSBAQAogVGhlIGdyZWVuIGJveCBhcHBlYXIg
YW5nbGVkIG91dCBmcm9tIHRoZSB5ZWxsb3cgYm94IGFuZCBlbWJlZGRlZCBpbiBpdC4KIAogLXdl
YmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooLTEwMHB4KSByb3RhdGVZKDQ1ZGVnKTsKLShHcmFw
aGljc0xheWVyCisoR3JhcGhpY3NMYXllciAiUm9vdCIKICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkK
LSAgKGFuY2hvciAwLjUwIDAuNTApCisgIChhbmNob3IgMC4wMCAwLjAwKQorICAoYmFja2ZhY2VW
aXNpYmlsaXR5IHZpc2libGUpCisgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKICAgKGJvdW5kcyA4
MDAuMDAgNjAwLjAwKQorICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgIChkcmF3c0Nv
bnRlbnQgMCkKKyAgKG1hc2tzVG9Cb3VuZHMgMSkKICAgKG9wYWNpdHkgMS4wMCkKLSAgKHVzaW5n
VGlsZWRMYXllciAwKQogICAocHJlc2VydmVzM0QgMCkKLSAgKGRyYXdzQ29udGVudCAwKQotICAo
YmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCi0gIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKICAg
KHRyYW5zZm9ybSBpZGVudGl0eSkKLSAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAo
dXNpbmdUaWxlZExheWVyIDApCiAgIChjaGlsZHJlbiAxCi0gICAgKEdyYXBoaWNzTGF5ZXIKKyAg
ICAoR3JhcGhpY3NMYXllciAiRG9jdW1lbnQgTm9kZSIKICAgICAgIChwb3NpdGlvbiAwLjAwIDAu
MDApCiAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkg
dmlzaWJsZSkKKyAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKICAgICAgIChib3VuZHMgODAw
LjAwIDYwMC4wMCkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChk
cmF3c0NvbnRlbnQgMCkKKyAgICAgIChtYXNrc1RvQm91bmRzIDApCiAgICAgICAob3BhY2l0eSAx
LjAwKQotICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQogICAgICAgKHByZXNlcnZlczNEIDApCi0g
ICAgICAoZHJhd3NDb250ZW50IDApCi0gICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUp
Ci0gICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCiAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5
KQotICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKHVzaW5nVGlsZWRM
YXllciAwKQogICAgICAgKGNoaWxkcmVuIDEKLSAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAg
ICAgKEdyYXBoaWNzTGF5ZXIgIlJlbmRlckJsb2NrIChyZWxhdGl2ZSBwb3NpdGlvbmVkKSBjb250
YWluZXIiCiAgICAgICAgICAgKHBvc2l0aW9uIDEwOC4wMCA3My4wMCkKICAgICAgICAgICAoYW5j
aG9yIDAuNTAgMC41MCkKKyAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisg
ICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQogICAgICAgICAgIChib3VuZHMgMzA0LjAw
IDMwNC4wMCkKKyAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gWzEuMDAgMC4wMCAwLjAwIDAu
MDBdIFswLjAwIDEuMDAgMC4wMCAwLjAwXSBbMC4wMCAwLjAwIDEuMDAgLTAuMDBdIFswLjAwIDAu
MDAgMC4wMCAxLjAwXSkKKyAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgKG1h
c2tzVG9Cb3VuZHMgMCkKICAgICAgICAgICAob3BhY2l0eSAxLjAwKQotICAgICAgICAgICh1c2lu
Z1RpbGVkTGF5ZXIgMCkKICAgICAgICAgICAocHJlc2VydmVzM0QgMCkKLSAgICAgICAgICAoZHJh
d3NDb250ZW50IDEpCi0gICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQotICAg
ICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKICAgICAgICAgICAodHJhbnNmb3JtIGlkZW50
aXR5KQotICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBbMS4wMCAwLjAwIDAuMDAgMC4wMF0g
WzAuMDAgMS4wMCAwLjAwIDAuMDBdIFswLjAwIDAuMDAgMS4wMCAtMC4wMF0gWzAuMDAgMC4wMCAw
LjAwIDEuMDBdKQorICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKICAgICAgICAgICAoY2hp
bGRyZW4gMQotICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgIChHcmFwaGlj
c0xheWVyICJSZW5kZXJCbG9jayBwYXJlbnQiCiAgICAgICAgICAgICAgIChwb3NpdGlvbiAxMi4w
MCAxMi4wMCkKICAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgICAg
IChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAgKGJhY2tncm91bmRD
b2xvciBub25lKQogICAgICAgICAgICAgICAoYm91bmRzIDI4MC4wMCAyODAuMDApCisgICAgICAg
ICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgKGRyYXdz
Q29udGVudCAxKQorICAgICAgICAgICAgICAobWFza3NUb0JvdW5kcyAwKQogICAgICAgICAgICAg
ICAob3BhY2l0eSAwLjgwKQotICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCiAgICAg
ICAgICAgICAgIChwcmVzZXJ2ZXMzRCAxKQotICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEp
Ci0gICAgICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKLSAgICAgICAgICAg
ICAgKGJhY2tncm91bmRDb2xvciBub25lKQogICAgICAgICAgICAgICAodHJhbnNmb3JtIFswLjc3
IC0wLjU2IC0wLjMyIDAuMDBdIFswLjAwIDAuNTAgLTAuODcgMC4wMF0gWzAuNjQgMC42NiAwLjM4
IDAuMDBdIFswLjAwIDAuMDAgMC4wMCAxLjAwXSkKLSAgICAgICAgICAgICAgKGNoaWxkcmVuVHJh
bnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCiAgICAg
ICAgICAgICAgIChjaGlsZHJlbiAxCi0gICAgICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAg
ICAgICAgICAgICAgICAoR3JhcGhpY3NMYXllciAiUmVuZGVyQmxvY2sgKHBvc2l0aW9uZWQpIgog
ICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uIDQwLjAwIDQwLjAwKQogICAgICAgICAgICAgICAg
ICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgICAgICAgICAoYmFja2ZhY2VWaXNpYmls
aXR5IHZpc2libGUpCisgICAgICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCiAg
ICAgICAgICAgICAgICAgICAoYm91bmRzIDIwMC4wMCAyMDAuMDApCisgICAgICAgICAgICAgICAg
ICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgICAgICAoZHJhd3ND
b250ZW50IDEpCisgICAgICAgICAgICAgICAgICAobWFza3NUb0JvdW5kcyAwKQogICAgICAgICAg
ICAgICAgICAgKG9wYWNpdHkgMC43MCkKLSAgICAgICAgICAgICAgICAgICh1c2luZ1RpbGVkTGF5
ZXIgMCkKICAgICAgICAgICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQotICAgICAgICAgICAgICAg
ICAgKGRyYXdzQ29udGVudCAxKQotICAgICAgICAgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0
eSB2aXNpYmxlKQotICAgICAgICAgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQogICAg
ICAgICAgICAgICAgICAgKHRyYW5zZm9ybSBbMC43NyAwLjAwIDAuNjQgMC4wMF0gWzAuMDAgMS4w
MCAwLjAwIDAuMDBdIFstMC42NCAwLjAwIDAuNzcgMC4wMF0gWzAuMDAgMC4wMCA1MC4wMCAxLjAw
XSkKLSAgICAgICAgICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAg
ICAgICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKICAgICAgICAgICAgICAgICApCiAgICAg
ICAgICAgICAgICkKICAgICAgICAgICAgICkKSW5kZXg6IExheW91dFRlc3RzL2NvbXBvc2l0aW5n
L2lmcmFtZXMvY29tcG9zaXRlZC1pZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9jb21wb3NpdGluZy9pZnJhbWVzL2NvbXBvc2l0ZWQtaWZyYW1lLmh0bWwJKHJldmlzaW9uIDU4
NzY0KQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaWZyYW1lcy9jb21wb3NpdGVkLWlmcmFt
ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00LDkgKzQsMTEgQEAKIDxoZWFkPgogICA8c3R5bGUg
dHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgogICAgIGlmcmFtZSB7Ci0gICAgICAgIGJv
cmRlcjogMnB4IHNvbGlkIGJsYWNrOwotICAgICAgICBoZWlnaHQ6IDE1MHB4OwotICAgICAgICB3
aWR0aDogMzAwcHg7CisgICAgICAgIGJvcmRlcjogMTBweCBzb2xpZCBibGFjazsKKyAgICAgICAg
cGFkZGluZzogMTBweDsKKyAgICAgICAgaGVpZ2h0OiA2MCU7CisgICAgICAgIHdpZHRoOiA4MCU7
CisgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDIwcHggYmxhY2s7CiAgICAgfQogICA8
L3N0eWxlPgogICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgi
PgpAQCAtMzIsNyArMzQsNyBAQAogPGJvZHk+CiAKICAgICA8IS0tIFRoZSBwYXJlbnQgZG9jdW1l
bnQgc2hvdWxkIGJlIHRocm93biBpbnRvIGNvbXBvc2l0aW5nIG1vZGUgYnkgdGhlIGlmcmFtZS4g
LS0+Ci0gICAgPGlmcmFtZSBzcmM9InJlc291cmNlcy9jb21wb3NpdGVkLXN1YmZyYW1lLmh0bWwi
PjwvaWZyYW1lPgorICAgIDxpZnJhbWUgaWQ9InBhcmVudC1pZnJhbWUiIHNyYz0icmVzb3VyY2Vz
L2NvbXBvc2l0ZWQtc3ViZnJhbWUuaHRtbCI+PC9pZnJhbWU+CiAKICAgICA8cHJlIGlkPSJsYXll
cnMiPkxheWVyIHRyZWUgYXBwZWFycyBoZXJlIGluIERSVC48L3ByZT4KIDwvYm9keT4KSW5kZXg6
IExheW91dFRlc3RzL2NvbXBvc2l0aW5nL2lmcmFtZXMvY29tcG9zaXRlZC1wYXJlbnQtaWZyYW1l
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaWZyYW1lcy9jb21w
b3NpdGVkLXBhcmVudC1pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL2lmcmFtZXMvY29tcG9zaXRlZC1wYXJlbnQtaWZyYW1lLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDIgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgor
ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgIGlmcmFtZSB7Cisg
ICAgICAgIGJvcmRlcjogMTBweCBzb2xpZCBibGFjazsKKyAgICAgICAgcGFkZGluZzogNXB4Owor
ICAgICAgICBoZWlnaHQ6IDE1MHB4OworICAgICAgICB3aWR0aDogMzAwcHg7CisgICAgICAgIC13
ZWJraXQtYm94LXNoYWRvdzogMCAwIDIwcHggYmxhY2s7CisgICAgICAgIC13ZWJraXQtdHJhbnNm
b3JtOiB0cmFuc2xhdGVYKDApOworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgeworICAgICAgICAvLyBOZWVkIHRvIHdhaXQg
Zm9yIGNvbXBvc2l0aW5nIGxheWVycyB0byBiZSB1cGRhdGVkLgorICAgICAgICB3aW5kb3cuc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5
ZXJzJykuaW5uZXJIVE1MID0gbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5ZXJUcmVlQXNUZXh0KCk7
CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9LCAwKTsKKyAgICB9CisKKyAgICB3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFsc2UpOworICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorCisgICAgPCEtLSBUaGUgcGFyZW50IGRvY3VtZW50IHNob3VsZCBiZSB0aHJvd24gaW50
byBjb21wb3NpdGluZyBtb2RlIGJ5IHRoZSBpZnJhbWUuIC0tPgorICAgIDxpZnJhbWUgaWQ9InBh
cmVudC1pZnJhbWUiIHNyYz0icmVzb3VyY2VzL2NvbXBvc2l0ZWQtc3ViZnJhbWUuaHRtbCI+PC9p
ZnJhbWU+CisKKyAgICA8cHJlIGlkPSJsYXllcnMiPkxheWVyIHRyZWUgYXBwZWFycyBoZXJlIGlu
IERSVC48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2NvbXBvc2l0
aW5nL2lmcmFtZXMvcmVzb3VyY2VzL2NvbXBvc2l0ZWQtc3ViZnJhbWUuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9pZnJhbWVzL3Jlc291cmNlcy9jb21wb3NpdGVk
LXN1YmZyYW1lLmh0bWwJKHJldmlzaW9uIDU4NzY0KQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRp
bmcvaWZyYW1lcy9yZXNvdXJjZXMvY29tcG9zaXRlZC1zdWJmcmFtZS5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0zLDE4ICszLDIyIEBACiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGUgdHlwZT0idGV4
dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgIGJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOnNpbHZl
ciB9CisgICAgCiAgICAgLmJveCB7Ci0gICAgICAgIGhlaWdodDogMTAwcHg7Ci0gICAgICAgIHdp
ZHRoOiAxMDBweDsKKyAgICAgICAgaGVpZ2h0OiAyMDBweDsKKyAgICAgICAgd2lkdGg6IDIwMHB4
OwogICAgICAgICBtYXJnaW46IDEwcHg7CisgICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5z
bGF0ZVooMCk7CisgICAgICAgIG92ZXJmbG93OmhpZGRlbjsKICAgICB9CiAgIDwvc3R5bGU+CiA8
L2hlYWQ+CiA8Ym9keT4KIAotICAgIDxkaXYgY2xhc3M9ImJveCI+CisgICAgPGRpdiBpZD0iaWZy
YW1lLWNvbnRlbnQiIGNsYXNzPSJib3giPgogICAgIDwvZGl2PgogCiA8L2JvZHk+CkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaWZyYW1lcy9jb21wb3NpdGVkLWlm
cmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L2NvbXBvc2l0aW5nL2lmcmFtZXMvY29tcG9zaXRlZC1pZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA1ODc2NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9pZnJh
bWVzL2NvbXBvc2l0ZWQtaWZyYW1lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0
MiArMSwxMDkgQEAKIAotKEdyYXBoaWNzTGF5ZXIKKyhHcmFwaGljc0xheWVyICJSb290IgogICAo
cG9zaXRpb24gMC4wMCAwLjAwKQotICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgKGFuY2hvciAwLjAw
IDAuMDApCisgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgKGJhY2tncm91bmRDb2xv
ciBub25lKQogICAoYm91bmRzIDgwMC4wMCA2MDAuMDApCisgIChjaGlsZHJlblRyYW5zZm9ybSBp
ZGVudGl0eSkKKyAgKGRyYXdzQ29udGVudCAwKQorICAobWFza3NUb0JvdW5kcyAxKQogICAob3Bh
Y2l0eSAxLjAwKQotICAodXNpbmdUaWxlZExheWVyIDApCiAgIChwcmVzZXJ2ZXMzRCAwKQotICAo
ZHJhd3NDb250ZW50IDApCi0gIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKLSAgKGJhY2tn
cm91bmRDb2xvciBub25lKQogICAodHJhbnNmb3JtIGlkZW50aXR5KQotICAoY2hpbGRyZW5UcmFu
c2Zvcm0gaWRlbnRpdHkpCisgICh1c2luZ1RpbGVkTGF5ZXIgMCkKICAgKGNoaWxkcmVuIDEKLSAg
ICAoR3JhcGhpY3NMYXllcgotICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAoR3JhcGhp
Y3NMYXllciAiRG9jdW1lbnQgTm9kZSIKKyAgICAgIChwb3NpdGlvbiAtMTIuMDAgMC4wMCkKICAg
ICAgIChhbmNob3IgMC41MCAwLjUwKQotICAgICAgKGJvdW5kcyA4MDAuMDAgNjAwLjAwKQotICAg
ICAgKG9wYWNpdHkgMS4wMCkKLSAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKLSAgICAgIChwcmVz
ZXJ2ZXMzRCAwKQotICAgICAgKGRyYXdzQ29udGVudCAwKQogICAgICAgKGJhY2tmYWNlVmlzaWJp
bGl0eSB2aXNpYmxlKQogICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQotICAgICAgKHRyYW5z
Zm9ybSBpZGVudGl0eSkKKyAgICAgIChib3VuZHMgODEyLjAwIDYwMC4wMCkKICAgICAgIChjaGls
ZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChkcmF3c0NvbnRlbnQgMCkKKyAgICAgICht
YXNrc1RvQm91bmRzIDApCisgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgKHByZXNlcnZlczNE
IDApCisgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKHVzaW5nVGlsZWRMYXllciAw
KQogICAgICAgKGNoaWxkcmVuIDEKLSAgICAgICAgKEdyYXBoaWNzTGF5ZXIKLSAgICAgICAgICAo
cG9zaXRpb24gOC4wMCA4LjAwKQorICAgICAgICAoR3JhcGhpY3NMYXllciAiUmVuZGVyUGFydE9i
amVjdCBwYXJlbnQtaWZyYW1lIgorICAgICAgICAgIChwb3NpdGlvbiAwLjAwIC0xMi4wMCkKICAg
ICAgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKLSAgICAgICAgICAoYm91bmRzIDMwNC4wMCAxNTQu
MDApCi0gICAgICAgICAgKG9wYWNpdHkgMS4wMCkKLSAgICAgICAgICAodXNpbmdUaWxlZExheWVy
IDApCi0gICAgICAgICAgKHByZXNlcnZlczNEIDApCi0gICAgICAgICAgKGRyYXdzQ29udGVudCAx
KQogICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKICAgICAgICAgICAoYmFj
a2dyb3VuZENvbG9yIG5vbmUpCi0gICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAg
ICAgICAoYm91bmRzIDcwNy4wMCA0NDAuMDApCiAgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3Jt
IGlkZW50aXR5KQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAobWFza3NU
b0JvdW5kcyAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgKHByZXNlcnZl
czNEIDApCisgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAodXNpbmdU
aWxlZExheWVyIDApCisgICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgICAgIChHcmFwaGlj
c0xheWVyICJpZnJhbWUgQ2xpcHBpbmciCisgICAgICAgICAgICAgIChwb3NpdGlvbiA0MC4wMCA0
MC4wMCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjAwIDAuMDApCisgICAgICAgICAgICAgIChi
YWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAgKGJhY2tncm91bmRDb2xv
ciBub25lKQorICAgICAgICAgICAgICAoYm91bmRzIDYyNy4wMCAzNjAuMDApCisgICAgICAgICAg
ICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgKGRyYXdzQ29u
dGVudCAwKQorICAgICAgICAgICAgICAobWFza3NUb0JvdW5kcyAxKQorICAgICAgICAgICAgICAo
b3BhY2l0eSAxLjAwKQorICAgICAgICAgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgICAgICAg
ICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAw
KQorICAgICAgICAgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAgICAgICAgIChHcmFwaGljc0xh
eWVyICJSb290IgorICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uIDAuMDAgMC4wMCkKKyAgICAg
ICAgICAgICAgICAgIChhbmNob3IgMC4wMCAwLjAwKQorICAgICAgICAgICAgICAgICAgKGJhY2tm
YWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgICAgICAgICAgKGJhY2tncm91bmRDb2xv
ciBub25lKQorICAgICAgICAgICAgICAgICAgKGJvdW5kcyA2MjcuMDAgMzYwLjAwKQorICAgICAg
ICAgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgICAg
ICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgICAgICAgICAgICAgKG1hc2tzVG9Cb3VuZHMgMSkK
KyAgICAgICAgICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgICAgICAgICAocHJl
c2VydmVzM0QgMCkKKyAgICAgICAgICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAg
ICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgICAgICAgICAoY2hp
bGRyZW4gMQorICAgICAgICAgICAgICAgICAgICAoR3JhcGhpY3NMYXllciAiRG9jdW1lbnQgTm9k
ZSIKKyAgICAgICAgICAgICAgICAgICAgICAocG9zaXRpb24gMC4wMCAwLjAwKQorICAgICAgICAg
ICAgICAgICAgICAgIChhbmNob3IgMC41MCAwLjUwKQorICAgICAgICAgICAgICAgICAgICAgIChi
YWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAoYmFja2dy
b3VuZENvbG9yIG5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgKGJvdW5kcyA2MjcuMDAgMzYw
LjAwKQorICAgICAgICAgICAgICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkK
KyAgICAgICAgICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgICAgICAg
ICAgICAgKG1hc2tzVG9Cb3VuZHMgMCkKKyAgICAgICAgICAgICAgICAgICAgICAob3BhY2l0eSAx
LjAwKQorICAgICAgICAgICAgICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAg
ICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAgICAgICAgICAgKHVz
aW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAgICAgICAgIChjaGlsZHJlbiAxCisgICAg
ICAgICAgICAgICAgICAgICAgICAoR3JhcGhpY3NMYXllciAiUmVuZGVyQmxvY2sgaWZyYW1lLWNv
bnRlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3NpdGlvbiAxOC4wMCAxMC4wMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAoYm91bmRzIDIxMC4wMCAyMTAuMDApCisgICAgICAgICAgICAgICAgICAgICAgICAg
IChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
KGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAobWFza3NUb0JvdW5k
cyAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAocHJlc2VydmVzM0QgMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzaW5n
VGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAg
ICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgKQorICAg
ICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgICAgICAg
ICkKICAgICAgICAgKQogICAgICAgKQogICAgICkKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9jb21wb3NpdGluZy9pZnJhbWVzL2NvbXBvc2l0ZWQtcGFyZW50LWlmcmFtZS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5n
L2lmcmFtZXMvY29tcG9zaXRlZC1wYXJlbnQtaWZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9pZnJhbWVzL2NvbXBv
c2l0ZWQtcGFyZW50LWlmcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTEyIEBACisKKyhHcmFwaGljc0xheWVyICJSb290IgorICAocG9zaXRpb24gMC4wMCAwLjAwKQor
ICAoYW5jaG9yIDAuMDAgMC4wMCkKKyAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAo
YmFja2dyb3VuZENvbG9yIG5vbmUpCisgIChib3VuZHMgODAwLjAwIDYwMC4wMCkKKyAgKGNoaWxk
cmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAoZHJhd3NDb250ZW50IDApCisgIChtYXNrc1RvQm91
bmRzIDEpCisgIChvcGFjaXR5IDEuMDApCisgIChwcmVzZXJ2ZXMzRCAwKQorICAodHJhbnNmb3Jt
IGlkZW50aXR5KQorICAodXNpbmdUaWxlZExheWVyIDApCisgIChjaGlsZHJlbiAxCisgICAgKEdy
YXBoaWNzTGF5ZXIgIkRvY3VtZW50IE5vZGUiCisgICAgICAocG9zaXRpb24gLTEyLjAwIDAuMDAp
CisgICAgICAoYW5jaG9yIDAuNTAgMC41MCkKKyAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlz
aWJsZSkKKyAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgIChib3VuZHMgODEyLjAw
IDYwMC4wMCkKKyAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgIChkcmF3
c0NvbnRlbnQgMCkKKyAgICAgIChtYXNrc1RvQm91bmRzIDApCisgICAgICAob3BhY2l0eSAxLjAw
KQorICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAg
ICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgKEdyYXBo
aWNzTGF5ZXIgIlJlbmRlclBhcnRPYmplY3QgcGFyZW50LWlmcmFtZSIKKyAgICAgICAgICAocG9z
aXRpb24gMC4wMCAtMTIuMDApCisgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAg
ICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgIChiYWNrZ3JvdW5kQ29s
b3Igbm9uZSkKKyAgICAgICAgICAoYm91bmRzIDM3MC4wMCAyMjAuMDApCisgICAgICAgICAgKGNo
aWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAg
ICAgICAgICAobWFza3NUb0JvdW5kcyAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAg
ICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAg
ICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAg
ICAgICAgIChHcmFwaGljc0xheWVyICJpZnJhbWUgQ2xpcHBpbmciCisgICAgICAgICAgICAgIChw
b3NpdGlvbiAzNS4wMCAzNS4wMCkKKyAgICAgICAgICAgICAgKGFuY2hvciAwLjAwIDAuMDApCisg
ICAgICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAg
KGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICAgICAoYm91bmRzIDMwMC4wMCAxNTAu
MDApCisgICAgICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAg
ICAgICAgKGRyYXdzQ29udGVudCAwKQorICAgICAgICAgICAgICAobWFza3NUb0JvdW5kcyAxKQor
ICAgICAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICAgICAocHJlc2VydmVzM0Qg
MCkKKyAgICAgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgKHVz
aW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAgICAg
ICAgIChHcmFwaGljc0xheWVyICJSb290IgorICAgICAgICAgICAgICAgICAgKHBvc2l0aW9uIDAu
MDAgLTgwLjAwKQorICAgICAgICAgICAgICAgICAgKGFuY2hvciAwLjAwIDAuMDApCisgICAgICAg
ICAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAgICAgICAg
ICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAgICAgICAgICAgICAoYm91bmRzIDI4NS4w
MCAyMzAuMDApCisgICAgICAgICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkp
CisgICAgICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDApCisgICAgICAgICAgICAgICAgICAo
bWFza3NUb0JvdW5kcyAxKQorICAgICAgICAgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAg
ICAgICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAgICAgICAgKHRyYW5zZm9y
bSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAg
ICAgICAgICAgICAgIChjaGlsZHJlbiAxCisgICAgICAgICAgICAgICAgICAgIChHcmFwaGljc0xh
eWVyICJEb2N1bWVudCBOb2RlIgorICAgICAgICAgICAgICAgICAgICAgIChwb3NpdGlvbiAwLjAw
IDAuMDApCisgICAgICAgICAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAg
ICAgICAgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgICAg
ICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAo
Ym91bmRzIDI4NS4wMCAyMzAuMDApCisgICAgICAgICAgICAgICAgICAgICAgKGNoaWxkcmVuVHJh
bnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkK
KyAgICAgICAgICAgICAgICAgICAgICAobWFza3NUb0JvdW5kcyAwKQorICAgICAgICAgICAgICAg
ICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgICAgICAgICAgICAgKHByZXNlcnZlczNE
IDApCisgICAgICAgICAgICAgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAg
ICAgICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgICAgICAgICAgICAg
KGNoaWxkcmVuIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIChHcmFwaGljc0xheWVyICJSZW5k
ZXJCbG9jayBpZnJhbWUtY29udGVudCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvc2l0
aW9uIDE4LjAwIDEwLjAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5jaG9yIDAuNTAg
MC41MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNp
YmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIChib3VuZHMgMjEwLjAwIDIxMC4wMCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIChtYXNrc1RvQm91bmRzIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGFjaXR5
IDEuMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgICAgICAgICAgICAgICAp
CisgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAg
ICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICApCisgICAgICAg
ICAgICApCisgICAgICAgICAgKQorICAgICAgICApCisgICAgICApCisgICAgKQorICApCispCisK
</data>
<flag name="review"
          id="39134"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55077</attachid>
            <date>2010-05-04 17:31:30 -0700</date>
            <delta_ts>2010-05-04 18:08:43 -0700</delta_ts>
            <desc>Patch with suggested changes</desc>
            <filename>32446.patch</filename>
            <type>text/plain</type>
            <size>24285</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODc4NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDUtMDQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
ZGUgY29tcG9zaXRlZCBpZnJhbWVzIHdvcmsgb24gV2luZG93cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI0NDYKKyAgICAgICAgCisgICAgICAgIFRo
aXMgY29tcGxldGVzIHRoZSB3b3JrIGluIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
LzU3OTE5CisgICAgICAgIHRvIGNyZWF0ZSBjb21wb3NpdGluZyBsYXllcnMgaW4gdGhlIHBhcmVu
dCBkb2N1bWVudCB3aGVuIGFuIGlmcmFtZSBoYXMgCisgICAgICAgIGEgY29tcG9zaXRpbmcgbGF5
ZXIuIFRoZSBwYXJlbnQgZG9jdW1lbnQgaGFzIGEgbGF5ZXIgZm9yIHRoZSBpZnJhbWUgCisgICAg
ICAgIGVsZW1lbnQgYW5kIGJ1aWxkcyBhIGxheWVyIHRyZWUgdG8gdGhlIHBhZ2Ugcm9vdC4gVGhl
IGxheWVyIHRyZWUgZm9yIHRoZQorICAgICAgICBpZnJhbWUgZG9jdW1lbnQgaXMgdGhlbiBwYXJl
bnRlZCB0byB0aGUgaWZyYW1lIGVsZW1lbnQncyBHcmFwaGljc0xheWVyLgorICAgICAgICAKKyAg
ICAgICAgVGhlIFJlbmRlckxheWVyQ29tcG9zaXRvciBmb3IgdGhlIGlmcmFtZSBkb2N1bWVudCAo
d2hpY2ggb3ducyB0aGUKKyAgICAgICAgcm9vdCBvZiB0aGUgbGF5ZXIgdHJlZSkgbm93IGhhcyBh
IGNsaXBwaW5nTGF5ZXIgd2hpY2ggaXMgdGhlIAorICAgICAgICBwYXJlbnQgb2YgdGhlIGxheWVy
IHRyZWUgcm9vdCBzbyBpdCBjYW4gYmUgY2xpcHBlZCB0byB0aGUgcGFyZW50CisgICAgICAgIGlm
cmFtZSdzIGJvdW5kcywgdGFraW5nIGludG8gYWNjb3VudCBib3JkZXJzLCBwYWRkaW5nLCBldGMu
IGluCisgICAgICAgIHRoZSBwYXJlbnQgaWZyYW1lIGVsZW1lbnQuCisgICAgICAgIAorICAgICAg
ICBJIGFsc28gZ290IHJpZCBvZiBhIG5vIGxvbmdlciB1c2VkIGZ1bmN0aW9uOiBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnBhcmVudEluUm9vdExheWVyCisKKyAgICAgICAgVGVzdDogY29tcG9zaXRp
bmcvaWZyYW1lcy9jb21wb3NpdGVkLXBhcmVudC1pZnJhbWUuaHRtbAorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6TWFrZSBjYWxscyB0byBSZW5kZXJMYXllckNv
bXBvc2l0b3IgdG8gc2V0IHRoZSBjbGlwcGluZyBib3VuZHMgZm9yIGlmcmFtZSBjb250ZW50Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6SG9vayB0aGUgaWZy
YW1lIGNvbnRlbnQgdG8gdGhlIHBhcmVudCBpZnJhbWUgZWxlbWVudAorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKwogMjAxMC0wNS0wNCAgS2VudCBUYW11cmEg
IDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4g
KGFuZCB1bm9mZmljaWFsbHkgYnkgRW5yaWNhIENhc3VjY2kpLgpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHJldmlzaW9uIDU4Nzg1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
MSw2ICsxNDEsOCBAQAogICAgIC8vIHRoZWlyIHBhcmVudCBkb2N1bWVudC4KICAgICBzdGF0aWMg
Ym9vbCBzaG91bGRQcm9wYWdhdGVDb21wb3NpdGluZ1RvSUZyYW1lUGFyZW50KCk7CiAKKyAgICB2
b2lkIHNldFJvb3RQbGF0Zm9ybUxheWVyQ2xpcHBpbmdCb3goY29uc3QgSW50UmVjdCYgY29udGVu
dHNCb3gpOworCiBwcml2YXRlOgogICAgIC8vIFdoZXRoZXIgdGhlIGdpdmVuIFJMIG5lZWRzIGEg
Y29tcG9zaXRpbmcgbGF5ZXIuCiAgICAgYm9vbCBuZWVkc1RvQmVDb21wb3NpdGVkKGNvbnN0IFJl
bmRlckxheWVyKikgY29uc3Q7CkBAIC0xNzIsOCArMTc0LDYgQEAKICAgICB2b2lkIHNldENvbXBv
c2l0aW5nUGFyZW50KFJlbmRlckxheWVyKiBjaGlsZExheWVyLCBSZW5kZXJMYXllciogcGFyZW50
TGF5ZXIpOwogICAgIHZvaWQgcmVtb3ZlQ29tcG9zaXRlZENoaWxkcmVuKFJlbmRlckxheWVyKik7
CiAKLSAgICB2b2lkIHBhcmVudEluUm9vdExheWVyKFJlbmRlckxheWVyKik7Ci0KICAgICBib29s
IGxheWVySGFzM0RDb250ZW50KGNvbnN0IFJlbmRlckxheWVyKikgY29uc3Q7CiAKICAgICB2b2lk
IGVuc3VyZVJvb3RQbGF0Zm9ybUxheWVyKCk7CkBAIC0xOTgsNiArMTk4LDkgQEAKICAgICBib29s
IG1fY29tcG9zaXRpbmc7CiAgICAgYm9vbCBtX3Jvb3RMYXllckF0dGFjaGVkOwogICAgIGJvb2wg
bV9jb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkOworCisgICAgLy8gRW5jbG9zaW5nIGNsaXBw
aW5nIGxheWVyIGZvciBpZnJhbWUgY29udGVudAorICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBt
X2NsaXBwaW5nTGF5ZXI7CiAgICAgCiAjaWYgUFJPRklMRV9MQVlFUl9SRUJVSUxECiAgICAgaW50
IG1fcm9vdExheWVyVXBkYXRlQ291bnQ7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDU4Nzg1KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1l
RWxlbWVudC5oIgogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTY2NCwxOSAr
NjY1LDYgQEAKICAgICBob3N0aW5nTGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRJblJvb3RMYXllcihSZW5kZXJMYXllciog
bGF5ZXIpCi17Ci0gICAgQVNTRVJUKGxheWVyLT5pc0NvbXBvc2l0ZWQoKSk7Ci0KLSAgICBHcmFw
aGljc0xheWVyKiBsYXllckFuY2hvciA9IGxheWVyLT5iYWNraW5nKCktPmNoaWxkRm9yU3VwZXJs
YXllcnMoKTsKLQotICAgIGlmIChsYXllckFuY2hvci0+cGFyZW50KCkgIT0gbV9yb290UGxhdGZv
cm1MYXllcikgewotICAgICAgICBsYXllckFuY2hvci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAg
ICAgICBpZiAobV9yb290UGxhdGZvcm1MYXllcikKLSAgICAgICAgICAgIG1fcm9vdFBsYXRmb3Jt
TGF5ZXItPmFkZENoaWxkKGxheWVyQW5jaG9yKTsKLSAgICB9Ci19Ci0KICNpZiBFTkFCTEUoVklE
RU8pCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuQWNjZWxlcmF0ZVZpZGVvUmVuZGVy
aW5nKFJlbmRlclZpZGVvKiBvKSBjb25zdAogewpAQCAtNzY0LDExICs3NTIsMzAgQEAKICAgICB9
CiAgICAgCiAgICAgaWYgKGxheWVyQmFja2luZykgewotICAgICAgICBsYXllckJhY2tpbmctPnBh
cmVudEZvclN1YmxheWVycygpLT5zZXRDaGlsZHJlbihsYXllckNoaWxkcmVuKTsKKyAgICAgICAg
aWYgKGxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlcklGcmFtZSgpKSB7CisgICAgICAgICAgICAv
LyBUaGlzIGlzIGFuIGlmcmFtZSBwYXJlbnQuIE1ha2UgaXQgdGhlIHBhcmVudCBvZiB0aGUgaWZy
YW1lIGRvY3VtZW50J3Mgcm9vdAorICAgICAgICAgICAgbGF5ZXJCYWNraW5nLT5wYXJlbnRGb3JT
dWJsYXllcnMoKS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgICAgICAgICAgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yKiBpbm5lckNvbXBvc2l0b3IgPSBsYXllckJhY2tpbmctPmlubmVyUmVuZGVy
TGF5ZXJDb21wb3NpdG9yKCk7CisgICAgICAgICAgICBpZiAoaW5uZXJDb21wb3NpdG9yKSB7Cisg
ICAgICAgICAgICAgICAgR3JhcGhpY3NMYXllciogaW5uZXJSb290TGF5ZXIgPSBpbm5lckNvbXBv
c2l0b3ItPnJvb3RQbGF0Zm9ybUxheWVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGlubmVyUm9v
dExheWVyKQorICAgICAgICAgICAgICAgICAgICBsYXllckJhY2tpbmctPnBhcmVudEZvclN1Ymxh
eWVycygpLT5hZGRDaGlsZChpbm5lclJvb3RMYXllcik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgbGF5ZXJCYWNraW5nLT5wYXJlbnRGb3JTdWJsYXllcnMoKS0+
c2V0Q2hpbGRyZW4obGF5ZXJDaGlsZHJlbik7CiAgICAgICAgIGNoaWxkTGF5ZXJzT2ZFbmNsb3Np
bmdMYXllci5hcHBlbmQobGF5ZXJCYWNraW5nLT5jaGlsZEZvclN1cGVybGF5ZXJzKCkpOwogICAg
IH0KIH0KIAordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFJvb3RQbGF0Zm9ybUxheWVy
Q2xpcHBpbmdCb3goY29uc3QgSW50UmVjdCYgY29udGVudHNCb3gpCit7CisgICAgaWYgKG1fY2xp
cHBpbmdMYXllcikgeworICAgICAgICBtX2NsaXBwaW5nTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQoY29udGVudHNCb3gueCgpLCBjb250ZW50c0JveC55KCkpKTsKKyAgICAgICAgbV9jbGlw
cGluZ0xheWVyLT5zZXRTaXplKEZsb2F0U2l6ZShjb250ZW50c0JveC53aWR0aCgpLCBjb250ZW50
c0JveC5oZWlnaHQoKSkpOworICAgIH0KK30KKwogLy8gVGhpcyBqdXN0IHVwZGF0ZXMgbGF5ZXIg
Z2VvbWV0cnkgd2l0aG91dCBjaGFuZ2luZyB0aGUgaGllcmFyY2h5Lgogdm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyVHJlZUdlb21ldHJ5KFJlbmRlckxheWVyKiBsYXllcikK
IHsKQEAgLTkyMiw3ICs5MjksNyBAQAogCiBHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJvb3RQbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yb290UGxh
dGZvcm1MYXllci5nZXQoKTsKKyAgICByZXR1cm4gbV9jbGlwcGluZ0xheWVyID8gbV9jbGlwcGlu
Z0xheWVyLmdldCgpIDogbV9yb290UGxhdGZvcm1MYXllci5nZXQoKTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmRpZE1vdmVPbnNjcmVlbigpCkBAIC05MzAsMTMgKzkzNywyNyBA
QAogICAgIGlmICghbV9yb290UGxhdGZvcm1MYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RnJhbWUqIGZyYW1lID0gbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKS0+ZnJhbWUoKTsKLSAgICBQ
YWdlKiBwYWdlID0gZnJhbWUgPyBmcmFtZS0+cGFnZSgpIDogMDsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybjsKKyAgICBib29sIGF0dGFjaGVkID0gZmFsc2U7CisgICAgRWxlbWVudCog
b3duZXJFbGVtZW50ID0gbV9yZW5kZXJWaWV3LT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKTsK
KyAgICBpZiAob3duZXJFbGVtZW50KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5k
ZXJlci0+aXNSZW5kZXJJRnJhbWUoKSkgeworICAgICAgICAgICAgLy8gVGhlIGxheWVyIHdpbGwg
Z2V0IGhvb2tlZCB1cCB2aWEgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVy
Q29uZmlndXJhdGlvbigpCisgICAgICAgICAgICAvLyBmb3IgdGhlIGlmcmFtZSdzIHJlbmRlcmVy
IGluIHRoZSBwYXJlbnQgZG9jdW1lbnQuCisgICAgICAgICAgICBvd25lckVsZW1lbnQtPnNldE5l
ZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgYXR0YWNo
ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQogCi0gICAgcGFnZS0+Y2hyb21lKCktPmNsaWVu
dCgpLT5hdHRhY2hSb290R3JhcGhpY3NMYXllcihmcmFtZSwgbV9yb290UGxhdGZvcm1MYXllci5n
ZXQoKSk7Ci0gICAgbV9yb290TGF5ZXJBdHRhY2hlZCA9IHRydWU7CisgICAgaWYgKCFhdHRhY2hl
ZCkgeworICAgICAgICBGcmFtZSogZnJhbWUgPSBtX3JlbmRlclZpZXctPmZyYW1lVmlldygpLT5m
cmFtZSgpOworICAgICAgICBQYWdlKiBwYWdlID0gZnJhbWUgPyBmcmFtZS0+cGFnZSgpIDogMDsK
KyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHBhZ2Ut
PmNocm9tZSgpLT5jbGllbnQoKS0+YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoZnJhbWUsIG1fcm9v
dFBsYXRmb3JtTGF5ZXIuZ2V0KCkpOworICAgIH0KKyAgICBtX3Jvb3RMYXllckF0dGFjaGVkID0g
dHJ1ZTsgICAgCiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsTW92ZU9mZnNj
cmVlbigpCkBAIC05NDQsMTkgKzk2NSw0NCBAQAogICAgIGlmICghbV9yb290UGxhdGZvcm1MYXll
ciB8fCAhbV9yb290TGF5ZXJBdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRnJhbWUq
IGZyYW1lID0gbV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKS0+ZnJhbWUoKTsKLSAgICBQYWdlKiBw
YWdlID0gZnJhbWUgPyBmcmFtZS0+cGFnZSgpIDogMDsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAg
IHJldHVybjsKKyAgICBib29sIGRldGFjaGVkID0gZmFsc2U7CisgICAgRWxlbWVudCogb3duZXJF
bGVtZW50ID0gbV9yZW5kZXJWaWV3LT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKTsKKyAgICBp
ZiAob3duZXJFbGVtZW50KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBvd25l
ckVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChyZW5kZXJlci0+aXNSZW5kZXJJRnJh
bWUoKSkgeworICAgICAgICAgICAgLy8gVGhlIGxheWVyIHdpbGwgZ2V0IGhvb2tlZCB1cCB2aWEg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbigpCisg
ICAgICAgICAgICAvLyBmb3IgdGhlIGlmcmFtZSdzIHJlbmRlcmVyIGluIHRoZSBwYXJlbnQgZG9j
dW1lbnQuCisgICAgICAgICAgICBvd25lckVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3lu
dGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgZGV0YWNoZWQgPSB0cnVlOworICAgICAg
ICB9CisgICAgfQogCi0gICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5hdHRhY2hSb290R3Jh
cGhpY3NMYXllcihmcmFtZSwgMCk7CisgICAgaWYgKCFkZXRhY2hlZCkgeworICAgICAgICBGcmFt
ZSogZnJhbWUgPSBtX3JlbmRlclZpZXctPmZyYW1lVmlldygpLT5mcmFtZSgpOworICAgICAgICBQ
YWdlKiBwYWdlID0gZnJhbWUgPyBmcmFtZS0+cGFnZSgpIDogMDsKKyAgICAgICAgaWYgKCFwYWdl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KS0+YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoZnJhbWUsIDApOworICAgIH0KICAgICBtX3Jvb3RM
YXllckF0dGFjaGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1
cGRhdGVSb290TGF5ZXJQb3NpdGlvbigpCiB7Ci0gICAgaWYgKG1fcm9vdFBsYXRmb3JtTGF5ZXIp
Ci0gICAgICAgIG1fcm9vdFBsYXRmb3JtTGF5ZXItPnNldFNpemUoRmxvYXRTaXplKG1fcmVuZGVy
Vmlldy0+cmlnaHRMYXlvdXRPdmVyZmxvdygpLCBtX3JlbmRlclZpZXctPmJvdHRvbUxheW91dE92
ZXJmbG93KCkpKTsKKyAgICBpZiAobV9yb290UGxhdGZvcm1MYXllcikgeworICAgICAgICAvLyBG
SVhNRTogQWRqdXN0IHRoZSB5IHBvc2l0aW9uIG9mIHRoZSBtX3Jvb3RQbGF0Zm9ybUxheWVyIGlm
IHdlIGFyZSBjbGlwcGluZyBieSBpdHMgdG9wIGVkZ2UKKyAgICAgICAgLy8gRXZlbnR1YWxseSB0
aGlzIHdpbGwgYmUgdGFrZW4gY2FyZSBvZiBieSBzY3JvbGxpbmcgbG9naWMKKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NTE4CisgICAgICAgIGZs
b2F0IGhlaWdodCA9IG1fcmVuZGVyVmlldy0+Ym90dG9tTGF5b3V0T3ZlcmZsb3coKTsKKyAgICAg
ICAgZmxvYXQgeU9mZnNldCA9IDA7CisKKyAgICAgICAgaWYgKG1fY2xpcHBpbmdMYXllciAmJiBo
ZWlnaHQgPiBtX2NsaXBwaW5nTGF5ZXItPnNpemUoKS5oZWlnaHQoKSkKKyAgICAgICAgICAgIHlP
ZmZzZXQgPSBtX2NsaXBwaW5nTGF5ZXItPnNpemUoKS5oZWlnaHQoKSAtIGhlaWdodDsKKworICAg
ICAgICBtX3Jvb3RQbGF0Zm9ybUxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDAsIHlPZmZz
ZXQpKTsKKyAgICAgICAgbV9yb290UGxhdGZvcm1MYXllci0+c2V0U2l6ZShGbG9hdFNpemUobV9y
ZW5kZXJWaWV3LT5yaWdodExheW91dE92ZXJmbG93KCksIGhlaWdodCkpOworICAgIH0KIH0KIAog
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZFN0YXJ0QWNjZWxlcmF0ZWRBbmltYXRpb24o
KQpAQCAtMTE1MiwxMyArMTE5OCwzMCBAQAogCiAgICAgbV9yb290UGxhdGZvcm1MYXllciA9IEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZSgwKTsKICAgICBtX3Jvb3RQbGF0Zm9ybUxheWVyLT5zZXRTaXpl
KEZsb2F0U2l6ZShtX3JlbmRlclZpZXctPnJpZ2h0TGF5b3V0T3ZlcmZsb3coKSwgbV9yZW5kZXJW
aWV3LT5ib3R0b21MYXlvdXRPdmVyZmxvdygpKSk7Ci0gICAgbV9yb290UGxhdGZvcm1MYXllci0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCAwKSk7CisgICAgbV9yb290UGxhdGZvcm1MYXllci0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpKTsKKwogICAgIC8vIFRoZSByb290IGxheWVyIGRvZXMg
ZmxpcHBpbmcgaWYgd2UgbmVlZCBpdCBvbiB0aGlzIHBsYXRmb3JtLgogICAgIG1fcm9vdFBsYXRm
b3JtTGF5ZXItPnNldEdlb21ldHJ5T3JpZW50YXRpb24oR3JhcGhpY3NMYXllcjo6Y29tcG9zaXRp
bmdDb29yZGluYXRlc09yaWVudGF0aW9uKCkpOwogCiAgICAgLy8gTmVlZCB0byBjbGlwIHRvIHBy
ZXZlbnQgdHJhbnNmb3JtZWQgY29udGVudCBzaG93aW5nIG91dHNpZGUgdGhpcyBmcmFtZQogICAg
IG1fcm9vdFBsYXRmb3JtTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CiAgICAgCisgICAg
Ly8gQ3JlYXRlIGEgY2xpcHBpbmcgbGF5ZXIgaWYgdGhpcyBpcyBhbiBpZnJhbWUKKyAgICBFbGVt
ZW50KiBvd25lckVsZW1lbnQgPSBtX3JlbmRlclZpZXctPmRvY3VtZW50KCktPm93bmVyRWxlbWVu
dCgpOworICAgIGlmIChvd25lckVsZW1lbnQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyICYm
IHJlbmRlcmVyLT5pc1JlbmRlcklGcmFtZSgpKSB7CisgICAgICAgICAgICBtX2NsaXBwaW5nTGF5
ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoMCk7CisgICAgICAgICAgICBtX2NsaXBwaW5nTGF5
ZXItPnNldEdlb21ldHJ5T3JpZW50YXRpb24oR3JhcGhpY3NMYXllcjo6Y29tcG9zaXRpbmdDb29y
ZGluYXRlc09yaWVudGF0aW9uKCkpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIG1fY2xp
cHBpbmdMYXllci0+c2V0TmFtZSgiaWZyYW1lIENsaXBwaW5nIik7CisjZW5kaWYKKyAgICAgICAg
ICAgIG1fY2xpcHBpbmdMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICAgICAgICAg
IG1fY2xpcHBpbmdMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgpKTsKKyAgICAgICAg
ICAgIG1fY2xpcHBpbmdMYXllci0+YWRkQ2hpbGQobV9yb290UGxhdGZvcm1MYXllci5nZXQoKSk7
CisgICAgICAgIH0KKyAgICB9CisKICAgICBkaWRNb3ZlT25zY3JlZW4oKTsKIH0KIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHJldmlzaW9uIDU4Nzg1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyNCw2ICsxMjQsOCBAQAogCiAgICAgSW50UmVjdCBjb250ZW50c0JveCgpIGNvbnN0OwogICAg
IAorICAgIFJlbmRlckxheWVyQ29tcG9zaXRvciogaW5uZXJSZW5kZXJMYXllckNvbXBvc2l0b3Io
KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZUdyYXBoaWNzTGF5ZXIoKTsKICAg
ICB2b2lkIGRlc3Ryb3lHcmFwaGljc0xheWVyKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDU4Nzg1KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgpAQCAtMzg0LDggKzM4NSwy
NiBAQAogCiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1JlY3QoY29udGVudHNCb3go
KSk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQoY29udGFpbnNQYWludGVk
Q29udGVudCgpKTsKKworICAgIC8vIElmIHRoaXMgaXMgYW4gaWZyYW1lIHBhcmVudCwgdXBkYXRl
IHRoZSBpZnJhbWUgY29udGVudCdzIGJveAorICAgIFJlbmRlckxheWVyQ29tcG9zaXRvciogaW5u
ZXJDb21wb3NpdG9yID0gaW5uZXJSZW5kZXJMYXllckNvbXBvc2l0b3IoKTsKKyAgICBpZiAoaW5u
ZXJDb21wb3NpdG9yKQorICAgICAgICBpbm5lckNvbXBvc2l0b3ItPnNldFJvb3RQbGF0Zm9ybUxh
eWVyQ2xpcHBpbmdCb3goY29udGVudHNCb3goKSk7CiB9CiAKK1JlbmRlckxheWVyQ29tcG9zaXRv
ciogUmVuZGVyTGF5ZXJCYWNraW5nOjppbm5lclJlbmRlckxheWVyQ29tcG9zaXRvcigpIGNvbnN0
Cit7CisgICAgaWYgKHJlbmRlcmVyKCktPmlzUmVuZGVySUZyYW1lKCkpIHsKKyAgICAgICAgSFRN
TElGcmFtZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+
KHJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAgICAgIGlmIChEb2N1bWVudCogY29udGVudERvY3Vt
ZW50ID0gZWxlbWVudC0+Y29udGVudERvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChSZW5k
ZXJWaWV3KiB2aWV3ID0gY29udGVudERvY3VtZW50LT5yZW5kZXJWaWV3KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZpZXctPmNvbXBvc2l0b3IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiAwOworfQorCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlSW50ZXJuYWxI
aWVyYXJjaHkoKQogewogICAgIC8vIG1fZm9yZWdyb3VuZExheWVyIGhhcyB0byBiZSBpbnNlcnRl
ZCBpbiB0aGUgY29ycmVjdCBvcmRlciB3aXRoIGNoaWxkIGxheWVycywKQEAgLTgyMyw3ICs4NDIs
MTEgQEAKIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50aW5nR29lc1RvV2luZG93KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9vd25pbmdMYXllci0+aXNSb290TGF5ZXIoKTsKKyAgICBp
ZiAoIW1fb3duaW5nTGF5ZXItPmlzUm9vdExheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIElmcmFtZSByb290IGxheWVycyBwYWludCBpbnRvIGJhY2tpbmcgc3RvcmUuCisg
ICAgcmV0dXJuICF0b1JlbmRlclZpZXcocmVuZGVyZXIoKSktPmRvY3VtZW50KCktPm93bmVyRWxl
bWVudCgpOwogfQogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlz
cGxheSgpCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vY29tcG9zaXRpbmcvaWZyYW1l
cy9jb21wb3NpdGVkLWlmcmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2lmcmFtZXMvY29tcG9zaXRlZC1pZnJhbWUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA1ODc4NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9j
b21wb3NpdGluZy9pZnJhbWVzL2NvbXBvc2l0ZWQtaWZyYW1lLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsOSArMTMsOSBAQAogICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkp
CiAgIChjaGlsZHJlbiAxCiAgICAgKEdyYXBoaWNzTGF5ZXIKLSAgICAgIChwb3NpdGlvbiAwLjAw
IDAuMDApCisgICAgICAocG9zaXRpb24gLTEyLjAwIDAuMDApCiAgICAgICAoYW5jaG9yIDAuNTAg
MC41MCkKLSAgICAgIChib3VuZHMgODAwLjAwIDYwMC4wMCkKKyAgICAgIChib3VuZHMgODEyLjAw
IDYwMC4wMCkKICAgICAgIChvcGFjaXR5IDEuMDApCiAgICAgICAodXNpbmdUaWxlZExheWVyIDAp
CiAgICAgICAocHJlc2VydmVzM0QgMCkKQEAgLTI2LDkgKzI2LDkgQEAKICAgICAgIChjaGlsZHJl
blRyYW5zZm9ybSBpZGVudGl0eSkKICAgICAgIChjaGlsZHJlbiAxCiAgICAgICAgIChHcmFwaGlj
c0xheWVyCi0gICAgICAgICAgKHBvc2l0aW9uIDguMDAgOC4wMCkKKyAgICAgICAgICAocG9zaXRp
b24gMC4wMCAtMTIuMDApCiAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCi0gICAgICAgICAg
KGJvdW5kcyAzMDQuMDAgMTU0LjAwKQorICAgICAgICAgIChib3VuZHMgNzA3LjAwIDQ0MC4wMCkK
ICAgICAgICAgICAob3BhY2l0eSAxLjAwKQogICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkK
ICAgICAgICAgICAocHJlc2VydmVzM0QgMCkKQEAgLTM3LDYgKzM3LDY2IEBACiAgICAgICAgICAg
KGJhY2tncm91bmRDb2xvciBub25lKQogICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCiAg
ICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChjaGlsZHJl
biAxCisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAocG9zaXRpb24g
NDAuMDAgNDAuMDApCisgICAgICAgICAgICAgIChhbmNob3IgMC4wMCAwLjAwKQorICAgICAgICAg
ICAgICAoYm91bmRzIDYyNy4wMCAzNjAuMDApCisgICAgICAgICAgICAgIChvcGFjaXR5IDEuMDAp
CisgICAgICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgICAgICAgICAgKHByZXNl
cnZlczNEIDApCisgICAgICAgICAgICAgIChkcmF3c0NvbnRlbnQgMCkKKyAgICAgICAgICAgICAg
KGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgICAgICAoYmFja2dyb3VuZENv
bG9yIG5vbmUpCisgICAgICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAg
ICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgKGNoaWxkcmVu
IDEKKyAgICAgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAgICAgKHBv
c2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgICAgICAgICAgICAgIChhbmNob3IgMC41MCAwLjUwKQor
ICAgICAgICAgICAgICAgICAgKGJvdW5kcyA2MjcuMDAgMzYwLjAwKQorICAgICAgICAgICAgICAg
ICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkK
KyAgICAgICAgICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAgICAgICAgKGRy
YXdzQ29udGVudCAwKQorICAgICAgICAgICAgICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNp
YmxlKQorICAgICAgICAgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAg
ICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgICAgIChjaGlsZHJl
blRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgICAgIChjaGlsZHJlbiAxCisgICAg
ICAgICAgICAgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgICAgICAgICAgICAgKHBv
c2l0aW9uIDAuMDAgMC4wMCkKKyAgICAgICAgICAgICAgICAgICAgICAoYW5jaG9yIDAuNTAgMC41
MCkKKyAgICAgICAgICAgICAgICAgICAgICAoYm91bmRzIDYyNy4wMCAzNjAuMDApCisgICAgICAg
ICAgICAgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAgICAgICAgICAgICAodXNp
bmdUaWxlZExheWVyIDApCisgICAgICAgICAgICAgICAgICAgICAgKHByZXNlcnZlczNEIDApCisg
ICAgICAgICAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgICAgICAgICAg
ICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAo
YmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgKHRyYW5zZm9ybSBp
ZGVudGl0eSkKKyAgICAgICAgICAgICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRp
dHkpCisgICAgICAgICAgICAgICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgICAgICAgICAg
ICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3NpdGlv
biAxOC4wMCAxMC4wMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAu
NTApCisgICAgICAgICAgICAgICAgICAgICAgICAgIChib3VuZHMgMjEwLjAwIDIxMC4wMCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKG9wYWNpdHkgMS4wMCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAo
cHJlc2VydmVzM0QgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYXdzQ29udGVudCAx
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgIChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAg
KQorICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAg
KQorICAgICAgICAgICAgKQorICAgICAgICAgICkKICAgICAgICAgKQogICAgICAgKQogICAgICkK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9pZnJhbWVzL2NvbXBv
c2l0ZWQtcGFyZW50LWlmcmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL2NvbXBvc2l0aW5nL2lmcmFtZXMvY29tcG9zaXRlZC1wYXJlbnQtaWZy
YW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dp
bi9jb21wb3NpdGluZy9pZnJhbWVzL2NvbXBvc2l0ZWQtcGFyZW50LWlmcmFtZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1IEBACisKKyhHcmFwaGljc0xheWVyCisgIChw
b3NpdGlvbiAwLjAwIDAuMDApCisgIChhbmNob3IgMC41MCAwLjUwKQorICAoYm91bmRzIDgwMC4w
MCA2MDAuMDApCisgIChvcGFjaXR5IDEuMDApCisgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgKHBy
ZXNlcnZlczNEIDApCisgIChkcmF3c0NvbnRlbnQgMCkKKyAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2
aXNpYmxlKQorICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICh0cmFuc2Zvcm0gaWRlbnRpdHkp
CisgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3Jh
cGhpY3NMYXllcgorICAgICAgKHBvc2l0aW9uIC0xMi4wMCAwLjAwKQorICAgICAgKGFuY2hvciAw
LjUwIDAuNTApCisgICAgICAoYm91bmRzIDgxMi4wMCA2MDAuMDApCisgICAgICAob3BhY2l0eSAx
LjAwKQorICAgICAgKHVzaW5nVGlsZWRMYXllciAwKQorICAgICAgKHByZXNlcnZlczNEIDApCisg
ICAgICAoZHJhd3NDb250ZW50IDApCisgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUp
CisgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAodHJhbnNmb3JtIGlkZW50aXR5
KQorICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgKGNoaWxkcmVuIDEK
KyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gMC4wMCAtMTIuMDAp
CisgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTApCisgICAgICAgICAgKGJvdW5kcyAzNzAuMDAg
MjIwLjAwKQorICAgICAgICAgIChvcGFjaXR5IDEuMDApCisgICAgICAgICAgKHVzaW5nVGlsZWRM
YXllciAwKQorICAgICAgICAgIChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgIChkcmF3c0NvbnRl
bnQgMSkKKyAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZpc2libGUpCisgICAgICAgICAg
KGJhY2tncm91bmRDb2xvciBub25lKQorICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisg
ICAgICAgICAgKGNoaWxkcmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgIChjaGlsZHJl
biAxCisgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAocG9zaXRpb24g
MzUuMDAgMzUuMDApCisgICAgICAgICAgICAgIChhbmNob3IgMC4wMCAwLjAwKQorICAgICAgICAg
ICAgICAoYm91bmRzIDMwMC4wMCAxNTAuMDApCisgICAgICAgICAgICAgIChvcGFjaXR5IDEuMDAp
CisgICAgICAgICAgICAgICh1c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgICAgICAgICAgKHByZXNl
cnZlczNEIDApCisgICAgICAgICAgICAgIChkcmF3c0NvbnRlbnQgMCkKKyAgICAgICAgICAgICAg
KGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgICAgICAoYmFja2dyb3VuZENv
bG9yIG5vbmUpCisgICAgICAgICAgICAgICh0cmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAg
ICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVudGl0eSkKKyAgICAgICAgICAgICAgKGNoaWxkcmVu
IDEKKyAgICAgICAgICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAgICAgKHBv
c2l0aW9uIDAuMDAgLTgwLjAwKQorICAgICAgICAgICAgICAgICAgKGFuY2hvciAwLjUwIDAuNTAp
CisgICAgICAgICAgICAgICAgICAoYm91bmRzIDI4NS4wMCAyMzAuMDApCisgICAgICAgICAgICAg
ICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICAgICAgICAgKHVzaW5nVGlsZWRMYXllciAw
KQorICAgICAgICAgICAgICAgICAgKHByZXNlcnZlczNEIDApCisgICAgICAgICAgICAgICAgICAo
ZHJhd3NDb250ZW50IDApCisgICAgICAgICAgICAgICAgICAoYmFja2ZhY2VWaXNpYmlsaXR5IHZp
c2libGUpCisgICAgICAgICAgICAgICAgICAoYmFja2dyb3VuZENvbG9yIG5vbmUpCisgICAgICAg
ICAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgICAgICAgKGNoaWxk
cmVuVHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAgICAgICAgKGNoaWxkcmVuIDEKKyAg
ICAgICAgICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAo
cG9zaXRpb24gMC4wMCAwLjAwKQorICAgICAgICAgICAgICAgICAgICAgIChhbmNob3IgMC41MCAw
LjUwKQorICAgICAgICAgICAgICAgICAgICAgIChib3VuZHMgMjg1LjAwIDIzMC4wMCkKKyAgICAg
ICAgICAgICAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICAgICAgICAgICAgICh1
c2luZ1RpbGVkTGF5ZXIgMCkKKyAgICAgICAgICAgICAgICAgICAgICAocHJlc2VydmVzM0QgMCkK
KyAgICAgICAgICAgICAgICAgICAgICAoZHJhd3NDb250ZW50IDEpCisgICAgICAgICAgICAgICAg
ICAgICAgKGJhY2tmYWNlVmlzaWJpbGl0eSB2aXNpYmxlKQorICAgICAgICAgICAgICAgICAgICAg
IChiYWNrZ3JvdW5kQ29sb3Igbm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAodHJhbnNmb3Jt
IGlkZW50aXR5KQorICAgICAgICAgICAgICAgICAgICAgIChjaGlsZHJlblRyYW5zZm9ybSBpZGVu
dGl0eSkKKyAgICAgICAgICAgICAgICAgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAgICAgICAg
ICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvc2l0
aW9uIDE4LjAwIDEwLjAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5jaG9yIDAuNTAg
MC41MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGJvdW5kcyAyMTAuMDAgMjEwLjAwKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAob3BhY2l0eSAxLjAwKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAodXNpbmdUaWxlZExheWVyIDApCisgICAgICAgICAgICAgICAgICAgICAgICAg
IChwcmVzZXJ2ZXMzRCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhd3NDb250ZW50
IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChiYWNrZmFjZVZpc2liaWxpdHkgdmlzaWJs
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGJhY2tncm91bmRDb2xvciBub25lKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAodHJhbnNmb3JtIGlkZW50aXR5KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY2hpbGRyZW5UcmFuc2Zvcm0gaWRlbnRpdHkpCisgICAgICAgICAgICAg
ICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAg
ICApCisgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAg
ICApCisgICAgICAgICAgICApCisgICAgICAgICAgKQorICAgICAgICApCisgICAgICApCisgICAg
KQorICApCispCisKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4Nzg1KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDUtMDQgIENocmlz
IE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1hZGUgY29tcG9zaXRlZCBpZnJhbWVzIHdvcmsgb24gV2lu
ZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI0
NDYKKyAgICAgICAgCisgICAgICAgIEkndmUgYWRkZWQgb25lIG5ldyB0ZXN0IChjb21wb3NpdGVk
LXBhcmVudC1pZnJhbWUuaHRtbCkgd2hpY2gKKyAgICAgICAgc2hvd3MgYm90aCB0aGUgcGFyZW50
IGlmcmFtZSBhbmQgdGhlIGlmcmFtZSBjb250ZW50cyBkb2N1bWVudAorICAgICAgICB3aXRoIGNv
bXBvc2l0aW5nLiBJdCBhbHNvIHNob3dzIGNvcnJlY3QgYmVoYXZpb3Igd2l0aCBjbGlwcGluZywK
KyAgICAgICAgYm9yZGVycywgbWFyZ2lucywgcGFkZGluZyBhbmQgc2hhZG93cy4gSXQgYWxzbyBz
ZXRzIHRoZSBpZnJhbWUKKyAgICAgICAgc2l6ZSBhcyBhIHBlcmNlbnQgb2YgdGhlIHBhZ2UgdG8g
c2hvdyBjb3JyZWN0IHJlc2l6aW5nIGJlaGF2aW9yLgorICAgICAgICBUaGUgZXhpc3RpbmcgY29t
cG9zaXRlZC1pZnJhbWUuaHRtbCBoYXMgYmVlbiBjaGFuZ2VkIHNpbWlsYXJseQorICAgICAgICBi
dXQgd2l0aG91dCB0aGUgcGFnZSByZXNpemluZy4gVGhlIGV4aXN0aW5nIHByZXNlcnZlLTNkLXN3
aXRjaGluZy5odG1sCisgICAgICAgIHRlc3QgbmVlZGVkIG5ldyByZXN1bHRzIGJlY2F1c2Ugb2Yg
Y2hhbmdlcyB0byB0aGUgbGF5ZXIgZHVtcGVyLgorCisgICAgICAgICogY29tcG9zaXRpbmcvZ2Vv
bWV0cnkvcHJlc2VydmUtM2Qtc3dpdGNoaW5nLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBjb21w
b3NpdGluZy9pZnJhbWVzL2NvbXBvc2l0ZWQtaWZyYW1lLmh0bWw6CisgICAgICAgICogY29tcG9z
aXRpbmcvaWZyYW1lcy9jb21wb3NpdGVkLXBhcmVudC1pZnJhbWUuaHRtbDogQWRkZWQuCisgICAg
ICAgICogY29tcG9zaXRpbmcvaWZyYW1lcy9yZXNvdXJjZXMvY29tcG9zaXRlZC1zdWJmcmFtZS5o
dG1sOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9jb21wb3NpdGluZy9pZnJhbWVzL2NvbXBvc2l0
ZWQtaWZyYW1lLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vY29tcG9zaXRp
bmcvaWZyYW1lcy9jb21wb3NpdGVkLXBhcmVudC1pZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KwogMjAxMC0wNS0wNCAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCB0ZXN0cyBza2lwcyBmb3IgcXQvZ3RrLgpJbmRleDogTGF5b3V0VGVzdHMv
Y29tcG9zaXRpbmcvaWZyYW1lcy9jb21wb3NpdGVkLXBhcmVudC1pZnJhbWUuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9pZnJhbWVzL2NvbXBvc2l0ZWQtcGFyZW50
LWlmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaWZy
YW1lcy9jb21wb3NpdGVkLXBhcmVudC1pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MiBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+CisgIDxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgaWZyYW1lIHsKKyAgICAgICAgYm9yZGVy
OiAxMHB4IHNvbGlkIGJsYWNrOworICAgICAgICBwYWRkaW5nOiA1cHg7CisgICAgICAgIGhlaWdo
dDogMTUwcHg7CisgICAgICAgIHdpZHRoOiAzMDBweDsKKyAgICAgICAgLXdlYmtpdC1ib3gtc2hh
ZG93OiAwIDAgMjBweCBibGFjazsKKyAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0
ZVgoMCk7CisgICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgY2hhcnNldD0idXRmLTgiPgorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gZG9UZXN0KCkKKyAgICB7CisgICAgICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgY29tcG9zaXRp
bmcgbGF5ZXJzIHRvIGJlIHVwZGF0ZWQuCisgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewor
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXllcnMnKS5pbm5lckhU
TUwgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5sYXllclRyZWVBc1RleHQoKTsKKyAgICAgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sIDApOworICAgIH0KKworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2Fk
JywgZG9UZXN0LCBmYWxzZSk7CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKyAgICA8
IS0tIFRoZSBwYXJlbnQgZG9jdW1lbnQgc2hvdWxkIGJlIHRocm93biBpbnRvIGNvbXBvc2l0aW5n
IG1vZGUgYnkgdGhlIGlmcmFtZS4gLS0+CisgICAgPGlmcmFtZSBpZD0icGFyZW50LWlmcmFtZSIg
c3JjPSJyZXNvdXJjZXMvY29tcG9zaXRlZC1zdWJmcmFtZS5odG1sIj48L2lmcmFtZT4KKworICAg
IDxwcmUgaWQ9ImxheWVycyI+TGF5ZXIgdHJlZSBhcHBlYXJzIGhlcmUgaW4gRFJULjwvcHJlPgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaWZyYW1lcy9y
ZXNvdXJjZXMvY29tcG9zaXRlZC1zdWJmcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2NvbXBvc2l0aW5nL2lmcmFtZXMvcmVzb3VyY2VzL2NvbXBvc2l0ZWQtc3ViZnJhbWUuaHRt
bAkocmV2aXNpb24gNTg3ODUpCisrKyBMYXlvdXRUZXN0cy9jb21wb3NpdGluZy9pZnJhbWVzL3Jl
c291cmNlcy9jb21wb3NpdGVkLXN1YmZyYW1lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMsMTgg
KzMsMjIgQEAKIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9
InNjcmVlbiI+CisgICAgYm9keSB7IGJhY2tncm91bmQtY29sb3I6c2lsdmVyIH0KKyAgICAKICAg
ICAuYm94IHsKLSAgICAgICAgaGVpZ2h0OiAxMDBweDsKLSAgICAgICAgd2lkdGg6IDEwMHB4Owor
ICAgICAgICBoZWlnaHQ6IDIwMHB4OworICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgIG1h
cmdpbjogMTBweDsKKyAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBibHVlOwogICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKKyAg
ICAgICAgb3ZlcmZsb3c6aGlkZGVuOwogICAgIH0KICAgPC9zdHlsZT4KIDwvaGVhZD4KIDxib2R5
PgogCi0gICAgPGRpdiBjbGFzcz0iYm94Ij4KKyAgICA8ZGl2IGlkPSJpZnJhbWUtY29udGVudCIg
Y2xhc3M9ImJveCI+CiAgICAgPC9kaXY+CiAKIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2Nv
bXBvc2l0aW5nL2lmcmFtZXMvY29tcG9zaXRlZC1pZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9jb21wb3NpdGluZy9pZnJhbWVzL2NvbXBvc2l0ZWQtaWZyYW1lLmh0bWwJKHJl
dmlzaW9uIDU4Nzg1KQorKysgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvaWZyYW1lcy9jb21wb3Np
dGVkLWlmcmFtZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00LDkgKzQsMTEgQEAKIDxoZWFkPgog
ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgogICAgIGlmcmFtZSB7Ci0g
ICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOwotICAgICAgICBoZWlnaHQ6IDE1MHB4Owot
ICAgICAgICB3aWR0aDogMzAwcHg7CisgICAgICAgIGJvcmRlcjogMTBweCBzb2xpZCBibGFjazsK
KyAgICAgICAgcGFkZGluZzogMTBweDsKKyAgICAgICAgaGVpZ2h0OiA2MCU7CisgICAgICAgIHdp
ZHRoOiA4MCU7CisgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDIwcHggYmxhY2s7CiAg
ICAgfQogICA8L3N0eWxlPgogICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNl
dD0idXRmLTgiPgpAQCAtMzIsNyArMzQsNyBAQAogPGJvZHk+CiAKICAgICA8IS0tIFRoZSBwYXJl
bnQgZG9jdW1lbnQgc2hvdWxkIGJlIHRocm93biBpbnRvIGNvbXBvc2l0aW5nIG1vZGUgYnkgdGhl
IGlmcmFtZS4gLS0+Ci0gICAgPGlmcmFtZSBzcmM9InJlc291cmNlcy9jb21wb3NpdGVkLXN1YmZy
YW1lLmh0bWwiPjwvaWZyYW1lPgorICAgIDxpZnJhbWUgaWQ9InBhcmVudC1pZnJhbWUiIHNyYz0i
cmVzb3VyY2VzL2NvbXBvc2l0ZWQtc3ViZnJhbWUuaHRtbCI+PC9pZnJhbWU+CiAKICAgICA8cHJl
IGlkPSJsYXllcnMiPkxheWVyIHRyZWUgYXBwZWFycyBoZXJlIGluIERSVC48L3ByZT4KIDwvYm9k
eT4K
</data>
<flag name="review"
          id="39183"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>