<?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>43589</bug_id>
          
          <creation_ts>2010-08-05 16:45:56 -0700</creation_ts>
          <short_desc>Compositing should be exposed in terms of GraphicsContext3D, not WebGL specifically</short_desc>
          <delta_ts>2010-08-06 14:49:46 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43362</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>eric</cc>
    
    <cc>senorblanco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>vangelis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>260944</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 16:45:56 -0700</bug_when>
    <thetext>Compositing should be exposed in terms of GraphicsContext3D, not WebGL specifically</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261010</commentid>
    <comment_count>1</comment_count>
      <attachid>63673</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 18:23:36 -0700</bug_when>
    <thetext>Created attachment 63673
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261012</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 18:24:36 -0700</bug_when>
    <thetext>Vangelis, would you mind checking the chromium bits over?

I&apos;ve tested this by running the layout tests and testing the Khronos WebGL demos manually in Chromium/Linux and Safari/Snow Leopard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261021</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-05 18:32:41 -0700</bug_when>
    <thetext>Attachment 63673 did not build on mac:
Build output: http://queues.webkit.org/results/3588897</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261025</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 18:37:07 -0700</bug_when>
    <thetext>Fixing the compile issue.  Not sure how I missed that locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261027</commentid>
    <comment_count>5</comment_count>
      <attachid>63673</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-05 18:42:33 -0700</bug_when>
    <thetext>Comment on attachment 63673
Patch

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 19a735623a68b6ce2346f941715910ade685ba56..ec106884b9e87ff8b39d7bceb831cf40891e1f04 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,51 @@
&gt; +2010-08-05  James Robinson  &lt;jamesr@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Compositing should be exposed in terms of GraphicsContext3D, not WebGL specifically
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=43589
&gt; +
&gt; +        This treats all GraphicsContext3D-backed layers the same instead of special casing WebGL.
&gt; +        The cross-platform change is to rename GraphicsLayer::setContentsToWebGL() to
&gt; +        GraphicsLayer::setContentsToGraphicsContext3D and to rename all implementations.
&gt; +
&gt; +        This patch also renames the chromium class used for accelerating these layers.
&gt; +
&gt; +        * WebCore.gypi:
&gt; +        * platform/graphics/GraphicsLayer.h:
&gt; +        (WebCore::GraphicsLayer::setContentsToGraphicsContext3D):
&gt; +        * platform/graphics/chromium/GraphicsContext3DLayerChromium.cpp: Added.
&gt; +        (WebCore::GraphicsContext3DLayerChromium::create):
&gt; +        (WebCore::GraphicsContext3DLayerChromium::GraphicsContext3DLayerChromium):
&gt; +        (WebCore::GraphicsContext3DLayerChromium::textureId):
&gt; +        (WebCore::GraphicsContext3DLayerChromium::updateTextureContents):
&gt; +        (WebCore::GraphicsContext3DLayerChromium::setContext):
&gt; +        * platform/graphics/chromium/GraphicsContext3DLayerChromium.h: Added.
&gt; +        (WebCore::GraphicsContext3DLayerChromium::drawsContent):
&gt; +        (WebCore::GraphicsContext3DLayerChromium::ownsTexture):
&gt; +        (WebCore::GraphicsContext3DLayerChromium::shaderProgramId):
&gt; +        (WebCore::GraphicsContext3DLayerChromium::setShaderProgramId):
&gt; +        (WebCore::GraphicsContext3DLayerChromium::setPrepareTextureCallback):
&gt; +        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
&gt; +        (WebCore::GraphicsLayerChromium::setContentsNeedsDisplay):
&gt; +        (WebCore::GraphicsLayerChromium::setContentsToGraphicsContext3D):
&gt; +        * platform/graphics/chromium/GraphicsLayerChromium.h:
&gt; +        (WebCore::GraphicsLayerChromium::):
&gt; +        * platform/graphics/chromium/LayerRendererChromium.cpp:
&gt; +        (WebCore::LayerRendererChromium::drawLayer):
&gt; +        (WebCore::LayerRendererChromium::initializeSharedGLObjects):
&gt; +        * platform/graphics/chromium/LayerRendererChromium.h:
&gt; +        (WebCore::LayerRendererChromium::):
&gt; +        * platform/graphics/chromium/WebGLLayerChromium.cpp: Removed.
&gt; +        * platform/graphics/chromium/WebGLLayerChromium.h: Removed.
&gt; +        * platform/graphics/mac/GraphicsLayerCA.h:
&gt; +        * platform/graphics/mac/GraphicsLayerCA.mm:
&gt; +        (WebCore::GraphicsLayerCA::setContentsToGraphicsContext3D):
&gt; +        * rendering/RenderLayerBacking.cpp:
&gt; +        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
&gt; +        (WebCore::RenderLayerBacking::containsPaintedContent):
&gt; +        (WebCore::RenderLayerBacking::rendererContentChanged):
&gt; +
&gt;  2010-08-05  Eric Seidel  &lt;eric@webkit.org&gt;
&gt;  
&gt;          Reviewed by Nikolas Zimmermann.
&gt; diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
&gt; index bad123ee2337b6a9e026b44ea2e1ac46fa3d1389..d8fdbb4f808a5db2766b2d3c50bbebfc11ac11a3 100644
&gt; --- a/WebCore/WebCore.gypi
&gt; +++ b/WebCore/WebCore.gypi
&gt; @@ -2194,6 +2194,8 @@
&gt;              &apos;platform/graphics/chromium/GLES2Texture.h&apos;,
&gt;              &apos;platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp&apos;,
&gt;              &apos;platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp&apos;,
&gt; +            &apos;platform/graphics/chromium/GraphicsContext3DLayerChromium.cpp&apos;,
&gt; +            &apos;platform/graphics/chromium/GraphicsContext3DLayerChromium.h&apos;,
&gt;              &apos;platform/graphics/chromium/GraphicsLayerChromium.cpp&apos;,
&gt;              &apos;platform/graphics/chromium/GraphicsLayerChromium.h&apos;,
&gt;              &apos;platform/graphics/chromium/IconChromiumLinux.cpp&apos;,
&gt; @@ -2221,8 +2223,6 @@
&gt;              &apos;platform/graphics/chromium/UniscribeHelperTextRun.h&apos;,
&gt;              &apos;platform/graphics/chromium/VideoLayerChromium.cpp&apos;,
&gt;              &apos;platform/graphics/chromium/VideoLayerChromium.h&apos;,
&gt; -            &apos;platform/graphics/chromium/WebGLLayerChromium.cpp&apos;,
&gt; -            &apos;platform/graphics/chromium/WebGLLayerChromium.h&apos;,
&gt;              &apos;platform/graphics/filters/FEBlend.cpp&apos;,
&gt;              &apos;platform/graphics/filters/FEBlend.h&apos;,
&gt;              &apos;platform/graphics/filters/FEColorMatrix.cpp&apos;,
&gt; diff --git a/WebCore/platform/graphics/GraphicsLayer.h b/WebCore/platform/graphics/GraphicsLayer.h
&gt; index a5819f49d9abb6158da1d913d3691e4b0f2ceb0f..9582ca9b8912f840a07a4726c2299b82d02c1aa2 100644
&gt; --- a/WebCore/platform/graphics/GraphicsLayer.h
&gt; +++ b/WebCore/platform/graphics/GraphicsLayer.h
&gt; @@ -298,9 +298,7 @@ public:
&gt;      virtual void setContentsToImage(Image*) { }
&gt;      virtual void setContentsToMedia(PlatformLayer*) { } // video or plug-in
&gt;      virtual void setContentsBackgroundColor(const Color&amp;) { }
&gt; -#if ENABLE(3D_CANVAS)
&gt; -    virtual void setContentsToWebGL(PlatformLayer*) { }
&gt; -#endif
&gt; +    virtual void setContentsToGraphicsContext3D(PlatformLayer*) { }
&gt;      virtual bool hasContentsLayer() const { return false; }
&gt;  
&gt;      // Callback from the underlying graphics system to draw layer contents.
&gt; diff --git a/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp b/WebCore/platform/graphics/chromium/GraphicsContext3DLayerChromium.cpp
&gt; similarity index 83%
&gt; rename from WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp
&gt; rename to WebCore/platform/graphics/chromium/GraphicsContext3DLayerChromium.cpp
&gt; index ebd9ebe61608d23edd4f0a20fc56584f389ad8d6..5ae4a34c2637dde78e0d68a3d27b6b20dd6a29bd 100644
&gt; --- a/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp
&gt; +++ b/WebCore/platform/graphics/chromium/GraphicsContext3DLayerChromium.cpp
&gt; @@ -32,21 +32,21 @@
&gt;  
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt;  
&gt; -#include &quot;WebGLLayerChromium.h&quot;
&gt; +#include &quot;GraphicsContext3DLayerChromium.h&quot;
&gt;  
&gt;  #include &quot;GraphicsContext3D.h&quot;
&gt;  #include &lt;GLES2/gl2.h&gt;
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; -unsigned WebGLLayerChromium::m_shaderProgramId = 0;
&gt; +unsigned GraphicsContext3DLayerChromium::m_shaderProgramId = 0;
&gt;  
&gt; -PassRefPtr&lt;WebGLLayerChromium&gt; WebGLLayerChromium::create(GraphicsLayerChromium* owner)
&gt; +PassRefPtr&lt;GraphicsContext3DLayerChromium&gt; GraphicsContext3DLayerChromium::create(GraphicsLayerChromium* owner)
&gt;  {
&gt; -    return adoptRef(new WebGLLayerChromium(owner));
&gt; +    return adoptRef(new GraphicsContext3DLayerChromium(owner));
&gt;  }
&gt;  
&gt; -WebGLLayerChromium::WebGLLayerChromium(GraphicsLayerChromium* owner)
&gt; +GraphicsContext3DLayerChromium::GraphicsContext3DLayerChromium(GraphicsLayerChromium* owner)
&gt;      : LayerChromium(owner)
&gt;      , m_context(0)
&gt;      , m_textureId(0)
&gt; @@ -54,12 +54,12 @@ WebGLLayerChromium::WebGLLayerChromium(GraphicsLayerChromium* owner)
&gt;  {
&gt;  }
&gt;  
&gt; -unsigned WebGLLayerChromium::textureId()
&gt; +unsigned GraphicsContext3DLayerChromium::textureId()
&gt;  {
&gt;      return m_textureId;
&gt;  }
&gt;  
&gt; -void WebGLLayerChromium::updateTextureContents(unsigned textureId)
&gt; +void GraphicsContext3DLayerChromium::updateTextureContents(unsigned textureId)
&gt;  {
&gt;      ASSERT(textureId == m_textureId);
&gt;      ASSERT(m_context);
&gt; @@ -80,7 +80,7 @@ void WebGLLayerChromium::updateTextureContents(unsigned textureId)
&gt;      }
&gt;  }
&gt;  
&gt; -void WebGLLayerChromium::setContext(const GraphicsContext3D* context)
&gt; +void GraphicsContext3DLayerChromium::setContext(const GraphicsContext3D* context)
&gt;  {
&gt;      m_context = const_cast&lt;GraphicsContext3D*&gt;(context);
&gt;  
&gt; diff --git a/WebCore/platform/graphics/chromium/WebGLLayerChromium.h b/WebCore/platform/graphics/chromium/GraphicsContext3DLayerChromium.h
&gt; similarity index 85%
&gt; rename from WebCore/platform/graphics/chromium/WebGLLayerChromium.h
&gt; rename to WebCore/platform/graphics/chromium/GraphicsContext3DLayerChromium.h
&gt; index abd0c93c3b835877fd8dd7708f2ba59ceddff48d..1b2a8a690ba7cf3e953e530b8f7754822c124b14 100644
&gt; --- a/WebCore/platform/graphics/chromium/WebGLLayerChromium.h
&gt; +++ b/WebCore/platform/graphics/chromium/GraphicsContext3DLayerChromium.h
&gt; @@ -29,8 +29,8 @@
&gt;   */
&gt;  
&gt;  
&gt; -#ifndef WebGLLayerChromium_h
&gt; -#define WebGLLayerChromium_h
&gt; +#ifndef GraphicsContext3DLayerChromium_h
&gt; +#define GraphicsContext3DLayerChromium_h
&gt;  
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt;  
&gt; @@ -40,10 +40,10 @@ namespace WebCore {
&gt;  
&gt;  class GraphicsContext3D;
&gt;  
&gt; -// A Layer that contains a WebGL element.
&gt; -class WebGLLayerChromium : public LayerChromium {
&gt; +// A Layer that containing GraphicsContext3D-rendered content
&gt; +class GraphicsContext3DLayerChromium : public LayerChromium {
&gt;  public:
&gt; -    static PassRefPtr&lt;WebGLLayerChromium&gt; create(GraphicsLayerChromium* owner = 0);
&gt; +    static PassRefPtr&lt;GraphicsContext3DLayerChromium&gt; create(GraphicsLayerChromium* owner = 0);
&gt;      virtual bool drawsContent() { return m_context; }
&gt;      virtual bool ownsTexture() { return true; }
&gt;      virtual void updateTextureContents(unsigned);
&gt; @@ -55,7 +55,7 @@ public:
&gt;      static void setShaderProgramId(unsigned shaderProgramId) { m_shaderProgramId = shaderProgramId; }
&gt;  
&gt;  private:
&gt; -    WebGLLayerChromium(GraphicsLayerChromium* owner);
&gt; +    explicit GraphicsContext3DLayerChromium(GraphicsLayerChromium* owner);
&gt;      GraphicsContext3D* m_context;
&gt;      unsigned m_textureId;
&gt;      bool m_textureChanged;
&gt; diff --git a/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp b/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp
&gt; index e895cee09a60da517477465e9737fed21ae9bb1d..d0a6f5db0dd06223c72a349d42b893da716727b6 100644
&gt; --- a/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp
&gt; +++ b/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp
&gt; @@ -47,13 +47,14 @@
&gt;  
&gt;  #include &quot;FloatConversion.h&quot;
&gt;  #include &quot;FloatRect.h&quot;
&gt; +#include &quot;GraphicsContext3DLayerChromium.h&quot;
&gt;  #include &quot;Image.h&quot;
&gt;  #include &quot;ImageLayerChromium.h&quot;
&gt;  #include &quot;LayerChromium.h&quot;
&gt;  #include &quot;PlatformString.h&quot;
&gt;  #include &quot;SystemTime.h&quot;
&gt;  #include &quot;TransformLayerChromium.h&quot;
&gt; -#include &quot;WebGLLayerChromium.h&quot;
&gt; +
&gt;  #include &lt;wtf/CurrentTime.h&gt;
&gt;  #include &lt;wtf/StringExtras.h&gt;
&gt;  #include &lt;wtf/text/CString.h&gt;
&gt; @@ -285,6 +286,11 @@ void GraphicsLayerChromium::setOpacity(float opacity)
&gt;      primaryLayer()-&gt;setOpacity(opacity);
&gt;  }
&gt;  
&gt; +void GraphicsLayerChromium::setContentsNeedsDisplay()
&gt; +{
&gt; +    if (m_contentsLayer)
&gt; +        m_contentsLayer-&gt;setNeedsDisplay();
&gt; +}
&gt;  void GraphicsLayerChromium::setNeedsDisplay()
&gt;  {
&gt;      if (drawsContent())
&gt; @@ -334,19 +340,18 @@ void GraphicsLayerChromium::setContentsToImage(Image* image)
&gt;          updateSublayerList();
&gt;  }
&gt;  
&gt; -#if ENABLE(3D_CANVAS)
&gt; -void GraphicsLayerChromium::setContentsToWebGL(PlatformLayer* platformLayer)
&gt; +void GraphicsLayerChromium::setContentsToGraphicsContext3D(PlatformLayer* platformLayer)
&gt;  {
&gt;      bool childrenChanged = false;
&gt;      if (platformLayer) {
&gt; -        if (!m_contentsLayer.get() || m_contentsLayerPurpose != ContentsLayerForWebGL) {
&gt; -            WebGLLayerChromium* webGLLayer = static_cast&lt;WebGLLayerChromium*&gt;(platformLayer);
&gt; -            setupContentsLayer(webGLLayer);
&gt; -            m_contentsLayer = webGLLayer;
&gt; -            m_contentsLayerPurpose = ContentsLayerForWebGL;
&gt; +        platformLayer-&gt;setOwner(this);
&gt; +        if (!m_contentsLayer.get() || m_contentsLayerPurpose != ContentsLayerForGraphicsContext3D) {
&gt; +            GraphicsContext3DLayerChromium* graphicsContext3DLayer = static_cast&lt;GraphicsContext3DLayerChromium*&gt;(platformLayer);
&gt; +            setupContentsLayer(graphicsContext3DLayer);
&gt; +            m_contentsLayer = graphicsContext3DLayer;
&gt; +            m_contentsLayerPurpose = ContentsLayerForGraphicsContext3D;
&gt;              childrenChanged = true;
&gt;          }
&gt; -        platformLayer-&gt;setOwner(this);
&gt;          platformLayer-&gt;setNeedsDisplay();
&gt;          updateContentsRect();
&gt;      } else {
&gt; @@ -361,7 +366,6 @@ void GraphicsLayerChromium::setContentsToWebGL(PlatformLayer* platformLayer)
&gt;      if (childrenChanged)
&gt;          updateSublayerList();
&gt;  }
&gt; -#endif
&gt;  
&gt;  void GraphicsLayerChromium::setContentsToMedia(PlatformLayer* layer)
&gt;  {
&gt; diff --git a/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h b/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h
&gt; index cd5e4799ab4f031a41831200e8a58d27920e3420..bc72e6e75ed6d843a76b8afa66864012c7210316 100644
&gt; --- a/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h
&gt; +++ b/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h
&gt; @@ -81,12 +81,13 @@ public:
&gt;  
&gt;      virtual void setNeedsDisplay();
&gt;      virtual void setNeedsDisplayInRect(const FloatRect&amp;);
&gt; +    virtual void setContentsNeedsDisplay();
&gt;  
&gt;      virtual void setContentsRect(const IntRect&amp;);
&gt;  
&gt;      virtual void setContentsToImage(Image*);
&gt;      virtual void setContentsToMedia(PlatformLayer*);
&gt; -    virtual void setContentsToWebGL(PlatformLayer*);
&gt; +    virtual void setContentsToGraphicsContext3D(PlatformLayer*);
&gt;  
&gt;      virtual PlatformLayer* platformLayer() const;
&gt;  
&gt; @@ -137,7 +138,7 @@ private:
&gt;          NoContentsLayer = 0,
&gt;          ContentsLayerForImage,
&gt;          ContentsLayerForVideo,
&gt; -        ContentsLayerForWebGL
&gt; +        ContentsLayerForGraphicsContext3D
&gt;      };
&gt;  
&gt;      ContentsLayerPurpose m_contentsLayerPurpose;
&gt; diff --git a/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp b/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
&gt; index e98a65a2c23662b68650883e9ca8e5546d81c934..c5c26f77c24c36f9e053a92ecb8c012443d695b4 100644
&gt; --- a/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
&gt; +++ b/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
&gt; @@ -35,10 +35,10 @@
&gt;  #include &quot;LayerRendererChromium.h&quot;
&gt;  
&gt;  #include &quot;GLES2Context.h&quot;
&gt; +#include &quot;GraphicsContext3DLayerChromium.h&quot;
&gt;  #include &quot;LayerChromium.h&quot;
&gt;  #include &quot;NotImplemented.h&quot;
&gt;  #include &quot;TransformLayerChromium.h&quot;
&gt; -#include &quot;WebGLLayerChromium.h&quot;
&gt;  #if PLATFORM(SKIA)
&gt;  #include &quot;NativeImageSkia.h&quot;
&gt;  #include &quot;PlatformContextSkia.h&quot;
&gt; @@ -691,6 +691,7 @@ void LayerRendererChromium::drawLayer(LayerChromium* layer)
&gt;          if (layer-&gt;contentsDirty()) {
&gt;              // Update the backing texture contents for any dirty portion of the layer.
&gt;              layer-&gt;updateTextureContents(textureId);
&gt; +            m_gles2Context-&gt;makeCurrent();
&gt;          }
&gt;  
&gt;          if (layer-&gt;doubleSided())
&gt; @@ -770,9 +771,9 @@ bool LayerRendererChromium::initializeSharedGLObjects()
&gt;          &quot;  gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w); \n&quot;
&gt;          &quot;}                                                   \n&quot;;
&gt;  
&gt; -    // WebGL layers need to be flipped vertically and their colors shouldn&apos;t be
&gt; +    // GraphicsContext3D layers need to be flipped vertically and their colors shouldn&apos;t be
&gt;      // swizzled.
&gt; -    char webGLFragmentShaderString[] =
&gt; +    char graphicsContext3DFragmentShaderString[] =
&gt;          &quot;precision mediump float;                            \n&quot;
&gt;          &quot;varying vec2 v_texCoord;                            \n&quot;
&gt;          &quot;uniform sampler2D s_texture;                        \n&quot;
&gt; @@ -819,11 +820,11 @@ bool LayerRendererChromium::initializeSharedGLObjects()
&gt;      }
&gt;      LayerChromium::setShaderProgramId(ContentLayerProgram);
&gt;  
&gt; -    if (!createLayerShader(WebGLLayerProgram, vertexShaderString, webGLFragmentShaderString)) {
&gt; -        LOG_ERROR(&quot;Failed to create shader program for WebGL layers&quot;);
&gt; +    if (!createLayerShader(GraphicsContext3DLayerProgram, vertexShaderString, graphicsContext3DFragmentShaderString)) {
&gt; +        LOG_ERROR(&quot;Failed to create shader program for GraphicsContext3D layers&quot;);
&gt;          return false;
&gt;      }
&gt; -    WebGLLayerChromium::setShaderProgramId(WebGLLayerProgram);
&gt; +    GraphicsContext3DLayerChromium::setShaderProgramId(GraphicsContext3DLayerProgram);
&gt;  
&gt;      if (!createLayerShader(ScrollLayerProgram, vertexShaderString, scrollFragmentShaderString)) {
&gt;          LOG_ERROR(&quot;Failed to create shader program for scrolling layer&quot;);
&gt; @@ -838,7 +839,7 @@ bool LayerRendererChromium::initializeSharedGLObjects()
&gt;      // Specify the attrib location for the position and texCoord and make it the same for all programs to
&gt;      // avoid binding re-binding the vertex attributes.
&gt;      bindCommonAttribLocations(ContentLayerProgram);
&gt; -    bindCommonAttribLocations(WebGLLayerProgram);
&gt; +    bindCommonAttribLocations(GraphicsContext3DLayerProgram);
&gt;      bindCommonAttribLocations(DebugBorderProgram);
&gt;      bindCommonAttribLocations(ScrollLayerProgram);
&gt;  
&gt; diff --git a/WebCore/platform/graphics/chromium/LayerRendererChromium.h b/WebCore/platform/graphics/chromium/LayerRendererChromium.h
&gt; index 17e7e5780353c1ba0ec8e9922af9dba8d283ac0f..f55f7c8b7a470dcb76df9847bc5b7c0b81d37a1c 100644
&gt; --- a/WebCore/platform/graphics/chromium/LayerRendererChromium.h
&gt; +++ b/WebCore/platform/graphics/chromium/LayerRendererChromium.h
&gt; @@ -88,7 +88,7 @@ public:
&gt;      GraphicsContext* rootLayerGraphicsContext() const { return m_rootLayerGraphicsContext.get(); }
&gt;  
&gt;  private:
&gt; -    enum ShaderProgramType { DebugBorderProgram, ScrollLayerProgram, ContentLayerProgram, WebGLLayerProgram, NumShaderProgramTypes };
&gt; +    enum ShaderProgramType { DebugBorderProgram, ScrollLayerProgram, ContentLayerProgram, GraphicsContext3DLayerProgram, NumShaderProgramTypes };
&gt;  
&gt;      void updateLayersRecursive(LayerChromium* layer, const TransformationMatrix&amp; parentMatrix, float opacity, const IntRect&amp; visibleRect);
&gt;  
&gt; diff --git a/WebCore/platform/graphics/mac/GraphicsLayerCA.h b/WebCore/platform/graphics/mac/GraphicsLayerCA.h
&gt; index 80c822c65f7145484168da166c0aad68fcbd4ec9..549f31bf50b0eb8491c25968c74b64ed3ab5e1d6 100644
&gt; --- a/WebCore/platform/graphics/mac/GraphicsLayerCA.h
&gt; +++ b/WebCore/platform/graphics/mac/GraphicsLayerCA.h
&gt; @@ -103,9 +103,8 @@ public:
&gt;      
&gt;      virtual void setContentsToImage(Image*);
&gt;      virtual void setContentsToMedia(PlatformLayer*);
&gt; -#if ENABLE(3D_CANVAS)
&gt; -    virtual void setContentsToWebGL(PlatformLayer*);
&gt; -#endif
&gt; +    virtual void setContentsToGraphicsContext3D(PlatformLayer*);
&gt; +
&gt;      virtual bool hasContentsLayer() const { return m_contentsLayer; }
&gt;      
&gt;      virtual PlatformLayer* platformLayer() const;
&gt; diff --git a/WebCore/platform/graphics/mac/GraphicsLayerCA.mm b/WebCore/platform/graphics/mac/GraphicsLayerCA.mm
&gt; index 9f1ac8338f9bdc149aa3d89cad35f31f3447c837..7f0bc3fd4d55686a753d5b528ae06cec10dc3bf6 100644
&gt; --- a/WebCore/platform/graphics/mac/GraphicsLayerCA.mm
&gt; +++ b/WebCore/platform/graphics/mac/GraphicsLayerCA.mm
&gt; @@ -1722,8 +1722,7 @@ void GraphicsLayerCA::pauseAnimationOnLayer(AnimatedPropertyID property, const S
&gt;      }
&gt;  }
&gt;  
&gt; -#if ENABLE(3D_CANVAS)
&gt; -void GraphicsLayerCA::setContentsToWebGL(PlatformLayer* webglLayer)
&gt; +void GraphicsLayerCA::setContentsToGraphicsContext3D(PlatformLayer* webglLayer)
&gt;  {
&gt;      if (webglLayer == m_contentsLayer)
&gt;          return;
&gt; @@ -1737,7 +1736,6 @@ void GraphicsLayerCA::setContentsToWebGL(PlatformLayer* webglLayer)
&gt;      noteSublayersChanged();
&gt;      noteLayerPropertyChanged(ContentsWebGLLayerChanged);
&gt;  }
&gt; -#endif
&gt;      
&gt;  void GraphicsLayerCA::repaintLayerDirtyRects()
&gt;  {
&gt; diff --git a/WebCore/rendering/RenderLayerBacking.cpp b/WebCore/rendering/RenderLayerBacking.cpp
&gt; index 0e5933e45a839651b138c5068f54e4dc8fa9cfe7..af18247901ae6400c16771936bb89c567fa592a3 100644
&gt; --- a/WebCore/rendering/RenderLayerBacking.cpp
&gt; +++ b/WebCore/rendering/RenderLayerBacking.cpp
&gt; @@ -28,13 +28,12 @@
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt;  
&gt;  #include &quot;AnimationController.h&quot;
&gt; -#if ENABLE(3D_CANVAS)    
&gt; -#include &quot;WebGLRenderingContext.h&quot;
&gt; -#endif
&gt; +#include &quot;CanvasRenderingContext.h&quot;
&gt;  #include &quot;CSSPropertyNames.h&quot;
&gt;  #include &quot;CSSStyleSelector.h&quot;
&gt;  #include &quot;FrameView.h&quot;
&gt;  #include &quot;GraphicsContext.h&quot;
&gt; +#include &quot;GraphicsContext3D.h&quot;
&gt;  #include &quot;GraphicsLayer.h&quot;
&gt;  #include &quot;HTMLCanvasElement.h&quot;
&gt;  #include &quot;HTMLElement.h&quot;
&gt; @@ -252,14 +251,13 @@ bool RenderLayerBacking::updateGraphicsLayerConfiguration()
&gt;          m_graphicsLayer-&gt;setContentsToMedia(mediaElement-&gt;platformLayer());
&gt;      }
&gt;  #endif
&gt; -#if ENABLE(3D_CANVAS)    
&gt; -    else if (is3DCanvas(renderer())) {
&gt; +    else if (renderer()-&gt;isCanvas()) {
&gt;          HTMLCanvasElement* canvas = static_cast&lt;HTMLCanvasElement*&gt;(renderer()-&gt;node());
&gt; -        WebGLRenderingContext* context = static_cast&lt;WebGLRenderingContext*&gt;(canvas-&gt;renderingContext());
&gt; -        if (context-&gt;graphicsContext3D()-&gt;platformLayer())
&gt; -            m_graphicsLayer-&gt;setContentsToWebGL(context-&gt;graphicsContext3D()-&gt;platformLayer());
&gt; +        if (CanvasRenderingContext* context = canvas-&gt;renderingContext())
&gt; +            if (context-&gt;graphicsContext3D())
&gt; +                if (PlatformLayer* pl = context-&gt;graphicsContext3D()-&gt;platformLayer())
&gt; +                    m_graphicsLayer-&gt;setContentsToGraphicsContext3D(pl);
&gt;      }
&gt; -#endif
&gt;  
&gt;      if (renderer()-&gt;isRenderIFrame())
&gt;          layerConfigChanged = RenderLayerCompositor::parentIFrameContentLayers(toRenderIFrame(renderer()));
&gt; @@ -758,6 +756,10 @@ bool RenderLayerBacking::containsPaintedContent() const
&gt;      // and set background color on the layer in that case, instead of allocating backing store and painting.
&gt;      if (renderer()-&gt;isVideo() || is3DCanvas(renderer()))
&gt;          return hasBoxDecorationsOrBackground(renderer());
&gt; +#if ENABLE(ACCELERATED_2D_CANVAS)
&gt; +    if (renderer()-&gt;isCanvas())
&gt; +        return hasBoxDecorationsOrBackground(renderer());
&gt; +#endif
&gt;  
&gt;      return true;
&gt;  }
&gt; @@ -783,6 +785,12 @@ void RenderLayerBacking::rendererContentChanged()
&gt;          return;
&gt;      }
&gt;  #endif
&gt; +#if ENABLE(ACCELERATED_2D_CANVAS)
&gt; +    if (renderer()-&gt;isCanvas()) {
&gt; +        m_graphicsLayer-&gt;setContentsNeedsDisplay();
&gt; +        return;
&gt; +    }
&gt; +#endif
&gt;  }
&gt;  
&gt;  void RenderLayerBacking::updateImageContents()
&gt; diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
&gt; index 7048b8e1f8bbf0c3b0869f8e5d3fc48b468ad215..801d790654a30388405e2966446a6cd34e28dcbe 100644
&gt; --- a/WebKit/chromium/ChangeLog
&gt; +++ b/WebKit/chromium/ChangeLog
&gt; @@ -1,3 +1,18 @@
&gt; +2010-08-05  James Robinson  &lt;jamesr@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Compositing should be exposed in terms of GraphicsContext3D, not WebGL specifically
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=43589
&gt; +
&gt; +        Initializes the platformLayer as a Graphics3DLayerChromium, not a WebGLLayerChromium.
&gt; +        The layer itself isn&apos;t WebGL-specific.
&gt; +
&gt; +        * src/GraphicsContext3D.cpp:
&gt; +        (WebCore::GraphicsContext3DInternal::initialize):
&gt; +        (WebCore::GraphicsContext3DInternal::platformLayer):
&gt; +        (WebCore::GraphicsContext3D::platformLayer):
&gt; +
&gt;  2010-08-04  Kenneth Russell  &lt;kbr@google.com&gt;
&gt;  
&gt;          Reviewed by Dimitri Glazkov.
&gt; diff --git a/WebKit/chromium/src/GraphicsContext3D.cpp b/WebKit/chromium/src/GraphicsContext3D.cpp
&gt; index d6ad1a34ec495b4409e53ffcd02356f9201f7ae5..4a141dc2b67fe0417ebe8e3f5821d50b651616f0 100644
&gt; --- a/WebKit/chromium/src/GraphicsContext3D.cpp
&gt; +++ b/WebKit/chromium/src/GraphicsContext3D.cpp
&gt; @@ -39,6 +39,7 @@
&gt;  #include &quot;Chrome.h&quot;
&gt;  #include &quot;ChromeClientImpl.h&quot;
&gt;  #include &quot;Float32Array.h&quot;
&gt; +#include &quot;GraphicsContext3DLayerChromium.h&quot;
&gt;  #include &quot;HTMLCanvasElement.h&quot;
&gt;  #include &quot;HTMLImageElement.h&quot;
&gt;  #include &quot;ImageBuffer.h&quot;
&gt; @@ -46,7 +47,6 @@
&gt;  #include &quot;Int32Array.h&quot;
&gt;  #include &quot;Int8Array.h&quot;
&gt;  #include &quot;Uint8Array.h&quot;
&gt; -#include &quot;WebGLLayerChromium.h&quot;
&gt;  #include &quot;WebGraphicsContext3D.h&quot;
&gt;  #include &quot;WebGraphicsContext3DDefaultImpl.h&quot;
&gt;  #include &quot;WebKit.h&quot;
&gt; @@ -111,7 +111,7 @@ public:
&gt;      void prepareTexture();
&gt;  
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; -    WebGLLayerChromium* platformLayer() const;
&gt; +    GraphicsContext3DLayerChromium* platformLayer() const;
&gt;  #endif
&gt;      bool isGLES2Compliant() const;
&gt;  
&gt; @@ -304,7 +304,7 @@ public:
&gt;  private:
&gt;      OwnPtr&lt;WebKit::WebGraphicsContext3D&gt; m_impl;
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; -    RefPtr&lt;WebGLLayerChromium&gt; m_compositingLayer;
&gt; +    RefPtr&lt;GraphicsContext3DLayerChromium&gt; m_compositingLayer;
&gt;  #endif
&gt;  #if PLATFORM(SKIA)
&gt;      // If the width and height of the Canvas&apos;s backing store don&apos;t
&gt; @@ -365,7 +365,7 @@ bool GraphicsContext3DInternal::initialize(GraphicsContext3D::Attributes attrs,
&gt;      m_impl.set(webContext);
&gt;  
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; -    m_compositingLayer = WebGLLayerChromium::create(0);
&gt; +    m_compositingLayer = GraphicsContext3DLayerChromium::create(0);
&gt;  #endif
&gt;      return true;
&gt;  }
&gt; @@ -386,7 +386,7 @@ void GraphicsContext3DInternal::prepareTexture()
&gt;  }
&gt;  
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; -WebGLLayerChromium* GraphicsContext3DInternal::platformLayer() const
&gt; +GraphicsContext3DLayerChromium* GraphicsContext3DInternal::platformLayer() const
&gt;  {
&gt;      return m_compositingLayer.get();
&gt;  }
&gt; @@ -1046,9 +1046,9 @@ void GraphicsContext3D::prepareTexture()
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt;  PlatformLayer* GraphicsContext3D::platformLayer() const
&gt;  {
&gt; -    WebGLLayerChromium* webGLLayer = m_internal-&gt;platformLayer();
&gt; -    webGLLayer-&gt;setContext(this);
&gt; -    return webGLLayer;
&gt; +    GraphicsContext3DLayerChromium* graphicsContext3DLayer = m_internal-&gt;platformLayer();
&gt; +    graphicsContext3DLayer-&gt;setContext(this);
&gt; +    return graphicsContext3DLayer;
&gt;  }
&gt;  #endif
&gt;  

Other than a couple of small comments, it looks good.

WebCore/platform/graphics/chromium/GraphicsContext3DLayerChromium.h:43
 +  // A Layer that containing GraphicsContext3D-rendered content
typo: Take out &quot;that&quot;

WebCore/rendering/RenderLayerBacking.cpp:760
 +      if (renderer()-&gt;isCanvas())
maybe a cleaner way to do this would be to replace the check for is3DCanvas() above with something that checks if you have a h/w accelerated canvas (2D or 3D)

WebCore/rendering/RenderLayerBacking.cpp:789
 +      if (renderer()-&gt;isCanvas()) {
Ditto here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261033</commentid>
    <comment_count>6</comment_count>
      <attachid>63678</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 19:11:16 -0700</bug_when>
    <thetext>Created attachment 63678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261034</commentid>
    <comment_count>7</comment_count>
      <attachid>63679</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 19:14:03 -0700</bug_when>
    <thetext>Created attachment 63679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261036</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 19:14:50 -0700</bug_when>
    <thetext>Addressed Vangelis&apos; comments and fixed the build for OS X 10.5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261040</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-05 19:25:35 -0700</bug_when>
    <thetext>Attachment 63679 did not build on mac:
Build output: http://queues.webkit.org/results/3619585</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261066</commentid>
    <comment_count>10</comment_count>
      <attachid>63686</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-05 20:55:32 -0700</bug_when>
    <thetext>Created attachment 63686
compile tested on mac with and without 3D_CANVAS enabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261274</commentid>
    <comment_count>11</comment_count>
      <attachid>63686</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-06 08:53:10 -0700</bug_when>
    <thetext>Comment on attachment 63686
compile tested on mac with and without 3D_CANVAS enabled

&gt; diff --git a/WebCore/platform/graphics/GraphicsLayer.h b/WebCore/platform/graphics/GraphicsLayer.h

&gt; -#if ENABLE(3D_CANVAS)
&gt; -    virtual void setContentsToWebGL(PlatformLayer*) { }
&gt; -#endif
&gt; +    virtual void setContentsToGraphicsContext3D(PlatformLayer*) { }

I think this name is a bit wordy, and not quite accurate: you&apos;re not passing a GraphicsContext3D in. I think &quot;setContentsTo3D() would be OK, or perhaps setContentsTo3DLayer().

Even then, if this is used for an accelerated canvas, it&apos;s not just 3D. So setContentsToCanvas()? setContentsToAcceleratedCanvas()?

r=me with a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261323</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-06 10:08:40 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 63686 [details])
&gt; &gt; diff --git a/WebCore/platform/graphics/GraphicsLayer.h b/WebCore/platform/graphics/GraphicsLayer.h
&gt; 
&gt; &gt; -#if ENABLE(3D_CANVAS)
&gt; &gt; -    virtual void setContentsToWebGL(PlatformLayer*) { }
&gt; &gt; -#endif
&gt; &gt; +    virtual void setContentsToGraphicsContext3D(PlatformLayer*) { }
&gt; 
&gt; I think this name is a bit wordy, and not quite accurate: you&apos;re not passing a GraphicsContext3D in. I think &quot;setContentsTo3D() would be OK, or perhaps setContentsTo3DLayer().
&gt; 
&gt; Even then, if this is used for an accelerated canvas, it&apos;s not just 3D. So setContentsToCanvas()? setContentsToAcceleratedCanvas()?
&gt; 
&gt; r=me with a better name.

Why not just setContents to PlatformLayer? The (current) implementation does pretty generic layer things to it - nothing specific to WebGL or 3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261359</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 11:05:48 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 63686 [details])
&gt; &gt; diff --git a/WebCore/platform/graphics/GraphicsLayer.h b/WebCore/platform/graphics/GraphicsLayer.h
&gt; 
&gt; &gt; -#if ENABLE(3D_CANVAS)
&gt; &gt; -    virtual void setContentsToWebGL(PlatformLayer*) { }
&gt; &gt; -#endif
&gt; &gt; +    virtual void setContentsToGraphicsContext3D(PlatformLayer*) { }
&gt; 
&gt; I think this name is a bit wordy, and not quite accurate: you&apos;re not passing a GraphicsContext3D in. I think &quot;setContentsTo3D() would be OK, or perhaps setContentsTo3DLayer().
&gt; 
&gt; Even then, if this is used for an accelerated canvas, it&apos;s not just 3D. So setContentsToCanvas()? setContentsToAcceleratedCanvas()?

I like setContentsToCanvas().  The &apos;accelerated&apos;-ness is obvious from context.  I think we might want to use this for other types of layers in the future we be can rename it if/when 
&gt; 
&gt; r=me with a better name.

Thanks!  Will update the bug with a renamed patch.

(In reply to comment #12)
&gt; 
&gt; Why not just setContents to PlatformLayer? The (current) implementation does pretty generic layer things to it - nothing specific to WebGL or 3D.

That&apos;s only true in the mac compositor implementation.  In chromium we use different shaders for different layer types to control whether to flip a layer vertically, swizzle BGRA-&gt;RGBA, or do YUV-&gt;RGBA conversions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261369</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-06 11:34:40 -0700</bug_when>
    <thetext>&gt; (In reply to comment #12)
&gt; &gt; 
&gt; &gt; Why not just setContents to PlatformLayer? The (current) implementation does pretty generic layer things to it - nothing specific to WebGL or 3D.
&gt; 
&gt; That&apos;s only true in the mac compositor implementation.  In chromium we use different shaders for different layer types to control whether to flip a layer vertically, swizzle BGRA-&gt;RGBA, or do YUV-&gt;RGBA conversions.

Ok, that makes sense for now. But I&apos;m getting concerned about all the setContentsTo... API&apos;s in GraphicsLayer. Right now we have setContentsToMedia and setContentsToCanvas, both of which pass a PlatformLayer. If we have to add a third, it will be time to change it to setContentsToPlatformLayer and pass in some kind of use flags or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261371</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-06 11:38:00 -0700</bug_when>
    <thetext>&gt; (In reply to comment #12)
&gt; &gt; 
&gt; &gt; Why not just setContents to PlatformLayer? The (current) implementation does pretty generic layer things to it - nothing specific to WebGL or 3D.
&gt; 
&gt; That&apos;s only true in the mac compositor implementation.  In chromium we use different shaders for different layer types to control whether to flip a layer vertically, swizzle BGRA-&gt;RGBA, or do YUV-&gt;RGBA conversions.

One other thing. I don&apos;t see why GraphicsLayer needs to know about flipping and other layer specific issues. Why doesn&apos;t the passed PlatformLayer implementation deal with all this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261374</commentid>
    <comment_count>16</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-06 11:43:34 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; 
&gt; &gt; &gt; Why not just setContents to PlatformLayer? The (current) implementation does pretty generic layer things to it - nothing specific to WebGL or 3D.
&gt; &gt; 
&gt; &gt; That&apos;s only true in the mac compositor implementation.  In chromium we use different shaders for different layer types to control whether to flip a layer vertically, swizzle BGRA-&gt;RGBA, or do YUV-&gt;RGBA conversions.
&gt; 
&gt; One other thing. I don&apos;t see why GraphicsLayer needs to know about flipping and other layer specific issues. Why doesn&apos;t the passed PlatformLayer implementation deal with all this?

I believe Chris is right. We can just pass a PlatformLayer of the right type which will handle the content as needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261383</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-06 11:59:58 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Why not just setContents to PlatformLayer? The (current) implementation does pretty generic layer things to it - nothing specific to WebGL or 3D.
&gt; &gt; &gt; 
&gt; &gt; &gt; That&apos;s only true in the mac compositor implementation.  In chromium we use different shaders for different layer types to control whether to flip a layer vertically, swizzle BGRA-&gt;RGBA, or do YUV-&gt;RGBA conversions.
&gt; &gt; 
&gt; &gt; One other thing. I don&apos;t see why GraphicsLayer needs to know about flipping and other layer specific issues. Why doesn&apos;t the passed PlatformLayer implementation deal with all this?
&gt; 
&gt; I believe Chris is right. We can just pass a PlatformLayer of the right type which will handle the content as needed.

Hmm. Ok, then maybe it would be best to make it setContentsToPlatformLayer. 

There is still the issue of setContentsToMedia, which also takes a PlatformLayer. Looking at the Mac implementation the only difference is that the webgllayer calls setNeedsDisplay and the media layer doesn&apos;t. But I bet we could make calling setNeedsDisplay on the media layer not be a bad thing. But we should do that separately. I filed a bug for this: https://bugs.webkit.org/show_bug.cgi?id=43634.

If you do make this change can you also change the other WebGL related enums and calls in GraphicsLayer (e.g., ContentsWebGLLayerChanged and updateContentsWebGLLayer())?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261426</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 13:38:26 -0700</bug_when>
    <thetext>&gt; &gt; 
&gt; &gt; I believe Chris is right. We can just pass a PlatformLayer of the right type which will handle the content as needed.
&gt; 
&gt; Hmm. Ok, then maybe it would be best to make it setContentsToPlatformLayer. 
&gt; 
&gt; There is still the issue of setContentsToMedia, which also takes a PlatformLayer. Looking at the Mac implementation the only difference is that the webgllayer calls setNeedsDisplay and the media layer doesn&apos;t. But I bet we could make calling setNeedsDisplay on the media layer not be a bad thing. But we should do that separately. I filed a bug for this: https://bugs.webkit.org/show_bug.cgi?id=43634.

OK - it sounds like after that bug is fixed then we should make it setContentsToPlatformLayer().  I&apos;ll update this patch to setContentsToCanvas() until that point.


&gt; 
&gt; If you do make this change can you also change the other WebGL related enums and calls in GraphicsLayer (e.g., ContentsWebGLLayerChanged and updateContentsWebGLLayer())?

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261429</commentid>
    <comment_count>19</comment_count>
      <attachid>63757</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 13:40:42 -0700</bug_when>
    <thetext>Created attachment 63757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261444</commentid>
    <comment_count>20</comment_count>
      <attachid>63757</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-06 13:59:15 -0700</bug_when>
    <thetext>Comment on attachment 63757
Patch

r=me, assuming no regressions in WebGL tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261460</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-06 14:18:27 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 63757 [details])
&gt; r=me, assuming no regressions in WebGL tests

Good point. James, did you run all the WebGL tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261482</commentid>
    <comment_count>22</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 14:39:57 -0700</bug_when>
    <thetext>Yes, I ran the WebGL tests and tried out the Khronos-hosted WebGL demos on Safari / Snow Leopard and Chromium / Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261499</commentid>
    <comment_count>23</comment_count>
      <attachid>63757</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 14:49:39 -0700</bug_when>
    <thetext>Comment on attachment 63757
Patch

Clearing flags on attachment: 63757

Committed r64870: &lt;http://trac.webkit.org/changeset/64870&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261500</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-06 14:49:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63673</attachid>
            <date>2010-08-05 18:23:36 -0700</date>
            <delta_ts>2010-08-05 19:11:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43589-20100805182335.patch</filename>
            <type>text/plain</type>
            <size>24615</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTlhNzM1NjIzYTY4YjZjZTIzNDZmOTQxNzE1OTEwYWRlNjg1YmE1Ni4uZWMxMDY4ODRiOWU4N2Zm
OGIzOWQ3YmNlYjgzMWNmNDA4OTFlMWYwNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMC0wOC0wNSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbXBvc2l0aW5nIHNob3VsZCBiZSBleHBvc2Vk
IGluIHRlcm1zIG9mIEdyYXBoaWNzQ29udGV4dDNELCBub3QgV2ViR0wgc3BlY2lmaWNhbGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzU4OQorCisg
ICAgICAgIFRoaXMgdHJlYXRzIGFsbCBHcmFwaGljc0NvbnRleHQzRC1iYWNrZWQgbGF5ZXJzIHRo
ZSBzYW1lIGluc3RlYWQgb2Ygc3BlY2lhbCBjYXNpbmcgV2ViR0wuCisgICAgICAgIFRoZSBjcm9z
cy1wbGF0Zm9ybSBjaGFuZ2UgaXMgdG8gcmVuYW1lIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
VG9XZWJHTCgpIHRvCisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9HcmFwaGlj
c0NvbnRleHQzRCBhbmQgdG8gcmVuYW1lIGFsbCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBhbHNvIHJlbmFtZXMgdGhlIGNocm9taXVtIGNsYXNzIHVzZWQgZm9yIGFjY2Vs
ZXJhdGluZyB0aGVzZSBsYXllcnMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21p
dW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5
ZXJDaHJvbWl1bTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVy
ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjpvd25zVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW06OnNoYWRl
clByb2dyYW1JZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRExheWVyQ2hy
b21pdW06OnNldFNoYWRlclByb2dyYW1JZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRExheWVyQ2hyb21pdW06OnNldFByZXBhcmVUZXh0dXJlQ2FsbGJhY2spOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0
Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvR3JhcGhpY3NDb250
ZXh0M0QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29u
ZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRh
aW5zUGFpbnRlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpyZW5kZXJlckNvbnRlbnRDaGFuZ2VkKToKKwogMjAxMC0wOC0wNSAgRXJpYyBTZWlkZWwgIDxl
cmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5u
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCBiYWQxMjNlZTIzMzdiNmE5ZTAyNmI0NGVhMmUxYWM0NmZhM2QxMzg5Li5kOGZkYmI0
ZjgwOGE1ZGIyNzY2YjJkM2M1MGJiZWJmYzExYWMxMWEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjE5NCw2ICsyMTk0LDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMlRleHR1cmUu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJl
ZU5vZGVDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dseXBoUGFnZVRyZWVOb2RlTGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0uY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0NvbnRleHQz
RExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bUxpbnV4LmNwcCcsCkBAIC0yMjIx
LDggKzIyMjMsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Vu
aXNjcmliZUhlbHBlclRleHRSdW4uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCcsCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCmluZGV4IGE1ODE5ZjQ5ZDlhYmI2
MTU4ZGExZDkxM2QzNjkxZTRiMGYyY2ViMGYuLjk1ODJjYTliODkxMmY4NDBhMDdhNDcyNmMyMjk5
YjgyZDAyYzFhYTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5o
CkBAIC0yOTgsOSArMjk4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvSW1hZ2UoSW1hZ2UqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb01lZGlh
KFBsYXRmb3JtTGF5ZXIqKSB7IH0gLy8gdmlkZW8gb3IgcGx1Zy1pbgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpIHsgfQotI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9y
bUxheWVyKikgeyB9Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0dyYXBo
aWNzQ29udGV4dDNEKFBsYXRmb3JtTGF5ZXIqKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29u
dGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBDYWxsYmFjayBm
cm9tIHRoZSB1bmRlcmx5aW5nIGdyYXBoaWNzIHN5c3RlbSB0byBkcmF3IGxheWVyIGNvbnRlbnRz
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0uY3BwCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFt
ZSBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmNwcApyZW5hbWUgdG8gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGViZDllYmU2MTYwOGQyM2VkZDRm
MGEyMGZjNTY1ODRmMzg5YWQ4ZDYuLjVhZTRhMzRjMjYzN2RkZTc4ZTBkNjhhM2QyN2I2YjIwZGQ2
YTI5YmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMyLDIxICszMiwyMSBA
QAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiV2ViR0xM
YXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVt
LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVuc2lnbmVkIFdlYkdMTGF5ZXJDaHJvbWl1
bTo6bV9zaGFkZXJQcm9ncmFtSWQgPSAwOwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0RMYXll
ckNocm9taXVtOjptX3NoYWRlclByb2dyYW1JZCA9IDA7CiAKLVBhc3NSZWZQdHI8V2ViR0xMYXll
ckNocm9taXVtPiBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG93bmVyKQorUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0+IEdy
YXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTExheWVyQ2hyb21pdW0o
b3duZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNETGF5ZXJD
aHJvbWl1bShvd25lcikpOwogfQogCi1XZWJHTExheWVyQ2hyb21pdW06OldlYkdMTGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorR3JhcGhpY3NDb250ZXh0M0RMYXll
ckNocm9taXVtOjpHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNo
cm9taXVtKiBvd25lcikKICAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCiAgICAgLCBtX2NvbnRl
eHQoMCkKICAgICAsIG1fdGV4dHVyZUlkKDApCkBAIC01NCwxMiArNTQsMTIgQEAgV2ViR0xMYXll
ckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25l
cikKIHsKIH0KIAotdW5zaWduZWQgV2ViR0xMYXllckNocm9taXVtOjp0ZXh0dXJlSWQoKQordW5z
aWduZWQgR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjp0ZXh0dXJlSWQoKQogewogICAg
IHJldHVybiBtX3RleHR1cmVJZDsKIH0KIAotdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0
ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNETGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJ
ZCkKIHsKICAgICBBU1NFUlQodGV4dHVyZUlkID09IG1fdGV4dHVyZUlkKTsKICAgICBBU1NFUlQo
bV9jb250ZXh0KTsKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVw
ZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpCiAgICAgfQogfQogCi12b2lk
IFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjpzZXRDb250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIG1fY29udGV4dCA9IGNv
bnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0QqPihjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXllckNo
cm9taXVtLmgKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaApyZW5hbWUgdG8gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21p
dW0uaAppbmRleCBhYmQwYzkzYzNiODM1ODc3ZmQ4ZGQ3NzA4ZjJiYTU5Y2VkZGZmNDhkLi4xYjJh
OGE2OTBiYTdjZjNlOTUzZTUzMGI4Zjc3NTQ4MjJjMTI0YjE0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXllckNo
cm9taXVtLmgKQEAgLTI5LDggKzI5LDggQEAKICAqLwogCiAKLSNpZm5kZWYgV2ViR0xMYXllckNo
cm9taXVtX2gKLSNkZWZpbmUgV2ViR0xMYXllckNocm9taXVtX2gKKyNpZm5kZWYgR3JhcGhpY3ND
b250ZXh0M0RMYXllckNocm9taXVtX2gKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RMYXllckNo
cm9taXVtX2gKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIApAQCAtNDAsMTAg
KzQwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CiAKLS8vIEEgTGF5ZXIgdGhhdCBjb250YWlucyBhIFdlYkdMIGVsZW1lbnQuCi1jbGFzcyBXZWJH
TExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CisvLyBBIExheWVyIHRoYXQg
Y29udGFpbmluZyBHcmFwaGljc0NvbnRleHQzRC1yZW5kZXJlZCBjb250ZW50CitjbGFzcyBHcmFw
aGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBjcmVhdGUoR3Jh
cGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDApOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIgPSAwKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4g
bV9jb250ZXh0OyB9CiAgICAgdmlydHVhbCBib29sIG93bnNUZXh0dXJlKCkgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHModW5zaWduZWQpOwpA
QCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0U2hhZGVyUHJvZ3Jh
bUlkKHVuc2lnbmVkIHNoYWRlclByb2dyYW1JZCkgeyBtX3NoYWRlclByb2dyYW1JZCA9IHNoYWRl
clByb2dyYW1JZDsgfQogCiBwcml2YXRlOgotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICBleHBsaWNpdCBHcmFwaGljc0NvbnRleHQzRExh
eWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgR3JhcGhpY3ND
b250ZXh0M0QqIG1fY29udGV4dDsKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKICAgICBib29s
IG1fdGV4dHVyZUNoYW5nZWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZTg5NWNlZTA5
YTYwZGE1MTc0Nzc0NjVlOTczN2ZlZDIxYWU5YmIxZC4uZDBhNmY1ZGIwZGQwNjIyM2M3MmEzNDlk
NDJiODkzZGE3MTY3MjdiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNDcsMTMgKzQ3
LDE0IEBACiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1MYXllckNocm9taXVtLmgiCi0jaW5j
bHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCisKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgpAQCAtMjg1LDYgKzI4NiwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQogICAgIHByaW1hcnlMYXllcigpLT5zZXRPcGFjaXR5
KG9wYWNpdHkpOwogfQogCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNO
ZWVkc0Rpc3BsYXkoKQoreworICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpCisgICAgICAgIG1fY29u
dGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Cit9CiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKICAgICBpZiAoZHJhd3NDb250ZW50KCkpCkBAIC0z
MzQsMTkgKzM0MCwxOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNU
b0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CiB9CiAK
LSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENv
bnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQordm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9HcmFwaGljc0NvbnRleHQzRChQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKQogewogICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7
CiAgICAgaWYgKHBsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIu
Z2V0KCkgfHwgbV9jb250ZW50c0xheWVyUHVycG9zZSAhPSBDb250ZW50c0xheWVyRm9yV2ViR0wp
IHsKLSAgICAgICAgICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogd2ViR0xMYXllciA9IHN0YXRpY19j
YXN0PFdlYkdMTGF5ZXJDaHJvbWl1bSo+KHBsYXRmb3JtTGF5ZXIpOwotICAgICAgICAgICAgc2V0
dXBDb250ZW50c0xheWVyKHdlYkdMTGF5ZXIpOwotICAgICAgICAgICAgbV9jb250ZW50c0xheWVy
ID0gd2ViR0xMYXllcjsKLSAgICAgICAgICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBDb250
ZW50c0xheWVyRm9yV2ViR0w7CisgICAgICAgIHBsYXRmb3JtTGF5ZXItPnNldE93bmVyKHRoaXMp
OworICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5nZXQoKSB8fCBtX2NvbnRlbnRzTGF5ZXJQ
dXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JHcmFwaGljc0NvbnRleHQzRCkgeworICAgICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtKiBncmFwaGljc0NvbnRleHQzRExheWVy
ID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtKj4ocGxhdGZvcm1M
YXllcik7CisgICAgICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIoZ3JhcGhpY3NDb250ZXh0M0RM
YXllcik7CisgICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSBncmFwaGljc0NvbnRleHQzRExh
eWVyOworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJG
b3JHcmFwaGljc0NvbnRleHQzRDsKICAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCA9IHRydWU7
CiAgICAgICAgIH0KLSAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0T3duZXIodGhpcyk7CiAgICAg
ICAgIHBsYXRmb3JtTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAgICAgICB1cGRhdGVDb250
ZW50c1JlY3QoKTsKICAgICB9IGVsc2UgewpAQCAtMzYxLDcgKzM2Niw2IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcikKICAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQogICAgICAgICB1cGRhdGVTdWJsYXll
ckxpc3QoKTsKIH0KLSNlbmRpZgogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29u
dGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqIGxheWVyKQogewpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgK
aW5kZXggY2Q1ZTQ3OTlhYjRmMDMxYTQxODMxMjAwZThhNThkMjc5MjBlMzQyMC4uYmM3MmU2ZTc1
ZWQ2ZDg0M2E3NmI4YWZhNjY4NjQwMTJjNzIxMDMxNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCkBA
IC04MSwxMiArODEsMTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlz
cGxheSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKFBsYXRmb3JtTGF5ZXIqKTsKIAogICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogCkBAIC0xMzcsNyArMTM4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKICAgICAgICAgQ29u
dGVudHNMYXllckZvckltYWdlLAogICAgICAgICBDb250ZW50c0xheWVyRm9yVmlkZW8sCi0gICAg
ICAgIENvbnRlbnRzTGF5ZXJGb3JXZWJHTAorICAgICAgICBDb250ZW50c0xheWVyRm9yR3JhcGhp
Y3NDb250ZXh0M0QKICAgICB9OwogCiAgICAgQ29udGVudHNMYXllclB1cnBvc2UgbV9jb250ZW50
c0xheWVyUHVycG9zZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBlOThhNjVhMmMyMzY2
MmI2ODY1MDg4M2U5Y2E4ZTU1NDZkODFjOTM0Li5jNWMyNmY3N2MyNGMzNmY5ZTA1M2E5MmVjYjhj
MDEyNDQzZDY5NWI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zNSwxMCArMzUsMTAg
QEAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkdMRVMy
Q29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlRyYW5zZm9ybUxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJXZWJHTExheWVy
Q2hyb21pdW0uaCIKICNpZiBQTEFURk9STShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tp
YS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAgLTY5MSw2ICs2OTEsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKExheWVyQ2hyb21pdW0qIGxh
eWVyKQogICAgICAgICBpZiAobGF5ZXItPmNvbnRlbnRzRGlydHkoKSkgewogICAgICAgICAgICAg
Ly8gVXBkYXRlIHRoZSBiYWNraW5nIHRleHR1cmUgY29udGVudHMgZm9yIGFueSBkaXJ0eSBwb3J0
aW9uIG9mIHRoZSBsYXllci4KICAgICAgICAgICAgIGxheWVyLT51cGRhdGVUZXh0dXJlQ29udGVu
dHModGV4dHVyZUlkKTsKKyAgICAgICAgICAgIG1fZ2xlczJDb250ZXh0LT5tYWtlQ3VycmVudCgp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxheWVyLT5kb3VibGVTaWRlZCgpKQpAQCAtNzcw
LDkgKzc3MSw5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVk
R0xPYmplY3RzKCkKICAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0
ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KTsgXG4iCiAgICAgICAgICJ9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwogCi0gICAg
Ly8gV2ViR0wgbGF5ZXJzIG5lZWQgdG8gYmUgZmxpcHBlZCB2ZXJ0aWNhbGx5IGFuZCB0aGVpciBj
b2xvcnMgc2hvdWxkbid0IGJlCisgICAgLy8gR3JhcGhpY3NDb250ZXh0M0QgbGF5ZXJzIG5lZWQg
dG8gYmUgZmxpcHBlZCB2ZXJ0aWNhbGx5IGFuZCB0aGVpciBjb2xvcnMgc2hvdWxkbid0IGJlCiAg
ICAgLy8gc3dpenpsZWQuCi0gICAgY2hhciB3ZWJHTEZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQor
ICAgIGNoYXIgZ3JhcGhpY3NDb250ZXh0M0RGcmFnbWVudFNoYWRlclN0cmluZ1tdID0KICAgICAg
ICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biIKICAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcbiIKICAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHNfdGV4dHVyZTsgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKQEAgLTgxOSwxMSArODIwLDExIEBAIGJvb2wgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkKICAgICB9CiAgICAgTGF5
ZXJDaHJvbWl1bTo6c2V0U2hhZGVyUHJvZ3JhbUlkKENvbnRlbnRMYXllclByb2dyYW0pOwogCi0g
ICAgaWYgKCFjcmVhdGVMYXllclNoYWRlcihXZWJHTExheWVyUHJvZ3JhbSwgdmVydGV4U2hhZGVy
U3RyaW5nLCB3ZWJHTEZyYWdtZW50U2hhZGVyU3RyaW5nKSkgewotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0gZm9yIFdlYkdMIGxheWVycyIpOworICAg
IGlmICghY3JlYXRlTGF5ZXJTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0RMYXllclByb2dyYW0sIHZl
cnRleFNoYWRlclN0cmluZywgZ3JhcGhpY3NDb250ZXh0M0RGcmFnbWVudFNoYWRlclN0cmluZykp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIGZv
ciBHcmFwaGljc0NvbnRleHQzRCBsYXllcnMiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICBXZWJHTExheWVyQ2hyb21pdW06OnNldFNoYWRlclByb2dyYW1JZChXZWJHTExheWVy
UHJvZ3JhbSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjpzZXRTaGFkZXJQ
cm9ncmFtSWQoR3JhcGhpY3NDb250ZXh0M0RMYXllclByb2dyYW0pOwogCiAgICAgaWYgKCFjcmVh
dGVMYXllclNoYWRlcihTY3JvbGxMYXllclByb2dyYW0sIHZlcnRleFNoYWRlclN0cmluZywgc2Ny
b2xsRnJhZ21lbnRTaGFkZXJTdHJpbmcpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3Igc2Nyb2xsaW5nIGxheWVyIik7CkBAIC04MzgsNyAr
ODM5LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRHTE9i
amVjdHMoKQogICAgIC8vIFNwZWNpZnkgdGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGhlIHBvc2l0
aW9uIGFuZCB0ZXhDb29yZCBhbmQgbWFrZSBpdCB0aGUgc2FtZSBmb3IgYWxsIHByb2dyYW1zIHRv
CiAgICAgLy8gYXZvaWQgYmluZGluZyByZS1iaW5kaW5nIHRoZSB2ZXJ0ZXggYXR0cmlidXRlcy4K
ICAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb25zKENvbnRlbnRMYXllclByb2dyYW0pOwotICAg
IGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbnMoV2ViR0xMYXllclByb2dyYW0pOworICAgIGJpbmRD
b21tb25BdHRyaWJMb2NhdGlvbnMoR3JhcGhpY3NDb250ZXh0M0RMYXllclByb2dyYW0pOwogICAg
IGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbnMoRGVidWdCb3JkZXJQcm9ncmFtKTsKICAgICBiaW5k
Q29tbW9uQXR0cmliTG9jYXRpb25zKFNjcm9sbExheWVyUHJvZ3JhbSk7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCmluZGV4IDE3ZTdlNTc4MDM1M2MxYmEwZWM4ZTk5MjJhZjlkYmE4ZDI4M2FjMGYuLmY1
NWY3YzhiN2E0NzBkY2I3NmRmOTg0N2JjNWI3YzBiODFkMzdhMWMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaApAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0KiByb290
TGF5ZXJHcmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllckdyYXBoaWNz
Q29udGV4dC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIGVudW0gU2hhZGVyUHJvZ3JhbVR5cGUg
eyBEZWJ1Z0JvcmRlclByb2dyYW0sIFNjcm9sbExheWVyUHJvZ3JhbSwgQ29udGVudExheWVyUHJv
Z3JhbSwgV2ViR0xMYXllclByb2dyYW0sIE51bVNoYWRlclByb2dyYW1UeXBlcyB9OworICAgIGVu
dW0gU2hhZGVyUHJvZ3JhbVR5cGUgeyBEZWJ1Z0JvcmRlclByb2dyYW0sIFNjcm9sbExheWVyUHJv
Z3JhbSwgQ29udGVudExheWVyUHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0RMYXllclByb2dyYW0s
IE51bVNoYWRlclByb2dyYW1UeXBlcyB9OwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnNSZWN1cnNp
dmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJl
bnRNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KTsKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNB
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaAppbmRl
eCA4MGM4MjJjNjVmNzE0NTQ4NDE2OGRhMTY2YzBhYWQ2OGZjYmQ0ZWM5Li41NDlmMzFiZjUwYjBl
Yjg0OTFjMjU5NjhjNzRiNjRlZDNhYjVlMWQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaApAQCAtMTAzLDkgKzEwMyw4IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7Ci0jaWYgRU5B
QkxFKDNEX0NBTlZBUykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1dlYkdMKFBsYXRm
b3JtTGF5ZXIqKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvR3JhcGhp
Y3NDb250ZXh0M0QoUGxhdGZvcm1MYXllciopOworCiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRl
bnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXI7IH0KICAgICAKICAgICB2
aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbSBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQppbmRleCA5ZjFhYzgz
MzhmOWJkYzE0OWFhM2Q4OWNhZDM1ZjMxZjM0NDdjODM3Li43ZjBiYzNmZDRkNTU2ODZhNzUzZDVi
NTI4YWUwNmNlYzEwZGMzYmY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0xheWVyQ0EubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NMYXllckNBLm1tCkBAIC0xNzIyLDggKzE3MjIsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6cGF1c2VBbmltYXRpb25PbkxheWVyKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0
eSwgY29uc3QgUwogICAgIH0KIH0KIAotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi12b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5ZXIqIHdlYmdsTGF5ZXIp
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKFBs
YXRmb3JtTGF5ZXIqIHdlYmdsTGF5ZXIpCiB7CiAgICAgaWYgKHdlYmdsTGF5ZXIgPT0gbV9jb250
ZW50c0xheWVyKQogICAgICAgICByZXR1cm47CkBAIC0xNzM3LDcgKzE3MzYsNiBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5ZXIqIHdlYmdsTGF5
ZXIpCiAgICAgbm90ZVN1YmxheWVyc0NoYW5nZWQoKTsKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNo
YW5nZWQoQ29udGVudHNXZWJHTExheWVyQ2hhbmdlZCk7CiB9Ci0jZW5kaWYKICAgICAKIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpyZXBhaW50TGF5ZXJEaXJ0eVJlY3RzKCkKIHsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDBlNTkzM2U0NWE4Mzk2NTFiMTM4YzUw
NjhmNTRlNGRjOGZhOWNmZTcuLmFmMTgyNDc5MDFhZTY0MDBjMTY3NzE5MzZiYjg5YzU2N2ZhNTky
YTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMjgsMTMg
KzI4LDEyIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAi
QW5pbWF0aW9uQ29udHJvbGxlci5oIgotI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAotI2luY2x1
ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgotI2VuZGlmCisjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRl
ICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgpAQCAtMjUyLDE0ICsyNTEsMTMgQEAgYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkKICAgICAgICAg
bV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvTWVkaWEobWVkaWFFbGVtZW50LT5wbGF0Zm9y
bUxheWVyKCkpOwogICAgIH0KICNlbmRpZgotI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAotICAg
IGVsc2UgaWYgKGlzM0RDYW52YXMocmVuZGVyZXIoKSkpIHsKKyAgICBlbHNlIGlmIChyZW5kZXJl
cigpLT5pc0NhbnZhcygpKSB7CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBz
dGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRlcmVyKCktPm5vZGUoKSk7Ci0gICAg
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCo+KGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKTsKLSAgICAgICAgaWYg
KGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIoKSkKLSAgICAgICAg
ICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb1dlYkdMKGNvbnRleHQtPmdyYXBoaWNz
Q29udGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAgIGlmIChDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpCisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSkKKyAgICAgICAgICAgICAgICBp
ZiAoUGxhdGZvcm1MYXllciogcGwgPSBjb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5wbGF0
Zm9ybUxheWVyKCkpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29u
dGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKHBsKTsKICAgICB9Ci0jZW5kaWYKIAogICAgIGlmIChy
ZW5kZXJlcigpLT5pc1JlbmRlcklGcmFtZSgpKQogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQg
PSBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudElGcmFtZUNvbnRlbnRMYXllcnModG9SZW5k
ZXJJRnJhbWUocmVuZGVyZXIoKSkpOwpAQCAtNzU4LDYgKzc1NiwxMCBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6Y29udGFpbnNQYWludGVkQ29udGVudCgpIGNvbnN0CiAgICAgLy8gYW5kIHNl
dCBiYWNrZ3JvdW5kIGNvbG9yIG9uIHRoZSBsYXllciBpbiB0aGF0IGNhc2UsIGluc3RlYWQgb2Yg
YWxsb2NhdGluZyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGluZy4KICAgICBpZiAocmVuZGVyZXIo
KS0+aXNWaWRlbygpIHx8IGlzM0RDYW52YXMocmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybiBo
YXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZChyZW5kZXJlcigpKTsKKyNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQorICAgIGlmIChyZW5kZXJlcigpLT5pc0NhbnZhcygpKQorICAg
ICAgICByZXR1cm4gaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyZXIoKSk7Cisj
ZW5kaWYKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNzgzLDYgKzc4NSwxMiBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAg
IGlmIChyZW5kZXJlcigpLT5pc0NhbnZhcygpKSB7CisgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+
c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgogfQogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlSW1hZ2VDb250ZW50cygpCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA3MDQ4YjhlMWY4YmJmMGMzYjA4NjlmOGU1ZDNmYzQ4YjQ2OGFkMjE1Li44
MDFkNzkwNjU0YTMwMzg4NDA1ZTI5NjY0NDZhNmNkMzRlMjhkY2JlIDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMC0wOC0wNSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENvbXBvc2l0aW5nIHNob3VsZCBiZSBleHBvc2VkIGluIHRlcm1zIG9mIEdyYXBoaWNzQ29udGV4
dDNELCBub3QgV2ViR0wgc3BlY2lmaWNhbGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MzU4OQorCisgICAgICAgIEluaXRpYWxpemVzIHRoZSBwbGF0
Zm9ybUxheWVyIGFzIGEgR3JhcGhpY3MzRExheWVyQ2hyb21pdW0sIG5vdCBhIFdlYkdMTGF5ZXJD
aHJvbWl1bS4KKyAgICAgICAgVGhlIGxheWVyIGl0c2VsZiBpc24ndCBXZWJHTC1zcGVjaWZpYy4K
KworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIpOgorCiAyMDEwLTA4LTA0
ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCmluZGV4IGQ2YWQxYTM0ZWM0OTViNDQwOWU1M2ZmY2QwMjM1NmY5MjAxZjdhZTUuLjRhMTQx
ZGMyYjY3ZmUwNDE3ZWJlOGUzZjU4MjFkNTBiNjUxNjE2ZjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIkZsb2F0MzJB
cnJheS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBAIC00Niw3ICs0Nyw2IEBACiAjaW5jbHVkZSAi
SW50MzJBcnJheS5oIgogI2luY2x1ZGUgIkludDhBcnJheS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJy
YXkuaCIKLSNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJXZWJHcmFw
aGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAg
IEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpIGNvbnN0Owog
I2VuZGlmCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CiAKQEAgLTMwNCw3ICsz
MDQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE93blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNEPiBtX2ltcGw7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IFJlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXllcjsKKyAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5nTGF5ZXI7CiAj
ZW5kaWYKICNpZiBQTEFURk9STShTS0lBKQogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0
IG9mIHRoZSBDYW52YXMncyBiYWNraW5nIHN0b3JlIGRvbid0CkBAIC0zNjUsNyArMzY1LDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXplKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLAogICAgIG1faW1wbC5zZXQod2ViQ29udGV4dCk7CiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgbV9jb21wb3NpdGluZ0xheWVyID0g
V2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgbV9jb21wb3NpdGluZ0xheWVyID0g
R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4Niw3ICszODYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnByZXBhcmVUZXh0dXJlKCkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLVdlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
cGxhdGZvcm1MYXllcigpIGNvbnN0CitHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0qIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2NvbXBvc2l0aW5nTGF5ZXIuZ2V0KCk7CiB9CkBAIC0xMDQ2LDkgKzEwNDYsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAogewotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogd2ViR0xMYXllciA9
IG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICB3ZWJHTExheWVyLT5zZXRDb250ZXh0
KHRoaXMpOwotICAgIHJldHVybiB3ZWJHTExheWVyOworICAgIEdyYXBoaWNzQ29udGV4dDNETGF5
ZXJDaHJvbWl1bSogZ3JhcGhpY3NDb250ZXh0M0RMYXllciA9IG1faW50ZXJuYWwtPnBsYXRmb3Jt
TGF5ZXIoKTsKKyAgICBncmFwaGljc0NvbnRleHQzRExheWVyLT5zZXRDb250ZXh0KHRoaXMpOwor
ICAgIHJldHVybiBncmFwaGljc0NvbnRleHQzRExheWVyOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63678</attachid>
            <date>2010-08-05 19:11:16 -0700</date>
            <delta_ts>2010-08-05 19:14:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43589-20100805191114.patch</filename>
            <type>text/plain</type>
            <size>29025</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTlhNzM1NjIzYTY4YjZjZTIzNDZmOTQxNzE1OTEwYWRlNjg1YmE1Ni4uNjFjZDExMmU2NDZmYWUw
MDc0NzRkM2E0YjVmZWY4OTMyY2I4OGU3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxMC0wOC0wNSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbXBvc2l0aW5nIHNob3VsZCBiZSBleHBvc2Vk
IGluIHRlcm1zIG9mIEdyYXBoaWNzQ29udGV4dDNELCBub3QgV2ViR0wgc3BlY2lmaWNhbGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzU4OQorCisg
ICAgICAgIFRoaXMgdHJlYXRzIGFsbCBHcmFwaGljc0NvbnRleHQzRC1iYWNrZWQgbGF5ZXJzIHRo
ZSBzYW1lIGluc3RlYWQgb2Ygc3BlY2lhbCBjYXNpbmcgV2ViR0wuCisgICAgICAgIFRoZSBjcm9z
cy1wbGF0Zm9ybSBjaGFuZ2UgaXMgdG8gcmVuYW1lIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
VG9XZWJHTCgpIHRvCisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9HcmFwaGlj
c0NvbnRleHQzRCBhbmQgdG8gcmVuYW1lIGFsbCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBhbHNvIHJlbmFtZXMgdGhlIGNocm9taXVtIGNsYXNzIHVzZWQgZm9yIGFjY2Vs
ZXJhdGluZyB0aGVzZSBsYXllcnMuCisKKyAgICAgICAgQ3Jvc3MgcGxhdGZvcm0gY2hhbmdlczoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAgICAgUmVuYW1lIHRoZSBmdW5jdGlvbiBvbiB0aGUgYmFzZSBjbGFzcy4gR3JhcGhp
Y3NMYXllckNBIGFuZCBHcmFwaGljc0xheWVyQ0EgaW1wbGVtZW50IHRoaXMuCisgICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNB
Y2NlbGVyYXRlZENhbnZhcyk6CisgICAgICAgICAgICBIZWxwZXIgZnVuY3Rpb24gdG8gc2VlIGlm
IGEgcmVuZGVyZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5n
IGxheWVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFw
aGljc0xheWVyQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OmNvbnRhaW5zUGFpbnRlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpyZW5kZXJlckNvbnRlbnRDaGFuZ2VkKToKKyAgICAgICBDaHJvbWl1bSBz
cGVjaWZpYyBjaGFuZ2VzOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVt
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9t
aXVtOjpHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjp0ZXh0dXJlSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjpz
ZXRDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0NvbnRleHQzRExheWVyQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW06Om93bnNUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6c2hhZGVyUHJvZ3Jh
bUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6
c2V0U2hhZGVyUHJvZ3JhbUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
TGF5ZXJDaHJvbWl1bTo6c2V0UHJlcGFyZVRleHR1cmVDYWxsYmFjayk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNOZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50
c1RvR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6IFJlbW92ZWQuCisg
ICAgICAgIE1hYyBzcGVjaWZpYyBjaGFuZ2VzOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgICBDaGFuZ2VzIGluIHRoaXMgZmlsZSBh
cmUgYWxsIHMvV2ViR0wvR3JhcGhpY3NDb250ZXh0M0QvCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6Oik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
TGF5ZXJDQS5tbToKKyAgICAgICAgICBTYW1lIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzR3JhcGhpY3NDb250ZXh0
M0RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRz
VG9HcmFwaGljc0NvbnRleHQzRCk6CisKIDIwMTAtMDgtMDUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggYmFkMTIzZWUyMzM3YjZhOWUwMjZiNDRlYTJlMWFjNDZmYTNkMTM4OS4uZDhmZGJiNGY4MDhh
NWRiMjc2NmIyZDNjNTBiYmViZmMxMWFjMTFhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIxOTQsNiArMjE5NCw4IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2Rl
Q2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HbHlwaFBhZ2VUcmVlTm9kZUxpbnV4LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXll
ckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1MaW51eC5jcHAnLApAQCAtMjIyMSw4ICsy
MjIzLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3Jp
YmVIZWxwZXJUZXh0UnVuLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAnLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCBhNTgxOWY0OWQ5YWJiNjE1OGRh
MWQ5MTNkMzY5MWU0YjBmMmNlYjBmLi45NTgyY2E5Yjg5MTJmODQwYTA3YTQ3MjZjMjI5OWI4MmQw
MmMxYWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAt
Mjk4LDkgKzI5OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0lt
YWdlKEltYWdlKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0
Zm9ybUxheWVyKikgeyB9IC8vIHZpZGVvIG9yIHBsdWctaW4KICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKSB7IH0KLSNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXll
ciopIHsgfQotI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9HcmFwaGljc0Nv
bnRleHQzRChQbGF0Zm9ybUxheWVyKikgeyB9CiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRlbnRz
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gQ2FsbGJhY2sgZnJvbSB0
aGUgdW5kZXJseWluZyBncmFwaGljcyBzeXN0ZW0gdG8gZHJhdyBsYXllciBjb250ZW50cy4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNo
cm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3ND
b250ZXh0M0RMYXllckNocm9taXVtLmNwcApzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJv
bSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5j
cHAKcmVuYW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3ND
b250ZXh0M0RMYXllckNocm9taXVtLmNwcAppbmRleCBlYmQ5ZWJlNjE2MDhkMjNlZGQ0ZjBhMjBm
YzU2NTg0ZjM4OWFkOGQ2Li41YWU0YTM0YzI2MzdkZGU3OGUwZDY4YTNkMjdiNmIyMGRkNmEyOWJk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0uY3BwCkBAIC0zMiwyMSArMzIsMjEgQEAKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIldlYkdMTGF5ZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5oIgog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11bnNpZ25lZCBXZWJHTExheWVyQ2hyb21pdW06Om1f
c2hhZGVyUHJvZ3JhbUlkID0gMDsKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJv
bWl1bTo6bV9zaGFkZXJQcm9ncmFtSWQgPSAwOwogCi1QYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJv
bWl1bT4gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcikKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtPiBHcmFwaGlj
c0NvbnRleHQzRExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xMYXllckNocm9taXVtKG93bmVy
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21p
dW0ob3duZXIpKTsKIH0KIAotV2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0o
R3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJv
bWl1bTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIpCiAgICAgOiBMYXllckNocm9taXVtKG93bmVyKQogICAgICwgbV9jb250ZXh0KDAp
CiAgICAgLCBtX3RleHR1cmVJZCgwKQpAQCAtNTQsMTIgKzU0LDEyIEBAIFdlYkdMTGF5ZXJDaHJv
bWl1bTo6V2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiB7
CiB9CiAKLXVuc2lnbmVkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKCkKK3Vuc2lnbmVk
IEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKCkKIHsKICAgICByZXR1
cm4gbV90ZXh0dXJlSWQ7CiB9CiAKLXZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVUZXh0
dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlkKQordm9pZCBHcmFwaGljc0NvbnRleHQzRExh
eWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpCiB7
CiAgICAgQVNTRVJUKHRleHR1cmVJZCA9PSBtX3RleHR1cmVJZCk7CiAgICAgQVNTRVJUKG1fY29u
dGV4dCk7CkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVU
ZXh0dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlkKQogICAgIH0KIH0KIAotdm9pZCBXZWJH
TExheWVyQ2hyb21pdW06OnNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25z
dCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKICAgICBtX2NvbnRleHQgPSBjb25zdF9j
YXN0PEdyYXBoaWNzQ29udGV4dDNEKj4oY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bS5oCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKcmVuYW1lIHRvIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtLmgK
aW5kZXggYWJkMGM5M2MzYjgzNTg3N2ZkOGRkNzcwOGYyYmE1OWNlZGRmZjQ4ZC4uMWIyYThhNjkw
YmE3Y2YzZTk1M2U1MzBiOGY3NzU0ODIyYzEyNGIxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bS5oCkBAIC0yOSw4ICsyOSw4IEBACiAgKi8KIAogCi0jaWZuZGVmIFdlYkdMTGF5ZXJDaHJvbWl1
bV9oCi0jZGVmaW5lIFdlYkdMTGF5ZXJDaHJvbWl1bV9oCisjaWZuZGVmIEdyYXBoaWNzQ29udGV4
dDNETGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bV9oCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKQEAgLTQwLDEwICs0MCwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCi0v
LyBBIExheWVyIHRoYXQgY29udGFpbnMgYSBXZWJHTCBlbGVtZW50LgotY2xhc3MgV2ViR0xMYXll
ckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworLy8gQSBMYXllciB0aGF0IGNvbnRh
aW5pbmcgR3JhcGhpY3NDb250ZXh0M0QtcmVuZGVyZWQgY29udGVudAorY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0RMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyID0gMCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29u
dGV4dDsgfQogICAgIHZpcnR1YWwgYm9vbCBvd25zVGV4dHVyZSgpIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkKTsKQEAgLTU1
LDcgKzU1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFNoYWRlclByb2dyYW1JZCh1
bnNpZ25lZCBzaGFkZXJQcm9ncmFtSWQpIHsgbV9zaGFkZXJQcm9ncmFtSWQgPSBzaGFkZXJQcm9n
cmFtSWQ7IH0KIAogcHJpdmF0ZToKLSAgICBXZWJHTExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcik7CisgICAgZXhwbGljaXQgR3JhcGhpY3NDb250ZXh0M0RMYXllckNo
cm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBtX2NvbnRleHQ7CiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX3Rl
eHR1cmVDaGFuZ2VkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGU4OTVjZWUwOWE2MGRh
NTE3NDc3NDY1ZTk3MzdmZWQyMWFlOWJiMWQuLmQwYTZmNWRiMGRkMDYyMjNjNzJhMzQ5ZDQyYjg5
M2RhNzE2NzI3YjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ3LDEzICs0NywxNCBA
QAogCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
SW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZUxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTeXN0
ZW1UaW1lLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUg
IldlYkdMTGF5ZXJDaHJvbWl1bS5oIgorCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KQEAgLTI4NSw2ICsyODYsMTEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE9w
YWNpdHkoZmxvYXQgb3BhY2l0eSkKICAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0T3BhY2l0eShvcGFj
aXR5KTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzTmVlZHNE
aXNwbGF5KCkKK3sKKyAgICBpZiAobV9jb250ZW50c0xheWVyKQorICAgICAgICBtX2NvbnRlbnRz
TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworfQogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQpAQCAtMzM0LDE5
ICszNDAsMTggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFn
ZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogfQogCi0jaWYg
RU5BQkxFKDNEX0NBTlZBUykKLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50
c1RvV2ViR0woUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKK3ZvaWQgR3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QoUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9IGZhbHNlOwogICAg
IGlmIChwbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgp
IHx8IG1fY29udGVudHNMYXllclB1cnBvc2UgIT0gQ29udGVudHNMYXllckZvcldlYkdMKSB7Ci0g
ICAgICAgICAgICBXZWJHTExheWVyQ2hyb21pdW0qIHdlYkdMTGF5ZXIgPSBzdGF0aWNfY2FzdDxX
ZWJHTExheWVyQ2hyb21pdW0qPihwbGF0Zm9ybUxheWVyKTsKLSAgICAgICAgICAgIHNldHVwQ29u
dGVudHNMYXllcih3ZWJHTExheWVyKTsKLSAgICAgICAgICAgIG1fY29udGVudHNMYXllciA9IHdl
YkdMTGF5ZXI7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVudHNM
YXllckZvcldlYkdMOworICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXRPd25lcih0aGlzKTsKKyAg
ICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgfHwgbV9jb250ZW50c0xheWVyUHVycG9z
ZSAhPSBDb250ZW50c0xheWVyRm9yR3JhcGhpY3NDb250ZXh0M0QpIHsKKyAgICAgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bSogZ3JhcGhpY3NDb250ZXh0M0RMYXllciA9IHN0
YXRpY19jYXN0PEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bSo+KHBsYXRmb3JtTGF5ZXIp
OworICAgICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKGdyYXBoaWNzQ29udGV4dDNETGF5ZXIp
OworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gZ3JhcGhpY3NDb250ZXh0M0RMYXllcjsK
KyAgICAgICAgICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xheWVyRm9yR3Jh
cGhpY3NDb250ZXh0M0Q7CiAgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwogICAg
ICAgICB9Ci0gICAgICAgIHBsYXRmb3JtTGF5ZXItPnNldE93bmVyKHRoaXMpOwogICAgICAgICBw
bGF0Zm9ybUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgdXBkYXRlQ29udGVudHNS
ZWN0KCk7CiAgICAgfSBlbHNlIHsKQEAgLTM2MSw3ICszNjYsNiBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIpCiAgICAgaWYgKGNoaWxkcmVuQ2hhbmdlZCkKICAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0
KCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
VG9NZWRpYShQbGF0Zm9ybUxheWVyKiBsYXllcikKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCmluZGV4
IGNkNWU0Nzk5YWI0ZjAzMWE0MTgzMTIwMGU4YTU4ZDI3OTIwZTM0MjAuLmJjNzJlNmU3NWVkNmQ4
NDNhNzZiOGFmYTY2ODY0MDEyYzcyMTAzMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaApAQCAtODEs
MTIgKzgxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXko
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwogCiAgICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzVG9HcmFwaGljc0NvbnRleHQzRChQbGF0Zm9ybUxheWVyKik7CiAKICAgICB2aXJ0dWFsIFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIApAQCAtMTM3LDcgKzEzOCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCiAgICAgICAgIENvbnRlbnRz
TGF5ZXJGb3JJbWFnZSwKICAgICAgICAgQ29udGVudHNMYXllckZvclZpZGVvLAotICAgICAgICBD
b250ZW50c0xheWVyRm9yV2ViR0wKKyAgICAgICAgQ29udGVudHNMYXllckZvckdyYXBoaWNzQ29u
dGV4dDNECiAgICAgfTsKIAogICAgIENvbnRlbnRzTGF5ZXJQdXJwb3NlIG1fY29udGVudHNMYXll
clB1cnBvc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZTk4YTY1YTJjMjM2NjJiNjg2
NTA4ODNlOWNhOGU1NTQ2ZDgxYzkzNC4uYzVjMjZmNzdjMjRjMzZmOWUwNTNhOTJlY2I4YzAxMjQ0
M2Q2OTViNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzUsMTAgKzM1LDEwIEBACiAj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKICNpbmNsdWRlICJHTEVTMkNvbnRl
eHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNs
dWRlICJUcmFuc2Zvcm1MYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiV2ViR0xMYXllckNocm9t
aXVtLmgiCiAjaWYgUExBVEZPUk0oU0tJQSkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCkBAIC02OTEsNiArNjkxLDcgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihMYXllckNocm9taXVtKiBsYXllcikK
ICAgICAgICAgaWYgKGxheWVyLT5jb250ZW50c0RpcnR5KCkpIHsKICAgICAgICAgICAgIC8vIFVw
ZGF0ZSB0aGUgYmFja2luZyB0ZXh0dXJlIGNvbnRlbnRzIGZvciBhbnkgZGlydHkgcG9ydGlvbiBv
ZiB0aGUgbGF5ZXIuCiAgICAgICAgICAgICBsYXllci0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHRl
eHR1cmVJZCk7CisgICAgICAgICAgICBtX2dsZXMyQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChsYXllci0+ZG91YmxlU2lkZWQoKSkKQEAgLTc3MCw5ICs3
NzEsOSBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZEdMT2Jq
ZWN0cygpCiAgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29s
b3IueSwgdGV4Q29sb3IueiwgdGV4Q29sb3Iudyk7IFxuIgogICAgICAgICAifSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKIAotICAgIC8vIFdl
YkdMIGxheWVycyBuZWVkIHRvIGJlIGZsaXBwZWQgdmVydGljYWxseSBhbmQgdGhlaXIgY29sb3Jz
IHNob3VsZG4ndCBiZQorICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEIGxheWVycyBuZWVkIHRvIGJl
IGZsaXBwZWQgdmVydGljYWxseSBhbmQgdGhlaXIgY29sb3JzIHNob3VsZG4ndCBiZQogICAgIC8v
IHN3aXp6bGVkLgotICAgIGNoYXIgd2ViR0xGcmFnbWVudFNoYWRlclN0cmluZ1tdID0KKyAgICBj
aGFyIGdyYXBoaWNzQ29udGV4dDNERnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CiAgICAgICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAg
ICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCiAgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCkBAIC04MTksMTEgKzgyMCwxMSBAQCBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCiAgICAgfQogICAgIExheWVyQ2hy
b21pdW06OnNldFNoYWRlclByb2dyYW1JZChDb250ZW50TGF5ZXJQcm9ncmFtKTsKIAotICAgIGlm
ICghY3JlYXRlTGF5ZXJTaGFkZXIoV2ViR0xMYXllclByb2dyYW0sIHZlcnRleFNoYWRlclN0cmlu
Zywgd2ViR0xGcmFnbWVudFNoYWRlclN0cmluZykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIGZvciBXZWJHTCBsYXllcnMiKTsKKyAgICBpZiAo
IWNyZWF0ZUxheWVyU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNETGF5ZXJQcm9ncmFtLCB2ZXJ0ZXhT
aGFkZXJTdHJpbmcsIGdyYXBoaWNzQ29udGV4dDNERnJhZ21lbnRTaGFkZXJTdHJpbmcpKSB7Cisg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgR3Jh
cGhpY3NDb250ZXh0M0QgbGF5ZXJzIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgV2ViR0xMYXllckNocm9taXVtOjpzZXRTaGFkZXJQcm9ncmFtSWQoV2ViR0xMYXllclByb2dy
YW0pOworICAgIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6c2V0U2hhZGVyUHJvZ3Jh
bUlkKEdyYXBoaWNzQ29udGV4dDNETGF5ZXJQcm9ncmFtKTsKIAogICAgIGlmICghY3JlYXRlTGF5
ZXJTaGFkZXIoU2Nyb2xsTGF5ZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHNjcm9sbEZy
YWdtZW50U2hhZGVyU3RyaW5nKSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgc2hhZGVyIHByb2dyYW0gZm9yIHNjcm9sbGluZyBsYXllciIpOwpAQCAtODM4LDcgKzgzOSw3
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3Rz
KCkKICAgICAvLyBTcGVjaWZ5IHRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRoZSBwb3NpdGlvbiBh
bmQgdGV4Q29vcmQgYW5kIG1ha2UgaXQgdGhlIHNhbWUgZm9yIGFsbCBwcm9ncmFtcyB0bwogICAg
IC8vIGF2b2lkIGJpbmRpbmcgcmUtYmluZGluZyB0aGUgdmVydGV4IGF0dHJpYnV0ZXMuCiAgICAg
YmluZENvbW1vbkF0dHJpYkxvY2F0aW9ucyhDb250ZW50TGF5ZXJQcm9ncmFtKTsKLSAgICBiaW5k
Q29tbW9uQXR0cmliTG9jYXRpb25zKFdlYkdMTGF5ZXJQcm9ncmFtKTsKKyAgICBiaW5kQ29tbW9u
QXR0cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dDNETGF5ZXJQcm9ncmFtKTsKICAgICBiaW5k
Q29tbW9uQXR0cmliTG9jYXRpb25zKERlYnVnQm9yZGVyUHJvZ3JhbSk7CiAgICAgYmluZENvbW1v
bkF0dHJpYkxvY2F0aW9ucyhTY3JvbGxMYXllclByb2dyYW0pOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAppbmRleCAxN2U3ZTU3ODAzNTNjMWJhMGVjOGU5OTIyYWY5ZGJhOGQyODNhYzBmLi5mNTVmN2M4
YjdhNDcwZGNiNzZkZjk4NDdiYzViN2MwYjgxZDM3YTFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
QEAgLTg4LDcgKzg4LDcgQEAgcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVy
R3JhcGhpY3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXJHcmFwaGljc0NvbnRl
eHQuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBlbnVtIFNoYWRlclByb2dyYW1UeXBlIHsgRGVi
dWdCb3JkZXJQcm9ncmFtLCBTY3JvbGxMYXllclByb2dyYW0sIENvbnRlbnRMYXllclByb2dyYW0s
IFdlYkdMTGF5ZXJQcm9ncmFtLCBOdW1TaGFkZXJQcm9ncmFtVHlwZXMgfTsKKyAgICBlbnVtIFNo
YWRlclByb2dyYW1UeXBlIHsgRGVidWdCb3JkZXJQcm9ncmFtLCBTY3JvbGxMYXllclByb2dyYW0s
IENvbnRlbnRMYXllclByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJQcm9ncmFtLCBOdW1T
aGFkZXJQcm9ncmFtVHlwZXMgfTsKIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExh
eWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0
cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLmgKaW5kZXggODBj
ODIyYzY1ZjcxNDU0ODQxNjhkYTE2NmMwYWFkNjhmY2JkNGVjOS4uZTMwZjdjNWEwMTFmZWVmY2M1
YTUyNGNkOTgyYzA2YTkzNzYwM2VjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NMYXllckNBLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NMYXllckNBLmgKQEAgLTEwMyw5ICsxMDMsOCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwotI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCi0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxh
eWVyKik7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0dyYXBoaWNzQ29u
dGV4dDNEKFBsYXRmb3JtTGF5ZXIqKTsKKwogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250ZW50c0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyOyB9CiAgICAgCiAgICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CkBAIC0yNTgsOSArMjU3LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlQ29udGVudHNJbWFnZSgpOwogICAgIHZvaWQg
dXBkYXRlQ29udGVudHNNZWRpYUxheWVyKCk7Ci0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzV2ViR0xMYXllcigpOwotI2VuZGlmCisgICAgdm9pZCB1cGRhdGVD
b250ZW50c0dyYXBoaWNzQ29udGV4dDNETGF5ZXIoKTsKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRz
UmVjdCgpOwogICAgIHZvaWQgdXBkYXRlR2VvbWV0cnlPcmllbnRhdGlvbigpOwogICAgIHZvaWQg
dXBkYXRlTWFza0xheWVyKCk7CkBAIC0zMDUsOSArMzAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
RGlydHlSZWN0c0NoYW5nZWQgPSAxIDw8IDE2LAogICAgICAgICBDb250ZW50c0ltYWdlQ2hhbmdl
ZCA9IDEgPDwgMTcsCiAgICAgICAgIENvbnRlbnRzTWVkaWFMYXllckNoYW5nZWQgPSAxIDw8IDE4
LAotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgICAgIENvbnRlbnRzV2ViR0xMYXllckNoYW5n
ZWQgPSAxIDw8IDE5LAotI2VuZGlmCisgICAgICAgIENvbnRlbnRzR3JhcGhpY3NDb250ZXh0M0RM
YXllckNoYW5nZWQgPSAxIDw8IDE5LAogICAgICAgICBDb250ZW50c1JlY3RDaGFuZ2VkID0gMSA8
PCAyMCwKICAgICAgICAgR2VvbWV0cnlPcmllbnRhdGlvbkNoYW5nZWQgPSAxIDw8IDIxLAogICAg
ICAgICBNYXNrTGF5ZXJDaGFuZ2VkID0gMSA8PCAyMiwKQEAgLTMzMiwxMCArMzI3LDggQEAgcHJp
dmF0ZToKICAgICBlbnVtIENvbnRlbnRzTGF5ZXJQdXJwb3NlIHsKICAgICAgICAgTm9Db250ZW50
c0xheWVyID0gMCwKICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdlLAotICAgICAgICBDb250
ZW50c0xheWVyRm9yTWVkaWEKLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotICAgICAgICAsIENvbnRl
bnRzTGF5ZXJGb3JXZWJHTAotI2VuZGlmCisgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JNZWRpYSwK
KyAgICAgICAgQ29udGVudHNMYXllckZvckdyYXBoaWNzQ29udGV4dDNECiAgICAgfTsKICAgICAK
ICAgICBDb250ZW50c0xheWVyUHVycG9zZSBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCmluZGV4IDlm
MWFjODMzOGY5YmRjMTQ5YWEzZDg5Y2FkMzVmMzFmMzQ0N2M4MzcuLjMwOWFjZjZlOGFlZTFjODQ1
ODU4MDUxMTZiYTkxMjM2YmVmMDg0ZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0KQEAgLTkxNywxMCArOTE3LDggQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycygpCiAgICAgaWYg
KG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgQ29udGVudHNNZWRpYUxheWVyQ2hhbmdlZCkgLy8gTmVl
ZHMgdG8gaGFwcGVuIGJlZm9yZSBDaGlsZHJlbkNoYW5nZWQKICAgICAgICAgdXBkYXRlQ29udGVu
dHNNZWRpYUxheWVyKCk7CiAgICAgCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAgICBpZiAobV91
bmNvbW1pdHRlZENoYW5nZXMgJiBDb250ZW50c1dlYkdMTGF5ZXJDaGFuZ2VkKSAvLyBOZWVkcyB0
byBoYXBwZW4gYmVmb3JlIENoaWxkcmVuQ2hhbmdlZAotICAgICAgICB1cGRhdGVDb250ZW50c1dl
YkdMTGF5ZXIoKTsKLSNlbmRpZgorICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIENvbnRl
bnRzR3JhcGhpY3NDb250ZXh0M0RMYXllckNoYW5nZWQpIC8vIE5lZWRzIHRvIGhhcHBlbiBiZWZv
cmUgQ2hpbGRyZW5DaGFuZ2VkCisgICAgICAgIHVwZGF0ZUNvbnRlbnRzR3JhcGhpY3NDb250ZXh0
M0RMYXllcigpOwogICAgIAogICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIEJhY2tncm91
bmRDb2xvckNoYW5nZWQpICAvLyBOZWVkcyB0byBoYXBwZW4gYmVmb3JlIENoaWxkcmVuQ2hhbmdl
ZCwgYW5kIGFmdGVyIHVwZGF0aW5nIGltYWdlIG9yIHZpZGVvCiAgICAgICAgIHVwZGF0ZUxheWVy
QmFja2dyb3VuZENvbG9yKCk7CkBAIC0xMzk3LDkgKzEzOTUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6dXBkYXRlQ29udGVudHNNZWRpYUxheWVyKCkKIH0KIAogI2lmIEVOQUJMRSgzRF9DQU5W
QVMpCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNXZWJHTExheWVyKCkKK3Zv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0dyYXBoaWNzQ29udGV4dDNETGF5ZXIo
KQogewotICAgIC8vIFdlYkdMTGF5ZXIgd2FzIHNldCBhcyBtX2NvbnRlbnRzTGF5ZXIsIGFuZCB3
aWxsIGdldCBwYXJlbnRlZCBpbiB1cGRhdGVTdWJsYXllckxpc3QoKS4KKyAgICAvLyBHcmFwaGlj
c0NvbnRleHQzRExheWVyIHdhcyBzZXQgYXMgbV9jb250ZW50c0xheWVyLCBhbmQgd2lsbCBnZXQg
cGFyZW50ZWQgaW4gdXBkYXRlU3VibGF5ZXJMaXN0KCkuCiAgICAgaWYgKG1fY29udGVudHNMYXll
cikgewogICAgICAgICBzZXR1cENvbnRlbnRzTGF5ZXIobV9jb250ZW50c0xheWVyLmdldCgpKTsK
ICAgICAgICAgW21fY29udGVudHNMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOwpAQCAtMTcy
MiwyMiArMTcyMCwyMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VBbmltYXRpb25Pbkxh
eWVyKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUwogICAgIH0KIH0KIAotI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb1dl
YkdMKFBsYXRmb3JtTGF5ZXIqIHdlYmdsTGF5ZXIpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0
Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKFBsYXRmb3JtTGF5ZXIqIGdyYXBoaWNzQ29udGV4
dDNETGF5ZXIpCiB7Ci0gICAgaWYgKHdlYmdsTGF5ZXIgPT0gbV9jb250ZW50c0xheWVyKQorICAg
IGlmIChncmFwaGljc0NvbnRleHQzRExheWVyID09IG1fY29udGVudHNMYXllcikKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRlbnRzTGF5ZXIgPSB3ZWJnbExheWVyOworICAg
IG1fY29udGVudHNMYXllciA9IGdyYXBoaWNzQ29udGV4dDNETGF5ZXI7CiAgICAgaWYgKG1fY29u
dGVudHNMYXllciAmJiBbbV9jb250ZW50c0xheWVyLmdldCgpIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Ioc2V0TGF5ZXJPd25lcjopXSkKICAgICAgICAgWyhpZCltX2NvbnRlbnRzTGF5ZXIu
Z2V0KCkgc2V0TGF5ZXJPd25lcjp0aGlzXTsKICAgICAKLSAgICBtX2NvbnRlbnRzTGF5ZXJQdXJw
b3NlID0gd2ViZ2xMYXllciA/IENvbnRlbnRzTGF5ZXJGb3JXZWJHTCA6IE5vQ29udGVudHNMYXll
cjsKKyAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gZ3JhcGhpY3NDb250ZXh0M0RMYXllciA/
IENvbnRlbnRzTGF5ZXJGb3JHcmFwaGljc0NvbnRleHQzRCA6IE5vQ29udGVudHNMYXllcjsKIAog
ICAgIG5vdGVTdWJsYXllcnNDaGFuZ2VkKCk7Ci0gICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KENvbnRlbnRzV2ViR0xMYXllckNoYW5nZWQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZChDb250ZW50c0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaGFuZ2VkKTsKIH0KLSNlbmRpZgogICAg
IAogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlcGFpbnRMYXllckRpcnR5UmVjdHMoKQogewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggMGU1OTMzZTQ1YTgzOTY1
MWIxMzhjNTA2OGY1NGU0ZGM4ZmE5Y2ZlNy4uNTk0ZDc0YjYzZTQ2OGEzMmQyODA0NGU2ZmQxZDJi
YWFmMjc2Y2M4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBA
IC0yOCwxMyArMjgsMTIgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNp
bmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykgICAg
Ci0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJD
YW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgog
I2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCkBAIC02NiwxMSArNjUsMTQgQEAgc3RhdGlj
IGJvb2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoY29uc3QgUmVuZGVyT2JqZWN0Kik7
CiBzdGF0aWMgYm9vbCBoYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZEltYWdlKGNvbnN0IFJl
bmRlclN0eWxlKik7CiBzdGF0aWMgSW50UmVjdCBjbGlwQm94KFJlbmRlckJveCogcmVuZGVyZXIp
OwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXMzRENhbnZhcyhSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQorc3RhdGljIGlubGluZSBib29sIGlzQWNjZWxlcmF0ZWRDYW52YXMoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKLSAgICBpZiAocmVuZGVyZXIt
PmlzQ2FudmFzKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVu
dCo+KHJlbmRlcmVyLT5ub2RlKCkpLT5pczNEKCk7CisjaWYgRU5BQkxFKDNEX0NBTlZBUykgfHwg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyAgICBpZiAocmVuZGVyZXItPmlzQ2FudmFz
KCkpIHsKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhU
TUxDYW52YXNFbGVtZW50Kj4ocmVuZGVyZXItPm5vZGUoKSk7CisgICAgICAgIGlmIChDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpCisg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpOworICAgIH0KICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKHJlbmRlcmVyKTsKICNlbmRpZgpAQCAtMjUyLDEyICsyNTQsMTMg
QEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJDb25maWd1cmF0
aW9uKCkKICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvTWVkaWEobWVkaWFF
bGVtZW50LT5wbGF0Zm9ybUxheWVyKCkpOwogICAgIH0KICNlbmRpZgotI2lmIEVOQUJMRSgzRF9D
QU5WQVMpICAgIAotICAgIGVsc2UgaWYgKGlzM0RDYW52YXMocmVuZGVyZXIoKSkpIHsKKyNpZiBF
TkFCTEUoM0RfQ0FOVkFTKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgIGVs
c2UgaWYgKGlzQWNjZWxlcmF0ZWRDYW52YXMocmVuZGVyZXIoKSkpIHsKICAgICAgICAgSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4ocmVu
ZGVyZXIoKS0+bm9kZSgpKTsKLSAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oY2FudmFzLT5yZW5kZXJpbmdD
b250ZXh0KCkpOwotICAgICAgICBpZiAoY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+cGxh
dGZvcm1MYXllcigpKQotICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1Rv
V2ViR0woY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+cGxhdGZvcm1MYXllcigpKTsKKyAg
ICAgICAgaWYgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXMtPnJlbmRl
cmluZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5ncmFwaGljc0NvbnRleHQz
RCgpKQorICAgICAgICAgICAgICAgIGlmIChQbGF0Zm9ybUxheWVyKiBwbCA9IGNvbnRleHQtPmdy
YXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QocGwpOwogICAg
IH0KICNlbmRpZgogCkBAIC03NTYsOCArNzU5LDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
Ojpjb250YWluc1BhaW50ZWRDb250ZW50KCkgY29uc3QKIAogICAgIC8vIEZJWE1FOiB3ZSBjb3Vs
ZCBvcHRpbWl6ZSBjYXNlcyB3aGVyZSB0aGUgaW1hZ2UsIHZpZGVvIG9yIGNhbnZhcyBpcyBrbm93
biB0byBmaWxsIHRoZSBib3JkZXIgYm94IGVudGlyZWx5LAogICAgIC8vIGFuZCBzZXQgYmFja2dy
b3VuZCBjb2xvciBvbiB0aGUgbGF5ZXIgaW4gdGhhdCBjYXNlLCBpbnN0ZWFkIG9mIGFsbG9jYXRp
bmcgYmFja2luZyBzdG9yZSBhbmQgcGFpbnRpbmcuCi0gICAgaWYgKHJlbmRlcmVyKCktPmlzVmlk
ZW8oKSB8fCBpczNEQ2FudmFzKHJlbmRlcmVyKCkpKQorICAgIGlmIChyZW5kZXJlcigpLT5pc1Zp
ZGVvKCkpCiAgICAgICAgIHJldHVybiBoYXNCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZChyZW5k
ZXJlcigpKTsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQorICAgIGlmIChpc0FjY2VsZXJhdGVkQ2FudmFzKHJlbmRlcmVyKCkpKQorICAgICAg
ICByZXR1cm4gaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyZXIoKSk7CisjZW5k
aWYKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNzc3LDggKzc4NCw4IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjpyZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAotICAgIGlmIChpczNEQ2FudmFzKHJl
bmRlcmVyKCkpKSB7CisjaWYgRU5BQkxFKDNEX0NBTlZBUykgfHwgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKKyAgICBpZiAoaXNBY2NlbGVyYXRlZENhbnZhcyhyZW5kZXJlcigpKSkgewog
ICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3MDQ4YjhlMWY4YmJmMGMzYjA4Njlm
OGU1ZDNmYzQ4YjQ2OGFkMjE1Li44MDFkNzkwNjU0YTMwMzg4NDA1ZTI5NjY0NDZhNmNkMzRlMjhk
Y2JlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0wOC0wNSAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENvbXBvc2l0aW5nIHNob3VsZCBiZSBleHBvc2VkIGluIHRl
cm1zIG9mIEdyYXBoaWNzQ29udGV4dDNELCBub3QgV2ViR0wgc3BlY2lmaWNhbGx5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzU4OQorCisgICAgICAg
IEluaXRpYWxpemVzIHRoZSBwbGF0Zm9ybUxheWVyIGFzIGEgR3JhcGhpY3MzRExheWVyQ2hyb21p
dW0sIG5vdCBhIFdlYkdMTGF5ZXJDaHJvbWl1bS4KKyAgICAgICAgVGhlIGxheWVyIGl0c2VsZiBp
c24ndCBXZWJHTC1zcGVjaWZpYy4KKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFs
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRm
b3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3Jt
TGF5ZXIpOgorCiAyMDEwLTA4LTA0ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCmluZGV4IGQ2YWQxYTM0ZWM0OTViNDQwOWU1M2ZmY2Qw
MjM1NmY5MjAxZjdhZTUuLjRhMTQxZGMyYjY3ZmUwNDE3ZWJlOGUzZjU4MjFkNTBiNjUxNjE2ZjAg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5o
IgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBAIC00Niw3
ICs0Nyw2IEBACiAjaW5jbHVkZSAiSW50MzJBcnJheS5oIgogI2luY2x1ZGUgIkludDhBcnJheS5o
IgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKLSNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIldlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKQEAgLTExMSw3
ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogcGxhdGZv
cm1MYXllcigpIGNvbnN0OworICAgIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bSogcGxh
dGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkg
Y29uc3Q7CiAKQEAgLTMwNCw3ICszMDQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE93blB0
cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiBtX2ltcGw7CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotICAgIFJlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IG1fY29tcG9z
aXRpbmdMYXllcjsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtPiBt
X2NvbXBvc2l0aW5nTGF5ZXI7CiAjZW5kaWYKICNpZiBQTEFURk9STShTS0lBKQogICAgIC8vIElm
IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBDYW52YXMncyBiYWNraW5nIHN0b3JlIGRvbid0
CkBAIC0zNjUsNyArMzY1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0
aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLAogICAgIG1faW1wbC5z
ZXQod2ViQ29udGV4dCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
bV9jb21wb3NpdGluZ0xheWVyID0gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAg
bV9jb21wb3NpdGluZ0xheWVyID0gR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjpjcmVh
dGUoMCk7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4Niw3ICszODYsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnByZXBhcmVUZXh0dXJlKCkKIH0KIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLVdlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CitHcmFwaGljc0NvbnRl
eHQzRExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5
ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbXBvc2l0aW5nTGF5ZXIuZ2V0KCk7CiB9CkBA
IC0xMDQ2LDkgKzEwNDYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVy
ZSgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogR3Jh
cGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIFdlYkdMTGF5ZXJD
aHJvbWl1bSogd2ViR0xMYXllciA9IG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICB3
ZWJHTExheWVyLT5zZXRDb250ZXh0KHRoaXMpOwotICAgIHJldHVybiB3ZWJHTExheWVyOworICAg
IEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bSogZ3JhcGhpY3NDb250ZXh0M0RMYXllciA9
IG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBncmFwaGljc0NvbnRleHQzRExheWVy
LT5zZXRDb250ZXh0KHRoaXMpOworICAgIHJldHVybiBncmFwaGljc0NvbnRleHQzRExheWVyOwog
fQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63679</attachid>
            <date>2010-08-05 19:14:03 -0700</date>
            <delta_ts>2010-08-05 20:55:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43589-20100805191402.patch</filename>
            <type>text/plain</type>
            <size>29020</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTlhNzM1NjIzYTY4YjZjZTIzNDZmOTQxNzE1OTEwYWRlNjg1YmE1Ni4uNjFjZDExMmU2NDZmYWUw
MDc0NzRkM2E0YjVmZWY4OTMyY2I4OGU3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxMC0wOC0wNSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbXBvc2l0aW5nIHNob3VsZCBiZSBleHBvc2Vk
IGluIHRlcm1zIG9mIEdyYXBoaWNzQ29udGV4dDNELCBub3QgV2ViR0wgc3BlY2lmaWNhbGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzU4OQorCisg
ICAgICAgIFRoaXMgdHJlYXRzIGFsbCBHcmFwaGljc0NvbnRleHQzRC1iYWNrZWQgbGF5ZXJzIHRo
ZSBzYW1lIGluc3RlYWQgb2Ygc3BlY2lhbCBjYXNpbmcgV2ViR0wuCisgICAgICAgIFRoZSBjcm9z
cy1wbGF0Zm9ybSBjaGFuZ2UgaXMgdG8gcmVuYW1lIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
VG9XZWJHTCgpIHRvCisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9HcmFwaGlj
c0NvbnRleHQzRCBhbmQgdG8gcmVuYW1lIGFsbCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBhbHNvIHJlbmFtZXMgdGhlIGNocm9taXVtIGNsYXNzIHVzZWQgZm9yIGFjY2Vs
ZXJhdGluZyB0aGVzZSBsYXllcnMuCisKKyAgICAgICAgQ3Jvc3MgcGxhdGZvcm0gY2hhbmdlczoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAgICAgUmVuYW1lIHRoZSBmdW5jdGlvbiBvbiB0aGUgYmFzZSBjbGFzcy4gR3JhcGhp
Y3NMYXllckNBIGFuZCBHcmFwaGljc0xheWVyQ0EgaW1wbGVtZW50IHRoaXMuCisgICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNB
Y2NlbGVyYXRlZENhbnZhcyk6CisgICAgICAgICAgICBIZWxwZXIgZnVuY3Rpb24gdG8gc2VlIGlm
IGEgcmVuZGVyZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5n
IGxheWVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFw
aGljc0xheWVyQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OmNvbnRhaW5zUGFpbnRlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpyZW5kZXJlckNvbnRlbnRDaGFuZ2VkKToKKyAgICAgICBDaHJvbWl1bSBz
cGVjaWZpYyBjaGFuZ2VzOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVt
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9t
aXVtOjpHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjp0ZXh0dXJlSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjpz
ZXRDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0NvbnRleHQzRExheWVyQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW06Om93bnNUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6c2hhZGVyUHJvZ3Jh
bUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6
c2V0U2hhZGVyUHJvZ3JhbUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
TGF5ZXJDaHJvbWl1bTo6c2V0UHJlcGFyZVRleHR1cmVDYWxsYmFjayk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNOZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50
c1RvR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6IFJlbW92ZWQuCisg
ICAgICAgIE1hYyBzcGVjaWZpYyBjaGFuZ2VzOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgICBDaGFuZ2VzIGluIHRoaXMgZmlsZSBh
cmUgYWxsIHMvV2ViR0wvR3JhcGhpY3NDb250ZXh0M0QvCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6Oik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
TGF5ZXJDQS5tbToKKyAgICAgICAgICBTYW1lIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzR3JhcGhpY3NDb250ZXh0
M0RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRz
VG9HcmFwaGljc0NvbnRleHQzRCk6CisKIDIwMTAtMDgtMDUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggYmFkMTIzZWUyMzM3YjZhOWUwMjZiNDRlYTJlMWFjNDZmYTNkMTM4OS4uZDhmZGJiNGY4MDhh
NWRiMjc2NmIyZDNjNTBiYmViZmMxMWFjMTFhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIxOTQsNiArMjE5NCw4IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2Rl
Q2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HbHlwaFBhZ2VUcmVlTm9kZUxpbnV4LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXll
ckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1MaW51eC5jcHAnLApAQCAtMjIyMSw4ICsy
MjIzLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3Jp
YmVIZWxwZXJUZXh0UnVuLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAnLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCBhNTgxOWY0OWQ5YWJiNjE1OGRh
MWQ5MTNkMzY5MWU0YjBmMmNlYjBmLi45NTgyY2E5Yjg5MTJmODQwYTA3YTQ3MjZjMjI5OWI4MmQw
MmMxYWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAt
Mjk4LDkgKzI5OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0lt
YWdlKEltYWdlKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0
Zm9ybUxheWVyKikgeyB9IC8vIHZpZGVvIG9yIHBsdWctaW4KICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKSB7IH0KLSNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXll
ciopIHsgfQotI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9HcmFwaGljc0Nv
bnRleHQzRChQbGF0Zm9ybUxheWVyKikgeyB9CiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRlbnRz
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gQ2FsbGJhY2sgZnJvbSB0
aGUgdW5kZXJseWluZyBncmFwaGljcyBzeXN0ZW0gdG8gZHJhdyBsYXllciBjb250ZW50cy4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNo
cm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3ND
b250ZXh0M0RMYXllckNocm9taXVtLmNwcApzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJv
bSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5j
cHAKcmVuYW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3ND
b250ZXh0M0RMYXllckNocm9taXVtLmNwcAppbmRleCBlYmQ5ZWJlNjE2MDhkMjNlZGQ0ZjBhMjBm
YzU2NTg0ZjM4OWFkOGQ2Li41YWU0YTM0YzI2MzdkZGU3OGUwZDY4YTNkMjdiNmIyMGRkNmEyOWJk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0uY3BwCkBAIC0zMiwyMSArMzIsMjEgQEAKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIldlYkdMTGF5ZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5oIgog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11bnNpZ25lZCBXZWJHTExheWVyQ2hyb21pdW06Om1f
c2hhZGVyUHJvZ3JhbUlkID0gMDsKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJv
bWl1bTo6bV9zaGFkZXJQcm9ncmFtSWQgPSAwOwogCi1QYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJv
bWl1bT4gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcikKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtPiBHcmFwaGlj
c0NvbnRleHQzRExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xMYXllckNocm9taXVtKG93bmVy
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21p
dW0ob3duZXIpKTsKIH0KIAotV2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0o
R3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJv
bWl1bTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIpCiAgICAgOiBMYXllckNocm9taXVtKG93bmVyKQogICAgICwgbV9jb250ZXh0KDAp
CiAgICAgLCBtX3RleHR1cmVJZCgwKQpAQCAtNTQsMTIgKzU0LDEyIEBAIFdlYkdMTGF5ZXJDaHJv
bWl1bTo6V2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiB7
CiB9CiAKLXVuc2lnbmVkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKCkKK3Vuc2lnbmVk
IEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKCkKIHsKICAgICByZXR1
cm4gbV90ZXh0dXJlSWQ7CiB9CiAKLXZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVUZXh0
dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlkKQordm9pZCBHcmFwaGljc0NvbnRleHQzRExh
eWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpCiB7
CiAgICAgQVNTRVJUKHRleHR1cmVJZCA9PSBtX3RleHR1cmVJZCk7CiAgICAgQVNTRVJUKG1fY29u
dGV4dCk7CkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVU
ZXh0dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlkKQogICAgIH0KIH0KIAotdm9pZCBXZWJH
TExheWVyQ2hyb21pdW06OnNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25z
dCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKICAgICBtX2NvbnRleHQgPSBjb25zdF9j
YXN0PEdyYXBoaWNzQ29udGV4dDNEKj4oY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bS5oCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKcmVuYW1lIHRvIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtLmgK
aW5kZXggYWJkMGM5M2MzYjgzNTg3N2ZkOGRkNzcwOGYyYmE1OWNlZGRmZjQ4ZC4uNzQzNjdiOTRl
ZGQ5OGJlY2ZjN2RlMGI2MTNmMGZkOTExZmIzMGJkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bS5oCkBAIC0yOSw4ICsyOSw4IEBACiAgKi8KIAogCi0jaWZuZGVmIFdlYkdMTGF5ZXJDaHJvbWl1
bV9oCi0jZGVmaW5lIFdlYkdMTGF5ZXJDaHJvbWl1bV9oCisjaWZuZGVmIEdyYXBoaWNzQ29udGV4
dDNETGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bV9oCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKQEAgLTQwLDEwICs0MCwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCi0v
LyBBIExheWVyIHRoYXQgY29udGFpbnMgYSBXZWJHTCBlbGVtZW50LgotY2xhc3MgV2ViR0xMYXll
ckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworLy8gQSBMYXllciBjb250YWluaW5n
IEdyYXBoaWNzQ29udGV4dDNELXJlbmRlcmVkIGNvbnRlbnQKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dDNETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0RMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9
IDApOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiBtX2NvbnRleHQ7
IH0KICAgICB2aXJ0dWFsIGJvb2wgb3duc1RleHR1cmUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCk7CkBAIC01NSw3ICs1
NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRTaGFkZXJQcm9ncmFtSWQodW5zaWdu
ZWQgc2hhZGVyUHJvZ3JhbUlkKSB7IG1fc2hhZGVyUHJvZ3JhbUlkID0gc2hhZGVyUHJvZ3JhbUlk
OyB9CiAKIHByaXZhdGU6Ci0gICAgV2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpOworICAgIGV4cGxpY2l0IEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICBHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OwogICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogICAgIGJvb2wgbV90ZXh0dXJl
Q2hhbmdlZDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCBlODk1Y2VlMDlhNjBkYTUxNzQ3
NzQ2NWU5NzM3ZmVkMjFhZTliYjFkLi5kMGE2ZjVkYjBkZDA2MjIzYzcyYTM0OWQ0MmI4OTNkYTcx
NjcyN2I2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC00NywxMyArNDcsMTQgQEAKIAog
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGlt
ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybUxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJXZWJH
TExheWVyQ2hyb21pdW0uaCIKKwogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBA
IC0yODUsNiArMjg2LDExIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpCiAgICAgcHJpbWFyeUxheWVyKCktPnNldE9wYWNpdHkob3BhY2l0eSk7
CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c05lZWRzRGlzcGxh
eSgpCit7CisgICAgaWYgKG1fY29udGVudHNMYXllcikKKyAgICAgICAgbV9jb250ZW50c0xheWVy
LT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRO
ZWVkc0Rpc3BsYXkoKQogewogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKQEAgLTMzNCwxOSArMzQw
LDE4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1h
Z2UqIGltYWdlKQogICAgICAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKIH0KIAotI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb1dl
YkdMKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIpCiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKICAgICBpZiAo
cGxhdGZvcm1MYXllcikgewotICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5nZXQoKSB8fCBt
X2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JXZWJHTCkgewotICAgICAg
ICAgICAgV2ViR0xMYXllckNocm9taXVtKiB3ZWJHTExheWVyID0gc3RhdGljX2Nhc3Q8V2ViR0xM
YXllckNocm9taXVtKj4ocGxhdGZvcm1MYXllcik7Ci0gICAgICAgICAgICBzZXR1cENvbnRlbnRz
TGF5ZXIod2ViR0xMYXllcik7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSB3ZWJHTExh
eWVyOwotICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJG
b3JXZWJHTDsKKyAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0T3duZXIodGhpcyk7CisgICAgICAg
IGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNMYXllclB1cnBvc2UgIT0g
Q29udGVudHNMYXllckZvckdyYXBoaWNzQ29udGV4dDNEKSB7CisgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRExheWVyQ2hyb21pdW0qIGdyYXBoaWNzQ29udGV4dDNETGF5ZXIgPSBzdGF0aWNf
Y2FzdDxHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0qPihwbGF0Zm9ybUxheWVyKTsKKyAg
ICAgICAgICAgIHNldHVwQ29udGVudHNMYXllcihncmFwaGljc0NvbnRleHQzRExheWVyKTsKKyAg
ICAgICAgICAgIG1fY29udGVudHNMYXllciA9IGdyYXBoaWNzQ29udGV4dDNETGF5ZXI7CisgICAg
ICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVudHNMYXllckZvckdyYXBoaWNz
Q29udGV4dDNEOwogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
fQotICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXRPd25lcih0aGlzKTsKICAgICAgICAgcGxhdGZv
cm1MYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgp
OwogICAgIH0gZWxzZSB7CkBAIC0zNjEsNyArMzY2LDYgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQog
ICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCiAgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwog
fQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvTWVk
aWEoUGxhdGZvcm1MYXllciogbGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBjZDVl
NDc5OWFiNGYwMzFhNDE4MzEyMDBlOGE1OGQyNzkyMGUzNDIwLi5iYzcyZTZlNzVlZDZkODQzYTc2
YjhhZmE2Njg2NDAxMmM3MjEwMzE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTgxLDEyICs4
MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvV2ViR0woUGxhdGZvcm1MYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
R3JhcGhpY3NDb250ZXh0M0QoUGxhdGZvcm1MYXllciopOwogCiAgICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKQEAgLTEzNyw3ICsxMzgsNyBAQCBwcml2
YXRlOgogICAgICAgICBOb0NvbnRlbnRzTGF5ZXIgPSAwLAogICAgICAgICBDb250ZW50c0xheWVy
Rm9ySW1hZ2UsCiAgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JWaWRlbywKLSAgICAgICAgQ29udGVu
dHNMYXllckZvcldlYkdMCisgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JHcmFwaGljc0NvbnRleHQz
RAogICAgIH07CiAKICAgICBDb250ZW50c0xheWVyUHVycG9zZSBtX2NvbnRlbnRzTGF5ZXJQdXJw
b3NlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGU5OGE2NWEyYzIzNjYyYjY4NjUwODgz
ZTljYThlNTU0NmQ4MWM5MzQuLmM1YzI2Zjc3YzI0YzM2ZjllMDUzYTkyZWNiOGMwMTI0NDNkNjk1
YjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM1LDEwICszNSwxMCBAQAogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiR0xFUzJDb250ZXh0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5o
IgogI2lmIFBMQVRGT1JNKFNLSUEpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgpAQCAtNjkxLDYgKzY5MSw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiAgICAg
ICAgIGlmIChsYXllci0+Y29udGVudHNEaXJ0eSgpKSB7CiAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGJhY2tpbmcgdGV4dHVyZSBjb250ZW50cyBmb3IgYW55IGRpcnR5IHBvcnRpb24gb2YgdGhl
IGxheWVyLgogICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZVRleHR1cmVDb250ZW50cyh0ZXh0dXJl
SWQpOworICAgICAgICAgICAgbV9nbGVzMkNvbnRleHQtPm1ha2VDdXJyZW50KCk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAobGF5ZXItPmRvdWJsZVNpZGVkKCkpCkBAIC03NzAsOSArNzcxLDkg
QEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMo
KQogICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRleENvbG9yLnks
IHRleENvbG9yLnosIHRleENvbG9yLncpOyBcbiIKICAgICAgICAgIn0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKLSAgICAvLyBXZWJHTCBs
YXllcnMgbmVlZCB0byBiZSBmbGlwcGVkIHZlcnRpY2FsbHkgYW5kIHRoZWlyIGNvbG9ycyBzaG91
bGRuJ3QgYmUKKyAgICAvLyBHcmFwaGljc0NvbnRleHQzRCBsYXllcnMgbmVlZCB0byBiZSBmbGlw
cGVkIHZlcnRpY2FsbHkgYW5kIHRoZWlyIGNvbG9ycyBzaG91bGRuJ3QgYmUKICAgICAvLyBzd2l6
emxlZC4KLSAgICBjaGFyIHdlYkdMRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CisgICAgY2hhciBn
cmFwaGljc0NvbnRleHQzREZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQogICAgICAgICAicHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgogICAgICAg
ICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IgogICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgpAQCAtODE5LDExICs4MjAsMTEgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAgIH0KICAgICBMYXllckNocm9taXVt
OjpzZXRTaGFkZXJQcm9ncmFtSWQoQ29udGVudExheWVyUHJvZ3JhbSk7CiAKLSAgICBpZiAoIWNy
ZWF0ZUxheWVyU2hhZGVyKFdlYkdMTGF5ZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHdl
YkdMRnJhZ21lbnRTaGFkZXJTdHJpbmcpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgV2ViR0wgbGF5ZXJzIik7CisgICAgaWYgKCFjcmVh
dGVMYXllclNoYWRlcihHcmFwaGljc0NvbnRleHQzRExheWVyUHJvZ3JhbSwgdmVydGV4U2hhZGVy
U3RyaW5nLCBncmFwaGljc0NvbnRleHQzREZyYWdtZW50U2hhZGVyU3RyaW5nKSkgeworICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0gZm9yIEdyYXBoaWNz
Q29udGV4dDNEIGxheWVycyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIFdl
YkdMTGF5ZXJDaHJvbWl1bTo6c2V0U2hhZGVyUHJvZ3JhbUlkKFdlYkdMTGF5ZXJQcm9ncmFtKTsK
KyAgICBHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW06OnNldFNoYWRlclByb2dyYW1JZChH
cmFwaGljc0NvbnRleHQzRExheWVyUHJvZ3JhbSk7CiAKICAgICBpZiAoIWNyZWF0ZUxheWVyU2hh
ZGVyKFNjcm9sbExheWVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyU3RyaW5nLCBzY3JvbGxGcmFnbWVu
dFNoYWRlclN0cmluZykpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNo
YWRlciBwcm9ncmFtIGZvciBzY3JvbGxpbmcgbGF5ZXIiKTsKQEAgLTgzOCw3ICs4MzksNyBAQCBi
b29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCiAg
ICAgLy8gU3BlY2lmeSB0aGUgYXR0cmliIGxvY2F0aW9uIGZvciB0aGUgcG9zaXRpb24gYW5kIHRl
eENvb3JkIGFuZCBtYWtlIGl0IHRoZSBzYW1lIGZvciBhbGwgcHJvZ3JhbXMgdG8KICAgICAvLyBh
dm9pZCBiaW5kaW5nIHJlLWJpbmRpbmcgdGhlIHZlcnRleCBhdHRyaWJ1dGVzLgogICAgIGJpbmRD
b21tb25BdHRyaWJMb2NhdGlvbnMoQ29udGVudExheWVyUHJvZ3JhbSk7Ci0gICAgYmluZENvbW1v
bkF0dHJpYkxvY2F0aW9ucyhXZWJHTExheWVyUHJvZ3JhbSk7CisgICAgYmluZENvbW1vbkF0dHJp
YkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHQzRExheWVyUHJvZ3JhbSk7CiAgICAgYmluZENvbW1v
bkF0dHJpYkxvY2F0aW9ucyhEZWJ1Z0JvcmRlclByb2dyYW0pOwogICAgIGJpbmRDb21tb25BdHRy
aWJMb2NhdGlvbnMoU2Nyb2xsTGF5ZXJQcm9ncmFtKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5k
ZXggMTdlN2U1NzgwMzUzYzFiYTBlYzhlOTkyMmFmOWRiYThkMjgzYWMwZi4uZjU1ZjdjOGI3YTQ3
MGRjYjc2ZGY5ODQ3YmM1YjdjMGI4MWQzN2ExYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC04
OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHQqIHJvb3RMYXllckdyYXBo
aWNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyR3JhcGhpY3NDb250ZXh0Lmdl
dCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgZW51bSBTaGFkZXJQcm9ncmFtVHlwZSB7IERlYnVnQm9y
ZGVyUHJvZ3JhbSwgU2Nyb2xsTGF5ZXJQcm9ncmFtLCBDb250ZW50TGF5ZXJQcm9ncmFtLCBXZWJH
TExheWVyUHJvZ3JhbSwgTnVtU2hhZGVyUHJvZ3JhbVR5cGVzIH07CisgICAgZW51bSBTaGFkZXJQ
cm9ncmFtVHlwZSB7IERlYnVnQm9yZGVyUHJvZ3JhbSwgU2Nyb2xsTGF5ZXJQcm9ncmFtLCBDb250
ZW50TGF5ZXJQcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRExheWVyUHJvZ3JhbSwgTnVtU2hhZGVy
UHJvZ3JhbVR5cGVzIH07CiAKICAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNo
cm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IDgwYzgyMmM2
NWY3MTQ1NDg0MTY4ZGExNjZjMGFhZDY4ZmNiZDRlYzkuLmUzMGY3YzVhMDExZmVlZmNjNWE1MjRj
ZDk4MmMwNmE5Mzc2MDNlYzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzTGF5ZXJDQS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0xMDMsOSArMTAzLDggQEAgcHVibGljOgogICAgIAogICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKLSNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXllciop
OwotI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9HcmFwaGljc0NvbnRleHQz
RChQbGF0Zm9ybUxheWVyKik7CisKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllcjsgfQogICAgIAogICAgIHZpcnR1YWwgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwpAQCAtMjU4LDkgKzI1Nyw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzSW1hZ2UoKTsKICAgICB2b2lkIHVwZGF0
ZUNvbnRlbnRzTWVkaWFMYXllcigpOwotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgdm9pZCB1
cGRhdGVDb250ZW50c1dlYkdMTGF5ZXIoKTsKLSNlbmRpZgorICAgIHZvaWQgdXBkYXRlQ29udGVu
dHNHcmFwaGljc0NvbnRleHQzRExheWVyKCk7CiAgICAgdm9pZCB1cGRhdGVDb250ZW50c1JlY3Qo
KTsKICAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5T3JpZW50YXRpb24oKTsKICAgICB2b2lkIHVwZGF0
ZU1hc2tMYXllcigpOwpAQCAtMzA1LDkgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIERpcnR5
UmVjdHNDaGFuZ2VkID0gMSA8PCAxNiwKICAgICAgICAgQ29udGVudHNJbWFnZUNoYW5nZWQgPSAx
IDw8IDE3LAogICAgICAgICBDb250ZW50c01lZGlhTGF5ZXJDaGFuZ2VkID0gMSA8PCAxOCwKLSNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKQotICAgICAgICBDb250ZW50c1dlYkdMTGF5ZXJDaGFuZ2VkID0g
MSA8PCAxOSwKLSNlbmRpZgorICAgICAgICBDb250ZW50c0dyYXBoaWNzQ29udGV4dDNETGF5ZXJD
aGFuZ2VkID0gMSA8PCAxOSwKICAgICAgICAgQ29udGVudHNSZWN0Q2hhbmdlZCA9IDEgPDwgMjAs
CiAgICAgICAgIEdlb21ldHJ5T3JpZW50YXRpb25DaGFuZ2VkID0gMSA8PCAyMSwKICAgICAgICAg
TWFza0xheWVyQ2hhbmdlZCA9IDEgPDwgMjIsCkBAIC0zMzIsMTAgKzMyNyw4IEBAIHByaXZhdGU6
CiAgICAgZW51bSBDb250ZW50c0xheWVyUHVycG9zZSB7CiAgICAgICAgIE5vQ29udGVudHNMYXll
ciA9IDAsCiAgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JJbWFnZSwKLSAgICAgICAgQ29udGVudHNM
YXllckZvck1lZGlhCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAgICAgICAgLCBDb250ZW50c0xh
eWVyRm9yV2ViR0wKLSNlbmRpZgorICAgICAgICBDb250ZW50c0xheWVyRm9yTWVkaWEsCisgICAg
ICAgIENvbnRlbnRzTGF5ZXJGb3JHcmFwaGljc0NvbnRleHQzRAogICAgIH07CiAgICAgCiAgICAg
Q29udGVudHNMYXllclB1cnBvc2UgbV9jb250ZW50c0xheWVyUHVycG9zZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbSBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQppbmRleCA5ZjFhYzgz
MzhmOWJkYzE0OWFhM2Q4OWNhZDM1ZjMxZjM0NDdjODM3Li4zMDlhY2Y2ZThhZWUxYzg0NTg1ODA1
MTE2YmE5MTIzNmJlZjA4NGQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0xheWVyQ0EubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NMYXllckNBLm1tCkBAIC05MTcsMTAgKzkxNyw4IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjpjb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoKQogICAgIGlmIChtX3Vu
Y29tbWl0dGVkQ2hhbmdlcyAmIENvbnRlbnRzTWVkaWFMYXllckNoYW5nZWQpIC8vIE5lZWRzIHRv
IGhhcHBlbiBiZWZvcmUgQ2hpbGRyZW5DaGFuZ2VkCiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzTWVk
aWFMYXllcigpOwogICAgIAotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKG1fdW5jb21t
aXR0ZWRDaGFuZ2VzICYgQ29udGVudHNXZWJHTExheWVyQ2hhbmdlZCkgLy8gTmVlZHMgdG8gaGFw
cGVuIGJlZm9yZSBDaGlsZHJlbkNoYW5nZWQKLSAgICAgICAgdXBkYXRlQ29udGVudHNXZWJHTExh
eWVyKCk7Ci0jZW5kaWYKKyAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBDb250ZW50c0dy
YXBoaWNzQ29udGV4dDNETGF5ZXJDaGFuZ2VkKSAvLyBOZWVkcyB0byBoYXBwZW4gYmVmb3JlIENo
aWxkcmVuQ2hhbmdlZAorICAgICAgICB1cGRhdGVDb250ZW50c0dyYXBoaWNzQ29udGV4dDNETGF5
ZXIoKTsKICAgICAKICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBCYWNrZ3JvdW5kQ29s
b3JDaGFuZ2VkKSAgLy8gTmVlZHMgdG8gaGFwcGVuIGJlZm9yZSBDaGlsZHJlbkNoYW5nZWQsIGFu
ZCBhZnRlciB1cGRhdGluZyBpbWFnZSBvciB2aWRlbwogICAgICAgICB1cGRhdGVMYXllckJhY2tn
cm91bmRDb2xvcigpOwpAQCAtMTM5Nyw5ICsxMzk1LDkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6
OnVwZGF0ZUNvbnRlbnRzTWVkaWFMYXllcigpCiB9CiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQot
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzV2ViR0xMYXllcigpCit2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNHcmFwaGljc0NvbnRleHQzRExheWVyKCkKIHsK
LSAgICAvLyBXZWJHTExheWVyIHdhcyBzZXQgYXMgbV9jb250ZW50c0xheWVyLCBhbmQgd2lsbCBn
ZXQgcGFyZW50ZWQgaW4gdXBkYXRlU3VibGF5ZXJMaXN0KCkuCisgICAgLy8gR3JhcGhpY3NDb250
ZXh0M0RMYXllciB3YXMgc2V0IGFzIG1fY29udGVudHNMYXllciwgYW5kIHdpbGwgZ2V0IHBhcmVu
dGVkIGluIHVwZGF0ZVN1YmxheWVyTGlzdCgpLgogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsK
ICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKG1fY29udGVudHNMYXllci5nZXQoKSk7CiAgICAg
ICAgIFttX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKQEAgLTE3MjIsMjIg
KzE3MjAsMjAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uT25MYXllcihB
bmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFMKICAgICB9CiB9CiAKLSNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9XZWJHTChQ
bGF0Zm9ybUxheWVyKiB3ZWJnbExheWVyKQordm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRl
bnRzVG9HcmFwaGljc0NvbnRleHQzRChQbGF0Zm9ybUxheWVyKiBncmFwaGljc0NvbnRleHQzRExh
eWVyKQogewotICAgIGlmICh3ZWJnbExheWVyID09IG1fY29udGVudHNMYXllcikKKyAgICBpZiAo
Z3JhcGhpY3NDb250ZXh0M0RMYXllciA9PSBtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCi0gICAgbV9jb250ZW50c0xheWVyID0gd2ViZ2xMYXllcjsKKyAgICBtX2Nv
bnRlbnRzTGF5ZXIgPSBncmFwaGljc0NvbnRleHQzRExheWVyOwogICAgIGlmIChtX2NvbnRlbnRz
TGF5ZXIgJiYgW21fY29udGVudHNMYXllci5nZXQoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHNldExheWVyT3duZXI6KV0pCiAgICAgICAgIFsoaWQpbV9jb250ZW50c0xheWVyLmdldCgp
IHNldExheWVyT3duZXI6dGhpc107CiAgICAgCi0gICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9
IHdlYmdsTGF5ZXIgPyBDb250ZW50c0xheWVyRm9yV2ViR0wgOiBOb0NvbnRlbnRzTGF5ZXI7Cisg
ICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IGdyYXBoaWNzQ29udGV4dDNETGF5ZXIgPyBDb250
ZW50c0xheWVyRm9yR3JhcGhpY3NDb250ZXh0M0QgOiBOb0NvbnRlbnRzTGF5ZXI7CiAKICAgICBu
b3RlU3VibGF5ZXJzQ2hhbmdlZCgpOwotICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChDb250
ZW50c1dlYkdMTGF5ZXJDaGFuZ2VkKTsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoQ29u
dGVudHNHcmFwaGljc0NvbnRleHQzRExheWVyQ2hhbmdlZCk7CiB9Ci0jZW5kaWYKICAgICAKIHZv
aWQgR3JhcGhpY3NMYXllckNBOjpyZXBhaW50TGF5ZXJEaXJ0eVJlY3RzKCkKIHsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDBlNTkzM2U0NWE4Mzk2NTFiMTM4
YzUwNjhmNTRlNGRjOGZhOWNmZTcuLjU5NGQ3NGI2M2U0NjhhMzJkMjgwNDRlNmZkMWQyYmFhZjI3
NmNjODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMjgs
MTMgKzI4LDEyIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVk
ZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgotI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAotI2lu
Y2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgotI2VuZGlmCisjaW5jbHVkZSAiQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgpAQCAtNjYsMTEgKzY1LDE0IEBAIHN0YXRpYyBib29s
IGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlck9iamVjdCopOwogc3Rh
dGljIGJvb2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmRJbWFnZShjb25zdCBSZW5kZXJT
dHlsZSopOwogc3RhdGljIEludFJlY3QgY2xpcEJveChSZW5kZXJCb3gqIHJlbmRlcmVyKTsKIAot
c3RhdGljIGlubGluZSBib29sIGlzM0RDYW52YXMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc0FjY2VsZXJhdGVkQ2FudmFzKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCiB7Ci0jaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCi0gICAgaWYgKHJlbmRlcmVyLT5pc0Nh
bnZhcygpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihy
ZW5kZXJlci0+bm9kZSgpKS0+aXMzRCgpOworI2lmIEVOQUJMRSgzRF9DQU5WQVMpIHx8IEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisgICAgaWYgKHJlbmRlcmVyLT5pc0NhbnZhcygpKSB7
CisgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2Fu
dmFzRWxlbWVudCo+KHJlbmRlcmVyLT5ub2RlKCkpOworICAgICAgICBpZiAoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKTsKKyAgICB9CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShyZW5kZXJlcik7CiAjZW5kaWYKQEAgLTI1MiwxMiArMjU0LDEzIEBAIGJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbigp
CiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb01lZGlhKG1lZGlhRWxlbWVu
dC0+cGxhdGZvcm1MYXllcigpKTsKICAgICB9CiAjZW5kaWYKLSNpZiBFTkFCTEUoM0RfQ0FOVkFT
KSAgICAKLSAgICBlbHNlIGlmIChpczNEQ2FudmFzKHJlbmRlcmVyKCkpKSB7CisjaWYgRU5BQkxF
KDNEX0NBTlZBUykgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyAgICBlbHNlIGlm
IChpc0FjY2VsZXJhdGVkQ2FudmFzKHJlbmRlcmVyKCkpKSB7CiAgICAgICAgIEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRlcmVy
KCktPm5vZGUoKSk7Ci0gICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IHN0
YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4
dCgpKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3Jt
TGF5ZXIoKSkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb1dlYkdM
KGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAg
IGlmIChDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdD
b250ZXh0KCkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSkK
KyAgICAgICAgICAgICAgICBpZiAoUGxhdGZvcm1MYXllciogcGwgPSBjb250ZXh0LT5ncmFwaGlj
c0NvbnRleHQzRCgpLT5wbGF0Zm9ybUxheWVyKCkpCisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGhpY3NMYXllci0+c2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKHBsKTsKICAgICB9CiAj
ZW5kaWYKIApAQCAtNzU2LDggKzc1OSwxMiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6Y29u
dGFpbnNQYWludGVkQ29udGVudCgpIGNvbnN0CiAKICAgICAvLyBGSVhNRTogd2UgY291bGQgb3B0
aW1pemUgY2FzZXMgd2hlcmUgdGhlIGltYWdlLCB2aWRlbyBvciBjYW52YXMgaXMga25vd24gdG8g
ZmlsbCB0aGUgYm9yZGVyIGJveCBlbnRpcmVseSwKICAgICAvLyBhbmQgc2V0IGJhY2tncm91bmQg
Y29sb3Igb24gdGhlIGxheWVyIGluIHRoYXQgY2FzZSwgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGJh
Y2tpbmcgc3RvcmUgYW5kIHBhaW50aW5nLgotICAgIGlmIChyZW5kZXJlcigpLT5pc1ZpZGVvKCkg
fHwgaXMzRENhbnZhcyhyZW5kZXJlcigpKSkKKyAgICBpZiAocmVuZGVyZXIoKS0+aXNWaWRlbygp
KQogICAgICAgICByZXR1cm4gaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyZXIo
KSk7CisjaWYgRU5BQkxFKDNEX0NBTlZBUykgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKKyAgICBpZiAoaXNBY2NlbGVyYXRlZENhbnZhcyhyZW5kZXJlcigpKSkKKyAgICAgICAgcmV0
dXJuIGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKHJlbmRlcmVyKCkpOworI2VuZGlmCiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTc3Nyw4ICs3ODQsOCBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKLSAgICBpZiAoaXMzRENhbnZhcyhyZW5kZXJl
cigpKSkgeworI2lmIEVOQUJMRSgzRF9DQU5WQVMpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCisgICAgaWYgKGlzQWNjZWxlcmF0ZWRDYW52YXMocmVuZGVyZXIoKSkpIHsKICAgICAg
ICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNzA0OGI4ZTFmOGJiZjBjM2IwODY5ZjhlNWQz
ZmM0OGI0NjhhZDIxNS4uODAxZDc5MDY1NGEzMDM4ODQwNWUyOTY2NDQ2YTZjZDM0ZTI4ZGNiZSAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDgtMDUgIEphbWVzIFJvYmluc29u
ICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDb21wb3NpdGluZyBzaG91bGQgYmUgZXhwb3NlZCBpbiB0ZXJtcyBv
ZiBHcmFwaGljc0NvbnRleHQzRCwgbm90IFdlYkdMIHNwZWNpZmljYWxseQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM1ODkKKworICAgICAgICBJbml0
aWFsaXplcyB0aGUgcGxhdGZvcm1MYXllciBhcyBhIEdyYXBoaWNzM0RMYXllckNocm9taXVtLCBu
b3QgYSBXZWJHTExheWVyQ2hyb21pdW0uCisgICAgICAgIFRoZSBsYXllciBpdHNlbGYgaXNuJ3Qg
V2ViR0wtc3BlY2lmaWMuCisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVy
KToKKwogMjAxMC0wOC0wNCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0dy
YXBoaWNzQ29udGV4dDNELmNwcAppbmRleCBkNmFkMWEzNGVjNDk1YjQ0MDllNTNmZmNkMDIzNTZm
OTIwMWY3YWU1Li40YTE0MWRjMmI2N2ZlMDQxN2ViZThlM2Y1ODIxZDUwYjY1MTYxNmYwIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcApAQCAtMzksNiArMzksNyBA
QAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKICNp
bmNsdWRlICJGbG9hdDMyQXJyYXkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRExheWVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtNDYsNyArNDcs
NiBAQAogI2luY2x1ZGUgIkludDMyQXJyYXkuaCIKICNpbmNsdWRlICJJbnQ4QXJyYXkuaCIKICNp
bmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAj
aW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCkBAIC0xMTEsNyArMTEx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBXZWJHTExheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdDsKKyAgICBHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0qIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdDsKICNlbmRpZgogICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0
OwogCkBAIC0zMDQsNyArMzA0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBPd25QdHI8V2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gbV9pbXBsOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5n
TGF5ZXI7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bT4gbV9jb21w
b3NpdGluZ0xheWVyOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAvLyBJZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBvZiB0aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24ndApAQCAt
MzY1LDcgKzM2NSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6
ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywKICAgICBtX2ltcGwuc2V0KHdl
YkNvbnRleHQpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIG1fY29t
cG9zaXRpbmdMYXllciA9IFdlYkdMTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIG1fY29t
cG9zaXRpbmdMYXllciA9IEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zODYsNyArMzg2LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpwcmVwYXJlVGV4dHVyZSgpCiB9CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1XZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorR3JhcGhpY3NDb250ZXh0M0RM
YXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9jb21wb3NpdGluZ0xheWVyLmdldCgpOwogfQpAQCAtMTA0
Niw5ICsxMDQ2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNz
Q29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICBXZWJHTExheWVyQ2hyb21p
dW0qIHdlYkdMTGF5ZXIgPSBtX2ludGVybmFsLT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAgd2ViR0xM
YXllci0+c2V0Q29udGV4dCh0aGlzKTsKLSAgICByZXR1cm4gd2ViR0xMYXllcjsKKyAgICBHcmFw
aGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0qIGdyYXBoaWNzQ29udGV4dDNETGF5ZXIgPSBtX2lu
dGVybmFsLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0M0RMYXllci0+c2V0
Q29udGV4dCh0aGlzKTsKKyAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0M0RMYXllcjsKIH0KICNl
bmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63686</attachid>
            <date>2010-08-05 20:55:32 -0700</date>
            <delta_ts>2010-08-06 13:40:37 -0700</delta_ts>
            <desc>compile tested on mac with and without 3D_CANVAS enabled</desc>
            <filename>bug-43589-20100805205531.patch</filename>
            <type>text/plain</type>
            <size>29160</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTlhNzM1NjIzYTY4YjZjZTIzNDZmOTQxNzE1OTEwYWRlNjg1YmE1Ni4uNjFjZDExMmU2NDZmYWUw
MDc0NzRkM2E0YjVmZWY4OTMyY2I4OGU3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxMC0wOC0wNSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbXBvc2l0aW5nIHNob3VsZCBiZSBleHBvc2Vk
IGluIHRlcm1zIG9mIEdyYXBoaWNzQ29udGV4dDNELCBub3QgV2ViR0wgc3BlY2lmaWNhbGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzU4OQorCisg
ICAgICAgIFRoaXMgdHJlYXRzIGFsbCBHcmFwaGljc0NvbnRleHQzRC1iYWNrZWQgbGF5ZXJzIHRo
ZSBzYW1lIGluc3RlYWQgb2Ygc3BlY2lhbCBjYXNpbmcgV2ViR0wuCisgICAgICAgIFRoZSBjcm9z
cy1wbGF0Zm9ybSBjaGFuZ2UgaXMgdG8gcmVuYW1lIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
VG9XZWJHTCgpIHRvCisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9HcmFwaGlj
c0NvbnRleHQzRCBhbmQgdG8gcmVuYW1lIGFsbCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBhbHNvIHJlbmFtZXMgdGhlIGNocm9taXVtIGNsYXNzIHVzZWQgZm9yIGFjY2Vs
ZXJhdGluZyB0aGVzZSBsYXllcnMuCisKKyAgICAgICAgQ3Jvc3MgcGxhdGZvcm0gY2hhbmdlczoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAgICAgUmVuYW1lIHRoZSBmdW5jdGlvbiBvbiB0aGUgYmFzZSBjbGFzcy4gR3JhcGhp
Y3NMYXllckNBIGFuZCBHcmFwaGljc0xheWVyQ0EgaW1wbGVtZW50IHRoaXMuCisgICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNB
Y2NlbGVyYXRlZENhbnZhcyk6CisgICAgICAgICAgICBIZWxwZXIgZnVuY3Rpb24gdG8gc2VlIGlm
IGEgcmVuZGVyZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5n
IGxheWVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFw
aGljc0xheWVyQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OmNvbnRhaW5zUGFpbnRlZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpyZW5kZXJlckNvbnRlbnRDaGFuZ2VkKToKKyAgICAgICBDaHJvbWl1bSBz
cGVjaWZpYyBjaGFuZ2VzOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVt
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9t
aXVtOjpHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjp0ZXh0dXJlSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtOjpz
ZXRDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0NvbnRleHQzRExheWVyQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW06Om93bnNUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6c2hhZGVyUHJvZ3Jh
bUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6
c2V0U2hhZGVyUHJvZ3JhbUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
TGF5ZXJDaHJvbWl1bTo6c2V0UHJlcGFyZVRleHR1cmVDYWxsYmFjayk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNOZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50
c1RvR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6IFJlbW92ZWQuCisg
ICAgICAgIE1hYyBzcGVjaWZpYyBjaGFuZ2VzOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgICBDaGFuZ2VzIGluIHRoaXMgZmlsZSBh
cmUgYWxsIHMvV2ViR0wvR3JhcGhpY3NDb250ZXh0M0QvCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6Oik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
TGF5ZXJDQS5tbToKKyAgICAgICAgICBTYW1lIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1YmxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzR3JhcGhpY3NDb250ZXh0
M0RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRz
VG9HcmFwaGljc0NvbnRleHQzRCk6CisKIDIwMTAtMDgtMDUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggYmFkMTIzZWUyMzM3YjZhOWUwMjZiNDRlYTJlMWFjNDZmYTNkMTM4OS4uZDhmZGJiNGY4MDhh
NWRiMjc2NmIyZDNjNTBiYmViZmMxMWFjMTFhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIxOTQsNiArMjE5NCw4IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJUZXh0dXJlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2Rl
Q2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HbHlwaFBhZ2VUcmVlTm9kZUxpbnV4LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXll
ckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1MaW51eC5jcHAnLApAQCAtMjIyMSw4ICsy
MjIzLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3Jp
YmVIZWxwZXJUZXh0UnVuLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAnLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAppbmRleCBhNTgxOWY0OWQ5YWJiNjE1OGRh
MWQ5MTNkMzY5MWU0YjBmMmNlYjBmLi45NTgyY2E5Yjg5MTJmODQwYTA3YTQ3MjZjMjI5OWI4MmQw
MmMxYWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAt
Mjk4LDkgKzI5OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0lt
YWdlKEltYWdlKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0
Zm9ybUxheWVyKikgeyB9IC8vIHZpZGVvIG9yIHBsdWctaW4KICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKSB7IH0KLSNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXll
ciopIHsgfQotI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9HcmFwaGljc0Nv
bnRleHQzRChQbGF0Zm9ybUxheWVyKikgeyB9CiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRlbnRz
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gQ2FsbGJhY2sgZnJvbSB0
aGUgdW5kZXJseWluZyBncmFwaGljcyBzeXN0ZW0gdG8gZHJhdyBsYXllciBjb250ZW50cy4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNo
cm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3ND
b250ZXh0M0RMYXllckNocm9taXVtLmNwcApzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJv
bSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5j
cHAKcmVuYW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3ND
b250ZXh0M0RMYXllckNocm9taXVtLmNwcAppbmRleCBlYmQ5ZWJlNjE2MDhkMjNlZGQ0ZjBhMjBm
YzU2NTg0ZjM4OWFkOGQ2Li41YWU0YTM0YzI2MzdkZGU3OGUwZDY4YTNkMjdiNmIyMGRkNmEyOWJk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0uY3BwCkBAIC0zMiwyMSArMzIsMjEgQEAKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIldlYkdMTGF5ZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5oIgog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11bnNpZ25lZCBXZWJHTExheWVyQ2hyb21pdW06Om1f
c2hhZGVyUHJvZ3JhbUlkID0gMDsKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJv
bWl1bTo6bV9zaGFkZXJQcm9ncmFtSWQgPSAwOwogCi1QYXNzUmVmUHRyPFdlYkdMTGF5ZXJDaHJv
bWl1bT4gV2ViR0xMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcikKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtPiBHcmFwaGlj
c0NvbnRleHQzRExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xMYXllckNocm9taXVtKG93bmVy
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21p
dW0ob3duZXIpKTsKIH0KIAotV2ViR0xMYXllckNocm9taXVtOjpXZWJHTExheWVyQ2hyb21pdW0o
R3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJv
bWl1bTo6R3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIpCiAgICAgOiBMYXllckNocm9taXVtKG93bmVyKQogICAgICwgbV9jb250ZXh0KDAp
CiAgICAgLCBtX3RleHR1cmVJZCgwKQpAQCAtNTQsMTIgKzU0LDEyIEBAIFdlYkdMTGF5ZXJDaHJv
bWl1bTo6V2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiB7
CiB9CiAKLXVuc2lnbmVkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKCkKK3Vuc2lnbmVk
IEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKCkKIHsKICAgICByZXR1
cm4gbV90ZXh0dXJlSWQ7CiB9CiAKLXZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVUZXh0
dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlkKQordm9pZCBHcmFwaGljc0NvbnRleHQzRExh
eWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpCiB7
CiAgICAgQVNTRVJUKHRleHR1cmVJZCA9PSBtX3RleHR1cmVJZCk7CiAgICAgQVNTRVJUKG1fY29u
dGV4dCk7CkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVU
ZXh0dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlkKQogICAgIH0KIH0KIAotdm9pZCBXZWJH
TExheWVyQ2hyb21pdW06OnNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25z
dCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKICAgICBtX2NvbnRleHQgPSBjb25zdF9j
YXN0PEdyYXBoaWNzQ29udGV4dDNEKj4oY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bS5oCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKcmVuYW1lIHRvIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtLmgK
aW5kZXggYWJkMGM5M2MzYjgzNTg3N2ZkOGRkNzcwOGYyYmE1OWNlZGRmZjQ4ZC4uNzQzNjdiOTRl
ZGQ5OGJlY2ZjN2RlMGI2MTNmMGZkOTExZmIzMGJkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bS5oCkBAIC0yOSw4ICsyOSw4IEBACiAgKi8KIAogCi0jaWZuZGVmIFdlYkdMTGF5ZXJDaHJvbWl1
bV9oCi0jZGVmaW5lIFdlYkdMTGF5ZXJDaHJvbWl1bV9oCisjaWZuZGVmIEdyYXBoaWNzQ29udGV4
dDNETGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bV9oCiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKQEAgLTQwLDEwICs0MCwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCi0v
LyBBIExheWVyIHRoYXQgY29udGFpbnMgYSBXZWJHTCBlbGVtZW50LgotY2xhc3MgV2ViR0xMYXll
ckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworLy8gQSBMYXllciBjb250YWluaW5n
IEdyYXBoaWNzQ29udGV4dDNELXJlbmRlcmVkIGNvbnRlbnQKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dDNETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0RMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9
IDApOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiBtX2NvbnRleHQ7
IH0KICAgICB2aXJ0dWFsIGJvb2wgb3duc1RleHR1cmUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCk7CkBAIC01NSw3ICs1
NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRTaGFkZXJQcm9ncmFtSWQodW5zaWdu
ZWQgc2hhZGVyUHJvZ3JhbUlkKSB7IG1fc2hhZGVyUHJvZ3JhbUlkID0gc2hhZGVyUHJvZ3JhbUlk
OyB9CiAKIHByaXZhdGU6Ci0gICAgV2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpOworICAgIGV4cGxpY2l0IEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1
bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICBHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OwogICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogICAgIGJvb2wgbV90ZXh0dXJl
Q2hhbmdlZDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCBlODk1Y2VlMDlhNjBkYTUxNzQ3
NzQ2NWU5NzM3ZmVkMjFhZTliYjFkLi5kMGE2ZjVkYjBkZDA2MjIzYzcyYTM0OWQ0MmI4OTNkYTcx
NjcyN2I2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCkBAIC00NywxMyArNDcsMTQgQEAKIAog
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGlt
ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybUxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJXZWJH
TExheWVyQ2hyb21pdW0uaCIKKwogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBA
IC0yODUsNiArMjg2LDExIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpCiAgICAgcHJpbWFyeUxheWVyKCktPnNldE9wYWNpdHkob3BhY2l0eSk7
CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c05lZWRzRGlzcGxh
eSgpCit7CisgICAgaWYgKG1fY29udGVudHNMYXllcikKKyAgICAgICAgbV9jb250ZW50c0xheWVy
LT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRO
ZWVkc0Rpc3BsYXkoKQogewogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKQEAgLTMzNCwxOSArMzQw
LDE4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1h
Z2UqIGltYWdlKQogICAgICAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKIH0KIAotI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb1dl
YkdMKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIpCiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKICAgICBpZiAo
cGxhdGZvcm1MYXllcikgewotICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5nZXQoKSB8fCBt
X2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JXZWJHTCkgewotICAgICAg
ICAgICAgV2ViR0xMYXllckNocm9taXVtKiB3ZWJHTExheWVyID0gc3RhdGljX2Nhc3Q8V2ViR0xM
YXllckNocm9taXVtKj4ocGxhdGZvcm1MYXllcik7Ci0gICAgICAgICAgICBzZXR1cENvbnRlbnRz
TGF5ZXIod2ViR0xMYXllcik7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSB3ZWJHTExh
eWVyOwotICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5ZXJG
b3JXZWJHTDsKKyAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0T3duZXIodGhpcyk7CisgICAgICAg
IGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNMYXllclB1cnBvc2UgIT0g
Q29udGVudHNMYXllckZvckdyYXBoaWNzQ29udGV4dDNEKSB7CisgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRExheWVyQ2hyb21pdW0qIGdyYXBoaWNzQ29udGV4dDNETGF5ZXIgPSBzdGF0aWNf
Y2FzdDxHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0qPihwbGF0Zm9ybUxheWVyKTsKKyAg
ICAgICAgICAgIHNldHVwQ29udGVudHNMYXllcihncmFwaGljc0NvbnRleHQzRExheWVyKTsKKyAg
ICAgICAgICAgIG1fY29udGVudHNMYXllciA9IGdyYXBoaWNzQ29udGV4dDNETGF5ZXI7CisgICAg
ICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gQ29udGVudHNMYXllckZvckdyYXBoaWNz
Q29udGV4dDNEOwogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
fQotICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXRPd25lcih0aGlzKTsKICAgICAgICAgcGxhdGZv
cm1MYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgp
OwogICAgIH0gZWxzZSB7CkBAIC0zNjEsNyArMzY2LDYgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQog
ICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCiAgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwog
fQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvTWVk
aWEoUGxhdGZvcm1MYXllciogbGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBjZDVl
NDc5OWFiNGYwMzFhNDE4MzEyMDBlOGE1OGQyNzkyMGUzNDIwLi5iYzcyZTZlNzVlZDZkODQzYTc2
YjhhZmE2Njg2NDAxMmM3MjEwMzE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTgxLDEyICs4
MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvV2ViR0woUGxhdGZvcm1MYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Rv
R3JhcGhpY3NDb250ZXh0M0QoUGxhdGZvcm1MYXllciopOwogCiAgICAgdmlydHVhbCBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKQEAgLTEzNyw3ICsxMzgsNyBAQCBwcml2
YXRlOgogICAgICAgICBOb0NvbnRlbnRzTGF5ZXIgPSAwLAogICAgICAgICBDb250ZW50c0xheWVy
Rm9ySW1hZ2UsCiAgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JWaWRlbywKLSAgICAgICAgQ29udGVu
dHNMYXllckZvcldlYkdMCisgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JHcmFwaGljc0NvbnRleHQz
RAogICAgIH07CiAKICAgICBDb250ZW50c0xheWVyUHVycG9zZSBtX2NvbnRlbnRzTGF5ZXJQdXJw
b3NlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGU5OGE2NWEyYzIzNjYyYjY4NjUwODgz
ZTljYThlNTU0NmQ4MWM5MzQuLmM1YzI2Zjc3YzI0YzM2ZjllMDUzYTkyZWNiOGMwMTI0NDNkNjk1
YjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM1LDEwICszNSwxMCBAQAogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiR0xFUzJDb250ZXh0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5o
IgogI2lmIFBMQVRGT1JNKFNLSUEpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgpAQCAtNjkxLDYgKzY5MSw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiAgICAg
ICAgIGlmIChsYXllci0+Y29udGVudHNEaXJ0eSgpKSB7CiAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGJhY2tpbmcgdGV4dHVyZSBjb250ZW50cyBmb3IgYW55IGRpcnR5IHBvcnRpb24gb2YgdGhl
IGxheWVyLgogICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZVRleHR1cmVDb250ZW50cyh0ZXh0dXJl
SWQpOworICAgICAgICAgICAgbV9nbGVzMkNvbnRleHQtPm1ha2VDdXJyZW50KCk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAobGF5ZXItPmRvdWJsZVNpZGVkKCkpCkBAIC03NzAsOSArNzcxLDkg
QEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMo
KQogICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRleENvbG9yLnks
IHRleENvbG9yLnosIHRleENvbG9yLncpOyBcbiIKICAgICAgICAgIn0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAKLSAgICAvLyBXZWJHTCBs
YXllcnMgbmVlZCB0byBiZSBmbGlwcGVkIHZlcnRpY2FsbHkgYW5kIHRoZWlyIGNvbG9ycyBzaG91
bGRuJ3QgYmUKKyAgICAvLyBHcmFwaGljc0NvbnRleHQzRCBsYXllcnMgbmVlZCB0byBiZSBmbGlw
cGVkIHZlcnRpY2FsbHkgYW5kIHRoZWlyIGNvbG9ycyBzaG91bGRuJ3QgYmUKICAgICAvLyBzd2l6
emxlZC4KLSAgICBjaGFyIHdlYkdMRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CisgICAgY2hhciBn
cmFwaGljc0NvbnRleHQzREZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQogICAgICAgICAicHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgogICAgICAg
ICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IgogICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgpAQCAtODE5LDExICs4MjAsMTEgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQogICAgIH0KICAgICBMYXllckNocm9taXVt
OjpzZXRTaGFkZXJQcm9ncmFtSWQoQ29udGVudExheWVyUHJvZ3JhbSk7CiAKLSAgICBpZiAoIWNy
ZWF0ZUxheWVyU2hhZGVyKFdlYkdMTGF5ZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHdl
YkdMRnJhZ21lbnRTaGFkZXJTdHJpbmcpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSBmb3IgV2ViR0wgbGF5ZXJzIik7CisgICAgaWYgKCFjcmVh
dGVMYXllclNoYWRlcihHcmFwaGljc0NvbnRleHQzRExheWVyUHJvZ3JhbSwgdmVydGV4U2hhZGVy
U3RyaW5nLCBncmFwaGljc0NvbnRleHQzREZyYWdtZW50U2hhZGVyU3RyaW5nKSkgeworICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0gZm9yIEdyYXBoaWNz
Q29udGV4dDNEIGxheWVycyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIFdl
YkdMTGF5ZXJDaHJvbWl1bTo6c2V0U2hhZGVyUHJvZ3JhbUlkKFdlYkdMTGF5ZXJQcm9ncmFtKTsK
KyAgICBHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW06OnNldFNoYWRlclByb2dyYW1JZChH
cmFwaGljc0NvbnRleHQzRExheWVyUHJvZ3JhbSk7CiAKICAgICBpZiAoIWNyZWF0ZUxheWVyU2hh
ZGVyKFNjcm9sbExheWVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyU3RyaW5nLCBzY3JvbGxGcmFnbWVu
dFNoYWRlclN0cmluZykpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNo
YWRlciBwcm9ncmFtIGZvciBzY3JvbGxpbmcgbGF5ZXIiKTsKQEAgLTgzOCw3ICs4MzksNyBAQCBi
b29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZEdMT2JqZWN0cygpCiAg
ICAgLy8gU3BlY2lmeSB0aGUgYXR0cmliIGxvY2F0aW9uIGZvciB0aGUgcG9zaXRpb24gYW5kIHRl
eENvb3JkIGFuZCBtYWtlIGl0IHRoZSBzYW1lIGZvciBhbGwgcHJvZ3JhbXMgdG8KICAgICAvLyBh
dm9pZCBiaW5kaW5nIHJlLWJpbmRpbmcgdGhlIHZlcnRleCBhdHRyaWJ1dGVzLgogICAgIGJpbmRD
b21tb25BdHRyaWJMb2NhdGlvbnMoQ29udGVudExheWVyUHJvZ3JhbSk7Ci0gICAgYmluZENvbW1v
bkF0dHJpYkxvY2F0aW9ucyhXZWJHTExheWVyUHJvZ3JhbSk7CisgICAgYmluZENvbW1vbkF0dHJp
YkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHQzRExheWVyUHJvZ3JhbSk7CiAgICAgYmluZENvbW1v
bkF0dHJpYkxvY2F0aW9ucyhEZWJ1Z0JvcmRlclByb2dyYW0pOwogICAgIGJpbmRDb21tb25BdHRy
aWJMb2NhdGlvbnMoU2Nyb2xsTGF5ZXJQcm9ncmFtKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5k
ZXggMTdlN2U1NzgwMzUzYzFiYTBlYzhlOTkyMmFmOWRiYThkMjgzYWMwZi4uZjU1ZjdjOGI3YTQ3
MGRjYjc2ZGY5ODQ3YmM1YjdjMGI4MWQzN2ExYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC04
OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHQqIHJvb3RMYXllckdyYXBo
aWNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyR3JhcGhpY3NDb250ZXh0Lmdl
dCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgZW51bSBTaGFkZXJQcm9ncmFtVHlwZSB7IERlYnVnQm9y
ZGVyUHJvZ3JhbSwgU2Nyb2xsTGF5ZXJQcm9ncmFtLCBDb250ZW50TGF5ZXJQcm9ncmFtLCBXZWJH
TExheWVyUHJvZ3JhbSwgTnVtU2hhZGVyUHJvZ3JhbVR5cGVzIH07CisgICAgZW51bSBTaGFkZXJQ
cm9ncmFtVHlwZSB7IERlYnVnQm9yZGVyUHJvZ3JhbSwgU2Nyb2xsTGF5ZXJQcm9ncmFtLCBDb250
ZW50TGF5ZXJQcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRExheWVyUHJvZ3JhbSwgTnVtU2hhZGVy
UHJvZ3JhbVR5cGVzIH07CiAKICAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNo
cm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IDgwYzgyMmM2
NWY3MTQ1NDg0MTY4ZGExNjZjMGFhZDY4ZmNiZDRlYzkuLmUzMGY3YzVhMDExZmVlZmNjNWE1MjRj
ZDk4MmMwNmE5Mzc2MDNlYzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzTGF5ZXJDQS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0xMDMsOSArMTAzLDggQEAgcHVibGljOgogICAgIAogICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNUb01lZGlhKFBsYXRmb3JtTGF5ZXIqKTsKLSNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXllciop
OwotI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9HcmFwaGljc0NvbnRleHQz
RChQbGF0Zm9ybUxheWVyKik7CisKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNMYXllcjsgfQogICAgIAogICAgIHZpcnR1YWwgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwpAQCAtMjU4LDkgKzI1Nyw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzSW1hZ2UoKTsKICAgICB2b2lkIHVwZGF0
ZUNvbnRlbnRzTWVkaWFMYXllcigpOwotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgdm9pZCB1
cGRhdGVDb250ZW50c1dlYkdMTGF5ZXIoKTsKLSNlbmRpZgorICAgIHZvaWQgdXBkYXRlQ29udGVu
dHNHcmFwaGljc0NvbnRleHQzRExheWVyKCk7CiAgICAgdm9pZCB1cGRhdGVDb250ZW50c1JlY3Qo
KTsKICAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5T3JpZW50YXRpb24oKTsKICAgICB2b2lkIHVwZGF0
ZU1hc2tMYXllcigpOwpAQCAtMzA1LDkgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIERpcnR5
UmVjdHNDaGFuZ2VkID0gMSA8PCAxNiwKICAgICAgICAgQ29udGVudHNJbWFnZUNoYW5nZWQgPSAx
IDw8IDE3LAogICAgICAgICBDb250ZW50c01lZGlhTGF5ZXJDaGFuZ2VkID0gMSA8PCAxOCwKLSNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKQotICAgICAgICBDb250ZW50c1dlYkdMTGF5ZXJDaGFuZ2VkID0g
MSA8PCAxOSwKLSNlbmRpZgorICAgICAgICBDb250ZW50c0dyYXBoaWNzQ29udGV4dDNETGF5ZXJD
aGFuZ2VkID0gMSA8PCAxOSwKICAgICAgICAgQ29udGVudHNSZWN0Q2hhbmdlZCA9IDEgPDwgMjAs
CiAgICAgICAgIEdlb21ldHJ5T3JpZW50YXRpb25DaGFuZ2VkID0gMSA8PCAyMSwKICAgICAgICAg
TWFza0xheWVyQ2hhbmdlZCA9IDEgPDwgMjIsCkBAIC0zMzIsMTAgKzMyNyw4IEBAIHByaXZhdGU6
CiAgICAgZW51bSBDb250ZW50c0xheWVyUHVycG9zZSB7CiAgICAgICAgIE5vQ29udGVudHNMYXll
ciA9IDAsCiAgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JJbWFnZSwKLSAgICAgICAgQ29udGVudHNM
YXllckZvck1lZGlhCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAgICAgICAgLCBDb250ZW50c0xh
eWVyRm9yV2ViR0wKLSNlbmRpZgorICAgICAgICBDb250ZW50c0xheWVyRm9yTWVkaWEsCisgICAg
ICAgIENvbnRlbnRzTGF5ZXJGb3JHcmFwaGljc0NvbnRleHQzRAogICAgIH07CiAgICAgCiAgICAg
Q29udGVudHNMYXllclB1cnBvc2UgbV9jb250ZW50c0xheWVyUHVycG9zZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbSBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQppbmRleCA5ZjFhYzgz
MzhmOWJkYzE0OWFhM2Q4OWNhZDM1ZjMxZjM0NDdjODM3Li5kMjdmMzVjYTEwZDNkYjcwYmFmZWI1
ZGEyYjRjOTIyZmExNDhiOTI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0xheWVyQ0EubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NMYXllckNBLm1tCkBAIC05MTcsMTAgKzkxNyw4IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNBOjpjb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoKQogICAgIGlmIChtX3Vu
Y29tbWl0dGVkQ2hhbmdlcyAmIENvbnRlbnRzTWVkaWFMYXllckNoYW5nZWQpIC8vIE5lZWRzIHRv
IGhhcHBlbiBiZWZvcmUgQ2hpbGRyZW5DaGFuZ2VkCiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzTWVk
aWFMYXllcigpOwogICAgIAotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgaWYgKG1fdW5jb21t
aXR0ZWRDaGFuZ2VzICYgQ29udGVudHNXZWJHTExheWVyQ2hhbmdlZCkgLy8gTmVlZHMgdG8gaGFw
cGVuIGJlZm9yZSBDaGlsZHJlbkNoYW5nZWQKLSAgICAgICAgdXBkYXRlQ29udGVudHNXZWJHTExh
eWVyKCk7Ci0jZW5kaWYKKyAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBDb250ZW50c0dy
YXBoaWNzQ29udGV4dDNETGF5ZXJDaGFuZ2VkKSAvLyBOZWVkcyB0byBoYXBwZW4gYmVmb3JlIENo
aWxkcmVuQ2hhbmdlZAorICAgICAgICB1cGRhdGVDb250ZW50c0dyYXBoaWNzQ29udGV4dDNETGF5
ZXIoKTsKICAgICAKICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBCYWNrZ3JvdW5kQ29s
b3JDaGFuZ2VkKSAgLy8gTmVlZHMgdG8gaGFwcGVuIGJlZm9yZSBDaGlsZHJlbkNoYW5nZWQsIGFu
ZCBhZnRlciB1cGRhdGluZyBpbWFnZSBvciB2aWRlbwogICAgICAgICB1cGRhdGVMYXllckJhY2tn
cm91bmRDb2xvcigpOwpAQCAtMTM5NiwxOCArMTM5NCwxNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6dXBkYXRlQ29udGVudHNNZWRpYUxheWVyKCkKICAgICB9CiB9CiAKLSNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzV2ViR0xMYXllcigp
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNHcmFwaGljc0NvbnRleHQzRExh
eWVyKCkKIHsKLSAgICAvLyBXZWJHTExheWVyIHdhcyBzZXQgYXMgbV9jb250ZW50c0xheWVyLCBh
bmQgd2lsbCBnZXQgcGFyZW50ZWQgaW4gdXBkYXRlU3VibGF5ZXJMaXN0KCkuCisgICAgLy8gR3Jh
cGhpY3NDb250ZXh0M0RMYXllciB3YXMgc2V0IGFzIG1fY29udGVudHNMYXllciwgYW5kIHdpbGwg
Z2V0IHBhcmVudGVkIGluIHVwZGF0ZVN1YmxheWVyTGlzdCgpLgogICAgIGlmIChtX2NvbnRlbnRz
TGF5ZXIpIHsKICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKG1fY29udGVudHNMYXllci5nZXQo
KSk7CiAgICAgICAgIFttX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKICAg
ICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgfQogfQotI2VuZGlmCi0gICAgCisKIHZv
aWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3QoKQogewogICAgIGlmICghbV9j
b250ZW50c0xheWVyKQpAQCAtMTcyMiwyMiArMTcxOCwyMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6cGF1c2VBbmltYXRpb25PbkxheWVyKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29u
c3QgUwogICAgIH0KIH0KIAotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi12b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6c2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5ZXIqIHdlYmdsTGF5ZXIpCit2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0dyYXBoaWNzQ29udGV4dDNEKFBsYXRmb3Jt
TGF5ZXIqIGdyYXBoaWNzQ29udGV4dDNETGF5ZXIpCiB7Ci0gICAgaWYgKHdlYmdsTGF5ZXIgPT0g
bV9jb250ZW50c0xheWVyKQorICAgIGlmIChncmFwaGljc0NvbnRleHQzRExheWVyID09IG1fY29u
dGVudHNMYXllcikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBtX2NvbnRlbnRzTGF5
ZXIgPSB3ZWJnbExheWVyOworICAgIG1fY29udGVudHNMYXllciA9IGdyYXBoaWNzQ29udGV4dDNE
TGF5ZXI7CiAgICAgaWYgKG1fY29udGVudHNMYXllciAmJiBbbV9jb250ZW50c0xheWVyLmdldCgp
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0TGF5ZXJPd25lcjopXSkKICAgICAgICAg
WyhpZCltX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgc2V0TGF5ZXJPd25lcjp0aGlzXTsKICAgICAKLSAg
ICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gd2ViZ2xMYXllciA/IENvbnRlbnRzTGF5ZXJGb3JX
ZWJHTCA6IE5vQ29udGVudHNMYXllcjsKKyAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gZ3Jh
cGhpY3NDb250ZXh0M0RMYXllciA/IENvbnRlbnRzTGF5ZXJGb3JHcmFwaGljc0NvbnRleHQzRCA6
IE5vQ29udGVudHNMYXllcjsKIAogICAgIG5vdGVTdWJsYXllcnNDaGFuZ2VkKCk7Ci0gICAgbm90
ZUxheWVyUHJvcGVydHlDaGFuZ2VkKENvbnRlbnRzV2ViR0xMYXllckNoYW5nZWQpOworICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChDb250ZW50c0dyYXBoaWNzQ29udGV4dDNETGF5ZXJDaGFu
Z2VkKTsKIH0KLSNlbmRpZgogICAgIAogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlcGFpbnRMYXll
ckRpcnR5UmVjdHMoKQogewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
aW5kZXggMGU1OTMzZTQ1YTgzOTY1MWIxMzhjNTA2OGY1NGU0ZGM4ZmE5Y2ZlNy4uNTk0ZDc0YjYz
ZTQ2OGEzMmQyODA0NGU2ZmQxZDJiYWFmMjc2Y2M4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCkBAIC0yOCwxMyArMjgsMTIgQEAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCi0jaWYg
RU5BQkxFKDNEX0NBTlZBUykgICAgCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgi
Ci0jZW5kaWYKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCkBAIC02
NiwxMSArNjUsMTQgQEAgc3RhdGljIGJvb2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQo
Y29uc3QgUmVuZGVyT2JqZWN0Kik7CiBzdGF0aWMgYm9vbCBoYXNCb3hEZWNvcmF0aW9uc09yQmFj
a2dyb3VuZEltYWdlKGNvbnN0IFJlbmRlclN0eWxlKik7CiBzdGF0aWMgSW50UmVjdCBjbGlwQm94
KFJlbmRlckJveCogcmVuZGVyZXIpOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXMzRENhbnZhcyhS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGlubGluZSBib29sIGlzQWNjZWxlcmF0ZWRD
YW52YXMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAg
ICAKLSAgICBpZiAocmVuZGVyZXItPmlzQ2FudmFzKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRlcmVyLT5ub2RlKCkpLT5pczNEKCk7CisjaWYg
RU5BQkxFKDNEX0NBTlZBUykgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyAgICBp
ZiAocmVuZGVyZXItPmlzQ2FudmFzKCkpIHsKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4ocmVuZGVyZXItPm5vZGUoKSk7
CisgICAgICAgIGlmIChDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5y
ZW5kZXJpbmdDb250ZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNBY2NlbGVy
YXRlZCgpOworICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHJlbmRlcmVyKTsKICNlbmRp
ZgpAQCAtMjUyLDEyICsyNTQsMTMgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdy
YXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkKICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRD
b250ZW50c1RvTWVkaWEobWVkaWFFbGVtZW50LT5wbGF0Zm9ybUxheWVyKCkpOwogICAgIH0KICNl
bmRpZgotI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAotICAgIGVsc2UgaWYgKGlzM0RDYW52YXMo
cmVuZGVyZXIoKSkpIHsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSB8fCBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQorICAgIGVsc2UgaWYgKGlzQWNjZWxlcmF0ZWRDYW52YXMocmVuZGVyZXIo
KSkpIHsKICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhU
TUxDYW52YXNFbGVtZW50Kj4ocmVuZGVyZXIoKS0+bm9kZSgpKTsKLSAgICAgICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0
Kj4oY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOwotICAgICAgICBpZiAoY29udGV4dC0+Z3Jh
cGhpY3NDb250ZXh0M0QoKS0+cGxhdGZvcm1MYXllcigpKQotICAgICAgICAgICAgbV9ncmFwaGlj
c0xheWVyLT5zZXRDb250ZW50c1RvV2ViR0woY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
cGxhdGZvcm1MYXllcigpKTsKKyAgICAgICAgaWYgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpKQorICAgICAgICAgICAgICAgIGlmIChQbGF0Zm9ybUxh
eWVyKiBwbCA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIoKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvR3JhcGhp
Y3NDb250ZXh0M0QocGwpOwogICAgIH0KICNlbmRpZgogCkBAIC03NTYsOCArNzU5LDEyIEBAIGJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb250YWluc1BhaW50ZWRDb250ZW50KCkgY29uc3QKIAog
ICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBvcHRpbWl6ZSBjYXNlcyB3aGVyZSB0aGUgaW1hZ2UsIHZp
ZGVvIG9yIGNhbnZhcyBpcyBrbm93biB0byBmaWxsIHRoZSBib3JkZXIgYm94IGVudGlyZWx5LAog
ICAgIC8vIGFuZCBzZXQgYmFja2dyb3VuZCBjb2xvciBvbiB0aGUgbGF5ZXIgaW4gdGhhdCBjYXNl
LCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYmFja2luZyBzdG9yZSBhbmQgcGFpbnRpbmcuCi0gICAg
aWYgKHJlbmRlcmVyKCktPmlzVmlkZW8oKSB8fCBpczNEQ2FudmFzKHJlbmRlcmVyKCkpKQorICAg
IGlmIChyZW5kZXJlcigpLT5pc1ZpZGVvKCkpCiAgICAgICAgIHJldHVybiBoYXNCb3hEZWNvcmF0
aW9uc09yQmFja2dyb3VuZChyZW5kZXJlcigpKTsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSB8fCBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgIGlmIChpc0FjY2VsZXJhdGVkQ2FudmFz
KHJlbmRlcmVyKCkpKQorICAgICAgICByZXR1cm4gaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91
bmQocmVuZGVyZXIoKSk7CisjZW5kaWYKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNzc3LDgg
Kzc4NCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJlckNvbnRlbnRDaGFuZ2Vk
KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAot
ICAgIGlmIChpczNEQ2FudmFzKHJlbmRlcmVyKCkpKSB7CisjaWYgRU5BQkxFKDNEX0NBTlZBUykg
fHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyAgICBpZiAoaXNBY2NlbGVyYXRlZENh
bnZhcyhyZW5kZXJlcigpKSkgewogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRz
TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3
MDQ4YjhlMWY4YmJmMGMzYjA4NjlmOGU1ZDNmYzQ4YjQ2OGFkMjE1Li44MDFkNzkwNjU0YTMwMzg4
NDA1ZTI5NjY0NDZhNmNkMzRlMjhkY2JlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAxMC0wOC0wNSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbXBvc2l0aW5nIHNo
b3VsZCBiZSBleHBvc2VkIGluIHRlcm1zIG9mIEdyYXBoaWNzQ29udGV4dDNELCBub3QgV2ViR0wg
c3BlY2lmaWNhbGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00MzU4OQorCisgICAgICAgIEluaXRpYWxpemVzIHRoZSBwbGF0Zm9ybUxheWVyIGFzIGEg
R3JhcGhpY3MzRExheWVyQ2hyb21pdW0sIG5vdCBhIFdlYkdMTGF5ZXJDaHJvbWl1bS4KKyAgICAg
ICAgVGhlIGxheWVyIGl0c2VsZiBpc24ndCBXZWJHTC1zcGVjaWZpYy4KKworICAgICAgICAqIHNy
Yy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIpOgorCiAyMDEwLTA4LTA0ICBLZW5uZXRoIFJ1c3Nl
bGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXpr
b3YuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCmluZGV4IGQ2YWQx
YTM0ZWM0OTViNDQwOWU1M2ZmY2QwMjM1NmY5MjAxZjdhZTUuLjRhMTQxZGMyYjY3ZmUwNDE3ZWJl
OGUzZjU4MjFkNTBiNjUxNjE2ZjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250
ZXh0M0QuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVk
ZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkhUTUxDYW52
YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCkBAIC00Niw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiSW50MzJBcnJheS5oIgog
I2luY2x1ZGUgIkludDhBcnJheS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKLSNpbmNsdWRl
ICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaCIKICNpbmNsdWRl
ICJXZWJLaXQuaCIKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJl
VGV4dHVyZSgpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFdlYkdM
TGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIEdyYXBoaWNzQ29udGV4
dDNETGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCiAgICAgYm9v
bCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CiAKQEAgLTMwNCw3ICszMDQsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIE93blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiBtX2lt
cGw7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFJlZlB0cjxXZWJHTExh
eWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXllcjsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0RMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5nTGF5ZXI7CiAjZW5kaWYKICNpZiBQTEFU
Rk9STShTS0lBKQogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBDYW52YXMn
cyBiYWNraW5nIHN0b3JlIGRvbid0CkBAIC0zNjUsNyArMzY1LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjppbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzLAogICAgIG1faW1wbC5zZXQod2ViQ29udGV4dCk7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0gICAgbV9jb21wb3NpdGluZ0xheWVyID0gV2ViR0xMYXllckNocm9t
aXVtOjpjcmVhdGUoMCk7CisgICAgbV9jb21wb3NpdGluZ0xheWVyID0gR3JhcGhpY3NDb250ZXh0
M0RMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTM4Niw3ICszODYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnByZXBh
cmVUZXh0dXJlKCkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLVdlYkdM
TGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1MYXllcigp
IGNvbnN0CitHcmFwaGljc0NvbnRleHQzRExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbXBvc2l0
aW5nTGF5ZXIuZ2V0KCk7CiB9CkBAIC0xMDQ2LDkgKzEwNDYsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25z
dAogewotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSogd2ViR0xMYXllciA9IG1faW50ZXJuYWwtPnBs
YXRmb3JtTGF5ZXIoKTsKLSAgICB3ZWJHTExheWVyLT5zZXRDb250ZXh0KHRoaXMpOwotICAgIHJl
dHVybiB3ZWJHTExheWVyOworICAgIEdyYXBoaWNzQ29udGV4dDNETGF5ZXJDaHJvbWl1bSogZ3Jh
cGhpY3NDb250ZXh0M0RMYXllciA9IG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBn
cmFwaGljc0NvbnRleHQzRExheWVyLT5zZXRDb250ZXh0KHRoaXMpOworICAgIHJldHVybiBncmFw
aGljc0NvbnRleHQzRExheWVyOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63757</attachid>
            <date>2010-08-06 13:40:42 -0700</date>
            <delta_ts>2010-08-06 14:49:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43589-20100806134039.patch</filename>
            <type>text/plain</type>
            <size>27746</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTlhNzM1NjIzYTY4YjZjZTIzNDZmOTQxNzE1OTEwYWRlNjg1YmE1Ni4uNTI3NjM0NDI3Njk5Y2Q3
YWZmZTA4NjdhMDk0NmIyODlkOTAwZjkwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMC0wOC0wNSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbXBvc2l0ZWQgY2FudmFzIHNob3VsZCBiZSB0
cmVhdGVkIHRoZSBzYW1lIGJ5IHRoZSBjb21wb3NpdG9yIGFuZCBub3QgYmUgV2ViR0wgc3BlY2lm
aWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNTg5
CisKKyAgICAgICAgVGhpcyB0cmVhdHMgYWxsIEdyYXBoaWNzQ29udGV4dDNELWJhY2tlZCBsYXll
cnMgdGhlIHNhbWUgaW5zdGVhZCBvZiBzcGVjaWFsIGNhc2luZyBXZWJHTC4KKyAgICAgICAgVGhl
IGNyb3NzLXBsYXRmb3JtIGNoYW5nZSBpcyB0byByZW5hbWUgR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNUb1dlYkdMKCkgdG8KKyAgICAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0Nh
bnZhcygpIGFuZCB0byByZW5hbWUgYWxsIGltcGxlbWVudGF0aW9ucy4KKworICAgICAgICBUaGlz
IHBhdGNoIGFsc28gcmVuYW1lcyB0aGUgY2hyb21pdW0gY2xhc3MgdXNlZCBmb3IgYWNjZWxlcmF0
aW5nIHRoZXNlIGxheWVycy4KKworICAgICAgICBDcm9zcyBwbGF0Zm9ybSBjaGFuZ2VzOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Rv
Q2FudmFzKToKKyAgICAgICAgICAgIFJlbmFtZSB0aGUgZnVuY3Rpb24gb24gdGhlIGJhc2UgY2xh
c3MuIEdyYXBoaWNzTGF5ZXJDQSBhbmQgR3JhcGhpY3NMYXllckNocm9taXVtIGltcGxlbWVudCB0
aGlzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aXNBY2NlbGVyYXRlZENhbnZhcyk6CisgICAgICAgICAgICBIZWxwZXIgZnVu
Y3Rpb24gdG8gc2VlIGlmIGEgcmVuZGVyZXIgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIGxheWVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRhaW5zUGFpbnRlZENvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJlckNvbnRlbnRDaGFuZ2VkKToKKyAg
ICAgICBDaHJvbWl1bSBzcGVjaWZpYyBjaGFuZ2VzOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNMYXllckNocm9taXVtOjpDYW52YXNMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpvd25zVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpzaGFkZXJQcm9ncmFtSWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6c2V0U2hhZGVyUHJvZ3JhbUlkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c05l
ZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dENvbnRlbnRzVG9DYW52YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNocm9taXVtOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6IFJlbW92ZWQuCisgICAg
ICAgIE1hYyBzcGVjaWZpYyBjaGFuZ2VzOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpjb21taXRMYXllckNoYW5nZXNCZWZv
cmVTdWJsYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjp1cGRhdGVD
b250ZW50c0NhbnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6
c2V0Q29udGVudHNUb0NhbnZhcyk6CisKIDIwMTAtMDgtMDUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggYmFkMTIzZWUyMzM3YjZhOWUwMjZiNDRlYTJlMWFjNDZmYTNkMTM4OS4uYzM3ZGU1NjUxMDk2
MmY5YmNmZDc4NGVmODdjM2E2NmZlYmJjYmQ5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIxNzQsNiArMjE3NCw4IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9t
aXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNo
ZUNocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udENhY2hlTGludXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwJywKQEAgLTIyMjEsOCArMjIyMyw2IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1
bi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9W
aWRlb0xheWVyQ2hyb21pdW0uaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmgKaW5kZXggYTU4MTlmNDlkOWFiYjYxNThkYTFkOTEzZDM2OTFlNGIw
ZjJjZWIwZi4uMGY3NGNkNWNiMzM4NWVlN2JiNWE2ODgwMmI3YWZjMjk3ODdmZjgwZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTI5OCw5ICsyOTgsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopIHsg
fSAvLyB2aWRlbyBvciBwbHVnLWluCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzQmFja2dy
b3VuZENvbG9yKGNvbnN0IENvbG9yJikgeyB9Ci0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5ZXIqKSB7IH0KLSNlbmRp
ZgorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKSB7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICAvLyBDYWxsYmFjayBmcm9tIHRoZSB1bmRlcmx5aW5nIGdyYXBoaWNzIHN5
c3RlbSB0byBkcmF3IGxheWVyIGNvbnRlbnRzLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcApzaW1pbGFyaXR5
IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKcmVuYW1lIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZWJkOWViZTYxNjA4ZDIz
ZWRkNGYwYTIwZmM1NjU4NGYzODlhZDhkNi4uZjI5MGU2ODBkMzA5MDlmOTdlMzQ1NTNhNTM3ODVj
NDkxOGQyYjg4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMyLDIxICszMiwyMSBAQAogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiV2ViR0xMYXllckNo
cm9taXVtLmgiCisjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi11bnNpZ25lZCBXZWJHTExheWVyQ2hyb21pdW06Om1fc2hhZGVyUHJvZ3Jh
bUlkID0gMDsKK3Vuc2lnbmVkIENhbnZhc0xheWVyQ2hyb21pdW06Om1fc2hhZGVyUHJvZ3JhbUlk
ID0gMDsKIAotUGFzc1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IFdlYkdMTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCitQYXNzUmVmUHRyPENhbnZh
c0xheWVyQ2hyb21pdW0+IENhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xMYXllckNo
cm9taXVtKG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNMYXllckNocm9t
aXVtKG93bmVyKSk7CiB9CiAKLVdlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9taXVt
KEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCitDYW52YXNMYXllckNocm9taXVtOjpDYW52
YXNMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBMYXll
ckNocm9taXVtKG93bmVyKQogICAgICwgbV9jb250ZXh0KDApCiAgICAgLCBtX3RleHR1cmVJZCgw
KQpAQCAtNTQsMTIgKzU0LDEyIEBAIFdlYkdMTGF5ZXJDaHJvbWl1bTo6V2ViR0xMYXllckNocm9t
aXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiB7CiB9CiAKLXVuc2lnbmVkIFdlYkdM
TGF5ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKCkKK3Vuc2lnbmVkIENhbnZhc0xheWVyQ2hyb21pdW06
OnRleHR1cmVJZCgpCiB7CiAgICAgcmV0dXJuIG1fdGV4dHVyZUlkOwogfQogCi12b2lkIFdlYkdM
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJZCkK
K3ZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVk
IHRleHR1cmVJZCkKIHsKICAgICBBU1NFUlQodGV4dHVyZUlkID09IG1fdGV4dHVyZUlkKTsKICAg
ICBBU1NFUlQobV9jb250ZXh0KTsKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBXZWJHTExheWVyQ2hy
b21pdW06OnVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpCiAgICAgfQog
fQogCi12b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKK3ZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChj
b25zdCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKICAgICBtX2NvbnRleHQgPSBjb25z
dF9jYXN0PEdyYXBoaWNzQ29udGV4dDNEKj4oY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaApzaW1p
bGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCnJlbmFtZSB0byBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAppbmRleCBhYmQwYzkzYzNiODM1
ODc3ZmQ4ZGQ3NzA4ZjJiYTU5Y2VkZGZmNDhkLi5hMDAyNWE0NmRkODA5ZDQzNjcxNDgyOTNhNDNk
ZWYzYjg0ZGQxZjdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCkBAIC0yOSw4ICsyOSw4IEBACiAgKi8KIAog
Ci0jaWZuZGVmIFdlYkdMTGF5ZXJDaHJvbWl1bV9oCi0jZGVmaW5lIFdlYkdMTGF5ZXJDaHJvbWl1
bV9oCisjaWZuZGVmIENhbnZhc0xheWVyQ2hyb21pdW1faAorI2RlZmluZSBDYW52YXNMYXllckNo
cm9taXVtX2gKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIApAQCAtNDAsMTAg
KzQwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CiAKLS8vIEEgTGF5ZXIgdGhhdCBjb250YWlucyBhIFdlYkdMIGVsZW1lbnQuCi1jbGFzcyBXZWJH
TExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CisvLyBBIExheWVyIGNvbnRh
aW5pbmcgYSBXZWJHTCBvciBhY2NlbGVyYXRlZCAyZCBjYW52YXMKK2NsYXNzIENhbnZhc0xheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lciA9IDApOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+
IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CiAgICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogICAgIHZpcnR1YWwgYm9v
bCBvd25zVGV4dHVyZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkKTsKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIHNldFNoYWRlclByb2dyYW1JZCh1bnNpZ25lZCBzaGFkZXJQcm9ncmFtSWQp
IHsgbV9zaGFkZXJQcm9ncmFtSWQgPSBzaGFkZXJQcm9ncmFtSWQ7IH0KIAogcHJpdmF0ZToKLSAg
ICBXZWJHTExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAg
ZXhwbGljaXQgQ2FudmFzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KTsKICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgIHVuc2lnbmVkIG1fdGV4
dHVyZUlkOwogICAgIGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cAppbmRleCBlODk1Y2VlMDlhNjBkYTUxNzQ3NzQ2NWU5NzM3ZmVkMjFhZTliYjFkLi4xZDY3ODU3
OWI0NWFiZDg3MGRjODc3MzEwNTY2YTUzODZhZGNiOTJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC01Myw3ICs1Myw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgot
I2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgorCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KQEAgLTI4NSw2ICsyODUsMTEgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKICAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRl
bnRzTmVlZHNEaXNwbGF5KCkKK3sKKyAgICBpZiAobV9jb250ZW50c0xheWVyKQorICAgICAgICBt
X2NvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworfQogdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQpA
QCAtMzM0LDE5ICszMzksMTcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwog
fQogCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpz
ZXRDb250ZW50c1RvV2ViR0woUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKK3ZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIpCiB7CiAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKICAgICBp
ZiAocGxhdGZvcm1MYXllcikgewotICAgICAgICBpZiAoIW1fY29udGVudHNMYXllci5nZXQoKSB8
fCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlICE9IENvbnRlbnRzTGF5ZXJGb3JXZWJHTCkgewotICAg
ICAgICAgICAgV2ViR0xMYXllckNocm9taXVtKiB3ZWJHTExheWVyID0gc3RhdGljX2Nhc3Q8V2Vi
R0xMYXllckNocm9taXVtKj4ocGxhdGZvcm1MYXllcik7Ci0gICAgICAgICAgICBzZXR1cENvbnRl
bnRzTGF5ZXIod2ViR0xMYXllcik7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSB3ZWJH
TExheWVyOwotICAgICAgICAgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IENvbnRlbnRzTGF5
ZXJGb3JXZWJHTDsKKyAgICAgICAgcGxhdGZvcm1MYXllci0+c2V0T3duZXIodGhpcyk7CisgICAg
ICAgIGlmICghbV9jb250ZW50c0xheWVyLmdldCgpIHx8IG1fY29udGVudHNMYXllclB1cnBvc2Ug
IT0gQ29udGVudHNMYXllckZvckNhbnZhcykgeworICAgICAgICAgICAgc2V0dXBDb250ZW50c0xh
eWVyKHBsYXRmb3JtTGF5ZXIpOworICAgICAgICAgICAgbV9jb250ZW50c0xheWVyID0gcGxhdGZv
cm1MYXllcjsKKyAgICAgICAgICAgIG1fY29udGVudHNMYXllclB1cnBvc2UgPSBDb250ZW50c0xh
eWVyRm9yQ2FudmFzOwogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgfQotICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXRPd25lcih0aGlzKTsKICAgICAgICAgcGxh
dGZvcm1MYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVj
dCgpOwogICAgIH0gZWxzZSB7CkBAIC0zNjEsNyArMzY0LDYgQEAgdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnNldENvbnRlbnRzVG9XZWJHTChQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KQogICAgIGlmIChjaGlsZHJlbkNoYW5nZWQpCiAgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgp
OwogfQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1Rv
TWVkaWEoUGxhdGZvcm1MYXllciogbGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAppbmRleCBj
ZDVlNDc5OWFiNGYwMzFhNDE4MzEyMDBlOGE1OGQyNzkyMGUzNDIwLi45ZGZmNjZhMDc1Y2MzMGE1
ODQ2YjE0NmExNjUxODQ4YjZmZWRhZjkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKQEAgLTgxLDEy
ICs4MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1RvV2ViR0woUGxhdGZvcm1MYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0OwogCkBAIC0xMzcsNyArMTM4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgTm9Db250ZW50c0xheWVyID0gMCwKICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdl
LAogICAgICAgICBDb250ZW50c0xheWVyRm9yVmlkZW8sCi0gICAgICAgIENvbnRlbnRzTGF5ZXJG
b3JXZWJHTAorICAgICAgICBDb250ZW50c0xheWVyRm9yQ2FudmFzCiAgICAgfTsKIAogICAgIENv
bnRlbnRzTGF5ZXJQdXJwb3NlIG1fY29udGVudHNMYXllclB1cnBvc2U7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAKaW5kZXggZTk4YTY1YTJjMjM2NjJiNjg2NTA4ODNlOWNhOGU1NTQ2ZDgxYzkzNC4u
ODlkODkwN2U1OTNhYzFlMTcwNTUxNWZhZTcxYjFkMmQ2Mzg3Yzk0NiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcApAQCAtMzQsMTEgKzM0LDExIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAi
Q2FudmFzTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdMRVMyQ29udGV4dC5oIgogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybUxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21p
dW0uaCIKICNpZiBQTEFURk9STShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAgLTY5MSw2ICs2OTEsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKExheWVyQ2hyb21pdW0qIGxheWVyKQog
ICAgICAgICBpZiAobGF5ZXItPmNvbnRlbnRzRGlydHkoKSkgewogICAgICAgICAgICAgLy8gVXBk
YXRlIHRoZSBiYWNraW5nIHRleHR1cmUgY29udGVudHMgZm9yIGFueSBkaXJ0eSBwb3J0aW9uIG9m
IHRoZSBsYXllci4KICAgICAgICAgICAgIGxheWVyLT51cGRhdGVUZXh0dXJlQ29udGVudHModGV4
dHVyZUlkKTsKKyAgICAgICAgICAgIG1fZ2xlczJDb250ZXh0LT5tYWtlQ3VycmVudCgpOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKGxheWVyLT5kb3VibGVTaWRlZCgpKQpAQCAtNzcwLDkgKzc3
MSw5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkR0xPYmpl
Y3RzKCkKICAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xv
ci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KTsgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwogCi0gICAgLy8gV2Vi
R0wgbGF5ZXJzIG5lZWQgdG8gYmUgZmxpcHBlZCB2ZXJ0aWNhbGx5IGFuZCB0aGVpciBjb2xvcnMg
c2hvdWxkbid0IGJlCisgICAgLy8gQ2FudmFzIGxheWVycyBuZWVkIHRvIGJlIGZsaXBwZWQgdmVy
dGljYWxseSBhbmQgdGhlaXIgY29sb3JzIHNob3VsZG4ndCBiZQogICAgIC8vIHN3aXp6bGVkLgot
ICAgIGNoYXIgd2ViR0xGcmFnbWVudFNoYWRlclN0cmluZ1tdID0KKyAgICBjaGFyIGNhbnZhc0Zy
YWdtZW50U2hhZGVyU3RyaW5nW10gPQogICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgogICAgICAgICAidmFyeWluZyB2ZWMyIHZf
dGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgogICAgICAgICAidW5pZm9y
bSBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgIFxuIgpAQCAtODE5
LDExICs4MjAsMTEgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFy
ZWRHTE9iamVjdHMoKQogICAgIH0KICAgICBMYXllckNocm9taXVtOjpzZXRTaGFkZXJQcm9ncmFt
SWQoQ29udGVudExheWVyUHJvZ3JhbSk7CiAKLSAgICBpZiAoIWNyZWF0ZUxheWVyU2hhZGVyKFdl
YkdMTGF5ZXJQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHdlYkdMRnJhZ21lbnRTaGFkZXJT
dHJpbmcpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJv
Z3JhbSBmb3IgV2ViR0wgbGF5ZXJzIik7CisgICAgaWYgKCFjcmVhdGVMYXllclNoYWRlcihDYW52
YXNMYXllclByb2dyYW0sIHZlcnRleFNoYWRlclN0cmluZywgY2FudmFzRnJhZ21lbnRTaGFkZXJT
dHJpbmcpKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJv
Z3JhbSBmb3IgQ2FudmFzIGxheWVycyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0U2hhZGVyUHJvZ3JhbUlkKFdlYkdMTGF5ZXJQcm9n
cmFtKTsKKyAgICBDYW52YXNMYXllckNocm9taXVtOjpzZXRTaGFkZXJQcm9ncmFtSWQoQ2FudmFz
TGF5ZXJQcm9ncmFtKTsKIAogICAgIGlmICghY3JlYXRlTGF5ZXJTaGFkZXIoU2Nyb2xsTGF5ZXJQ
cm9ncmFtLCB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIHNjcm9sbEZyYWdtZW50U2hhZGVyU3RyaW5nKSkg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0gZm9y
IHNjcm9sbGluZyBsYXllciIpOwpAQCAtODM4LDcgKzgzOSw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkKICAgICAvLyBTcGVjaWZ5IHRo
ZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRoZSBwb3NpdGlvbiBhbmQgdGV4Q29vcmQgYW5kIG1ha2Ug
aXQgdGhlIHNhbWUgZm9yIGFsbCBwcm9ncmFtcyB0bwogICAgIC8vIGF2b2lkIGJpbmRpbmcgcmUt
YmluZGluZyB0aGUgdmVydGV4IGF0dHJpYnV0ZXMuCiAgICAgYmluZENvbW1vbkF0dHJpYkxvY2F0
aW9ucyhDb250ZW50TGF5ZXJQcm9ncmFtKTsKLSAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb25z
KFdlYkdMTGF5ZXJQcm9ncmFtKTsKKyAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb25zKENhbnZh
c0xheWVyUHJvZ3JhbSk7CiAgICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9ucyhEZWJ1Z0JvcmRl
clByb2dyYW0pOwogICAgIGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbnMoU2Nyb2xsTGF5ZXJQcm9n
cmFtKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggMTdlN2U1NzgwMzUzYzFiYTBlYzhlOTky
MmFmOWRiYThkMjgzYWMwZi4uZTQ0NzRiNWEwMjUxZDUzYTA3M2Q0Yjc1OTBhMDU3ZDlmOTFiNjYz
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICBH
cmFwaGljc0NvbnRleHQqIHJvb3RMYXllckdyYXBoaWNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fcm9vdExheWVyR3JhcGhpY3NDb250ZXh0LmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgZW51
bSBTaGFkZXJQcm9ncmFtVHlwZSB7IERlYnVnQm9yZGVyUHJvZ3JhbSwgU2Nyb2xsTGF5ZXJQcm9n
cmFtLCBDb250ZW50TGF5ZXJQcm9ncmFtLCBXZWJHTExheWVyUHJvZ3JhbSwgTnVtU2hhZGVyUHJv
Z3JhbVR5cGVzIH07CisgICAgZW51bSBTaGFkZXJQcm9ncmFtVHlwZSB7IERlYnVnQm9yZGVyUHJv
Z3JhbSwgU2Nyb2xsTGF5ZXJQcm9ncmFtLCBDb250ZW50TGF5ZXJQcm9ncmFtLCBDYW52YXNMYXll
clByb2dyYW0sIE51bVNoYWRlclByb2dyYW1UeXBlcyB9OwogCiAgICAgdm9pZCB1cGRhdGVMYXll
cnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXJlbnRNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEludFJlY3QmIHZpc2libGVS
ZWN0KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NMYXllckNBLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVy
Q0EuaAppbmRleCA4MGM4MjJjNjVmNzE0NTQ4NDE2OGRhMTY2YzBhYWQ2OGZjYmQ0ZWM5Li5lZTcw
MzM4MDdmZGM0YzYzNWZhNGQzZmQzNWY5NWE4N2VmZjI4ZWQ2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaApAQCAtMTAzLDkgKzEwMyw4IEBA
IHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdl
Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9NZWRpYShQbGF0Zm9ybUxheWVyKik7
Ci0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1dl
YkdMKFBsYXRmb3JtTGF5ZXIqKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKKwogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250ZW50
c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyOyB9CiAgICAgCiAgICAgdmly
dHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CkBAIC0yNTgsOSArMjU3
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlQ29udGVudHNJbWFnZSgpOwogICAgIHZv
aWQgdXBkYXRlQ29udGVudHNNZWRpYUxheWVyKCk7Ci0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAg
ICB2b2lkIHVwZGF0ZUNvbnRlbnRzV2ViR0xMYXllcigpOwotI2VuZGlmCisgICAgdm9pZCB1cGRh
dGVDb250ZW50c0NhbnZhc0xheWVyKCk7CiAgICAgdm9pZCB1cGRhdGVDb250ZW50c1JlY3QoKTsK
ICAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5T3JpZW50YXRpb24oKTsKICAgICB2b2lkIHVwZGF0ZU1h
c2tMYXllcigpOwpAQCAtMzA1LDkgKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIERpcnR5UmVj
dHNDaGFuZ2VkID0gMSA8PCAxNiwKICAgICAgICAgQ29udGVudHNJbWFnZUNoYW5nZWQgPSAxIDw8
IDE3LAogICAgICAgICBDb250ZW50c01lZGlhTGF5ZXJDaGFuZ2VkID0gMSA8PCAxOCwKLSNpZiBF
TkFCTEUoM0RfQ0FOVkFTKQotICAgICAgICBDb250ZW50c1dlYkdMTGF5ZXJDaGFuZ2VkID0gMSA8
PCAxOSwKLSNlbmRpZgorICAgICAgICBDb250ZW50c0NhbnZhc0xheWVyQ2hhbmdlZCA9IDEgPDwg
MTksCiAgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDIwLAogICAgICAgICBHZW9t
ZXRyeU9yaWVudGF0aW9uQ2hhbmdlZCA9IDEgPDwgMjEsCiAgICAgICAgIE1hc2tMYXllckNoYW5n
ZWQgPSAxIDw8IDIyLApAQCAtMzMyLDEwICszMjcsOCBAQCBwcml2YXRlOgogICAgIGVudW0gQ29u
dGVudHNMYXllclB1cnBvc2UgewogICAgICAgICBOb0NvbnRlbnRzTGF5ZXIgPSAwLAogICAgICAg
ICBDb250ZW50c0xheWVyRm9ySW1hZ2UsCi0gICAgICAgIENvbnRlbnRzTGF5ZXJGb3JNZWRpYQot
I2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgICAgICwgQ29udGVudHNMYXllckZvcldlYkdMCi0j
ZW5kaWYKKyAgICAgICAgQ29udGVudHNMYXllckZvck1lZGlhLAorICAgICAgICBDb250ZW50c0xh
eWVyRm9yQ2FudmFzCiAgICAgfTsKICAgICAKICAgICBDb250ZW50c0xheWVyUHVycG9zZSBtX2Nv
bnRlbnRzTGF5ZXJQdXJwb3NlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NMYXllckNBLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NMYXllckNBLm1tCmluZGV4IDlmMWFjODMzOGY5YmRjMTQ5YWEzZDg5Y2FkMzVmMzFm
MzQ0N2M4MzcuLmNiNGNhNTg2Zjg5YjZhM2I2ZmRiZmU0NjRkYTNkOTU0NGNjNWM5ZTcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0KQEAg
LTkxNywxMCArOTE3LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdl
c0JlZm9yZVN1YmxheWVycygpCiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgQ29udGVu
dHNNZWRpYUxheWVyQ2hhbmdlZCkgLy8gTmVlZHMgdG8gaGFwcGVuIGJlZm9yZSBDaGlsZHJlbkNo
YW5nZWQKICAgICAgICAgdXBkYXRlQ29udGVudHNNZWRpYUxheWVyKCk7CiAgICAgCi0jaWYgRU5B
QkxFKDNEX0NBTlZBUykKLSAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBDb250ZW50c1dl
YkdMTGF5ZXJDaGFuZ2VkKSAvLyBOZWVkcyB0byBoYXBwZW4gYmVmb3JlIENoaWxkcmVuQ2hhbmdl
ZAotICAgICAgICB1cGRhdGVDb250ZW50c1dlYkdMTGF5ZXIoKTsKLSNlbmRpZgorICAgIGlmICht
X3VuY29tbWl0dGVkQ2hhbmdlcyAmIENvbnRlbnRzQ2FudmFzTGF5ZXJDaGFuZ2VkKSAvLyBOZWVk
cyB0byBoYXBwZW4gYmVmb3JlIENoaWxkcmVuQ2hhbmdlZAorICAgICAgICB1cGRhdGVDb250ZW50
c0NhbnZhc0xheWVyKCk7CiAgICAgCiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgQmFj
a2dyb3VuZENvbG9yQ2hhbmdlZCkgIC8vIE5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgQ2hpbGRyZW5D
aGFuZ2VkLCBhbmQgYWZ0ZXIgdXBkYXRpbmcgaW1hZ2Ugb3IgdmlkZW8KICAgICAgICAgdXBkYXRl
TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKTsKQEAgLTEzOTYsMTggKzEzOTQsMTYgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzTWVkaWFMYXllcigpCiAgICAgfQogfQogCi0jaWYg
RU5BQkxFKDNEX0NBTlZBUykKLXZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1dl
YkdMTGF5ZXIoKQordm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzQ2FudmFzTGF5
ZXIoKQogewotICAgIC8vIFdlYkdMTGF5ZXIgd2FzIHNldCBhcyBtX2NvbnRlbnRzTGF5ZXIsIGFu
ZCB3aWxsIGdldCBwYXJlbnRlZCBpbiB1cGRhdGVTdWJsYXllckxpc3QoKS4KKyAgICAvLyBDYW52
YXNMYXllciB3YXMgc2V0IGFzIG1fY29udGVudHNMYXllciwgYW5kIHdpbGwgZ2V0IHBhcmVudGVk
IGluIHVwZGF0ZVN1YmxheWVyTGlzdCgpLgogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIpIHsKICAg
ICAgICAgc2V0dXBDb250ZW50c0xheWVyKG1fY29udGVudHNMYXllci5nZXQoKSk7CiAgICAgICAg
IFttX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKICAgICAgICAgdXBkYXRl
Q29udGVudHNSZWN0KCk7CiAgICAgfQogfQotI2VuZGlmCi0gICAgCisKIHZvaWQgR3JhcGhpY3NM
YXllckNBOjp1cGRhdGVDb250ZW50c1JlY3QoKQogewogICAgIGlmICghbV9jb250ZW50c0xheWVy
KQpAQCAtMTcyMiwyMiArMTcxOCwyMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGF1c2VBbmlt
YXRpb25PbkxheWVyKEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUwogICAgIH0K
IH0KIAotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29u
dGVudHNUb1dlYkdMKFBsYXRmb3JtTGF5ZXIqIHdlYmdsTGF5ZXIpCit2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBjYW52YXNMYXllcikKIHsK
LSAgICBpZiAod2ViZ2xMYXllciA9PSBtX2NvbnRlbnRzTGF5ZXIpCisgICAgaWYgKGNhbnZhc0xh
eWVyID09IG1fY29udGVudHNMYXllcikKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBt
X2NvbnRlbnRzTGF5ZXIgPSB3ZWJnbExheWVyOworICAgIG1fY29udGVudHNMYXllciA9IGNhbnZh
c0xheWVyOwogICAgIGlmIChtX2NvbnRlbnRzTGF5ZXIgJiYgW21fY29udGVudHNMYXllci5nZXQo
KSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldExheWVyT3duZXI6KV0pCiAgICAgICAg
IFsoaWQpbV9jb250ZW50c0xheWVyLmdldCgpIHNldExheWVyT3duZXI6dGhpc107CiAgICAgCi0g
ICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IHdlYmdsTGF5ZXIgPyBDb250ZW50c0xheWVyRm9y
V2ViR0wgOiBOb0NvbnRlbnRzTGF5ZXI7CisgICAgbV9jb250ZW50c0xheWVyUHVycG9zZSA9IGNh
bnZhc0xheWVyID8gQ29udGVudHNMYXllckZvckNhbnZhcyA6IE5vQ29udGVudHNMYXllcjsKIAog
ICAgIG5vdGVTdWJsYXllcnNDaGFuZ2VkKCk7Ci0gICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KENvbnRlbnRzV2ViR0xMYXllckNoYW5nZWQpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdl
ZChDb250ZW50c0NhbnZhc0xheWVyQ2hhbmdlZCk7CiB9Ci0jZW5kaWYKICAgICAKIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpyZXBhaW50TGF5ZXJEaXJ0eVJlY3RzKCkKIHsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDBlNTkzM2U0NWE4Mzk2NTFiMTM4YzUwNjhm
NTRlNGRjOGZhOWNmZTcuLmIzYTc5MTcyYThmYWJkOThmYjVkNmE5ODdjYWQ0M2MxY2Y2YmFhZTYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMjgsMTMgKzI4
LDEyIEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiQW5p
bWF0aW9uQ29udHJvbGxlci5oIgotI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAotI2luY2x1ZGUg
IldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgotI2VuZGlmCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJD
U1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgpAQCAtNjYsMTEgKzY1LDE0IEBAIHN0YXRpYyBib29sIGhhc0Jv
eERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlck9iamVjdCopOwogc3RhdGljIGJv
b2wgaGFzQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmRJbWFnZShjb25zdCBSZW5kZXJTdHlsZSop
Owogc3RhdGljIEludFJlY3QgY2xpcEJveChSZW5kZXJCb3gqIHJlbmRlcmVyKTsKIAotc3RhdGlj
IGlubGluZSBib29sIGlzM0RDYW52YXMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc0FjY2VsZXJhdGVkQ2FudmFzKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7
Ci0jaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCi0gICAgaWYgKHJlbmRlcmVyLT5pc0NhbnZhcygp
KQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihyZW5kZXJl
ci0+bm9kZSgpKS0+aXMzRCgpOworI2lmIEVOQUJMRSgzRF9DQU5WQVMpIHx8IEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCisgICAgaWYgKHJlbmRlcmVyLT5pc0NhbnZhcygpKSB7CisgICAg
ICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxl
bWVudCo+KHJlbmRlcmVyLT5ub2RlKCkpOworICAgICAgICBpZiAoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAgICAgICAg
cmV0dXJuIGNvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKTsKKyAgICB9CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShyZW5kZXJlcik7CiAjZW5kaWYKQEAgLTI1MiwxMiArMjU0LDEzIEBAIGJvb2wgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbigpCiAgICAg
ICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb01lZGlhKG1lZGlhRWxlbWVudC0+cGxh
dGZvcm1MYXllcigpKTsKICAgICB9CiAjZW5kaWYKLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAK
LSAgICBlbHNlIGlmIChpczNEQ2FudmFzKHJlbmRlcmVyKCkpKSB7CisjaWYgRU5BQkxFKDNEX0NB
TlZBUykgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyAgICBlbHNlIGlmIChpc0Fj
Y2VsZXJhdGVkQ2FudmFzKHJlbmRlcmVyKCkpKSB7CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRlcmVyKCktPm5v
ZGUoKSk7Ci0gICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKTsK
LSAgICAgICAgaWYgKGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIo
KSkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb1dlYkdMKGNvbnRl
eHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAgIGlmIChD
YW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0
KCkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoUGxhdGZvcm1MYXllciogcGwgPSBjb250ZXh0LT5ncmFwaGljc0NvbnRl
eHQzRCgpLT5wbGF0Zm9ybUxheWVyKCkpCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NM
YXllci0+c2V0Q29udGVudHNUb0NhbnZhcyhwbCk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTc1Niw4
ICs3NTksMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRhaW5zUGFpbnRlZENvbnRl
bnQoKSBjb25zdAogCiAgICAgLy8gRklYTUU6IHdlIGNvdWxkIG9wdGltaXplIGNhc2VzIHdoZXJl
IHRoZSBpbWFnZSwgdmlkZW8gb3IgY2FudmFzIGlzIGtub3duIHRvIGZpbGwgdGhlIGJvcmRlciBi
b3ggZW50aXJlbHksCiAgICAgLy8gYW5kIHNldCBiYWNrZ3JvdW5kIGNvbG9yIG9uIHRoZSBsYXll
ciBpbiB0aGF0IGNhc2UsIGluc3RlYWQgb2YgYWxsb2NhdGluZyBiYWNraW5nIHN0b3JlIGFuZCBw
YWludGluZy4KLSAgICBpZiAocmVuZGVyZXIoKS0+aXNWaWRlbygpIHx8IGlzM0RDYW52YXMocmVu
ZGVyZXIoKSkpCisgICAgaWYgKHJlbmRlcmVyKCktPmlzVmlkZW8oKSkKICAgICAgICAgcmV0dXJu
IGhhc0JveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKHJlbmRlcmVyKCkpOworI2lmIEVOQUJMRSgz
RF9DQU5WQVMpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisgICAgaWYgKGlzQWNj
ZWxlcmF0ZWRDYW52YXMocmVuZGVyZXIoKSkpCisgICAgICAgIHJldHVybiBoYXNCb3hEZWNvcmF0
aW9uc09yQmFja2dyb3VuZChyZW5kZXJlcigpKTsKKyNlbmRpZgogCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC03NzcsOCArNzg0LDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnJlbmRlcmVy
Q29udGVudENoYW5nZWQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgRU5BQkxFKDNE
X0NBTlZBUykgICAgCi0gICAgaWYgKGlzM0RDYW52YXMocmVuZGVyZXIoKSkpIHsKKyNpZiBFTkFC
TEUoM0RfQ0FOVkFTKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorICAgIGlmIChp
c0FjY2VsZXJhdGVkQ2FudmFzKHJlbmRlcmVyKCkpKSB7CiAgICAgICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDcwNDhiOGUxZjhiYmYwYzNiMDg2OWY4ZTVkM2ZjNDhiNDY4YWQyMTUuLjEx
M2ExOTA1ODUwZTI4MDA1MGEzYzkxMjIwN2ViNjA3YWFhMjg3YjMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDEwLTA4LTA1ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q29tcG9zaXRlZCBjYW52YXMgc2hvdWxkIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYnkgdGhlIGNvbXBv
c2l0b3IgYW5kIG5vdCBiZSBXZWJHTCBzcGVjaWZpYworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM1ODkKKworICAgICAgICBJbml0aWFsaXplcyB0aGUg
cGxhdGZvcm1MYXllciBhcyBhIENhbnZhc0xheWVyQ2hyb21pdW0sIG5vdCBhIFdlYkdMTGF5ZXJD
aHJvbWl1bS4KKyAgICAgICAgVGhlIGxheWVyIGl0c2VsZiBpc24ndCBXZWJHTC1zcGVjaWZpYy4K
KworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIpOgorCiAyMDEwLTA4LTA0
ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCmluZGV4IGQ2YWQxYTM0ZWM0OTViNDQwOWU1M2ZmY2QwMjM1NmY5MjAxZjdhZTUuLmEwMjg3
MmRhNThmYzZhOTQ1NzgxYjBjNWIxNjk1NTFmMmJmMTQxNDMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAi
Q2FudmFzTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCkBA
IC00Niw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiSW50MzJBcnJheS5oIgogI2luY2x1ZGUgIkludDhB
cnJheS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKLSNpbmNsdWRlICJXZWJHTExheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKQEAg
LTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFdlYkdMTGF5ZXJDaHJvbWl1bSog
cGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIENhbnZhc0xheWVyQ2hyb21pdW0qIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdDsKICNlbmRpZgogICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0
OwogCkBAIC0zMDQsNyArMzA0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBPd25QdHI8V2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gbV9pbXBsOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSAgICBSZWZQdHI8V2ViR0xMYXllckNocm9taXVtPiBtX2NvbXBvc2l0aW5n
TGF5ZXI7CisgICAgUmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IG1fY29tcG9zaXRpbmdMYXll
cjsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgb2YgdGhlIENhbnZhcydzIGJhY2tpbmcgc3RvcmUgZG9uJ3QKQEAgLTM2NSw3ICszNjUs
NyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpemUoR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsCiAgICAgbV9pbXBsLnNldCh3ZWJDb250ZXh0KTsK
IAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBtX2NvbXBvc2l0aW5nTGF5
ZXIgPSBXZWJHTExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBtX2NvbXBvc2l0aW5nTGF5
ZXIgPSBDYW52YXNMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAjZW5kaWYKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTM4Niw3ICszODYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnByZXBhcmVUZXh0dXJlKCkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLVdlYkdMTGF5ZXJDaHJvbWl1bSogR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZv
cm1MYXllcigpIGNvbnN0CitDYW52YXNMYXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb21wb3NpdGlu
Z0xheWVyLmdldCgpOwogfQpAQCAtMTA0Niw5ICsxMDQ2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cHJlcGFyZVRleHR1cmUoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
IFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QK
IHsKLSAgICBXZWJHTExheWVyQ2hyb21pdW0qIHdlYkdMTGF5ZXIgPSBtX2ludGVybmFsLT5wbGF0
Zm9ybUxheWVyKCk7Ci0gICAgd2ViR0xMYXllci0+c2V0Q29udGV4dCh0aGlzKTsKLSAgICByZXR1
cm4gd2ViR0xMYXllcjsKKyAgICBDYW52YXNMYXllckNocm9taXVtKiBjYW52YXNMYXllciA9IG1f
aW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBjYW52YXNMYXllci0+c2V0Q29udGV4dCh0
aGlzKTsKKyAgICByZXR1cm4gY2FudmFzTGF5ZXI7CiB9CiAjZW5kaWYKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>