<?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>45092</bug_id>
          
          <creation_ts>2010-09-02 01:05:48 -0700</creation_ts>
          <short_desc>[chromium] Accelerated Compositing: screen garbage when scrolling</short_desc>
          <delta_ts>2010-09-10 15:33:51 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Other</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Nat Duca">nduca</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fishd</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>273247</commentid>
    <comment_count>0</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-02 01:05:48 -0700</bug_when>
    <thetext>Related bug: http://code.google.com/p/chromium/issues/detail?id=52519

Chrome currently uses the bulk of the software compositor code for root layer invalidations and root layer scrolling. This leads to scrolling artefacts when multiple damage rectangles survive the paint aggregation process, as is the case with fixed layers.

The proposed fix to this is to stop the compositor from piggybacking on the software rendering path for invalidation and scrolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273606</commentid>
    <comment_count>1</comment_count>
      <attachid>66418</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-02 15:18:53 -0700</bug_when>
    <thetext>Created attachment 66418
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273700</commentid>
    <comment_count>2</comment_count>
      <attachid>66445</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-02 17:54:23 -0700</bug_when>
    <thetext>Created attachment 66445
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273702</commentid>
    <comment_count>3</comment_count>
      <attachid>66447</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-02 17:57:55 -0700</bug_when>
    <thetext>Created attachment 66447
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273821</commentid>
    <comment_count>4</comment_count>
      <attachid>66447</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-09-03 00:31:44 -0700</bug_when>
    <thetext>Comment on attachment 66447
Patch

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index fad10df2a24eb70d8cc2aee9e84b229f9c0041ab..1c487a1123a87d694f63617e87a11569265bd1f2 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,31 @@
&gt; +2010-09-02  Nat Duca  &lt;nduca@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [chromium] Accelerated Compositing: screen garbage when scrolling
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=45092
&gt; +
&gt; +        Split LayerRenderChromium::drawLayers into several different
&gt; +        functions, responsible for preparing the backbuffer, updating the
&gt; +        root texture, compositing and performing the final
&gt; +        swapbuffers. This are then used by the new
&gt; +        WebViewImpl::paintComposited rendering path.
&gt; +
&gt; +        * platform/graphics/chromium/LayerChromium.cpp:
&gt; +        (WebCore::LayerChromium::setBounds):
&gt; +        (WebCore::LayerChromium::setFrame):
&gt; +        (WebCore::LayerChromium::setNeedsDisplay):
&gt; +        (WebCore::LayerChromium::resetNeedsDisplay):
&gt; +        * platform/graphics/chromium/LayerChromium.h:
&gt; +        (WebCore::LayerChromium::dirtyRect):
&gt; +        * platform/graphics/chromium/LayerRendererChromium.cpp:
&gt; +        (WebCore::LayerRendererChromium::setRootLayerCanvasSize):
&gt; +        (WebCore::LayerRendererChromium::prepareToDrawLayers):
&gt; +        (WebCore::LayerRendererChromium::updateRootLayerTextureRect):
&gt; +        (WebCore::LayerRendererChromium::drawLayers):
&gt; +        (WebCore::LayerRendererChromium::present):
&gt; +        * platform/graphics/chromium/LayerRendererChromium.h:
&gt; +
&gt;  2010-09-02  Eric Seidel  &lt;eric@webkit.org&gt;
&gt;  
&gt;          Reviewed by Dimitri Glazkov.
&gt; diff --git a/WebCore/platform/graphics/chromium/LayerChromium.cpp b/WebCore/platform/graphics/chromium/LayerChromium.cpp
&gt; index 6519f1ff2ba1826f2e285962b0381712a46e9dcc..92ec49b5cc7f7ff8b637b6d30a124a14dc0bc3bb 100644
&gt; --- a/WebCore/platform/graphics/chromium/LayerChromium.cpp
&gt; +++ b/WebCore/platform/graphics/chromium/LayerChromium.cpp
&gt; @@ -299,10 +299,15 @@ void LayerChromium::setBounds(const IntSize&amp; size)
&gt;      if (m_bounds == size)
&gt;          return;
&gt;  
&gt; +    bool firstResize = !m_bounds.width() &amp;&amp; !m_bounds.height() &amp;&amp; size.width() &amp;&amp; size.height();
&gt; +    
&gt;      m_bounds = size;
&gt;      m_backingStoreSize = size;
&gt;  
&gt; -    setNeedsCommit();
&gt; +    if (firstResize)
&gt; +        setNeedsDisplay(FloatRect(0, 0, m_bounds.width(), m_bounds.height()));
&gt; +    else
&gt; +        setNeedsCommit();
&gt;  }
&gt;  
&gt;  void LayerChromium::setFrame(const FloatRect&amp; rect)
&gt; @@ -311,7 +316,7 @@ void LayerChromium::setFrame(const FloatRect&amp; rect)
&gt;        return;
&gt;  
&gt;      m_frame = rect;
&gt; -    setNeedsCommit();
&gt; +    setNeedsDisplay(FloatRect(0, 0, m_bounds.width(), m_bounds.height()));
&gt;  }
&gt;  
&gt;  const LayerChromium* LayerChromium::rootLayer() const
&gt; @@ -353,7 +358,6 @@ void LayerChromium::setNeedsDisplay(const FloatRect&amp; dirtyRect)
&gt;      m_contentsDirty = true;
&gt;  
&gt;      m_dirtyRect.unite(dirtyRect);
&gt; -
&gt;      setNeedsCommit();
&gt;  }
&gt;  
&gt; @@ -363,6 +367,12 @@ void LayerChromium::setNeedsDisplay()
&gt;      m_contentsDirty = true;
&gt;  }
&gt;  
&gt; +void LayerChromium::resetNeedsDisplay()
&gt; +{
&gt; +    m_dirtyRect = FloatRect();
&gt; +    m_contentsDirty = false;
&gt; +}
&gt; +
&gt;  void LayerChromium::toGLMatrix(float* flattened, const TransformationMatrix&amp; m)
&gt;  {
&gt;      flattened[0] = m.m11();
&gt; diff --git a/WebCore/platform/graphics/chromium/LayerChromium.h b/WebCore/platform/graphics/chromium/LayerChromium.h
&gt; index ba1508844ba35b3451f82cd589a653976521a08c..2d225daf5a2071babfebd6a7cf3cc05e26b39086 100644
&gt; --- a/WebCore/platform/graphics/chromium/LayerChromium.h
&gt; +++ b/WebCore/platform/graphics/chromium/LayerChromium.h
&gt; @@ -112,6 +112,8 @@ public:
&gt;  
&gt;      void setNeedsDisplay(const FloatRect&amp; dirtyRect);
&gt;      void setNeedsDisplay();
&gt; +    const FloatRect&amp; dirtyRect() const { return m_dirtyRect; }
&gt; +    void resetNeedsDisplay();
&gt;  
&gt;      void setNeedsDisplayOnBoundsChange(bool needsDisplay) { m_needsDisplayOnBoundsChange = needsDisplay; }
&gt;  
&gt; diff --git a/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp b/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
&gt; index 50338d2d5f7324e5a119c509190dfef8698b1769..af60c8edfa77bbdea3edba8e2e5fb3b68b2f7b25 100644
&gt; --- a/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
&gt; +++ b/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
&gt; @@ -109,6 +109,7 @@ void LayerRendererChromium::debugGLCall(const char* command, const char* file, i
&gt;  // Creates a canvas and an associated graphics context that the root layer will
&gt;  // render into.
&gt;  void LayerRendererChromium::setRootLayerCanvasSize(const IntSize&amp; size)
&gt; +
Please remove empty line
&gt;  {
&gt;      if (size == m_rootLayerCanvasSize)
&gt;          return;
&gt; @@ -152,8 +153,8 @@ void LayerRendererChromium::useShader(unsigned programId)
&gt;  
&gt;  // Updates the contents of the root layer texture that fall inside the updateRect
&gt;  // and re-composits all sublayers.
&gt; -void LayerRendererChromium::drawLayers(const IntRect&amp; updateRect, const IntRect&amp; visibleRect,
&gt; -                                       const IntRect&amp; contentRect, const IntPoint&amp; scrollPosition)
&gt; +void LayerRendererChromium::prepareToDrawLayers(const IntRect&amp; visibleRect, const IntRect&amp; contentRect, 
&gt; +                                                const IntPoint&amp; scrollPosition)
&gt;  {
&gt;      ASSERT(m_hardwareCompositing);
&gt;  
&gt; @@ -180,10 +181,11 @@ void LayerRendererChromium::drawLayers(const IntRect&amp; updateRect, const IntRect&amp;
&gt;      // The GL viewport covers the entire visible area, including the scrollbars.
&gt;      GLC(glViewport(0, 0, visibleRectWidth, visibleRectHeight));
&gt;  
&gt; +
Please remove newly added blank line. Here and below.

&gt;      // Bind the common vertex attributes used for drawing all the layers.
&gt;      LayerChromium::prepareForDraw(layerSharedValues());
&gt; +    
&gt;  
&gt; -    // FIXME: These calls can be made once, when the compositor context is initialized.

The FIXME comment is still valid

&gt;      GLC(glDisable(GL_DEPTH_TEST));
&gt;      GLC(glDisable(GL_CULL_FACE));
&gt;      GLC(glDepthFunc(GL_LEQUAL));
&gt; @@ -193,14 +195,12 @@ void LayerRendererChromium::drawLayers(const IntRect&amp; updateRect, const IntRect&amp;
&gt;          m_scrollPosition = scrollPosition;
&gt;  
&gt;      IntPoint scrollDelta = toPoint(scrollPosition - m_scrollPosition);
&gt; -    // Scroll only when the updateRect contains pixels for the newly uncovered region to avoid flashing.
&gt; -    if ((scrollDelta.x() &amp;&amp; updateRect.width() &gt;= abs(scrollDelta.x()) &amp;&amp; updateRect.height() &gt;= contentRect.height())
&gt; -        || (scrollDelta.y() &amp;&amp; updateRect.height() &gt;= abs(scrollDelta.y()) &amp;&amp; updateRect.width() &gt;= contentRect.width())) {
&gt; +    // Scroll the backbuffer
&gt; +    if (scrollDelta.x() || scrollDelta.y()) {
&gt;          // Scrolling works as follows: We render a quad with the current root layer contents
&gt;          // translated by the amount the page has scrolled since the last update and then read the
&gt;          // pixels of the content area (visible area excluding the scroll bars) back into the
&gt; -        // root layer texture. The newly exposed area is subesquently filled as usual with
&gt; -        // the contents of the updateRect.
&gt; +        // root layer texture. The newly exposed area will be filled by a subsequent drawLayersIntoRect call
&gt;          TransformationMatrix scrolledLayerMatrix;
&gt;  #if PLATFORM(SKIA)
&gt;          float scaleFactor = 1.0f;
&gt; @@ -230,43 +230,64 @@ void LayerRendererChromium::drawLayers(const IntRect&amp; updateRect, const IntRect&amp;
&gt;          // no need to copy framebuffer pixels back into the texture.
&gt;          m_scrollPosition = scrollPosition;
&gt;      }
&gt; +    
&gt; +    // Translate all the composited layers by the scroll position.
&gt; +    TransformationMatrix matrix;
&gt; +    matrix.translate3d(-m_scrollPosition.x(), -m_scrollPosition.y(), 0);
&gt;  
&gt; -    // FIXME: The following check should go away when the compositor renders independently from its own thread.
&gt; -    // Ignore a 1x1 update rect at (0, 0) as that&apos;s used a way to kick off a redraw for the compositor.
&gt; -    if (!(!updateRect.x() &amp;&amp; !updateRect.y() &amp;&amp; updateRect.width() == 1 &amp;&amp; updateRect.height() == 1)) {
&gt; -        // Update the root layer texture.
&gt; -        ASSERT((updateRect.x() + updateRect.width() &lt;= m_rootLayerTextureWidth)
&gt; -               &amp;&amp; (updateRect.y() + updateRect.height() &lt;= m_rootLayerTextureHeight));
&gt; +    // Traverse the layer tree and update the layer transforms.
&gt; +    float opacity = 1;
&gt; +    const Vector&lt;RefPtr&lt;LayerChromium&gt; &gt;&amp; sublayers = m_rootLayer-&gt;getSublayers();
&gt; +    size_t i;
&gt; +    for (i = 0; i &lt; sublayers.size(); i++)
&gt; +        updateLayersRecursive(sublayers[i].get(), matrix, opacity);
&gt; +}
&gt;  
&gt; +void LayerRendererChromium::updateRootLayerTextureRect(const IntRect&amp; updateRect)
&gt; +{
&gt; +    ASSERT(m_hardwareCompositing);
&gt; +
&gt; +    if (!m_rootLayer)
&gt; +        return;
&gt; +
&gt; +    // Update the root layer texture.
&gt; +    ASSERT((updateRect.x() + updateRect.width() &lt;= m_rootLayerTextureWidth)
&gt; +           &amp;&amp; (updateRect.y() + updateRect.height() &lt;= m_rootLayerTextureHeight));

You can use IntRect::right() and IntRect::bottom() to get the coordinates of the extremes of the rect.

&gt; +    
&gt;  #if PLATFORM(SKIA)
&gt; -        // Get the contents of the updated rect.
&gt; -        const SkBitmap bitmap = m_rootLayerCanvas-&gt;getDevice()-&gt;accessBitmap(false);
&gt; -        int rootLayerWidth = bitmap.width();
&gt; -        int rootLayerHeight = bitmap.height();
&gt; -        ASSERT(rootLayerWidth == updateRect.width() &amp;&amp; rootLayerHeight == updateRect.height());

I&apos;m not sure I follow here.  Is the updateRect supposed to match the root layer size? I thought update rects can be smaller. Shouldn&apos;t rootLayerWidth == m_rootLayerTextureWidth?  You are asserting a different condition in the lines above.

&gt; -        void* pixels = bitmap.getPixels();
&gt; -
&gt; -        // Copy the contents of the updated rect to the root layer texture.
&gt; -        GLC(glTexSubImage2D(GL_TEXTURE_2D, 0, updateRect.x(), updateRect.y(), updateRect.width(), updateRect.height(), GL_RGBA, GL_UNSIGNED_BYTE, pixels));

Don&apos;t you need to bind the root layer texture before calling this? 

&gt; +    // Get the contents of the updated rect.
&gt; +    const SkBitmap bitmap = m_rootLayerCanvas-&gt;getDevice()-&gt;accessBitmap(false);
&gt; +    int rootLayerWidth = bitmap.width();
&gt; +    int rootLayerHeight = bitmap.height();
&gt; +    ASSERT(rootLayerWidth == updateRect.width() &amp;&amp; rootLayerHeight == updateRect.height());
&gt; +    void* pixels = bitmap.getPixels();
&gt; +    // Copy the contents of the updated rect to the root layer texture.
&gt; +    GLC(glTexSubImage2D(GL_TEXTURE_2D, 0, updateRect.x(), updateRect.y(), updateRect.width(), updateRect.height(), GL_RGBA, GL_UNSIGNED_BYTE, pixels));
&gt;  #elif PLATFORM(CG)
&gt; -        // Get the contents of the updated rect.
&gt; -        ASSERT(static_cast&lt;int&gt;(CGBitmapContextGetWidth(m_rootLayerCGContext.get())) == updateRect.width() &amp;&amp; static_cast&lt;int&gt;(CGBitmapContextGetHeight(m_rootLayerCGContext.get())) == updateRect.height());
&gt; -        void* pixels = m_rootLayerBackingStore.data();
&gt; -
&gt; -        // Copy the contents of the updated rect to the root layer texture.
&gt; -        // The origin is at the lower left in Core Graphics&apos; coordinate system. We need to correct for this here.
&gt; -        GLC(glTexSubImage2D(GL_TEXTURE_2D, 0,
&gt; -                            updateRect.x(), m_rootLayerTextureHeight - updateRect.y() - updateRect.height(),
&gt; -                            updateRect.width(), updateRect.height(),
&gt; -                            GL_RGBA, GL_UNSIGNED_BYTE, pixels));
&gt; +    // Get the contents of the updated rect.
&gt; +    // ASSERT(static_cast&lt;int&gt;(CGBitmapContextGetWidth(m_rootLayerCGContext.get())) == updateRect.width() &amp;&amp; static_cast&lt;int&gt;(CGBitmapContextGetHeight(m_rootLayerCGContext.get())) == updateRect.height());
&gt; +    void* pixels = m_rootLayerBackingStore.data();

If this ASSERT is not necessary, please remove rather than commenting out.
&gt; +
&gt; +    // Copy the contents of the updated rect to the root layer texture.
&gt; +    // The origin is at the lower left in Core Graphics&apos; coordinate system. We need to correct for this here.
&gt; +    GLC(glTexSubImage2D(GL_TEXTURE_2D, 0,
&gt; +                        updateRect.x(), m_rootLayerTextureHeight - updateRect.y() - updateRect.height(),
&gt; +                        updateRect.width(), updateRect.height(),
&gt; +                        GL_RGBA, GL_UNSIGNED_BYTE, pixels));
&gt;  #else
&gt;  #error &quot;Need to implement for your platform.&quot;
&gt;  #endif
&gt; -    }
&gt; +}
&gt;  
&gt; +void LayerRendererChromium::drawLayers(const IntRect&amp; visibleRect, const IntRect&amp; contentRect)
&gt; +{
&gt; +    ASSERT(m_hardwareCompositing);
&gt; +    
&gt;      glClearColor(0, 0, 1, 1);
&gt;      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
&gt; -
&gt; +    
&gt; +    GLC(glBindTexture(GL_TEXTURE_2D, m_rootLayerTextureId));
&gt; +    
&gt;      // Render the root layer using a quad that takes up the entire visible area of the window.
&gt;      // We reuse the shader program used by ContentLayerChromium.
&gt;      const ContentLayerChromium::SharedValues* contentLayerValues = contentLayerSharedValues();
&gt; @@ -290,22 +311,13 @@ void LayerRendererChromium::drawLayers(const IntRect&amp; updateRect, const IntRect&amp;
&gt;      GLC(glEnable(GL_BLEND));
&gt;      GLC(glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA));
&gt;  
&gt; -    // Translate all the composited layers by the scroll position.
&gt; -    TransformationMatrix matrix;
&gt; -    matrix.translate3d(-m_scrollPosition.x(), -m_scrollPosition.y(), 0);
&gt; -
&gt; -    // Traverse the layer tree and update the layer transforms.
&gt; -    float opacity = 1;
&gt; -    const Vector&lt;RefPtr&lt;LayerChromium&gt; &gt;&amp; sublayers = m_rootLayer-&gt;getSublayers();
&gt; -    size_t i;
&gt; -    for (i = 0; i &lt; sublayers.size(); i++)
&gt; -        updateLayersRecursive(sublayers[i].get(), matrix, opacity);
&gt; -
&gt; -    m_rootVisibleRect = visibleRect;
&gt; -
&gt;      // Enable scissoring to avoid rendering composited layers over the scrollbars.
&gt;      GLC(glEnable(GL_SCISSOR_TEST));
&gt;      FloatRect scissorRect(contentRect);
&gt; +
&gt; +    // Set the rootVisibleRect --- used by subsequent drawLayers calls
&gt; +    m_rootVisibleRect = visibleRect;
&gt; +
&gt;      // The scissorRect should not include the scroll offset.
&gt;      scissorRect.move(-m_scrollPosition.x(), -m_scrollPosition.y());
&gt;      scissorToRect(scissorRect);
&gt; @@ -316,13 +328,17 @@ void LayerRendererChromium::drawLayers(const IntRect&amp; updateRect, const IntRect&amp;
&gt;      GLC(glStencilMask(0));
&gt;  
&gt;      // Traverse the layer tree one more time to draw the layers.
&gt; -    for (i = 0; i &lt; sublayers.size(); i++)
&gt; +    const Vector&lt;RefPtr&lt;LayerChromium&gt; &gt;&amp; sublayers = m_rootLayer-&gt;getSublayers();
&gt; +    for (size_t i = 0; i &lt; sublayers.size(); i++)
&gt;          drawLayersRecursive(sublayers[i].get(), scissorRect);
&gt;  
&gt;      GLC(glDisable(GL_SCISSOR_TEST));
&gt; +}
&gt;  
&gt; +void LayerRendererChromium::present()
&gt; +{
&gt; +    // We&apos;re done! Time to swapbuffers!
&gt;      m_gles2Context-&gt;swapBuffers();
&gt; -
&gt;      m_needsDisplay = false;
&gt;  }
&gt;  
&gt; diff --git a/WebCore/platform/graphics/chromium/LayerRendererChromium.h b/WebCore/platform/graphics/chromium/LayerRendererChromium.h
&gt; index 8f44afebd0a2c7b475d04ba48723f1cdc5455091..2f9edef67c233ffb7c02d43517de5b754701b128 100644
&gt; --- a/WebCore/platform/graphics/chromium/LayerRendererChromium.h
&gt; +++ b/WebCore/platform/graphics/chromium/LayerRendererChromium.h
&gt; @@ -61,9 +61,17 @@ public:
&gt;      LayerRendererChromium(PassOwnPtr&lt;GLES2Context&gt; gles2Context);
&gt;      ~LayerRendererChromium();
&gt;  
&gt; -    // Updates the contents of the root layer that fall inside the updateRect and recomposites
&gt; -    // all the layers.
&gt; -    void drawLayers(const IntRect&amp; updateRect, const IntRect&amp; visibleRect, const IntRect&amp; contentRect, const IntPoint&amp; scrollPosition);
&gt; +    // updates size of root texture, if needed, and scrolls the backbuffer
&gt; +    void prepareToDrawLayers(const IntRect&amp; visibleRect, const IntRect&amp; contentRect, const IntPoint&amp; scrollPosition);
&gt; +    
&gt; +    // updates a rectangle within the root layer texture
&gt; +    void updateRootLayerTextureRect(const IntRect&amp; updateRect);
&gt; +
&gt; +    // draws the current layers onto the backbuffer
&gt; +    void drawLayers(const IntRect&amp; visibleRect, const IntRect&amp; contentRect);
&gt; +
&gt; +    // puts backbufeffer onscreen

Typo: backbuffer

&gt; +    void present();
&gt;  
&gt;      void setRootLayer(PassRefPtr&lt;LayerChromium&gt; layer) { m_rootLayer = layer; }
&gt;      LayerChromium* rootLayer() { return m_rootLayer.get(); }
&gt; diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
&gt; index 527e8efccae39045fd985ded3bf20d7166afc69d..59509251a1e367266ed20c7fab2e70aed3457cda 100644
&gt; --- a/WebKit/chromium/ChangeLog
&gt; +++ b/WebKit/chromium/ChangeLog
&gt; @@ -1,3 +1,48 @@
&gt; +2010-09-02  Nat Duca  &lt;nduca@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [chromium] Accelerated Compositing: screen garbage when scrolling
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=45092
&gt; +
&gt; +        Introduce a new API on WebWidget for painting with accelerated
&gt; +        compositing that allows the compositor to properly distingiush
&gt; +        scrolling, invalidation and repainting from one another. The key
&gt; +        change is that in accelerated rendering case, invalidates and
&gt; +        scrolling pass directly to the compositor, rather than passing up
&gt; +        to the client as was the case in the software path. For
&gt; +        accelerated rendering, the previous paint() method is replaced by
&gt; +        a pair of methods: paintComposited and
&gt; +        invalidateCompositedRootLayerRect.
&gt; +
&gt; +
&gt; +        * public/WebWidget.h:
&gt; +        * public/WebWidgetClient.h:
&gt; +        (WebKit::WebWidgetClient::scheduleDeferredComposite):
&gt; +        * src/ChromeClientImpl.cpp:
&gt; +        (WebKit::ChromeClientImpl::invalidateContentsAndWindow):
&gt; +        (WebKit::ChromeClientImpl::scroll):
&gt; +        * src/WebPopupMenuImpl.cpp:
&gt; +        (WebKit::WebPopupMenuImpl::paint):
&gt; +        (WebKit::WebPopupMenuImpl::invalidateCompositedRootLayerRect):
&gt; +        (WebKit::WebPopupMenuImpl::paintComposited):
&gt; +        * src/WebPopupMenuImpl.h:
&gt; +        * src/WebViewImpl.cpp:
&gt; +        (WebKit::WebViewImpl::resize):
&gt; +        (WebKit::WebViewImpl::paint):
&gt; +        (WebKit::WebViewImpl::setRootGraphicsLayer):
&gt; +        (WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
&gt; +        (WebKit::WebViewImpl::updateRootLayerContents):
&gt; +        (WebKit::WebViewImpl::setRootLayerNeedsDisplay):
&gt; +        (WebKit::WebViewImpl::invalidateRootLayerRect):
&gt; +        (WebKit::WebViewImpl::scrollRootLayer):
&gt; +        (WebKit::WebViewImpl::invalidateCompositedRootLayerRect):
&gt; +        (WebKit::WebViewImpl::paintComposited):
&gt; +        * src/WebViewImpl.h:
&gt; +        * tests/PopupMenuTest.cpp:
&gt; +        (WebKit::TestWebWidget::invalidateCompositedRootLayerRect):
&gt; +        (WebKit::TestWebWidget::paintComposited):
&gt; +
&gt;  2010-09-02  Ilya Sherman  &lt;isherman@google.com&gt;
&gt;  
&gt;          Reviewed by Eric Seidel.
&gt; diff --git a/WebKit/chromium/public/WebWidget.h b/WebKit/chromium/public/WebWidget.h
&gt; index 5c9f54e79366b83afee7c0e1e3a3288c34412ca9..da690a63edc3d3ca3a104e9b8774c3a2e23b783a 100644
&gt; --- a/WebKit/chromium/public/WebWidget.h
&gt; +++ b/WebKit/chromium/public/WebWidget.h
&gt; @@ -59,15 +59,28 @@ public:
&gt;      // Called to layout the WebWidget.  This MUST be called before Paint,
&gt;      // and it may result in calls to WebWidgetClient::didInvalidateRect.
&gt;      virtual void layout() = 0;
&gt; -
&gt; -    // Called to paint the specified region of the WebWidget onto the given
&gt; -    // canvas.  You MUST call Layout before calling this method.  It is
&gt; -    // okay to call paint multiple times once layout has been called,
&gt; -    // assuming no other changes are made to the WebWidget (e.g., once
&gt; -    // events are processed, it should be assumed that another call to
&gt; -    // layout is warranted before painting again).
&gt; -    virtual void paint(WebCanvas*, const WebRect&amp;) = 0;
&gt; -
&gt; +    
&gt; +    // Called to paint the specified viewport of the WebWidget 
&gt; +    // onto the specified canvas at (viewport.x,viewport.y). You MUST call

Does viewport specify the region of the WebWidget that will be grabbed or the place where it&apos;s
going to end up on the canvas? The comment seems to indicate both but I&apos;m not sure that&apos;s correct.

&gt; +    // Layout before calling this method.  It is okay to call paint
&gt; +    // multiple times once layout has been called, assuming no other
&gt; +    // changes are made to the WebWidget (e.g., once events are
&gt; +    // processed, it should be assumed that another call to layout is
&gt; +    // warranted before painting again).
&gt; +    virtual void paint(WebCanvas*, const WebRect&amp; viewport) = 0;
&gt; +    
&gt; +    // Triggers compositing of the current layers onto the screen.
&gt; +    // The finish argument controls whether the compositor will waiting for the
&gt; +    // GPU to finish rendering before returning. You MUST call Layout
&gt; +    // before calling this method, for the same reasons described in
&gt; +    // the paint method above.
&gt; +    virtual void composite(bool finish) = 0;
&gt; +
&gt; +    // Called to inform the WebWidget of a change in native widget settings.
&gt; +    // Implementors that cache rendered copies of widgets need to re-render
&gt; +    // on receiving this message
&gt; +    virtual void themeChanged() = 0;
&gt; +    
&gt;      // Called to inform the WebWidget of an input event.  Returns true if
&gt;      // the event has been processed, false otherwise.
&gt;      virtual bool handleInputEvent(const WebInputEvent&amp;) = 0;
&gt; diff --git a/WebKit/chromium/public/WebWidgetClient.h b/WebKit/chromium/public/WebWidgetClient.h
&gt; index bd7bd6a74fcbaf371df3e9a6e410bedbf3592320..b3ee9f56fd1147787b2e46925f0de451d9ac451b 100644
&gt; --- a/WebKit/chromium/public/WebWidgetClient.h
&gt; +++ b/WebKit/chromium/public/WebWidgetClient.h
&gt; @@ -45,7 +45,10 @@ class WebWidgetClient {
&gt;  public:
&gt;      // Called when a region of the WebWidget needs to be re-painted.
&gt;      virtual void didInvalidateRect(const WebRect&amp;) { }
&gt; -
&gt; +    
&gt; +    // Called when a call to WebWidget::composite is required
&gt; +    virtual void scheduleComposite() { }
&gt; +    
&gt;      // Called when a region of the WebWidget, given by clipRect, should be
&gt;      // scrolled by the specified dx and dy amounts.
&gt;      virtual void didScrollRect(int dx, int dy, const WebRect&amp; clipRect) { }
&gt; diff --git a/WebKit/chromium/src/ChromeClientImpl.cpp b/WebKit/chromium/src/ChromeClientImpl.cpp
&gt; index e6f14007180d8d3bf6128b130dc28abaaec1f90a..2fda8e68e614ff36817b4c38badfb1d31160248d 100644
&gt; --- a/WebKit/chromium/src/ChromeClientImpl.cpp
&gt; +++ b/WebKit/chromium/src/ChromeClientImpl.cpp
&gt; @@ -492,8 +492,16 @@ void ChromeClientImpl::invalidateContentsAndWindow(const IntRect&amp; updateRect, bo
&gt;  {
&gt;      if (updateRect.isEmpty())
&gt;          return;
&gt; -    if (m_webView-&gt;client())
&gt; -        m_webView-&gt;client()-&gt;didInvalidateRect(updateRect);
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +    if (!m_webView-&gt;isAcceleratedCompositingActive()) {
&gt; +#endif
&gt; +        if (m_webView-&gt;client())
&gt; +            m_webView-&gt;client()-&gt;didInvalidateRect(updateRect);
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +    } else {
&gt; +        m_webView-&gt;invalidateRootLayerRect(updateRect);
&gt; +    }
&gt; +#endif
&gt;  }
&gt;  
&gt;  void ChromeClientImpl::invalidateContentsForSlowScroll(const IntRect&amp; updateRect, bool immediate)
&gt; @@ -507,11 +515,19 @@ void ChromeClientImpl::scroll(
&gt;      const IntRect&amp; clipRect)
&gt;  {
&gt;      m_webView-&gt;hidePopups();
&gt; -    if (m_webView-&gt;client()) {
&gt; -        int dx = scrollDelta.width();
&gt; -        int dy = scrollDelta.height();
&gt; -        m_webView-&gt;client()-&gt;didScrollRect(dx, dy, clipRect);
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +    if (!m_webView-&gt;isAcceleratedCompositingActive()) {
&gt; +#endif
&gt; +        if (m_webView-&gt;client()) {
&gt; +            int dx = scrollDelta.width();
&gt; +            int dy = scrollDelta.height();
&gt; +            m_webView-&gt;client()-&gt;didScrollRect(dx, dy, clipRect);
&gt; +        }
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +    } else {
&gt; +        m_webView-&gt;scrollRootLayer(scrollDelta, clipRect);
&gt;      }
&gt; +#endif
&gt;  }
&gt;  
&gt;  IntPoint ChromeClientImpl::screenToWindow(const IntPoint&amp;) const
&gt; diff --git a/WebKit/chromium/src/WebPopupMenuImpl.cpp b/WebKit/chromium/src/WebPopupMenuImpl.cpp
&gt; index 75d6cc143824b7f59291029b427ce920c23e4539..717ff82e25e5cf4acd03283683a608ad7847705a 100644
&gt; --- a/WebKit/chromium/src/WebPopupMenuImpl.cpp
&gt; +++ b/WebKit/chromium/src/WebPopupMenuImpl.cpp
&gt; @@ -155,12 +155,12 @@ void WebPopupMenuImpl::layout()
&gt;  {
&gt;  }
&gt;  
&gt; -void WebPopupMenuImpl::paint(WebCanvas* canvas, const WebRect&amp; rect)
&gt; +void WebPopupMenuImpl::paint(WebCanvas* canvas, const WebRect&amp; viewport)
&gt;  {
&gt;      if (!m_widget)
&gt;          return;
&gt;  
&gt; -    if (!rect.isEmpty()) {
&gt; +    if (!viewport.isEmpty()) {
&gt;  #if WEBKIT_USING_CG
&gt;          GraphicsContext gc(canvas);
&gt;  #elif WEBKIT_USING_SKIA
&gt; @@ -170,10 +170,19 @@ void WebPopupMenuImpl::paint(WebCanvas* canvas, const WebRect&amp; rect)
&gt;  #else
&gt;          notImplemented();
&gt;  #endif
&gt; -        m_widget-&gt;paint(&amp;gc, rect);
&gt; +        m_widget-&gt;paint(&amp;gc, viewport);
&gt;      }
&gt;  }
&gt;  
&gt; +void WebPopupMenuImpl::themeChanged()
&gt; +{
&gt; +    notImplemented();
&gt; +}
&gt; +void WebPopupMenuImpl::composite(bool finish)
&gt; +{
&gt; +    notImplemented();
&gt; +}
&gt; +
&gt;  bool WebPopupMenuImpl::handleInputEvent(const WebInputEvent&amp; inputEvent)
&gt;  {
&gt;      if (!m_widget)
&gt; diff --git a/WebKit/chromium/src/WebPopupMenuImpl.h b/WebKit/chromium/src/WebPopupMenuImpl.h
&gt; index edbb4ab50d416b03b7bd1a5fce800556091ea227..221ba038f2c4c736d677fabfa322e051f904264c 100644
&gt; --- a/WebKit/chromium/src/WebPopupMenuImpl.h
&gt; +++ b/WebKit/chromium/src/WebPopupMenuImpl.h
&gt; @@ -63,6 +63,8 @@ public:
&gt;      virtual void resize(const WebSize&amp;);
&gt;      virtual void layout();
&gt;      virtual void paint(WebCanvas* canvas, const WebRect&amp; rect);
&gt; +    virtual void themeChanged();
&gt; +    virtual void composite(bool finish);
&gt;      virtual bool handleInputEvent(const WebInputEvent&amp;);
&gt;      virtual void mouseCaptureLost();
&gt;      virtual void setFocus(bool enable);
&gt; diff --git a/WebKit/chromium/src/WebViewImpl.cpp b/WebKit/chromium/src/WebViewImpl.cpp
&gt; index 4b129d694b1f112f27b21ae724db67a68a74e02a..8a48442fc9d5d63a8297aead124347b0cee745d5 100644
&gt; --- a/WebKit/chromium/src/WebViewImpl.cpp
&gt; +++ b/WebKit/chromium/src/WebViewImpl.cpp
&gt; @@ -909,7 +909,12 @@ void WebViewImpl::resize(const WebSize&amp; newSize)
&gt;  
&gt;      if (m_client) {
&gt;          WebRect damagedRect(0, 0, m_size.width, m_size.height);
&gt; -        m_client-&gt;didInvalidateRect(damagedRect);
&gt; +        if (isAcceleratedCompositingActive()) {

I don&apos;t have the code handy but I seem to remember that isAcceleratedCompositingActive() is defined only if USE(ACCELERATED_COMPOSTING) is.

&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +            invalidateRootLayerRect(damagedRect);
&gt; +#endif
&gt; +        } else 
&gt; +            m_client-&gt;didInvalidateRect(damagedRect);
&gt;      }
&gt;  
&gt;  #if OS(DARWIN)
&gt; @@ -943,33 +948,17 @@ void WebViewImpl::layout()
&gt;  
&gt;  void WebViewImpl::paint(WebCanvas* canvas, const WebRect&amp; rect)
&gt;  {
&gt; -
&gt; +    if (isAcceleratedCompositingActive()) {

Same comment as above.  Should isAcceleratedCompositingActive stay inside the #if ? 

&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; -    if (!isAcceleratedCompositingActive()) {
&gt; +        invalidateRootLayerRect(rect);
&gt; +        doComposite(canvas, false);
&gt;  #endif
&gt; +    } else {
&gt; +        // TODO, if accelerated, redirect to paint composited loop

In WebKit TODO -&gt; FIXME

&gt;          WebFrameImpl* webframe = mainFrameImpl();
&gt;          if (webframe)
&gt;              webframe-&gt;paint(canvas, rect);
&gt; -#if USE(ACCELERATED_COMPOSITING)
&gt; -    } else {
&gt; -        // Draw the contents of the root layer.
&gt; -        updateRootLayerContents(rect);
&gt; -
&gt; -        WebFrameImpl* webframe = mainFrameImpl();
&gt; -        if (!webframe)
&gt; -            return;
&gt; -        FrameView* view = webframe-&gt;frameView();
&gt; -        if (!view)
&gt; -            return;
&gt; -
&gt; -        // The visibleRect includes scrollbars whereas the contentRect doesn&apos;t.
&gt; -        IntRect visibleRect = view-&gt;visibleContentRect(true);
&gt; -        IntRect contentRect = view-&gt;visibleContentRect(false);
&gt; -
&gt; -        // Ask the layer compositor to redraw all the layers.
&gt; -        m_layerRenderer-&gt;drawLayers(rect, visibleRect, contentRect, IntPoint(view-&gt;scrollX(), view-&gt;scrollY()));
&gt;      }
&gt; -#endif
&gt;  }
&gt;  
&gt;  // FIXME: m_currentInputEvent should be removed once ChromeClient::show() can
&gt; @@ -2105,9 +2094,17 @@ bool WebViewImpl::tabsToLinks() const
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt;  void WebViewImpl::setRootGraphicsLayer(WebCore::PlatformLayer* layer)
&gt;  {
&gt; +    bool wasActive = m_isAcceleratedCompositingActive;
&gt;      setIsAcceleratedCompositingActive(layer ? true : false);
&gt;      if (m_layerRenderer)
&gt;          m_layerRenderer-&gt;setRootLayer(layer);
&gt; +    if (wasActive != m_isAcceleratedCompositingActive) {
&gt; +        WebRect damagedRect(0, 0, m_size.width, m_size.height);
&gt; +        if (m_isAcceleratedCompositingActive) 
&gt; +            invalidateRootLayerRect(damagedRect);
&gt; +        else
&gt; +            m_client-&gt;didInvalidateRect(damagedRect);
&gt; +    }
&gt;  }
&gt;  
&gt;  void WebViewImpl::setIsAcceleratedCompositingActive(bool active)
&gt; @@ -2119,10 +2116,6 @@ void WebViewImpl::setIsAcceleratedCompositingActive(bool active)
&gt;          m_layerRenderer = LayerRendererChromium::create(getOnscreenGLES2Context());
&gt;          if (m_layerRenderer-&gt;hardwareCompositing()) {
&gt;              m_isAcceleratedCompositingActive = true;
&gt; -            
&gt; -            // Force a redraw the entire view so that the compositor gets the entire view,
&gt; -            // rather than just the currently-dirty subset.
&gt; -            m_client-&gt;didInvalidateRect(IntRect(0, 0, m_size.width, m_size.height));
&gt;          } else {
&gt;              m_layerRenderer.clear();
&gt;              m_isAcceleratedCompositingActive = false;
&gt; @@ -2138,12 +2131,6 @@ void WebViewImpl::updateRootLayerContents(const WebRect&amp; rect)
&gt;      if (!isAcceleratedCompositingActive())
&gt;          return;
&gt;  
&gt; -    // FIXME: The accelerated compositing path invalidates a 1x1 rect at (0, 0)
&gt; -    // in order to get the renderer to ask the compositor to redraw. This is only
&gt; -    // temporary until we get the compositor to render directly from its own thread.
&gt; -    if (!rect.x &amp;&amp; !rect.y &amp;&amp; rect.width == 1 &amp;&amp; rect.height == 1)
&gt; -        return;
&gt; -
&gt;      WebFrameImpl* webframe = mainFrameImpl();
&gt;      if (!webframe)
&gt;          return;
&gt; @@ -2195,21 +2182,174 @@ void WebViewImpl::updateRootLayerContents(const WebRect&amp; rect)
&gt;  
&gt;  void WebViewImpl::setRootLayerNeedsDisplay()
&gt;  {
&gt; -    // FIXME: For now we&apos;re posting a repaint event for the entire page which is an overkill.
&gt; -    if (WebFrameImpl* webframe = mainFrameImpl()) {
&gt; -        if (FrameView* view = webframe-&gt;frameView()) {
&gt; -            // FIXME: Temporary hack to invalidate part of the page so that we get called to render
&gt; -            //        again.
&gt; -            IntRect visibleRect = view-&gt;visibleContentRect(true);
&gt; -            m_client-&gt;didInvalidateRect(IntRect(0, 0, 1, 1));
&gt; +    m_client-&gt;scheduleComposite();
&gt; +    if (m_layerRenderer)
&gt; +        m_layerRenderer-&gt;setNeedsDisplay();
&gt; +}
&gt; +
&gt; +// WebViewImpl method
&gt; +void WebViewImpl::scrollRootLayer(const WebSize&amp; scrollDelta, const WebRect&amp; clipRect)
&gt; +{
&gt; +    ASSERT(m_layerRenderer);
&gt; +    // Compute the damage rect in viewport space
&gt; +    // Should only be scrolling in one direction at a time.
&gt; +    ASSERT(!(scrollDelta.width &amp;&amp; scrollDelta.height));
&gt; +    WebFrameImpl* webframe = mainFrameImpl();
&gt; +    if (!webframe)
&gt; +        return;
&gt; +    FrameView* view = webframe-&gt;frameView();
&gt; +    if (!view)
&gt; +        return;
&gt; +    
&gt; +    FloatRect damagedRect;
&gt; +    // Put the viewportRect in _layer space_ prior to the scroll since the logic
&gt; +    // below emits damage in the space &quot;before&quot; scrolling
&gt; +    // Using layer space for damage rects allows us to intermix invalidates with scrolls
&gt; +    IntRect contentRect = view-&gt;visibleContentRect(false);
&gt; +    FloatRect viewportRect(contentRect.x(),
&gt; +                           contentRect.y(),
&gt; +                           contentRect.width(), contentRect.height());
&gt; +    
&gt; +    // Compute the region we will expose by scrolling, and paint that into a
&gt; +    // shared memory section.
&gt; +    if (scrollDelta.width) {
&gt; +        float dx = (float)scrollDelta.width;
&gt; +        damagedRect.setY(viewportRect.y());
&gt; +        damagedRect.setHeight(viewportRect.height());
&gt; +        if (dx &gt; 0) {
&gt; +            damagedRect.setX(viewportRect.x());
&gt; +            damagedRect.setWidth(dx);
&gt; +        } else {

Is it not possible that you could have a scrollDelta with non-zero width _and_ height? 
&gt; +            damagedRect.setX(viewportRect.right() + dx);
&gt; +            damagedRect.setWidth(-dx);
&gt; +        }
&gt; +    } else {
&gt; +        float dy = (float)scrollDelta.height;
&gt; +        damagedRect.setX(viewportRect.x());
&gt; +        damagedRect.setWidth(viewportRect.width());
&gt; +        if (dy &gt; 0) {
&gt; +            damagedRect.setY(viewportRect.y());
&gt; +            damagedRect.setHeight(dy);
&gt; +        } else {
&gt; +            damagedRect.setY(viewportRect.bottom() + dy);
&gt; +            damagedRect.setHeight(-dy);
&gt;          }
&gt;      }
&gt; +    
&gt; +    // TODO: add a smarter damage aggregation logic? Right now, LayerChromium does simple union-ing
&gt; +    IntRect iDamagedRect(damagedRect);
&gt; +    iDamagedRect.unite(m_scrollDamage);
&gt; +    m_scrollDamage = iDamagedRect;
&gt; +    setRootLayerNeedsDisplay();
&gt; +}
&gt; +void WebViewImpl::invalidateRootLayerRect(const WebRect&amp; rect)
&gt; +{
&gt; +    // rect is in viewport space. Convert to layer space
&gt; +    // so that invalidations and scroll invalidations play well with one-another
&gt; +    ASSERT(m_layerRenderer);
&gt; +    
&gt; +    WebFrameImpl* webframe = mainFrameImpl();
&gt; +    if (!webframe)
&gt; +        return;
&gt; +    FrameView* view = webframe-&gt;frameView();
&gt; +    if (!view)
&gt; +        return;
&gt;  
&gt; -    if (m_layerRenderer)
&gt; -        m_layerRenderer-&gt;setNeedsDisplay();
&gt; +    FloatRect lsRect(rect.x + view-&gt;scrollX(),
&gt; +                      rect.y + view-&gt;scrollY(),
&gt; +                      rect.width, rect.height);
&gt; +    
&gt; +    // TODO: add a smarter damage aggregation logic? Right now, LayerChromium does simple union-ing
&gt; +    m_layerRenderer-&gt;rootLayer()-&gt;setNeedsDisplay(lsRect);
&gt;  }
&gt;  #endif // USE(ACCELERATED_COMPOSITING)
&gt;  
&gt; +// WebWidet method
&gt; +void WebViewImpl::themeChanged()
&gt; +{
&gt; +    if (isAcceleratedCompositingActive()) {
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +        m_layerRenderer-&gt;rootLayer()-&gt;setNeedsDisplay();
&gt; +        setRootLayerNeedsDisplay();
&gt; +#endif
&gt; +    } else {
&gt; +        WebRect damagedRect(0, 0, m_size.width, m_size.height);
&gt; +        m_client-&gt;didInvalidateRect(damagedRect);
&gt; +    }
&gt; +}
&gt; +
&gt; +void WebViewImpl::composite(bool finish)
&gt; +{
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +    doComposite(0, finish);
&gt; +#endif
&gt; +}
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +void WebViewImpl::doComposite(WebCanvas* canvas, bool finish)
&gt; +{
&gt; +    ASSERT(isAcceleratedCompositingActive());
&gt; +    WebFrameImpl* webframe = mainFrameImpl();
&gt; +    if (!webframe)
&gt; +        return;
&gt; +    FrameView* view = webframe-&gt;frameView();
&gt; +    if (!view)
&gt; +        return;
&gt; +
&gt; +    // The visibleRect includes scrollbars whereas the contentRect doesn&apos;t.
&gt; +    IntRect visibleRect = view-&gt;visibleContentRect(true);
&gt; +    IntRect contentRect = view-&gt;visibleContentRect(false);
&gt; +    IntRect viewport    = IntRect(0, 0, m_size.width, m_size.height);
&gt; +
&gt; +    // Give the compoisitor a chance to setup/resize the root texture handle and perform scrolling
&gt; +    m_layerRenderer-&gt;prepareToDrawLayers(visibleRect, contentRect, IntPoint(view-&gt;scrollX(), view-&gt;scrollY()));
&gt; +
&gt; +    // Draw the contents of the root layer
&gt; +    Vector&lt;FloatRect&gt; damageRects;
&gt; +    damageRects.append(FloatRect(m_scrollDamage.x, m_scrollDamage.y, m_scrollDamage.width, m_scrollDamage.height));
&gt; +    damageRects.append(m_layerRenderer-&gt;rootLayer()-&gt;dirtyRect());
&gt; +    for (size_t i = 0; i &lt; damageRects.size(); ++i) {
&gt; +        // the damage rects for the root layer is in layer space [e.g. unscrolled.]
&gt; +        // convert from layer space to viewport space
&gt; +        const FloatRect ssRect = damageRects[i];
&gt; +        FloatRect rect(ssRect.x() - view-&gt;scrollX(),
&gt; +                       ssRect.y() - view-&gt;scrollY(),
&gt; +                       ssRect.width(), ssRect.height());
&gt; +        
&gt; +        // intersect this rectangle with the viewport
&gt; +        rect.intersect(viewport);
&gt; +        
&gt; +        
&gt; +        // now render it
&gt; +        WebRect wrect(rect.x(), rect.y(), rect.width(), rect.height());
&gt; +        if (wrect.width &amp;&amp; wrect.height) {
&gt; +            updateRootLayerContents(wrect);
&gt; +            m_layerRenderer-&gt;updateRootLayerTextureRect(wrect);
&gt; +        }
&gt; +    }
&gt; +    m_layerRenderer-&gt;rootLayer()-&gt;resetNeedsDisplay();
&gt; +    m_scrollDamage = WebRect();
&gt; +        
&gt; +    // Draw the actual layers...
&gt; +    m_layerRenderer-&gt;drawLayers(visibleRect, contentRect);
&gt; +    m_layerRenderer-&gt;drawLayers(visibleRect, contentRect);
&gt; +
&gt; +    // readback into the canvas, if requested
&gt; +    // FIXME Insert wjmaclean&apos;s readback code here for webkit bug 44127
&gt; +    
&gt; +    // finish if requested
&gt; +    // FIXME: handle finish flag
&gt; +    
&gt; +    // we&apos;re done... put result onscreen
&gt; +    m_layerRenderer-&gt;present();
&gt; +
&gt; +    // tell the browser that the rendering is done ---
&gt; +    // TODO: this is being called too early, we need to defer calling this 
&gt; +    //       until the swapbuffers itself has executed on the GPU.
&gt; +    // m_client-&gt;onCompositeComplete();
&gt; +}
&gt; +#endif
&gt; +
&gt; +
&gt;  PassOwnPtr&lt;GLES2Context&gt; WebViewImpl::getOnscreenGLES2Context()
&gt;  {
&gt;      return GLES2Context::create(GLES2ContextInternal::create(gles2Context(), false));
&gt; diff --git a/WebKit/chromium/src/WebViewImpl.h b/WebKit/chromium/src/WebViewImpl.h
&gt; index c29612123f4514c94dd7d970c73114a4beeec355..bcd4f46d87f1a5fc3d6fd64f35a92dbdc6960286 100644
&gt; --- a/WebKit/chromium/src/WebViewImpl.h
&gt; +++ b/WebKit/chromium/src/WebViewImpl.h
&gt; @@ -34,6 +34,7 @@
&gt;  #include &quot;WebGLES2Context.h&quot;
&gt;  #include &quot;WebNavigationPolicy.h&quot;
&gt;  #include &quot;WebPoint.h&quot;
&gt; +#include &quot;WebRect.h&quot;
&gt;  #include &quot;WebSize.h&quot;
&gt;  #include &quot;WebString.h&quot;
&gt;  #include &quot;WebView.h&quot;
&gt; @@ -92,6 +93,8 @@ public:
&gt;      virtual void resize(const WebSize&amp;);
&gt;      virtual void layout();
&gt;      virtual void paint(WebCanvas*, const WebRect&amp;);
&gt; +    virtual void themeChanged();
&gt; +    virtual void composite(bool finish);
&gt;      virtual bool handleInputEvent(const WebInputEvent&amp;);
&gt;      virtual void mouseCaptureLost();
&gt;      virtual void setFocus(bool enable);
&gt; @@ -322,6 +325,9 @@ public:
&gt;      }
&gt;  
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; +    void doComposite(WebCanvas*, bool finish);
&gt; +    void scrollRootLayer(const WebSize&amp; scrollDelta, const WebRect&amp; clipRect);
&gt; +    void invalidateRootLayerRect(const WebRect&amp;);
&gt;      void setRootLayerNeedsDisplay();
&gt;      void setRootGraphicsLayer(WebCore::PlatformLayer*);
&gt;  #endif
&gt; @@ -510,6 +516,7 @@ private:
&gt;      RefPtr&lt;WebCore::Node&gt; m_mouseCaptureNode;
&gt;  
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; +    WebRect m_scrollDamage;
&gt;      OwnPtr&lt;WebCore::LayerRendererChromium&gt; m_layerRenderer;
&gt;      bool m_isAcceleratedCompositingActive;
&gt;  #endif
&gt; diff --git a/WebKit/chromium/tests/PopupMenuTest.cpp b/WebKit/chromium/tests/PopupMenuTest.cpp
&gt; index 50319af23b0a92f44c9158efb3e6461823981d10..aef29cf2d04124b4c87ef07a2e5f385096782b68 100644
&gt; --- a/WebKit/chromium/tests/PopupMenuTest.cpp
&gt; +++ b/WebKit/chromium/tests/PopupMenuTest.cpp
&gt; @@ -128,6 +128,8 @@ public:
&gt;      virtual void resize(const WebSize&amp;) { }
&gt;      virtual void layout() { }
&gt;      virtual void paint(WebCanvas*, const WebRect&amp;) { }
&gt; +    virtual void themeChanged() { }
&gt; +    virtual void composite(bool finish) { }
&gt;      virtual bool handleInputEvent(const WebInputEvent&amp;) { return true; }
&gt;      virtual void mouseCaptureLost() { }
&gt;      virtual void setFocus(bool) { }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274041</commentid>
    <comment_count>5</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-03 11:07:21 -0700</bug_when>
    <thetext>&gt;&gt; -        ASSERT(rootLayerWidth == updateRect.width() &amp;&amp; rootLayerHeight == updateRect.height());
&gt; I&apos;m not sure I follow here.  Is the updateRect supposed to match the root layer size? I thought update rects
&gt; can be smaller. Shouldn&apos;t rootLayerWidth == m_rootLayerTextureWidth?  You are asserting a different condition
&gt; in the lines above.

Oops, bad variable naming. What should be asserted here is that the canvas containing the update bitmap should match the updateRect that we were handed. I renamed these variables to be bitmapWidth/etc to make the intent clearer.

&gt; Don&apos;t you need to bind the root layer texture before calling this? 
Good point.


&gt;&gt; +    // ASSERT(static_cast&lt;int&gt;(CGBitmapContextGetWidth(m_rootLayerCGContext.get())) == updateRect.width() &amp;&amp; static_cast&lt;int&gt;(CGBitmapContextGetHeight(m_rootLayerCGContext.get())) == updateRect.height());
&gt;&gt; +    void* pixels = m_rootLayerBackingStore.data();

&gt;If this ASSERT is not necessary, please remove rather than commenting out.
This assert came from the existing code --- I&apos;m simply moved this function rather than added the assertion.
I suggest we leave it there for the time being --- it looks like it is analogous to the SKIA &quot;check the bitmap is the correct size&quot; function.




&gt; Does viewport specify the region of the WebWidget that will be grabbed or the place where it&apos;s
&gt; going to end up on the canvas? The comment seems to indicate both but I&apos;m not sure that&apos;s correct.
Updated my comments to be clearer on this. Net/net, the rectangle &quot;viewport&quot; on WebWidget will be drawn to viewport.x,viewport.y on the provided canvas. Put another way, the viewport will *not* be translated to the origin during drawing.


&gt; I don&apos;t have the code handy but I seem to remember that isAcceleratedCompositingActive() is defined only if USE(ACCELERATED_COMPOSTING) is.
Thankfully, it is available at all times. I actually think this really helpful since it allows us to avoid monstrosities like:
#if USE(ACCELERATED_COMPOSITING)
if(isAcceleratedCompositingEnabled()) {
} else {
#endif
  ...
#if USE(ACCELERATED_COMPOSITING)
}
#endif



&gt;Is it not possible that you could have a scrollDelta with non-zero width _and_ height? 
Great catch. I will invalidate in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274048</commentid>
    <comment_count>6</comment_count>
      <attachid>66522</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-03 11:19:55 -0700</bug_when>
    <thetext>Created attachment 66522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274059</commentid>
    <comment_count>7</comment_count>
      <attachid>66524</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-03 11:27:49 -0700</bug_when>
    <thetext>Created attachment 66524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274136</commentid>
    <comment_count>8</comment_count>
      <attachid>66535</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-03 12:50:59 -0700</bug_when>
    <thetext>Created attachment 66535
Patch

Remove extra drawLayers call. Oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274324</commentid>
    <comment_count>9</comment_count>
      <attachid>66535</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-09-03 19:03:22 -0700</bug_when>
    <thetext>Comment on attachment 66535
Patch

Looks real good!
A couple of high level comments/questions:
1. What is it that prevents us from moving all the dirty and scroll-rect logic down to the compositor?  Is it that the root layer doesn&apos;t know how to draw itself?  Because if that&apos;s the only reason, it can probably be fixed.
2. Remember that comments need to be complete sentences, starting with a capital letter and ending in a period. It takes some getting used to but really improves consistency in the file. 

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

&gt; WebKit/chromium/src/WebPopupMenuImpl.cpp:158
&gt; +void WebPopupMenuImpl::paint(WebCanvas* canvas, const WebRect&amp; viewport)
nit: Is there a good reason to change the parameter name?  If yes, then you&apos;ll probably want to change in the header as well for consistency.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2189
&gt; +// WebViewImpl method
nit: is this comment necessary?

&gt; WebKit/chromium/src/WebViewImpl.cpp:2211
&gt; +    // below emits damage in the space &quot;before&quot; scrolling
Add a period at the end of this sentence and the one below.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2212
&gt; +    // Using layer space for damage rects allows us to intermix invalidates with scrolls
missing period

&gt; WebKit/chromium/src/WebViewImpl.cpp:2243
&gt; +    // TODO: add a smarter damage aggregation logic? Right now, LayerChromium does simple union-ing
nit: In WebKit TODO&apos;s are FIXME
Add a period at the end of the sentence.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2252
&gt; +    // so that invalidations and scroll invalidations play well with one-another
Add a period at the end of the sentence.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2266
&gt; +    // TODO: add a smarter damage aggregation logic? Right now, LayerChromium does simple union-ing
Add a period at the end of the sentence.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2307
&gt; +    // Give the compoisitor a chance to setup/resize the root texture handle and perform scrolling
typo: compositor
Add a period at the end of the sentence.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2339
&gt; +    // readback into the canvas, if requested
Capitalize and add a period at the end of the sentence.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2343
&gt; +    // FIXME: handle finish flag
Capitalize and add a period at the end of the sentence.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2345
&gt; +    // we&apos;re done... put result onscreen
Capitalize and add a period at the end of the sentence.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2348
&gt; +    // tell the browser that the rendering is done ---
Capitalize and add a period at the end of the sentence.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2349
&gt; +    // TODO: this is being called too early, we need to defer calling this 
TODO-&gt;FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275220</commentid>
    <comment_count>10</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-07 12:42:39 -0700</bug_when>
    <thetext>All good points. Uploading new patch...

With regard to placement of the root layer logic:
Option 1) push it into LayerRendererChromium --- same functions would exist, but they wouldn&apos;t be polluting WebViewImpl
Option 2) try to get root layers drawing as regular ContentLayerChromium&apos;s, then remove the root layer special case
Option 3) land the changes as is in order to fix the scrolling bugs, then try for option 2

Any preferences?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275319</commentid>
    <comment_count>11</comment_count>
      <attachid>66768</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-07 14:55:29 -0700</bug_when>
    <thetext>Created attachment 66768
Patch

Fixes based on latest review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275345</commentid>
    <comment_count>12</comment_count>
      <attachid>66768</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-07 15:36:42 -0700</bug_when>
    <thetext>Comment on attachment 66768
Patch

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

I only reviewed the bits in WebKit/chromium for now.

&gt; WebKit/chromium/public/WebWidget.h:62
&gt; +    
nit: it looks like there is some extra whitespace here

&gt; WebKit/chromium/public/WebWidget.h:70
&gt; +    virtual void paint(WebCanvas*, const WebRect&amp; viewport) = 0;
nit: viewport -&gt; viewPort

&gt; WebKit/chromium/public/WebWidget.h:71
&gt; +    
and here

&gt; WebKit/chromium/public/WebWidget.h:73
&gt; +    // The finish argument controls whether the compositor will waiting for the
nit: &quot;will waiting&quot; -&gt; &quot;will wait&quot;

&gt; WebKit/chromium/public/WebWidget.h:78
&gt; +
and here

&gt; WebKit/chromium/public/WebWidget.h:79
&gt; +    // Called to inform the WebWidget of a change in native widget settings.
nit: &quot;change in native widget settings&quot; -&gt; &quot;change in theme&quot;

&gt; WebKit/chromium/public/WebWidgetClient.h:49
&gt; +    // Called when a call to WebWidget::composite is required
nit: please end this comment with a period.  nit: please move scheduleComposite
down below didScrollRect since didInvalidateRect and didScrollRect really belong
together.

&gt; WebKit/chromium/src/ChromeClientImpl.cpp:529
&gt; +        m_webView-&gt;scrollRootLayer(scrollDelta, clipRect);
nit: it seems like scrollRootLayer should also end with &quot;Rect&quot; to match the style of invalidateRootLayerRect.

&gt; WebKit/chromium/src/WebPopupMenuImpl.cpp:180
&gt; +}
nit: please add a new line between method definitions

&gt; WebKit/chromium/src/WebPopupMenuImpl.h:66
&gt; +    virtual void themeChanged();
nit: the order of method declarations here should match the order in which they are declared in WebWidget.h

&gt; WebKit/chromium/src/WebViewImpl.cpp:915
&gt; +        if (isAcceleratedCompositingActive()) {
nit: elsewhere you enclose the isAcceleratedCompositingActive() call within #if USE(ACCELERATED_COMPOSITING).  might be good to be consistent with that.

&gt; WebKit/chromium/src/WebViewImpl.cpp:956
&gt; +        invalidateRootLayerRect(rect);
why do we need to invalidate here?  it seems strange to invalidate during painting.

&gt; WebKit/chromium/src/WebViewImpl.cpp:957
&gt; +        doComposite(canvas, false);
in the case where this paint method is being called to capture a thumbnail
for the new tab page in chromium, shouldn&apos;t we avoid the present step?

i hadn&apos;t considered this issue when we talked about these API interfaces
before.

would it be meaningful to split up the composite step from the present
step?

&gt; WebKit/chromium/src/WebViewImpl.cpp:2109
&gt; +        WebRect damagedRect(0, 0, m_size.width, m_size.height);
nit: better to use IntRect for internal usage.  WebRect should just be
used at the interface level when passing things across the interface.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2192
&gt; +    m_client-&gt;scheduleComposite();
perhaps we should re-order these?  imagine if the implementor of
scheduleComposite did something evil like call WebWidget::close!
in general, you should be extra defensive when you call out to
foreign code.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2197
&gt; +void WebViewImpl::scrollRootLayer(const WebSize&amp; scrollDelta, const WebRect&amp; clipRect)
nit: recommend using IntSize and IntRect here

&gt; WebKit/chromium/src/WebViewImpl.cpp:2222
&gt; +                           contentRect.width(), contentRect.height());
nit: seems odd to line wrap all params except the last.  either wrap all or none?

&gt; WebKit/chromium/src/WebViewImpl.cpp:2225
&gt; +    // shared memory section.
nit: this comment mentions shared memory.  i don&apos;t see the painting step down below.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2227
&gt; +        float dx = (float)scrollDelta.width;
nit: prefer C++ style static_cast&lt;float&gt; over C-style cast

&gt; WebKit/chromium/src/WebViewImpl.cpp:2251
&gt; +    IntRect iDamagedRect(damagedRect);
this is another reason to pass IntRect to this method instead of WebRect.

you could just write m_scrollDamage.unite(damagedRect), right?

&gt; WebKit/chromium/src/WebViewImpl.cpp:2255
&gt; +}
nit: add new line between method definitions

&gt; WebKit/chromium/src/WebViewImpl.cpp:2256
&gt; +void WebViewImpl::invalidateRootLayerRect(const WebRect&amp; rect)
nit: we generally prefer to use WebCore types instead of API types for internal functions.
type conversion should happen on the barrier of the API.  WebRect only exists as a means to
hide IntRect (and the WebCore namespace) from the embedder (Chromium).

&gt; WebKit/chromium/src/WebViewImpl.cpp:2262
&gt; +    WebFrameImpl* webframe = mainFrameImpl();
it would probably be a bit more direct to go page()-&gt;mainFrame()-&gt;view() to get to the main FrameView.  in this case, you only need to null check page().

&gt; WebKit/chromium/src/WebViewImpl.cpp:2269
&gt; +    FloatRect lsRect(rect.x + view-&gt;scrollX(),
nit: lsRect is a mysterious name.  maybe contentRect would be better since you are taking scroll offset into account?

maybe you should be using ScrollView::windowToContents for this conversion?

(I&apos;m concerned that all of this logic is only correct for the top-most FrameView, but we can worry about IFRAMEs in a separate bug.)

&gt; WebKit/chromium/src/WebViewImpl.cpp:2288
&gt; +        m_client-&gt;didInvalidateRect(damagedRect);
you could also call FrameView::invalidate() on the main FrameView.  that should be equivalent, but at least it would allow any future code that intercepts invalidations made on a FrameView to notice.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2302
&gt; +    WebFrameImpl* webframe = mainFrameImpl();
nit: same comment about getting the FrameView from page()-&gt;mainFrame()-&gt;view().

&gt; WebKit/chromium/src/WebViewImpl.cpp:2312
&gt; +    IntRect viewport    = IntRect(0, 0, m_size.width, m_size.height);
nit: viewport -&gt; viewPort and it is also not conventional in webkit style to line up the &quot;=&quot;s like that.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2319
&gt; +    damageRects.append(FloatRect(m_scrollDamage.x, m_scrollDamage.y, m_scrollDamage.width, m_scrollDamage.height));
if m_scrollDamage were stored as IntRect, then conversion to FloatRect would be implicit.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2322
&gt; +        // the damage rects for the root layer is in layer space [e.g. unscrolled.]
nit: &quot;the damage rects...&quot; -&gt; &quot;The damage rects...&quot;

&gt; WebKit/chromium/src/WebViewImpl.cpp:2324
&gt; +        const FloatRect ssRect = damageRects[i];
nit: prefer a more meaningful name than ssRect.  i&apos;m not sure what the &quot;ss&quot; prefix means.

this looks like it could be the output of ScrollView::contentsToWindow.  maybe you should call the variable visibleDamage?  after intersecting with the viewPort that would seem to describe what it is.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2328
&gt; +        
nit: avoid unnecessary whitespace.  blank lines should not have extra whitespace.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2334
&gt; +        WebRect wrect(rect.x(), rect.y(), rect.width(), rect.height());
avoiding use of WebRect for internal interfaces should help eliminate the need for this WebRect temporary.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2346
&gt; +    // Readback into the canvas, if requested.
nit: perhaps the readback step can be factored out into a helper function?

&gt; WebKit/chromium/src/WebViewImpl.cpp:2356
&gt; +    // FIXME: this is being called too early, we need to defer calling this 
isn&apos;t this what handling the finish flag will mean?  is this FIXME redundant with that FIXME?

&gt; WebKit/chromium/src/WebViewImpl.h:96
&gt; +    virtual void themeChanged();
nit: list methods here in the same order they are declared in WebWidget.h

&gt; WebKit/chromium/src/WebViewImpl.h:520
&gt; +    WebRect m_scrollDamage;
this should be stored as IntRect

&gt; WebKit/chromium/tests/PopupMenuTest.cpp:131
&gt; +    virtual void themeChanged() { }
nit: list methods here in the same order they are declared in WebWidget.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275425</commentid>
    <comment_count>13</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-09-07 17:21:22 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; All good points. Uploading new patch...
&gt; 
&gt; With regard to placement of the root layer logic:
&gt; Option 1) push it into LayerRendererChromium --- same functions would exist, but they wouldn&apos;t be polluting WebViewImpl
&gt; Option 2) try to get root layers drawing as regular ContentLayerChromium&apos;s, then remove the root layer special case
&gt; Option 3) land the changes as is in order to fix the scrolling bugs, then try for option 2
&gt; 
&gt; Any preferences?

Definitely Option #3.  I was just curious how close we are to moving this logic to the compositor. I think longer term we should do #2 but be smart about update rects (not do a blind union like composited layers do now) so that we don&apos;t end up redrawing more than we need to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275479</commentid>
    <comment_count>14</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-07 18:03:06 -0700</bug_when>
    <thetext>I suspect we&apos;re pretty near to #3. The two gaps are (1) merging the updateLayerContents logic with the RootLayer equivalent and (2) figuring out what to do with scrolling on child rects.

I am hopeful that chasing our IFrame bugs will end up being a forcing function for fusing rootLayer with ContentLayer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275498</commentid>
    <comment_count>15</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-07 18:16:23 -0700</bug_when>
    <thetext>&gt; it seems like scrollRootLayer should also end with &quot;Rect&quot; to match the style of invalidateRootLayerRect.

Interesting thought. The one difference is that scrollLayer isn&apos;t actually sending a rectangle. I personally lean away from adding a rect suffix, but I&apos;m ok either way. :)


&gt; nit: elsewhere you enclose the isAcceleratedCompositingActive() call within #if USE(ACCELERATED_COMPOSITING).  might be good to be consistent with that.
The rule I&apos;m [trying] to follow is as follows...

If the code depends on accelerated compositing being ON, but does not itself use any code that is conditional on USE(ACCELERATED_COMPOSITING), I use isAcceleratedCompositingActive. E.g. render_widget.cc::DoDeferredUpdate&apos;s uses isAccelerated because the methods it dispatches to are always present.

In contrast, if the code uses functions or variables that are conditional on USE(ACCELERATED_COMPOSITING), I enclose the just the &quot;dependent&quot; part of the function in a USE(ACCELERERATED_COMPOSITING) test, leaving the isAccelerated test outside. E.g.:
  if(isAcceleratedCompositing()) {
#if USE(ACCELERATED_COMPOSITING)
    someCompositorOnlyFunction();
#endif
  } else {
    // software path
  }
To me at least, this seemed better than:
#if USE(ACCELERATED_COMPOSITING)
  if(isAcceleratedCompositing()) {
    someCompositorOnlyFunction();
  } else {
#endif
    // software path
#if USE(ACCELERATED_COMPOSITING)
  }
#endif

I can change approach if there are strong opinions. :)


&gt; WebKit/chromium/src/WebViewImpl.cpp:956
&gt; +        invalidateRootLayerRect(rect);
&gt; why do we need to invalidate here?  it seems strange to invalidate during painting.
I have no clue! Deleted! :)

&gt; in the case where this paint method is being called to capture a thumbnail
&gt; for the new tab page in chromium, shouldn&apos;t we avoid the present step?

Good idea. I&apos;ll push the present() that is in the doComposite flow up to the ::paint function.
The placeholder for James&apos; readback code will also move up to ::paint.



&gt; WebViewImpl::themeChanged:  you could also call FrameView::invalidate() on the main FrameView
I switched over to this code. Afaik, I can call this directly, and it will route back to the view if needed. Does this seem right?




&gt;&gt; WebKit/chromium/src/WebViewImpl.cpp:2356
&gt;&gt; +    // FIXME: this is being called too early, we need to defer calling this 
&gt;isn&apos;t this what handling the finish flag will mean?  is this FIXME redundant with that FIXME?
Yes it is. Deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275500</commentid>
    <comment_count>16</comment_count>
      <attachid>66815</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-07 18:19:52 -0700</bug_when>
    <thetext>Created attachment 66815
Patch

Fixes based on Darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275503</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-07 18:22:18 -0700</bug_when>
    <thetext>Attachment 66815 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebViewImpl.cpp:970:  Missing space before ( in if(  [whitespace/parens] [5]
WebKit/chromium/src/WebViewImpl.cpp:2207:  Missing space before ( in if(  [whitespace/parens] [5]
WebKit/chromium/src/WebViewImpl.cpp:2294:  Missing space before ( in if(  [whitespace/parens] [5]
Total errors found: 3 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275535</commentid>
    <comment_count>18</comment_count>
      <attachid>66828</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-07 19:02:33 -0700</bug_when>
    <thetext>Created attachment 66828
Patch

Oops, Stylebot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276123</commentid>
    <comment_count>19</comment_count>
      <attachid>66951</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-08 15:43:08 -0700</bug_when>
    <thetext>Created attachment 66951
Patch

Changes to allow this patch to land without disrupting the downstream &apos;old&apos; render_widget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276147</commentid>
    <comment_count>20</comment_count>
      <attachid>66828</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-09-08 16:04:39 -0700</bug_when>
    <thetext>Comment on attachment 66828
Patch

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

Just a couple of random nits on my side.

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.h:64
&gt; +    // updates size of root texture, if needed, and scrolls the backbuffer
Descriptions need to start with a capital letter and end in a period. Here and below.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2169
&gt; +    // Compute the region we will expose by scrolling We use the
Missing period after &quot;scrolling&quot;

&gt; WebKit/chromium/src/WebViewImpl.cpp:2204
&gt; +    // so that invalidations and scroll invalidations play well with one-another.
this comment should probably move down, to right above the point where you do the actual conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276162</commentid>
    <comment_count>21</comment_count>
      <attachid>66956</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-08 16:34:46 -0700</bug_when>
    <thetext>Created attachment 66956
Patch

Git pain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276165</commentid>
    <comment_count>22</comment_count>
      <attachid>66958</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-08 16:38:17 -0700</bug_when>
    <thetext>Created attachment 66958
Patch

Changes based on vangelis&apos; comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276166</commentid>
    <comment_count>23</comment_count>
      <attachid>66956</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-09-08 16:38:25 -0700</bug_when>
    <thetext>Comment on attachment 66956
Patch

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

Looks good!

&gt; WebKit/chromium/ChangeLog:35
&gt; +2010-09-02  Nat Duca  &lt;nduca@chromium.org&gt;
Changelog now has two entries :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276173</commentid>
    <comment_count>24</comment_count>
      <attachid>66961</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-08 16:48:55 -0700</bug_when>
    <thetext>Created attachment 66961
Patch

Remove double changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276518</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-09 09:42:20 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; it seems like scrollRootLayer should also end with &quot;Rect&quot; to match the style of invalidateRootLayerRect.
&gt; 
&gt; Interesting thought. The one difference is that scrollLayer isn&apos;t actually sending a rectangle. I personally lean away from adding a rect suffix, but I&apos;m ok either way. :)

Well, there is the clipping rectangle.  It is &quot;scrolling the root layer within the given rectangle.&quot;


&gt; &gt; nit: elsewhere you enclose the isAcceleratedCompositingActive() call within #if USE(ACCELERATED_COMPOSITING).  might be good to be consistent with that.
&gt; The rule I&apos;m [trying] to follow is as follows...
&gt; 
&gt; If the code depends on accelerated compositing being ON, but does not itself use any code that is conditional on USE(ACCELERATED_COMPOSITING), I use isAcceleratedCompositingActive. E.g. render_widget.cc::DoDeferredUpdate&apos;s uses isAccelerated because the methods it dispatches to are always present.
&gt; 
&gt; In contrast, if the code uses functions or variables that are conditional on USE(ACCELERATED_COMPOSITING), I enclose the just the &quot;dependent&quot; part of the function in a USE(ACCELERERATED_COMPOSITING) test, leaving the isAccelerated test outside. E.g.:
&gt;   if(isAcceleratedCompositing()) {
&gt; #if USE(ACCELERATED_COMPOSITING)
&gt;     someCompositorOnlyFunction();
&gt; #endif
&gt;   } else {
&gt;     // software path
&gt;   }
&gt; To me at least, this seemed better than:
&gt; #if USE(ACCELERATED_COMPOSITING)
&gt;   if(isAcceleratedCompositing()) {
&gt;     someCompositorOnlyFunction();
&gt;   } else {
&gt; #endif
&gt;     // software path
&gt; #if USE(ACCELERATED_COMPOSITING)
&gt;   }
&gt; #endif
&gt; 
&gt; I can change approach if there are strong opinions. :)

OK, that&apos;s fine.  Thanks for the explanation.


&gt; &gt; WebKit/chromium/src/WebViewImpl.cpp:956
&gt; &gt; +        invalidateRootLayerRect(rect);
&gt; &gt; why do we need to invalidate here?  it seems strange to invalidate during painting.
&gt; I have no clue! Deleted! :)
&gt; 
&gt; &gt; in the case where this paint method is being called to capture a thumbnail
&gt; &gt; for the new tab page in chromium, shouldn&apos;t we avoid the present step?
&gt; 
&gt; Good idea. I&apos;ll push the present() that is in the doComposite flow up to the ::paint function.
&gt; The placeholder for James&apos; readback code will also move up to ::paint.

OK


&gt; &gt; WebViewImpl::themeChanged:  you could also call FrameView::invalidate() on the main FrameView
&gt; I switched over to this code. Afaik, I can call this directly, and it will route back to the view if needed. Does this seem right?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276526</commentid>
    <comment_count>26</comment_count>
      <attachid>66961</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-09 09:50:35 -0700</bug_when>
    <thetext>Comment on attachment 66961
Patch

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

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:275
&gt; +    // ASSERT(static_cast&lt;int&gt;(CGBitmapContextGetWidth(m_rootLayerCGContext.get())) == updateRect.width() &amp;&amp; static_cast&lt;int&gt;(CGBitmapContextGetHeight(m_rootLayerCGContext.get())) == updateRect.height());
is there a reason for commenting out this assertion?  should it just be deleted instead?

&gt; WebKit/chromium/ChangeLog:15
&gt; +        a pair of methods: paintComposited and
this ChangeLog needs to be revised to correspond to the actual name
of the methods.  you should probably just regenerate it completely
as the list of methods below is also out of date.

&gt; WebKit/chromium/src/WebViewImpl.cpp:956
&gt; +        doComposite(canvas);
it&apos;s not clear why doComposite needs a canvas parameter if wjmaclean&apos;s
readback code is going to go below here.

&gt; WebKit/chromium/src/WebViewImpl.cpp:2311
&gt; +void WebViewImpl::doComposite(WebCanvas* canvas)
i&apos;m pretty sure this canvas parameter can be deleted now.

Looking great overall.  Just these few minor issues remaining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276647</commentid>
    <comment_count>27</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-09 11:59:03 -0700</bug_when>
    <thetext>New patch coming with Darin&apos;s suggestions. ScrollRootLayer -&gt; ScrollRootLayerRect, changelog fixes, doComposite has no arguments and accidentally-commented out assert all fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276719</commentid>
    <comment_count>28</comment_count>
      <attachid>67089</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-09 13:48:27 -0700</bug_when>
    <thetext>Created attachment 67089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276743</commentid>
    <comment_count>29</comment_count>
      <attachid>67094</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-09 14:05:09 -0700</bug_when>
    <thetext>Created attachment 67094
I fail at changelogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276750</commentid>
    <comment_count>30</comment_count>
      <attachid>67096</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2010-09-09 14:11:08 -0700</bug_when>
    <thetext>Created attachment 67096
I fail at git as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277320</commentid>
    <comment_count>31</comment_count>
      <attachid>67096</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-10 11:24:33 -0700</bug_when>
    <thetext>Comment on attachment 67096
I fail at git as well.

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

&gt; WebKit/chromium/src/ChromeClientImpl.cpp:502
&gt; +    } else {
nit: no angle brackets here

&gt; WebKit/chromium/src/ChromeClientImpl.cpp:528
&gt; +    } else {
nit: no angle brackets here

R=me otherwise.  I&apos;ll fix those up and commit this patch manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277481</commentid>
    <comment_count>32</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-10 15:33:51 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/67244</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66418</attachid>
            <date>2010-09-02 15:18:53 -0700</date>
            <delta_ts>2010-09-02 17:54:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100902151851.patch</filename>
            <type>text/plain</type>
            <size>37570</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmFkMTBkZjJhMjRlYjcwZDhjYzJhZWU5ZTg0YjIyOWY5YzAwNDFhYi4uMWM0ODdhMTEyM2E4N2Q2
OTRmNjM2MTdlODdhMTE1NjkyNjViZDFmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wMiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY1MTlmMWZmMmJhMTgyNmYyZTI4
NTk2MmIwMzgxNzEyYTQ2ZTlkY2MuLjkyZWM0OWI1Y2M3ZjdmZjhiNjM3YjZkMzBhMTI0YTE0ZGMw
YmMzYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcApAQCAtMjk5LDEwICsyOTksMTUgQEAgdm9pZCBMYXllckNocm9taXVt
OjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBpZiAobV9ib3VuZHMgPT0gc2l6
ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBmaXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53
aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWln
aHQoKTsKKyAgICAKICAgICBtX2JvdW5kcyA9IHNpemU7CiAgICAgbV9iYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKIAotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgaWYgKGZpcnN0UmVzaXplKQor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCiBjb25zdCBMYXll
ckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApAQCAtMzUzLDcgKzM1
OCw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAKICAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MzYzLDYgKzM2NywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewog
ICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJhMTUwODg0NGJhMzViMzQ1MWY4
MmNkNTg5YTY1Mzk3NjUyMWEwOGMuLjJkMjI1ZGFmNWEyMDcxYmFiZmViZDZhN2NmM2NjMDVlMjZi
MzkwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnR5UmVjdDsgfQorICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTAzMzhkMmQ1ZjczMjRlNWExMTljNTA5MTkwZGZlZjg2OThi
MTc2OS4uYWY2MGM4ZWRmYTc3YmJkZWEzZWRiYThlMmU1ZmIzYjY4YjJmN2IyNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMTA5LDYgKzEwOSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkZWJ1Z0dMQ2FsbChjb25zdCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiBmaWxl
LCBpCiAvLyBDcmVhdGVzIGEgY2FudmFzIGFuZCBhbiBhc3NvY2lhdGVkIGdyYXBoaWNzIGNvbnRl
eHQgdGhhdCB0aGUgcm9vdCBsYXllciB3aWxsCiAvLyByZW5kZXIgaW50by4KIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXJDYW52YXNTaXplKGNvbnN0IEludFNpemUmIHNp
emUpCisKIHsKICAgICBpZiAoc2l6ZSA9PSBtX3Jvb3RMYXllckNhbnZhc1NpemUpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1Miw4ICsxNTMsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXNlU2hhZGVyKHVuc2lnbmVkIHByb2dyYW1JZCkKIAogLy8gVXBkYXRlcyB0aGUgY29udGVudHMg
b2YgdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZSB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0
CiAvLyBhbmQgcmUtY29tcG9zaXRzIGFsbCBzdWJsYXllcnMuCi12b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyhjb25z
dCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9p
bnQmIHNjcm9sbFBvc2l0aW9uKQogewogICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OwogCkBAIC0xODAsMTAgKzE4MSwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIC8v
IFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEsIGluY2x1ZGlu
ZyB0aGUgc2Nyb2xsYmFycy4KICAgICBHTEMoZ2xWaWV3cG9ydCgwLCAwLCB2aXNpYmxlUmVjdFdp
ZHRoLCB2aXNpYmxlUmVjdEhlaWdodCkpOwogCisKICAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVy
dGV4IGF0dHJpYnV0ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxheWVycy4KICAgICBMYXll
ckNocm9taXVtOjpwcmVwYXJlRm9yRHJhdyhsYXllclNoYXJlZFZhbHVlcygpKTsKKyAgICAKIAot
ICAgIC8vIEZJWE1FOiBUaGVzZSBjYWxscyBjYW4gYmUgbWFkZSBvbmNlLCB3aGVuIHRoZSBjb21w
b3NpdG9yIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQuCiAgICAgR0xDKGdsRGlzYWJsZShHTF9ERVBU
SF9URVNUKSk7CiAgICAgR0xDKGdsRGlzYWJsZShHTF9DVUxMX0ZBQ0UpKTsKICAgICBHTEMoZ2xE
ZXB0aEZ1bmMoR0xfTEVRVUFMKSk7CkBAIC0xOTMsMTQgKzE5NSwxMiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25z
dCBJbnRSZWN0JgogICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAK
ICAgICBJbnRQb2ludCBzY3JvbGxEZWx0YSA9IHRvUG9pbnQoc2Nyb2xsUG9zaXRpb24gLSBtX3Nj
cm9sbFBvc2l0aW9uKTsKLSAgICAvLyBTY3JvbGwgb25seSB3aGVuIHRoZSB1cGRhdGVSZWN0IGNv
bnRhaW5zIHBpeGVscyBmb3IgdGhlIG5ld2x5IHVuY292ZXJlZCByZWdpb24gdG8gYXZvaWQgZmxh
c2hpbmcuCi0gICAgaWYgKChzY3JvbGxEZWx0YS54KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID49
IGFicyhzY3JvbGxEZWx0YS54KCkpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gY29udGVudFJl
Y3QuaGVpZ2h0KCkpCi0gICAgICAgIHx8IChzY3JvbGxEZWx0YS55KCkgJiYgdXBkYXRlUmVjdC5o
ZWlnaHQoKSA+PSBhYnMoc2Nyb2xsRGVsdGEueSgpKSAmJiB1cGRhdGVSZWN0LndpZHRoKCkgPj0g
Y29udGVudFJlY3Qud2lkdGgoKSkpIHsKKyAgICAvLyBTY3JvbGwgdGhlIGJhY2tidWZmZXIKKyAg
ICBpZiAoc2Nyb2xsRGVsdGEueCgpIHx8IHNjcm9sbERlbHRhLnkoKSkgewogICAgICAgICAvLyBT
Y3JvbGxpbmcgd29ya3MgYXMgZm9sbG93czogV2UgcmVuZGVyIGEgcXVhZCB3aXRoIHRoZSBjdXJy
ZW50IHJvb3QgbGF5ZXIgY29udGVudHMKICAgICAgICAgLy8gdHJhbnNsYXRlZCBieSB0aGUgYW1v
dW50IHRoZSBwYWdlIGhhcyBzY3JvbGxlZCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUgYW5kIHRoZW4g
cmVhZCB0aGUKICAgICAgICAgLy8gcGl4ZWxzIG9mIHRoZSBjb250ZW50IGFyZWEgKHZpc2libGUg
YXJlYSBleGNsdWRpbmcgdGhlIHNjcm9sbCBiYXJzKSBiYWNrIGludG8gdGhlCi0gICAgICAgIC8v
IHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQgYXJlYSBpcyBzdWJlc3F1ZW50
bHkgZmlsbGVkIGFzIHVzdWFsIHdpdGgKLSAgICAgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVSZWN0LgorICAgICAgICAvLyByb290IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBv
c2VkIGFyZWEgd2lsbCBiZSBmaWxsZWQgYnkgYSBzdWJzZXF1ZW50IGRyYXdMYXllcnNJbnRvUmVj
dCBjYWxsCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbGVkTGF5ZXJNYXRyaXg7
CiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmOwpA
QCAtMjMwLDQzICsyMzAsNjQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICAgICAgLy8g
bm8gbmVlZCB0byBjb3B5IGZyYW1lYnVmZmVyIHBpeGVscyBiYWNrIGludG8gdGhlIHRleHR1cmUu
CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9CisgICAg
CisgICAgLy8gVHJhbnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9s
bCBwb3NpdGlvbi4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgbWF0cml4
LnRyYW5zbGF0ZTNkKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgp
LCAwKTsKIAotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGNoZWNrIHNob3VsZCBnbyBhd2F5
IHdoZW4gdGhlIGNvbXBvc2l0b3IgcmVuZGVycyBpbmRlcGVuZGVudGx5IGZyb20gaXRzIG93biB0
aHJlYWQuCi0gICAgLy8gSWdub3JlIGEgMXgxIHVwZGF0ZSByZWN0IGF0ICgwLCAwKSBhcyB0aGF0
J3MgdXNlZCBhIHdheSB0byBraWNrIG9mZiBhIHJlZHJhdyBmb3IgdGhlIGNvbXBvc2l0b3IuCi0g
ICAgaWYgKCEoIXVwZGF0ZVJlY3QueCgpICYmICF1cGRhdGVSZWN0LnkoKSAmJiB1cGRhdGVSZWN0
LndpZHRoKCkgPT0gMSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID09IDEpKSB7Ci0gICAgICAgIC8v
IFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBBU1NFUlQoKHVwZGF0ZVJl
Y3QueCgpICsgdXBkYXRlUmVjdC53aWR0aCgpIDw9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQot
ICAgICAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QueSgpICsgdXBkYXRlUmVjdC5oZWlnaHQoKSA8
PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsKKyAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIg
dHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zvcm1zLgorICAgIGZsb2F0IG9wYWNpdHkg
PSAxOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJz
ID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOworICAgIHNpemVfdCBpOworICAgIGZvciAo
aSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAgICAgIHVwZGF0ZUxheWVyc1Jl
Y3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwgb3BhY2l0eSk7Cit9CiAKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OworCisgICAgaWYgKCFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVXBk
YXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgQVNTRVJUKCh1cGRhdGVSZWN0LngoKSAr
IHVwZGF0ZVJlY3Qud2lkdGgoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKKyAgICAgICAg
ICAgJiYgKHVwZGF0ZVJlY3QueSgpICsgdXBkYXRlUmVjdC5oZWlnaHQoKSA8PSBtX3Jvb3RMYXll
clRleHR1cmVIZWlnaHQpKTsKKyAgICAKICNpZiBQTEFURk9STShTS0lBKQotICAgICAgICAvLyBH
ZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIGNvbnN0IFNrQml0
bWFwIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFw
KGZhbHNlKTsKLSAgICAgICAgaW50IHJvb3RMYXllcldpZHRoID0gYml0bWFwLndpZHRoKCk7Ci0g
ICAgICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7Ci0gICAgICAgIEFT
U0VSVChyb290TGF5ZXJXaWR0aCA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgcm9vdExheWVySGVp
Z2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB2b2lkKiBwaXhlbHMgPSBiaXRt
YXAuZ2V0UGl4ZWxzKCk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVw
ZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBHTEMoZ2xUZXhT
dWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0Lnko
KSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVkIHJlY3QuCisgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGludCByb290TGF5ZXJX
aWR0aCA9IGJpdG1hcC53aWR0aCgpOworICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAu
aGVpZ2h0KCk7CisgICAgQVNTRVJUKHJvb3RMYXllcldpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgo
KSAmJiByb290TGF5ZXJIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCog
cGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9m
IHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBHTEMoZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0
LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICAgICAv
LyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250
ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dC
aXRtYXBDb250ZXh0R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBk
YXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHZvaWQqIHBpeGVscyA9IG1fcm9vdExheWVyQmFj
a2luZ1N0b3JlLmRhdGEoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUg
dXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgICAgIC8vIFRoZSBv
cmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBz
eXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgotICAgICAgICBHTEMoZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXBkYXRlUmVjdC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3Qu
eSgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgLy8g
R2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIC8vIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0
LmdldCgpKSkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRt
YXBDb250ZXh0R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRl
UmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3Rv
cmUuZGF0YSgpOworCisgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVj
dCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgorICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhl
IGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQg
dG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgorICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jv
b3RMYXllclRleHR1cmVIZWlnaHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJl
Y3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBwaXhlbHMpKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5
b3VyIHBsYXRmb3JtLiIKICNlbmRpZgotICAgIH0KK30KIAordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwor
ICAgIAogICAgIGdsQ2xlYXJDb2xvcigwLCAwLCAxLCAxKTsKICAgICBnbENsZWFyKEdMX0NPTE9S
X0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKTsKLQorICAgIAorICAgIEdMQyhnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CisgICAgCiAg
ICAgLy8gUmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRo
ZSBlbnRpcmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cuCiAgICAgLy8gV2UgcmV1c2UgdGhl
IHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCiAgICAgY29uc3Qg
Q29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0g
Y29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7CkBAIC0yOTAsMjIgKzMxMSwxMyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhnbEVuYWJsZShHTF9CTEVORCkpOwogICAgIEdMQyhn
bEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKIAotICAgIC8vIFRy
YW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24u
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgIG1hdHJpeC50cmFuc2xhdGUz
ZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7Ci0KLSAg
ICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zv
cm1zLgotICAgIGZsb2F0IG9wYWNpdHkgPSAxOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOwot
ICAgIHNpemVfdCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKysp
Ci0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJp
eCwgb3BhY2l0eSk7Ci0KLSAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwotCiAg
ICAgLy8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5
ZXJzIG92ZXIgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVT
VCkpOwogICAgIEZsb2F0UmVjdCBzY2lzc29yUmVjdChjb250ZW50UmVjdCk7CisKKyAgICAvLyBT
ZXQgdGhlIHJvb3RWaXNpYmxlUmVjdCAtLS0gdXNlZCBieSBzdWJzZXF1ZW50IGRyYXdMYXllcnMg
Y2FsbHMKKyAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OworCiAgICAgLy8gVGhl
IHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9mZnNldC4KICAgICBz
Y2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24u
eSgpKTsKICAgICBzY2lzc29yVG9SZWN0KHNjaXNzb3JSZWN0KTsKQEAgLTMxNiwxMyArMzI4LDE3
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3Qm
IHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgR0xDKGdsU3RlbmNpbE1hc2soMCkpOwog
CiAgICAgLy8gVHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgb25lIG1vcmUgdGltZSB0byBkcmF3IHRo
ZSBsYXllcnMuCi0gICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKKyAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9v
dExheWVyLT5nZXRTdWJsYXllcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1Ymxh
eWVycy5zaXplKCk7IGkrKykKICAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNb
aV0uZ2V0KCksIHNjaXNzb3JSZWN0KTsKIAogICAgIEdMQyhnbERpc2FibGUoR0xfU0NJU1NPUl9U
RVNUKSk7Cit9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVzZW50KCkKK3sKKyAg
ICAvLyBXZSdyZSBkb25lISBUaW1lIHRvIHN3YXBidWZmZXJzIQogICAgIG1fZ2xlczJDb250ZXh0
LT5zd2FwQnVmZmVycygpOwotCiAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKaW5kZXggOGY0NGFmZWJkMGEyYzdiNDc1ZDA0YmE0ODcyM2YxY2RjNTQ1
NTA5MS4uMmY5ZWRlZjY3YzIzM2ZmYjdjMDJkNDM1MTdkZTViNzU0NzAxYjEyOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCkBAIC02MSw5ICs2MSwxNyBAQCBwdWJsaWM6CiAgICAgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBnbGVzMkNvbnRleHQpOwogICAgIH5M
YXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIAotICAgIC8vIFVwZGF0ZXMgdGhlIGNvbnRlbnRzIG9m
IHRoZSByb290IGxheWVyIHRoYXQgZmFsbCBpbnNpZGUgdGhlIHVwZGF0ZVJlY3QgYW5kIHJlY29t
cG9zaXRlcwotICAgIC8vIGFsbCB0aGUgbGF5ZXJzLgotICAgIHZvaWQgZHJhd0xheWVycyhjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7Cisg
ICAgLy8gdXBkYXRlcyBzaXplIG9mIHJvb3QgdGV4dHVyZSwgaWYgbmVlZGVkLCBhbmQgc2Nyb2xs
cyB0aGUgYmFja2J1ZmZlcgorICAgIHZvaWQgcHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbik7CisgICAgCisgICAgLy8gdXBkYXRlcyBhIHJlY3RhbmdsZSB3
aXRoaW4gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZQorICAgIHZvaWQgdXBkYXRlUm9vdExheWVyVGV4
dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCk7CisKKyAgICAvLyBkcmF3cyB0aGUg
Y3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgorICAgIHZvaWQgZHJhd0xheWVycyhj
b25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwor
CisgICAgLy8gcHV0cyBiYWNrYnVmZWZmZXIgb25zY3JlZW4KKyAgICB2b2lkIHByZXNlbnQoKTsK
IAogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIp
IHsgbV9yb290TGF5ZXIgPSBsYXllcjsgfQogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigp
IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1MjdlOGVmY2Nh
ZTM5MDQ1ZmQ5ODVkZWQzYmYyMGQ3MTY2YWZjNjlkLi41OTUwOTI1MWExZTM2NzI2NmVkMjBjN2Zh
YjJlNzBhZWQzNDU3Y2RhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wOS0w
MiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3Np
dGluZzogc2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgSW50cm9kdWNlIGEg
bmV3IEFQSSBvbiBXZWJXaWRnZXQgZm9yIHBhaW50aW5nIHdpdGggYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgdGhhdCBhbGxvd3MgdGhlIGNvbXBvc2l0b3IgdG8gcHJvcGVybHkgZGlz
dGluZ2l1c2gKKyAgICAgICAgc2Nyb2xsaW5nLCBpbnZhbGlkYXRpb24gYW5kIHJlcGFpbnRpbmcg
ZnJvbSBvbmUgYW5vdGhlci4gVGhlIGtleQorICAgICAgICBjaGFuZ2UgaXMgdGhhdCBpbiBhY2Nl
bGVyYXRlZCByZW5kZXJpbmcgY2FzZSwgaW52YWxpZGF0ZXMgYW5kCisgICAgICAgIHNjcm9sbGlu
ZyBwYXNzIGRpcmVjdGx5IHRvIHRoZSBjb21wb3NpdG9yLCByYXRoZXIgdGhhbiBwYXNzaW5nIHVw
CisgICAgICAgIHRvIHRoZSBjbGllbnQgYXMgd2FzIHRoZSBjYXNlIGluIHRoZSBzb2Z0d2FyZSBw
YXRoLiBGb3IKKyAgICAgICAgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nLCB0aGUgcHJldmlvdXMgcGFp
bnQoKSBtZXRob2QgaXMgcmVwbGFjZWQgYnkKKyAgICAgICAgYSBwYWlyIG9mIG1ldGhvZHM6IHBh
aW50Q29tcG9zaXRlZCBhbmQKKyAgICAgICAgaW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJS
ZWN0LgorCisKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgICogcHVibGlj
L1dlYldpZGdldENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXRDbGllbnQ6OnNj
aGVkdWxlRGVmZXJyZWRDb21wb3NpdGUpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0ZUNvbnRl
bnRzQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xs
KToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudUltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51
SW1wbDo6aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUG9wdXBNZW51SW1wbDo6cGFpbnRDb21wb3NpdGVkKToKKyAgICAgICAgKiBzcmMvV2Vi
UG9wdXBNZW51SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBo
aWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJv
b3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnZh
bGlkYXRlUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3Jv
bGxSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZUNv
bXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBh
aW50Q29tcG9zaXRlZCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICog
dGVzdHMvUG9wdXBNZW51VGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJXaWRnZXQ6
OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRl
c3RXZWJXaWRnZXQ6OnBhaW50Q29tcG9zaXRlZCk6CisKIDIwMTAtMDktMDIgIElseWEgU2hlcm1h
biAgPGlzaGVybWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCA1YzlmNTRlNzkzNjZiODNhZmVl
N2MwZTFlM2EzMjg4YzM0NDEyY2E5Li44YzMwZGM5NDM1NGViMmJmZTkxM2UzNTAyZTNjOWVlY2Fi
OWRjOTA0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTU5LDE0ICs1OSwzMiBA
QCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIGxheW91dCB0aGUgV2ViV2lkZ2V0LiAgVGhpcyBN
VVNUIGJlIGNhbGxlZCBiZWZvcmUgUGFpbnQsCiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQgaW4g
Y2FsbHMgdG8gV2ViV2lkZ2V0Q2xpZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCkgPSAwOwotCi0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSBzcGVjaWZp
ZWQgcmVnaW9uIG9mIHRoZSBXZWJXaWRnZXQgb250byB0aGUgZ2l2ZW4KLSAgICAvLyBjYW52YXMu
ICBZb3UgTVVTVCBjYWxsIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlz
Ci0gICAgLy8gb2theSB0byBjYWxsIHBhaW50IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhh
cyBiZWVuIGNhbGxlZCwKLSAgICAvLyBhc3N1bWluZyBubyBvdGhlciBjaGFuZ2VzIGFyZSBtYWRl
IHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9uY2UKLSAgICAvLyBldmVudHMgYXJlIHByb2Nlc3Nl
ZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8KLSAgICAvLyBsYXlv
dXQgaXMgd2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSA9IDA7CisgICAgCisgICAgLy8gQ2Fs
bGVkIHRvIHBhaW50IHRoZSBzcGVjaWZpZWQgdmlld3BvcnQgb2YgdGhlIFdlYldpZGdldCAKKyAg
ICAvLyBvbnRvIHRoZSBzcGVjaWZpZWQgY2FudmFzIGF0ICh2aWV3cG9ydC54LHZpZXdwb3J0Lnkp
LiBZb3UgTVVTVCBjYWxsCisgICAgLy8gTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9k
LiAgSXQgaXMgb2theSB0byBjYWxsIHBhaW50CisgICAgLy8gbXVsdGlwbGUgdGltZXMgb25jZSBs
YXlvdXQgaGFzIGJlZW4gY2FsbGVkLCBhc3N1bWluZyBubyBvdGhlcgorICAgIC8vIGNoYW5nZXMg
YXJlIG1hZGUgdG8gdGhlIFdlYldpZGdldCAoZS5nLiwgb25jZSBldmVudHMgYXJlCisgICAgLy8g
cHJvY2Vzc2VkLCBpdCBzaG91bGQgYmUgYXNzdW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0byBsYXlv
dXQgaXMKKyAgICAvLyB3YXJyYW50ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYgdmlld3BvcnQpID0gMDsK
KyAgICAKKyAgICAvLyBMaWtlIHBhaW50LCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBwYWlu
dCBhIHNwZWNpZmllZCB2aWV3cG9ydCBvZiB0aGUKKyAgICAvLyBXZWJXaWRnZXQgaW50byBhIGdp
dmVuIGNhbnZhcy4gSG93ZXZlciwgd2hlcmVhcyBXZWJXaWRnZXQ6OnBhaW50IHdpbGwgCisgICAg
Ly8gcmVuZGVyIHRoZSBlbnRpcmUgd2lkZ2V0IGludG8gdGhlIGNhbnZhcyBpbiBhbGwgY2FzZXMs
IHBhaW50TWluaW1hbCAKKyAgICAvLyB3aWxsIHBlcmZvcm0gdXNlIGl0cyBrbm93bGVkZ2Ugb2Yg
cmVjZW50bHkgaW52YWxpZGF0ZWQgcmVjdHMgdG8gcmVkdWNlCisgICAgLy8gcGFpbnRpbmcgd29y
ay4KKyAgICAvLyBXaGF0IGlzIG91dHB1dCBvbnRvIHRoZSBjYW52YXMgZGVwZW5kcyBvbiB3aGV0
aGVyIHRoZSB3aWRnZXQgaXMgdXNpbmcKKyAgICAvLyBzb2Z0d2FyZS0gb3IgaGFyZHdhcmUtIHJl
bmRlcmluZzoKKyAgICAvLyAtIFNvZnR3YXJlIHJlbmRlcmluZzogIG9ubHkgdGhlIGRhbWFnZWQg
cmVjdGFuZ2xlcyB3aWxsIGJlIHJlbmRlcmVkIG9udG8gdGhlIAorICAgIC8vICAgc3BlY2lmaWVk
IGNhbnZhcworICAgIC8vIC0gSGFyZHdhcmUgcmVuZGVyaW5nOiAgVGhlIGVudGlyZSB2aWV3cG9y
dCB3aWxsIGJlIHByZXNlbnRlZCB0byB0aGUgc2NyZWVuLgorICAgIC8vICAgSWYgdGhlIHNwZWNp
ZmllZCBjYW52YXMgaXMgbm9uLW51bGwsIHRoZSBmdWxsIHZpZXdwb3J0IHdpbGwgYmUgcmVuZGVy
ZWQKKyAgICAvLyAgIG9udG8gdGhlIGNhbnZhcy4KKyAgICAvLyBZb3UgTVVTVCBjYWxsIExheW91
dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCwgZm9yIHRoZSBzYW1lIHJlYXNvbnMKKyAgICAv
LyBkZXNjcmliZWQgaW4gdGhlIHBhaW50IG1ldGhvZCBhYm92ZS4KKyAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KGNvbnN0IFdlYlJlY3QmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29tcG9zaXRlZChXZWJDYW52YXMqKSA9IDA7CiAKICAgICAv
LyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYW4gaW5wdXQgZXZlbnQuICBSZXR1
cm5zIHRydWUgaWYKICAgICAvLyB0aGUgZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkLCBmYWxzZSBv
dGhlcndpc2UuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENs
aWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaAppbmRleCBi
ZDdiZDZhNzRmY2JhZjM3MWRmM2U5YTZlNDEwYmVkYmYzNTkyMzIwLi44YTE0N2FlMDM2ZmM3NDNk
NWMzZGM2ZGE0YmU1MWIzYTA2NTZmYjQxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lk
Z2V0Q2xpZW50LmgKQEAgLTQ1LDcgKzQ1LDEwIEBAIGNsYXNzIFdlYldpZGdldENsaWVudCB7CiBw
dWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSByZWdpb24gb2YgdGhlIFdlYldpZGdldCBuZWVk
cyB0byBiZSByZS1wYWludGVkLgogICAgIHZpcnR1YWwgdm9pZCBkaWRJbnZhbGlkYXRlUmVjdChj
b25zdCBXZWJSZWN0JikgeyB9Ci0KKyAgICAKKyAgICAvLyBDYWxsZWQgd2hlbiB0aGUgY29tcG9z
aXRvciB3YW50cyBhIGRlZmVycmVkIHJlcGFpbnQgY2FsbAorICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZURlZmVycmVkQ29tcG9zaXRlKCkgeyB9CisgICAgCiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBy
ZWdpb24gb2YgdGhlIFdlYldpZGdldCwgZ2l2ZW4gYnkgY2xpcFJlY3QsIHNob3VsZCBiZQogICAg
IC8vIHNjcm9sbGVkIGJ5IHRoZSBzcGVjaWZpZWQgZHggYW5kIGR5IGFtb3VudHMuCiAgICAgdmly
dHVhbCB2b2lkIGRpZFNjcm9sbFJlY3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYlJlY3QmIGNs
aXBSZWN0KSB7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4
IGU2ZjE0MDA3MTgwZDhkM2JmNjEyOGIxMzBkYzI4YWJhYWVjMWY5MGEuLjJmZGE4ZTY4ZTYxNGZm
MzY4MTdiNGMzOGJhZGZiMWQzMTE2MDI0OGQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmNwcApAQCAtNDkyLDggKzQ5MiwxNiBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6
OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBi
bwogewogICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5k
aWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVSZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgaWYgKCFtX3dlYlZpZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSgpKSB7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAg
ICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVSZWN0KTsK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV93ZWJWaWV3LT5pbnZhbGlkYXRlUm9vdExheWVyUmVjdCh1cGRhdGVSZWN0KTsKKyAgICB9Cisj
ZW5kaWYKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNGb3JT
bG93U2Nyb2xsKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQpAQCAt
NTA3LDExICs1MTUsMTkgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGwoCiAgICAgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgbV93ZWJWaWV3LT5oaWRlUG9wdXBzKCk7Ci0g
ICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKLSAgICAgICAgaW50IGR4ID0gc2Nyb2xsRGVs
dGEud2lkdGgoKTsKLSAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0gICAg
ICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBjbGlwUmVjdCk7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5p
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmICht
X3dlYlZpZXctPmNsaWVudCgpKSB7CisgICAgICAgICAgICBpbnQgZHggPSBzY3JvbGxEZWx0YS53
aWR0aCgpOworICAgICAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CisgICAg
ICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJl
Y3QpOworICAgICAgICB9CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0g
ZWxzZSB7CisgICAgICAgIG1fd2ViVmlldy0+c2Nyb2xsUm9vdExheWVyKHNjcm9sbERlbHRhLCBj
bGlwUmVjdCk7CiAgICAgfQorI2VuZGlmCiB9CiAKIEludFBvaW50IENocm9tZUNsaWVudEltcGw6
OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3QKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBvcHVwTWVudUltcGwuY3BwCmluZGV4IDc1ZDZjYzE0MzgyNGI3ZjU5MjkxMDI5YjQyN2Nl
OTIwYzIzZTQ1MzkuLjhkOThiMzlmNzhkNDgyMzgwZjFmYzJjOGUwNzUzZTZmMzU0MTYyYTYgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtMTU1LDEyICsxNTUs
MTIgQEAgdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpsYXlvdXQoKQogewogfQogCi12b2lkIFdlYlBv
cHVwTWVudUltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0
KQordm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3Qg
V2ViUmVjdCYgdmlld3BvcnQpCiB7CiAgICAgaWYgKCFtX3dpZGdldCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkgeworICAgIGlmICghdmlld3BvcnQuaXNFbXB0
eSgpKSB7CiAjaWYgV0VCS0lUX1VTSU5HX0NHCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhj
YW52YXMpOwogI2VsaWYgV0VCS0lUX1VTSU5HX1NLSUEKQEAgLTE3MCwxMCArMTcwLDE5IEBAIHZv
aWQgV2ViUG9wdXBNZW51SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJl
Y3QmIHJlY3QpCiAjZWxzZQogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogI2VuZGlmCi0gICAg
ICAgIG1fd2lkZ2V0LT5wYWludCgmZ2MsIHJlY3QpOworICAgICAgICBtX3dpZGdldC0+cGFpbnQo
JmdjLCB2aWV3cG9ydCk7CiAgICAgfQogfQogCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OmludmFs
aWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVjdChjb25zdCBXZWJSZWN0JiByZWN0KQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9Cit2b2lkIFdlYlBvcHVwTWVudUltcGw6OnBhaW50Q29tcG9z
aXRlZChXZWJDYW52YXMqIGNhbnZhcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBi
b29sIFdlYlBvcHVwTWVudUltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVu
dCYgaW5wdXRFdmVudCkKIHsKICAgICBpZiAoIW1fd2lkZ2V0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBvcHVwTWVudUltcGwuaAppbmRleCBlZGJiNGFiNTBkNDE2YjAzYjdiZDFhNWZjZTgwMDU1NjA5
MWVhMjI3Li5lMjVkNmNiYjJjNzQyN2NlN2VmOWQwZWQxMjVlNzVjMTBmOTJjMzVmIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqIGNhbnZhcywg
Y29uc3QgV2ViUmVjdCYgcmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVDb21wb3Np
dGVkUm9vdExheWVyUmVjdChjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
Q29tcG9zaXRlZChXZWJDYW52YXMqKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVu
dChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxv
c3QoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA0YjEyOWQ2OTRiMWYxMTJmMjdiMjFhZTcyNGRiNjdh
NjhhNzRlMDJhLi44NjNhMDdjZjA4OGU1MmMwNTA2ZmU0Njg4Nzk5ZmU0MDJkYzRmYzNkIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtOTA5LDcgKzkwOSwxMiBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKIAogICAgIGlmIChtX2Ns
aWVudCkgewogICAgICAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwg
bV9zaXplLmhlaWdodCk7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1h
Z2VkUmVjdCk7CisgICAgICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkg
eworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgICAgIGludmFsaWRh
dGVSb290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgCisg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogICAg
IH0KIAogI2lmIE9TKERBUldJTikKQEAgLTk0MywzMyArOTQ4LDE3IEBAIHZvaWQgV2ViVmlld0lt
cGw6OmxheW91dCgpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFz
LCBjb25zdCBXZWJSZWN0JiByZWN0KQogewotCisgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlm
ICghaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyAgICAgICAgaW52YWxpZGF0
ZVJvb3RMYXllclJlY3QocmVjdCk7CiAjZW5kaWYKKyAgICAgICAgcGFpbnRDb21wb3NpdGVkKGNh
bnZhcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVE9ETywgaWYgYWNjZWxlcmF0ZWQsIHJl
ZGlyZWN0IHRvIHBhaW50IGNvbXBvc2l0ZWQgbG9vcAogICAgICAgICBXZWJGcmFtZUltcGwqIHdl
YmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwogICAgICAgICBpZiAod2ViZnJhbWUpCiAgICAgICAg
ICAgICB3ZWJmcmFtZS0+cGFpbnQoY2FudmFzLCByZWN0KTsKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRHJhdyB0aGUgY29udGVudHMg
b2YgdGhlIHJvb3QgbGF5ZXIuCi0gICAgICAgIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKHJlY3Qp
OwotCi0gICAgICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7Ci0g
ICAgICAgIGlmICghd2ViZnJhbWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZyYW1l
VmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKLSAgICAgICAgaWYgKCF2aWV3KQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBpbmNsdWRl
cyBzY3JvbGxiYXJzIHdoZXJlYXMgdGhlIGNvbnRlbnRSZWN0IGRvZXNuJ3QuCi0gICAgICAgIElu
dFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0gICAg
ICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2Up
OwotCi0gICAgICAgIC8vIEFzayB0aGUgbGF5ZXIgY29tcG9zaXRvciB0byByZWRyYXcgYWxsIHRo
ZSBsYXllcnMuCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyhyZWN0LCB2aXNp
YmxlUmVjdCwgY29udGVudFJlY3QsIEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Ny
b2xsWSgpKSk7CiAgICAgfQotI2VuZGlmCiB9CiAKIC8vIEZJWE1FOiBtX2N1cnJlbnRJbnB1dEV2
ZW50IHNob3VsZCBiZSByZW1vdmVkIG9uY2UgQ2hyb21lQ2xpZW50OjpzaG93KCkgY2FuCkBAIC0y
MTA1LDkgKzIwOTQsMTcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6dGFic1RvTGlua3MoKSBjb25zdAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJv
b3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogeworICAgIGJv
b2wgd2FzQWN0aXZlID0gbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CiAgICAgc2V0
SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGxheWVyID8gdHJ1ZSA6IGZhbHNlKTsKICAg
ICBpZiAobV9sYXllclJlbmRlcmVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RM
YXllcihsYXllcik7CisgICAgaWYgKHdhc0FjdGl2ZSAhPSBtX2lzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZSkgeworICAgICAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53
aWR0aCwgbV9zaXplLmhlaWdodCk7CisgICAgICAgIGlmIChtX2lzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZSkgCisgICAgICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChkYW1hZ2Vk
UmVjdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRl
UmVjdChkYW1hZ2VkUmVjdCk7CisgICAgfQogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCkBAIC0yMTE5LDEwICsyMTE2
LDYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KGJvb2wgYWN0aXZlKQogICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZShnZXRPbnNjcmVlbkdMRVMyQ29udGV4dCgpKTsKICAgICAgICAgaWYgKG1f
bGF5ZXJSZW5kZXJlci0+aGFyZHdhcmVDb21wb3NpdGluZygpKSB7CiAgICAgICAgICAgICBtX2lz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIEZvcmNlIGEgcmVkcmF3IHRoZSBlbnRpcmUgdmlldyBzbyB0aGF0IHRoZSBjb21w
b3NpdG9yIGdldHMgdGhlIGVudGlyZSB2aWV3LAotICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4g
anVzdCB0aGUgY3VycmVudGx5LWRpcnR5IHN1YnNldC4KLSAgICAgICAgICAgIG1fY2xpZW50LT5k
aWRJbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdo
dCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLmNsZWFy
KCk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IGZhbHNl
OwpAQCAtMjEzOCwxMiArMjEzMSw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXll
ckNvbnRlbnRzKGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAgICAgaWYgKCFpc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFRoZSBh
Y2NlbGVyYXRlZCBjb21wb3NpdGluZyBwYXRoIGludmFsaWRhdGVzIGEgMXgxIHJlY3QgYXQgKDAs
IDApCi0gICAgLy8gaW4gb3JkZXIgdG8gZ2V0IHRoZSByZW5kZXJlciB0byBhc2sgdGhlIGNvbXBv
c2l0b3IgdG8gcmVkcmF3LiBUaGlzIGlzIG9ubHkKLSAgICAvLyB0ZW1wb3JhcnkgdW50aWwgd2Ug
Z2V0IHRoZSBjb21wb3NpdG9yIHRvIHJlbmRlciBkaXJlY3RseSBmcm9tIGl0cyBvd24gdGhyZWFk
LgotICAgIGlmICghcmVjdC54ICYmICFyZWN0LnkgJiYgcmVjdC53aWR0aCA9PSAxICYmIHJlY3Qu
aGVpZ2h0ID09IDEpCi0gICAgICAgIHJldHVybjsKLQogICAgIFdlYkZyYW1lSW1wbCogd2ViZnJh
bWUgPSBtYWluRnJhbWVJbXBsKCk7CiAgICAgaWYgKCF3ZWJmcmFtZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjE5NSwyMSArMjE4MiwxNjMgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExh
eWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVjdCkKIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0
Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKIHsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBw
b3N0aW5nIGEgcmVwYWludCBldmVudCBmb3IgdGhlIGVudGlyZSBwYWdlIHdoaWNoIGlzIGFuIG92
ZXJraWxsLgotICAgIGlmIChXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgp
KSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkgaGFjayB0byBpbnZhbGlkYXRlIHBh
cnQgb2YgdGhlIHBhZ2Ugc28gdGhhdCB3ZSBnZXQgY2FsbGVkIHRvIHJlbmRlcgotICAgICAgICAg
ICAgLy8gICAgICAgIGFnYWluLgotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZp
ZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJ
bnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEsIDEpKTsKLSAgICAgICAgfQotICAgIH0KLQor
ICAgIG1fY2xpZW50LT5zY2hlZHVsZURlZmVycmVkQ29tcG9zaXRlKCk7CiAgICAgaWYgKG1fbGF5
ZXJSZW5kZXJlcikKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
IH0KKworLy8gV2ViVmlld0ltcGwgbWV0aG9kCit2b2lkIFdlYlZpZXdJbXBsOjppbnZhbGlkYXRl
Um9vdExheWVyUmVjdChjb25zdCBXZWJSZWN0JiByZWN0KQoreworICAgIC8vIHJlY3QgaXMgaW4g
dmlld3BvcnQgc3BhY2UuIENvbnZlcnQgdG8gbGF5ZXIgc3BhY2UKKyAgICAvLyBzbyB0aGF0IGlu
dmFsaWRhdGlvbnMgYW5kIHNjcm9sbCBpbnZhbGlkYXRpb25zIHBsYXkgd2VsbCB3aXRoIG9uZS1h
bm90aGVyCisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgCisgICAgV2ViRnJhbWVJ
bXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKKyAgICBpZiAoIXdlYmZyYW1lKQorICAg
ICAgICByZXR1cm47CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygp
OworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IGxzUmVj
dChyZWN0LnggKyB2aWV3LT5zY3JvbGxYKCksCisgICAgICAgICAgICAgICAgICAgICAgcmVjdC55
ICsgdmlldy0+c2Nyb2xsWSgpLAorICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgsIHJl
Y3QuaGVpZ2h0KTsKKyAgICAKKyAgICAvLyBUT0RPOiBhZGQgYSBzbWFydGVyIGRhbWFnZSBhZ2dy
ZWdhdGlvbiBsb2dpYz8gUmlnaHQgbm93LCBMYXllckNocm9taXVtIGRvZXMgc2ltcGxlIHVuaW9u
LWluZworICAgIG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCktPnNldE5lZWRzRGlzcGxheShs
c1JlY3QpOworICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFdlYlZp
ZXdJbXBsOjpzY3JvbGxSb290TGF5ZXIoY29uc3QgV2ViU2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0
IFdlYlJlY3QmIGNsaXBSZWN0KQoreworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAg
IC8vIENvbXB1dGUgdGhlIGRhbWFnZSByZWN0IGluIHZpZXdwb3J0IHNwYWNlCisgICAgLy8gU2hv
dWxkIG9ubHkgYmUgc2Nyb2xsaW5nIGluIG9uZSBkaXJlY3Rpb24gYXQgYSB0aW1lLgorICAgIEFT
U0VSVCghKHNjcm9sbERlbHRhLndpZHRoICYmIHNjcm9sbERlbHRhLmhlaWdodCkpOworICAgIFdl
YkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAgaWYgKCF3ZWJmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFt
ZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBGbG9h
dFJlY3QgZGFtYWdlZFJlY3Q7CisgICAgLy8gUHV0IHRoZSB2aWV3cG9ydFJlY3QgaW4gX2xheWVy
IHNwYWNlXyBwcmlvciB0byB0aGUgc2Nyb2xsIHNpbmNlIHRoZSBsb2dpYworICAgIC8vIGJlbG93
IGVtaXRzIGRhbWFnZSBpbiB0aGUgc3BhY2UgImJlZm9yZSIgc2Nyb2xsaW5nCisgICAgLy8gVXNp
bmcgbGF5ZXIgc3BhY2UgZm9yIGRhbWFnZSByZWN0cyBhbGxvd3MgdXMgdG8gaW50ZXJtaXggaW52
YWxpZGF0ZXMgd2l0aCBzY3JvbGxzCisgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPnZp
c2libGVDb250ZW50UmVjdChmYWxzZSk7CisgICAgRmxvYXRSZWN0IHZpZXdwb3J0UmVjdChjb250
ZW50UmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UmVjdC55KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50
UmVjdC5oZWlnaHQoKSk7CisgICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgcmVnaW9uIHdlIHdpbGwg
ZXhwb3NlIGJ5IHNjcm9sbGluZywgYW5kIHBhaW50IHRoYXQgaW50byBhCisgICAgLy8gc2hhcmVk
IG1lbW9yeSBzZWN0aW9uLgorICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCkgeworICAgICAgICBm
bG9hdCBkeCA9IChmbG9hdClzY3JvbGxEZWx0YS53aWR0aDsKKyAgICAgICAgZGFtYWdlZFJlY3Qu
c2V0WSh2aWV3cG9ydFJlY3QueSgpKTsKKyAgICAgICAgZGFtYWdlZFJlY3Quc2V0SGVpZ2h0KHZp
ZXdwb3J0UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChkeCA+IDApIHsKKyAgICAgICAgICAg
IGRhbWFnZWRSZWN0LnNldFgodmlld3BvcnRSZWN0LngoKSk7CisgICAgICAgICAgICBkYW1hZ2Vk
UmVjdC5zZXRXaWR0aChkeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYW1hZ2Vk
UmVjdC5zZXRYKHZpZXdwb3J0UmVjdC5yaWdodCgpICsgZHgpOworICAgICAgICAgICAgZGFtYWdl
ZFJlY3Quc2V0V2lkdGgoLWR4KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZs
b2F0IGR5ID0gKGZsb2F0KXNjcm9sbERlbHRhLmhlaWdodDsKKyAgICAgICAgZGFtYWdlZFJlY3Qu
c2V0WCh2aWV3cG9ydFJlY3QueCgpKTsKKyAgICAgICAgZGFtYWdlZFJlY3Quc2V0V2lkdGgodmll
d3BvcnRSZWN0LndpZHRoKCkpOworICAgICAgICBpZiAoZHkgPiAwKSB7CisgICAgICAgICAgICBk
YW1hZ2VkUmVjdC5zZXRZKHZpZXdwb3J0UmVjdC55KCkpOworICAgICAgICAgICAgZGFtYWdlZFJl
Y3Quc2V0SGVpZ2h0KGR5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhbWFnZWRS
ZWN0LnNldFkodmlld3BvcnRSZWN0LmJvdHRvbSgpICsgZHkpOworICAgICAgICAgICAgZGFtYWdl
ZFJlY3Quc2V0SGVpZ2h0KC1keSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVE9E
TzogYWRkIGEgc21hcnRlciBkYW1hZ2UgYWdncmVnYXRpb24gbG9naWM/IFJpZ2h0IG5vdywgTGF5
ZXJDaHJvbWl1bSBkb2VzIHNpbXBsZSB1bmlvbi1pbmcKKyAgICBJbnRSZWN0IGlEYW1hZ2VkUmVj
dChkYW1hZ2VkUmVjdCk7CisgICAgaURhbWFnZWRSZWN0LnVuaXRlKG1fc2Nyb2xsRGFtYWdlKTsK
KyAgICBtX3Njcm9sbERhbWFnZSA9IGlEYW1hZ2VkUmVjdDsKKyAgICBzZXRSb290TGF5ZXJOZWVk
c0Rpc3BsYXkoKTsKK30KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAK
Ky8vIFdlYldpZGV0IG1ldGhvZAordm9pZCBXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZUNvbXBvc2l0
ZWRSb290TGF5ZXJSZWN0KGNvbnN0IFdlYlJlY3QmIHJlY3QpIAoreworICAgIEFTU0VSVChpc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KHJlY3QpOworI2VuZGlmCit9Cit2
b2lkIFdlYlZpZXdJbXBsOjpwYWludENvbXBvc2l0ZWQoV2ViQ2FudmFzKiBjYW52YXMpCit7Cisg
ICAgQVNTRVJUKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKTsKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5G
cmFtZUltcGwoKTsKKyAgICBpZiAoIXdlYmZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgRnJh
bWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOworICAgIGlmICghdmlldykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIHZpc2libGVSZWN0IGluY2x1ZGVzIHNjcm9sbGJh
cnMgd2hlcmVhcyB0aGUgY29udGVudFJlY3QgZG9lc24ndC4KKyAgICBJbnRSZWN0IHZpc2libGVS
ZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOworICAgIEludFJlY3QgY29udGVu
dFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpOworICAgIEludFJlY3Qgdmll
d3BvcnQgICAgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CisK
KyAgICAvLyBHaXZlIHRoZSBjb21wb2lzaXRvciBhIGNoYW5jZSB0byBzZXR1cC9yZXNpemUgdGhl
IHJvb3QgdGV4dHVyZSBoYW5kbGUgYW5kIHBlcmZvcm0gc2Nyb2xsaW5nCisgICAgbV9sYXllclJl
bmRlcmVyLT5wcmVwYXJlVG9EcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwgSW50
UG9pbnQodmlldy0+c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkpKTsKKworICAgIC8vIERyYXcg
dGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyCisgICAgVmVjdG9yPEZsb2F0UmVjdD4gZGFt
YWdlUmVjdHM7CisgICAgZGFtYWdlUmVjdHMuYXBwZW5kKEZsb2F0UmVjdChtX3Njcm9sbERhbWFn
ZS54LCBtX3Njcm9sbERhbWFnZS55LCBtX3Njcm9sbERhbWFnZS53aWR0aCwgbV9zY3JvbGxEYW1h
Z2UuaGVpZ2h0KSk7CisgICAgZGFtYWdlUmVjdHMuYXBwZW5kKG1fbGF5ZXJSZW5kZXJlci0+cm9v
dExheWVyKCktPmRpcnR5UmVjdCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhbWFn
ZVJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIHRoZSBkYW1hZ2UgcmVjdHMgZm9yIHRo
ZSByb290IGxheWVyIGlzIGluIGxheWVyIHNwYWNlIFtlLmcuIHVuc2Nyb2xsZWQuXQorICAgICAg
ICAvLyBjb252ZXJ0IGZyb20gbGF5ZXIgc3BhY2UgdG8gdmlld3BvcnQgc3BhY2UKKyAgICAgICAg
Y29uc3QgRmxvYXRSZWN0IHNzUmVjdCA9IGRhbWFnZVJlY3RzW2ldOworICAgICAgICBGbG9hdFJl
Y3QgcmVjdChzc1JlY3QueCgpIC0gdmlldy0+c2Nyb2xsWCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICBzc1JlY3QueSgpIC0gdmlldy0+c2Nyb2xsWSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICBzc1JlY3Qud2lkdGgoKSwgc3NSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgCisgICAgICAgIC8v
IGludGVyc2VjdCB0aGlzIHJlY3RhbmdsZSB3aXRoIHRoZSB2aWV3cG9ydAorICAgICAgICByZWN0
LmludGVyc2VjdCh2aWV3cG9ydCk7CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgLy8gbm93
IHJlbmRlciBpdAorICAgICAgICBXZWJSZWN0IHdyZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgaWYgKHdyZWN0LndpZHRoICYmIHdy
ZWN0LmhlaWdodCkgeworICAgICAgICAgICAgdXBkYXRlUm9vdExheWVyQ29udGVudHMod3JlY3Qp
OworICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVj
dCh3cmVjdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9sYXllclJlbmRlcmVyLT5yb290TGF5
ZXIoKS0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX3Njcm9sbERhbWFnZSA9IFdlYlJlY3Qo
KTsKKyAgICAgICAgCisgICAgLy8gRHJhdyB0aGUgYWN0dWFsIGxheWVycy4uLgorICAgIG1fbGF5
ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworICAgIG1f
bGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOworCisg
ICAgLy8gcmVhZGJhY2sgaW50byB0aGUgY2FudmFzLCBpZiByZXF1ZXN0ZWQKKyAgICAvLyBJbnNl
cnQgd2ptYWNsZWFuJ3MgcmVhZGJhY2sgY29kZSBoZXJlIGZvciB3ZWJraXQgYnVnIDQ0MTI3Cisg
ICAgCisgICAgLy8gd2UncmUgZG9uZS4uLiBwdXQgcmVzdWx0IG9uc2NyZWVuCisgICAgbV9sYXll
clJlbmRlcmVyLT5wcmVzZW50KCk7CisKKyAgICAvLyB0ZWxsIHRoZSBicm93c2VyIHRoYXQgdGhl
IHJlbmRlcmluZyBpcyBkb25lIC0tLQorICAgIC8vIFRPRE86IHRoaXMgaXMgYmVpbmcgY2FsbGVk
IHRvbyBlYXJseSwgd2UgbmVlZCB0byBkZWZlciBjYWxsaW5nIHRoaXMgCisgICAgLy8gICAgICAg
dW50aWwgdGhlIHN3YXBidWZmZXJzIGl0c2VsZiBoYXMgZXhlY3V0ZWQgb24gdGhlIEdQVS4KKyAg
ICAvLyBtX2NsaWVudC0+b25Db21wb3NpdGVDb21wbGV0ZSgpOworI2VuZGlmCit9CisKKworCisK
IFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBXZWJWaWV3SW1wbDo6Z2V0T25zY3JlZW5HTEVTMkNv
bnRleHQoKQogewogICAgIHJldHVybiBHTEVTMkNvbnRleHQ6OmNyZWF0ZShHTEVTMkNvbnRleHRJ
bnRlcm5hbDo6Y3JlYXRlKGdsZXMyQ29udGV4dCgpLCBmYWxzZSkpOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCmluZGV4IGMyOTYxMjEyM2Y0NTE0Yzk0ZGQ3ZDk3MGM3MzExNGE0YmVlZWMzNTUu
LjJkZThjYjhjMTExMWJjNWM1M2NhNjk1NjU0NzI0NTg0MjdiMDQ1MTQgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJHTEVTMkNvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uUG9saWN5LmgiCiAjaW5jbHVkZSAiV2ViUG9p
bnQuaCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCiAjaW5jbHVkZSAiV2ViU2l6ZS5oIgogI2luY2x1
ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKQEAgLTkyLDYgKzkzLDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwg
Y29uc3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQ29tcG9zaXRlZFJv
b3RMYXllclJlY3QoY29uc3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbXBv
c2l0ZWQoV2ViQ2FudmFzKik7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29u
c3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKQEAgLTMyMiw2ICszMjUs
OCBAQCBwdWJsaWM6CiAgICAgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgIHZvaWQgc2Nyb2xsUm9vdExheWVyKGNvbnN0IFdlYlNpemUmIHNjcm9sbERlbHRhLCBjb25z
dCBXZWJSZWN0JiBjbGlwUmVjdCk7CisgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChj
b25zdCBXZWJSZWN0Jik7CiAgICAgdm9pZCBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKICAg
ICB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKTsKICNl
bmRpZgpAQCAtNTEwLDYgKzUxNSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGU+IG1fbW91c2VDYXB0dXJlTm9kZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICBXZWJSZWN0IG1fc2Nyb2xsRGFtYWdlOwogICAgIE93blB0cjxXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBib29sIG1faXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBN
ZW51VGVzdC5jcHAKaW5kZXggNTAzMTlhZjIzYjBhOTJmNDRjOTE1OGVmYjNlNjQ2MTgyMzk4MWQx
MC4uOGFhZGVjYzU4NTNmNDQwYjRhNDg1Zjg0NzNiMTU4N2NlMTY5Mzc5NyAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCisrKyBiL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcApAQCAtMTI4LDYgKzEyOCw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNv
bnN0IFdlYlJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUNvbXBvc2l0ZWRS
b290TGF5ZXJSZWN0KGNvbnN0IFdlYlJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b21wb3NpdGVkKFdlYkNhbnZhcyopIHsgfQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2
ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2
b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9v
bCkgeyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66445</attachid>
            <date>2010-09-02 17:54:23 -0700</date>
            <delta_ts>2010-09-02 17:57:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100902175422.patch</filename>
            <type>text/plain</type>
            <size>37453</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmFkMTBkZjJhMjRlYjcwZDhjYzJhZWU5ZTg0YjIyOWY5YzAwNDFhYi4uMWM0ODdhMTEyM2E4N2Q2
OTRmNjM2MTdlODdhMTE1NjkyNjViZDFmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wMiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY1MTlmMWZmMmJhMTgyNmYyZTI4
NTk2MmIwMzgxNzEyYTQ2ZTlkY2MuLjkyZWM0OWI1Y2M3ZjdmZjhiNjM3YjZkMzBhMTI0YTE0ZGMw
YmMzYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcApAQCAtMjk5LDEwICsyOTksMTUgQEAgdm9pZCBMYXllckNocm9taXVt
OjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBpZiAobV9ib3VuZHMgPT0gc2l6
ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBmaXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53
aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWln
aHQoKTsKKyAgICAKICAgICBtX2JvdW5kcyA9IHNpemU7CiAgICAgbV9iYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKIAotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgaWYgKGZpcnN0UmVzaXplKQor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCiBjb25zdCBMYXll
ckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApAQCAtMzUzLDcgKzM1
OCw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAKICAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MzYzLDYgKzM2NywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewog
ICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJhMTUwODg0NGJhMzViMzQ1MWY4
MmNkNTg5YTY1Mzk3NjUyMWEwOGMuLjJkMjI1ZGFmNWEyMDcxYmFiZmViZDZhN2NmM2NjMDVlMjZi
MzkwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnR5UmVjdDsgfQorICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTAzMzhkMmQ1ZjczMjRlNWExMTljNTA5MTkwZGZlZjg2OThi
MTc2OS4uYWY2MGM4ZWRmYTc3YmJkZWEzZWRiYThlMmU1ZmIzYjY4YjJmN2IyNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMTA5LDYgKzEwOSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkZWJ1Z0dMQ2FsbChjb25zdCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiBmaWxl
LCBpCiAvLyBDcmVhdGVzIGEgY2FudmFzIGFuZCBhbiBhc3NvY2lhdGVkIGdyYXBoaWNzIGNvbnRl
eHQgdGhhdCB0aGUgcm9vdCBsYXllciB3aWxsCiAvLyByZW5kZXIgaW50by4KIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXJDYW52YXNTaXplKGNvbnN0IEludFNpemUmIHNp
emUpCisKIHsKICAgICBpZiAoc2l6ZSA9PSBtX3Jvb3RMYXllckNhbnZhc1NpemUpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1Miw4ICsxNTMsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXNlU2hhZGVyKHVuc2lnbmVkIHByb2dyYW1JZCkKIAogLy8gVXBkYXRlcyB0aGUgY29udGVudHMg
b2YgdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZSB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0
CiAvLyBhbmQgcmUtY29tcG9zaXRzIGFsbCBzdWJsYXllcnMuCi12b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyhjb25z
dCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9p
bnQmIHNjcm9sbFBvc2l0aW9uKQogewogICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OwogCkBAIC0xODAsMTAgKzE4MSwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIC8v
IFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEsIGluY2x1ZGlu
ZyB0aGUgc2Nyb2xsYmFycy4KICAgICBHTEMoZ2xWaWV3cG9ydCgwLCAwLCB2aXNpYmxlUmVjdFdp
ZHRoLCB2aXNpYmxlUmVjdEhlaWdodCkpOwogCisKICAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVy
dGV4IGF0dHJpYnV0ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxheWVycy4KICAgICBMYXll
ckNocm9taXVtOjpwcmVwYXJlRm9yRHJhdyhsYXllclNoYXJlZFZhbHVlcygpKTsKKyAgICAKIAot
ICAgIC8vIEZJWE1FOiBUaGVzZSBjYWxscyBjYW4gYmUgbWFkZSBvbmNlLCB3aGVuIHRoZSBjb21w
b3NpdG9yIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQuCiAgICAgR0xDKGdsRGlzYWJsZShHTF9ERVBU
SF9URVNUKSk7CiAgICAgR0xDKGdsRGlzYWJsZShHTF9DVUxMX0ZBQ0UpKTsKICAgICBHTEMoZ2xE
ZXB0aEZ1bmMoR0xfTEVRVUFMKSk7CkBAIC0xOTMsMTQgKzE5NSwxMiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25z
dCBJbnRSZWN0JgogICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAK
ICAgICBJbnRQb2ludCBzY3JvbGxEZWx0YSA9IHRvUG9pbnQoc2Nyb2xsUG9zaXRpb24gLSBtX3Nj
cm9sbFBvc2l0aW9uKTsKLSAgICAvLyBTY3JvbGwgb25seSB3aGVuIHRoZSB1cGRhdGVSZWN0IGNv
bnRhaW5zIHBpeGVscyBmb3IgdGhlIG5ld2x5IHVuY292ZXJlZCByZWdpb24gdG8gYXZvaWQgZmxh
c2hpbmcuCi0gICAgaWYgKChzY3JvbGxEZWx0YS54KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID49
IGFicyhzY3JvbGxEZWx0YS54KCkpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gY29udGVudFJl
Y3QuaGVpZ2h0KCkpCi0gICAgICAgIHx8IChzY3JvbGxEZWx0YS55KCkgJiYgdXBkYXRlUmVjdC5o
ZWlnaHQoKSA+PSBhYnMoc2Nyb2xsRGVsdGEueSgpKSAmJiB1cGRhdGVSZWN0LndpZHRoKCkgPj0g
Y29udGVudFJlY3Qud2lkdGgoKSkpIHsKKyAgICAvLyBTY3JvbGwgdGhlIGJhY2tidWZmZXIKKyAg
ICBpZiAoc2Nyb2xsRGVsdGEueCgpIHx8IHNjcm9sbERlbHRhLnkoKSkgewogICAgICAgICAvLyBT
Y3JvbGxpbmcgd29ya3MgYXMgZm9sbG93czogV2UgcmVuZGVyIGEgcXVhZCB3aXRoIHRoZSBjdXJy
ZW50IHJvb3QgbGF5ZXIgY29udGVudHMKICAgICAgICAgLy8gdHJhbnNsYXRlZCBieSB0aGUgYW1v
dW50IHRoZSBwYWdlIGhhcyBzY3JvbGxlZCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUgYW5kIHRoZW4g
cmVhZCB0aGUKICAgICAgICAgLy8gcGl4ZWxzIG9mIHRoZSBjb250ZW50IGFyZWEgKHZpc2libGUg
YXJlYSBleGNsdWRpbmcgdGhlIHNjcm9sbCBiYXJzKSBiYWNrIGludG8gdGhlCi0gICAgICAgIC8v
IHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQgYXJlYSBpcyBzdWJlc3F1ZW50
bHkgZmlsbGVkIGFzIHVzdWFsIHdpdGgKLSAgICAgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVSZWN0LgorICAgICAgICAvLyByb290IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBv
c2VkIGFyZWEgd2lsbCBiZSBmaWxsZWQgYnkgYSBzdWJzZXF1ZW50IGRyYXdMYXllcnNJbnRvUmVj
dCBjYWxsCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbGVkTGF5ZXJNYXRyaXg7
CiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmOwpA
QCAtMjMwLDQzICsyMzAsNjQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICAgICAgLy8g
bm8gbmVlZCB0byBjb3B5IGZyYW1lYnVmZmVyIHBpeGVscyBiYWNrIGludG8gdGhlIHRleHR1cmUu
CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9CisgICAg
CisgICAgLy8gVHJhbnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9s
bCBwb3NpdGlvbi4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgbWF0cml4
LnRyYW5zbGF0ZTNkKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgp
LCAwKTsKIAotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGNoZWNrIHNob3VsZCBnbyBhd2F5
IHdoZW4gdGhlIGNvbXBvc2l0b3IgcmVuZGVycyBpbmRlcGVuZGVudGx5IGZyb20gaXRzIG93biB0
aHJlYWQuCi0gICAgLy8gSWdub3JlIGEgMXgxIHVwZGF0ZSByZWN0IGF0ICgwLCAwKSBhcyB0aGF0
J3MgdXNlZCBhIHdheSB0byBraWNrIG9mZiBhIHJlZHJhdyBmb3IgdGhlIGNvbXBvc2l0b3IuCi0g
ICAgaWYgKCEoIXVwZGF0ZVJlY3QueCgpICYmICF1cGRhdGVSZWN0LnkoKSAmJiB1cGRhdGVSZWN0
LndpZHRoKCkgPT0gMSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID09IDEpKSB7Ci0gICAgICAgIC8v
IFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBBU1NFUlQoKHVwZGF0ZVJl
Y3QueCgpICsgdXBkYXRlUmVjdC53aWR0aCgpIDw9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQot
ICAgICAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QueSgpICsgdXBkYXRlUmVjdC5oZWlnaHQoKSA8
PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsKKyAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIg
dHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zvcm1zLgorICAgIGZsb2F0IG9wYWNpdHkg
PSAxOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJz
ID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOworICAgIHNpemVfdCBpOworICAgIGZvciAo
aSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAgICAgIHVwZGF0ZUxheWVyc1Jl
Y3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwgb3BhY2l0eSk7Cit9CiAKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OworCisgICAgaWYgKCFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVXBk
YXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgQVNTRVJUKCh1cGRhdGVSZWN0LngoKSAr
IHVwZGF0ZVJlY3Qud2lkdGgoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKKyAgICAgICAg
ICAgJiYgKHVwZGF0ZVJlY3QueSgpICsgdXBkYXRlUmVjdC5oZWlnaHQoKSA8PSBtX3Jvb3RMYXll
clRleHR1cmVIZWlnaHQpKTsKKyAgICAKICNpZiBQTEFURk9STShTS0lBKQotICAgICAgICAvLyBH
ZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIGNvbnN0IFNrQml0
bWFwIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFw
KGZhbHNlKTsKLSAgICAgICAgaW50IHJvb3RMYXllcldpZHRoID0gYml0bWFwLndpZHRoKCk7Ci0g
ICAgICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7Ci0gICAgICAgIEFT
U0VSVChyb290TGF5ZXJXaWR0aCA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgcm9vdExheWVySGVp
Z2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB2b2lkKiBwaXhlbHMgPSBiaXRt
YXAuZ2V0UGl4ZWxzKCk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVw
ZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBHTEMoZ2xUZXhT
dWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0Lnko
KSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVkIHJlY3QuCisgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGludCByb290TGF5ZXJX
aWR0aCA9IGJpdG1hcC53aWR0aCgpOworICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAu
aGVpZ2h0KCk7CisgICAgQVNTRVJUKHJvb3RMYXllcldpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgo
KSAmJiByb290TGF5ZXJIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCog
cGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9m
IHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBHTEMoZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0
LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICAgICAv
LyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250
ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dC
aXRtYXBDb250ZXh0R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBk
YXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHZvaWQqIHBpeGVscyA9IG1fcm9vdExheWVyQmFj
a2luZ1N0b3JlLmRhdGEoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUg
dXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgICAgIC8vIFRoZSBv
cmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBz
eXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgotICAgICAgICBHTEMoZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXBkYXRlUmVjdC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3Qu
eSgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgLy8g
R2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIC8vIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0
LmdldCgpKSkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRt
YXBDb250ZXh0R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRl
UmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3Rv
cmUuZGF0YSgpOworCisgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVj
dCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgorICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhl
IGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQg
dG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgorICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jv
b3RMYXllclRleHR1cmVIZWlnaHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJl
Y3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBwaXhlbHMpKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5
b3VyIHBsYXRmb3JtLiIKICNlbmRpZgotICAgIH0KK30KIAordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwor
ICAgIAogICAgIGdsQ2xlYXJDb2xvcigwLCAwLCAxLCAxKTsKICAgICBnbENsZWFyKEdMX0NPTE9S
X0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKTsKLQorICAgIAorICAgIEdMQyhnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CisgICAgCiAg
ICAgLy8gUmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRo
ZSBlbnRpcmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cuCiAgICAgLy8gV2UgcmV1c2UgdGhl
IHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCiAgICAgY29uc3Qg
Q29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0g
Y29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7CkBAIC0yOTAsMjIgKzMxMSwxMyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhnbEVuYWJsZShHTF9CTEVORCkpOwogICAgIEdMQyhn
bEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKIAotICAgIC8vIFRy
YW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24u
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgIG1hdHJpeC50cmFuc2xhdGUz
ZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7Ci0KLSAg
ICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zv
cm1zLgotICAgIGZsb2F0IG9wYWNpdHkgPSAxOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOwot
ICAgIHNpemVfdCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKysp
Ci0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJp
eCwgb3BhY2l0eSk7Ci0KLSAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwotCiAg
ICAgLy8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5
ZXJzIG92ZXIgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVT
VCkpOwogICAgIEZsb2F0UmVjdCBzY2lzc29yUmVjdChjb250ZW50UmVjdCk7CisKKyAgICAvLyBT
ZXQgdGhlIHJvb3RWaXNpYmxlUmVjdCAtLS0gdXNlZCBieSBzdWJzZXF1ZW50IGRyYXdMYXllcnMg
Y2FsbHMKKyAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OworCiAgICAgLy8gVGhl
IHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9mZnNldC4KICAgICBz
Y2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24u
eSgpKTsKICAgICBzY2lzc29yVG9SZWN0KHNjaXNzb3JSZWN0KTsKQEAgLTMxNiwxMyArMzI4LDE3
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3Qm
IHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgR0xDKGdsU3RlbmNpbE1hc2soMCkpOwog
CiAgICAgLy8gVHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgb25lIG1vcmUgdGltZSB0byBkcmF3IHRo
ZSBsYXllcnMuCi0gICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKKyAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9v
dExheWVyLT5nZXRTdWJsYXllcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1Ymxh
eWVycy5zaXplKCk7IGkrKykKICAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNb
aV0uZ2V0KCksIHNjaXNzb3JSZWN0KTsKIAogICAgIEdMQyhnbERpc2FibGUoR0xfU0NJU1NPUl9U
RVNUKSk7Cit9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVzZW50KCkKK3sKKyAg
ICAvLyBXZSdyZSBkb25lISBUaW1lIHRvIHN3YXBidWZmZXJzIQogICAgIG1fZ2xlczJDb250ZXh0
LT5zd2FwQnVmZmVycygpOwotCiAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKaW5kZXggOGY0NGFmZWJkMGEyYzdiNDc1ZDA0YmE0ODcyM2YxY2RjNTQ1
NTA5MS4uMmY5ZWRlZjY3YzIzM2ZmYjdjMDJkNDM1MTdkZTViNzU0NzAxYjEyOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCkBAIC02MSw5ICs2MSwxNyBAQCBwdWJsaWM6CiAgICAgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBnbGVzMkNvbnRleHQpOwogICAgIH5M
YXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIAotICAgIC8vIFVwZGF0ZXMgdGhlIGNvbnRlbnRzIG9m
IHRoZSByb290IGxheWVyIHRoYXQgZmFsbCBpbnNpZGUgdGhlIHVwZGF0ZVJlY3QgYW5kIHJlY29t
cG9zaXRlcwotICAgIC8vIGFsbCB0aGUgbGF5ZXJzLgotICAgIHZvaWQgZHJhd0xheWVycyhjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7Cisg
ICAgLy8gdXBkYXRlcyBzaXplIG9mIHJvb3QgdGV4dHVyZSwgaWYgbmVlZGVkLCBhbmQgc2Nyb2xs
cyB0aGUgYmFja2J1ZmZlcgorICAgIHZvaWQgcHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbik7CisgICAgCisgICAgLy8gdXBkYXRlcyBhIHJlY3RhbmdsZSB3
aXRoaW4gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZQorICAgIHZvaWQgdXBkYXRlUm9vdExheWVyVGV4
dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCk7CisKKyAgICAvLyBkcmF3cyB0aGUg
Y3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgorICAgIHZvaWQgZHJhd0xheWVycyhj
b25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwor
CisgICAgLy8gcHV0cyBiYWNrYnVmZWZmZXIgb25zY3JlZW4KKyAgICB2b2lkIHByZXNlbnQoKTsK
IAogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIp
IHsgbV9yb290TGF5ZXIgPSBsYXllcjsgfQogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigp
IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1MjdlOGVmY2Nh
ZTM5MDQ1ZmQ5ODVkZWQzYmYyMGQ3MTY2YWZjNjlkLi41OTUwOTI1MWExZTM2NzI2NmVkMjBjN2Zh
YjJlNzBhZWQzNDU3Y2RhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wOS0w
MiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3Np
dGluZzogc2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgSW50cm9kdWNlIGEg
bmV3IEFQSSBvbiBXZWJXaWRnZXQgZm9yIHBhaW50aW5nIHdpdGggYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgdGhhdCBhbGxvd3MgdGhlIGNvbXBvc2l0b3IgdG8gcHJvcGVybHkgZGlz
dGluZ2l1c2gKKyAgICAgICAgc2Nyb2xsaW5nLCBpbnZhbGlkYXRpb24gYW5kIHJlcGFpbnRpbmcg
ZnJvbSBvbmUgYW5vdGhlci4gVGhlIGtleQorICAgICAgICBjaGFuZ2UgaXMgdGhhdCBpbiBhY2Nl
bGVyYXRlZCByZW5kZXJpbmcgY2FzZSwgaW52YWxpZGF0ZXMgYW5kCisgICAgICAgIHNjcm9sbGlu
ZyBwYXNzIGRpcmVjdGx5IHRvIHRoZSBjb21wb3NpdG9yLCByYXRoZXIgdGhhbiBwYXNzaW5nIHVw
CisgICAgICAgIHRvIHRoZSBjbGllbnQgYXMgd2FzIHRoZSBjYXNlIGluIHRoZSBzb2Z0d2FyZSBw
YXRoLiBGb3IKKyAgICAgICAgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nLCB0aGUgcHJldmlvdXMgcGFp
bnQoKSBtZXRob2QgaXMgcmVwbGFjZWQgYnkKKyAgICAgICAgYSBwYWlyIG9mIG1ldGhvZHM6IHBh
aW50Q29tcG9zaXRlZCBhbmQKKyAgICAgICAgaW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJS
ZWN0LgorCisKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgICogcHVibGlj
L1dlYldpZGdldENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXRDbGllbnQ6OnNj
aGVkdWxlRGVmZXJyZWRDb21wb3NpdGUpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0ZUNvbnRl
bnRzQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xs
KToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudUltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51
SW1wbDo6aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUG9wdXBNZW51SW1wbDo6cGFpbnRDb21wb3NpdGVkKToKKyAgICAgICAgKiBzcmMvV2Vi
UG9wdXBNZW51SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBo
aWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJv
b3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnZh
bGlkYXRlUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3Jv
bGxSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZUNv
bXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBh
aW50Q29tcG9zaXRlZCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICog
dGVzdHMvUG9wdXBNZW51VGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJXaWRnZXQ6
OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRl
c3RXZWJXaWRnZXQ6OnBhaW50Q29tcG9zaXRlZCk6CisKIDIwMTAtMDktMDIgIElseWEgU2hlcm1h
biAgPGlzaGVybWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCA1YzlmNTRlNzkzNjZiODNhZmVl
N2MwZTFlM2EzMjg4YzM0NDEyY2E5Li5kYTY5MGE2M2VkYzNkM2NhM2ExMDRlOWI4Nzc0YzNhMmUy
M2I3ODNhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTU5LDE1ICs1OSwyOCBA
QCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIGxheW91dCB0aGUgV2ViV2lkZ2V0LiAgVGhpcyBN
VVNUIGJlIGNhbGxlZCBiZWZvcmUgUGFpbnQsCiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQgaW4g
Y2FsbHMgdG8gV2ViV2lkZ2V0Q2xpZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCkgPSAwOwotCi0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSBzcGVjaWZp
ZWQgcmVnaW9uIG9mIHRoZSBXZWJXaWRnZXQgb250byB0aGUgZ2l2ZW4KLSAgICAvLyBjYW52YXMu
ICBZb3UgTVVTVCBjYWxsIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlz
Ci0gICAgLy8gb2theSB0byBjYWxsIHBhaW50IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhh
cyBiZWVuIGNhbGxlZCwKLSAgICAvLyBhc3N1bWluZyBubyBvdGhlciBjaGFuZ2VzIGFyZSBtYWRl
IHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9uY2UKLSAgICAvLyBldmVudHMgYXJlIHByb2Nlc3Nl
ZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8KLSAgICAvLyBsYXlv
dXQgaXMgd2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSA9IDA7Ci0KKyAgICAKKyAgICAvLyBD
YWxsZWQgdG8gcGFpbnQgdGhlIHNwZWNpZmllZCB2aWV3cG9ydCBvZiB0aGUgV2ViV2lkZ2V0IAor
ICAgIC8vIG9udG8gdGhlIHNwZWNpZmllZCBjYW52YXMgYXQgKHZpZXdwb3J0Lngsdmlld3BvcnQu
eSkuIFlvdSBNVVNUIGNhbGwKKyAgICAvLyBMYXlvdXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRo
b2QuICBJdCBpcyBva2F5IHRvIGNhbGwgcGFpbnQKKyAgICAvLyBtdWx0aXBsZSB0aW1lcyBvbmNl
IGxheW91dCBoYXMgYmVlbiBjYWxsZWQsIGFzc3VtaW5nIG5vIG90aGVyCisgICAgLy8gY2hhbmdl
cyBhcmUgbWFkZSB0byB0aGUgV2ViV2lkZ2V0IChlLmcuLCBvbmNlIGV2ZW50cyBhcmUKKyAgICAv
LyBwcm9jZXNzZWQsIGl0IHNob3VsZCBiZSBhc3N1bWVkIHRoYXQgYW5vdGhlciBjYWxsIHRvIGxh
eW91dCBpcworICAgIC8vIHdhcnJhbnRlZCBiZWZvcmUgcGFpbnRpbmcgYWdhaW4pLgorICAgIHZp
cnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JiB2aWV3cG9ydCkgPSAw
OworICAgIAorICAgIC8vIFRyaWdnZXJzIGNvbXBvc2l0aW5nIG9mIHRoZSBjdXJyZW50IGxheWVy
cyBvbnRvIHRoZSBzY3JlZW4uCisgICAgLy8gVGhlIGZpbmlzaCBhcmd1bWVudCBjb250cm9scyB3
aGV0aGVyIHRoZSBjb21wb3NpdG9yIHdpbGwgd2FpdGluZyBmb3IgdGhlCisgICAgLy8gR1BVIHRv
IGZpbmlzaCByZW5kZXJpbmcgYmVmb3JlIHJldHVybmluZy4gWW91IE1VU1QgY2FsbCBMYXlvdXQK
KyAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCwgZm9yIHRoZSBzYW1lIHJlYXNvbnMg
ZGVzY3JpYmVkIGluCisgICAgLy8gdGhlIHBhaW50IG1ldGhvZCBhYm92ZS4KKyAgICB2aXJ0dWFs
IHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgdG8gaW5m
b3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gbmF0aXZlIHdpZGdldCBzZXR0aW5ncy4K
KyAgICAvLyBJbXBsZW1lbnRvcnMgdGhhdCBjYWNoZSByZW5kZXJlZCBjb3BpZXMgb2Ygd2lkZ2V0
cyBuZWVkIHRvIHJlLXJlbmRlcgorICAgIC8vIG9uIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UKKyAg
ICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgPSAwOworICAgIAogICAgIC8vIENhbGxlZCB0
byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhbiBpbnB1dCBldmVudC4gIFJldHVybnMgdHJ1ZSBp
ZgogICAgIC8vIHRoZSBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQsIGZhbHNlIG90aGVyd2lzZS4K
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jikg
PSAwOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQu
aCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgKaW5kZXggYmQ3YmQ2
YTc0ZmNiYWYzNzFkZjNlOWE2ZTQxMGJlZGJmMzU5MjMyMC4uYjNlZTlmNTZmZDExNDc3ODdiMmU0
NjkyNWYwZGU0NTFkOWFjNDUxYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJXaWRnZXRDbGllbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENs
aWVudC5oCkBAIC00NSw3ICs0NSwxMCBAQCBjbGFzcyBXZWJXaWRnZXRDbGllbnQgewogcHVibGlj
OgogICAgIC8vIENhbGxlZCB3aGVuIGEgcmVnaW9uIG9mIHRoZSBXZWJXaWRnZXQgbmVlZHMgdG8g
YmUgcmUtcGFpbnRlZC4KICAgICB2aXJ0dWFsIHZvaWQgZGlkSW52YWxpZGF0ZVJlY3QoY29uc3Qg
V2ViUmVjdCYpIHsgfQotCisgICAgCisgICAgLy8gQ2FsbGVkIHdoZW4gYSBjYWxsIHRvIFdlYldp
ZGdldDo6Y29tcG9zaXRlIGlzIHJlcXVpcmVkCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRlKCkgeyB9CisgICAgCiAgICAgLy8gQ2FsbGVkIHdoZW4gYSByZWdpb24gb2YgdGhlIFdl
YldpZGdldCwgZ2l2ZW4gYnkgY2xpcFJlY3QsIHNob3VsZCBiZQogICAgIC8vIHNjcm9sbGVkIGJ5
IHRoZSBzcGVjaWZpZWQgZHggYW5kIGR5IGFtb3VudHMuCiAgICAgdmlydHVhbCB2b2lkIGRpZFNj
cm9sbFJlY3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0KSB7IH0KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IGU2ZjE0MDA3MTgwZDhk
M2JmNjEyOGIxMzBkYzI4YWJhYWVjMWY5MGEuLjJmZGE4ZTY4ZTYxNGZmMzY4MTdiNGMzOGJhZGZi
MWQzMTE2MDI0OGQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApA
QCAtNDkyLDggKzQ5MiwxNiBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250
ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBibwogewogICAgIGlmICh1
cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3dlYlZpZXct
PmNsaWVudCgpKQotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVj
dCh1cGRhdGVSZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYg
KCFtX3dlYlZpZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjZW5kaWYK
KyAgICAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgICAgICBtX3dlYlZpZXct
PmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVSZWN0KTsKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV93ZWJWaWV3LT5pbnZh
bGlkYXRlUm9vdExheWVyUmVjdCh1cGRhdGVSZWN0KTsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9p
ZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0
IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQpAQCAtNTA3LDExICs1MTUsMTkg
QEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGwoCiAgICAgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QpCiB7CiAgICAgbV93ZWJWaWV3LT5oaWRlUG9wdXBzKCk7Ci0gICAgaWYgKG1fd2ViVmll
dy0+Y2xpZW50KCkpIHsKLSAgICAgICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKLSAg
ICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0gICAgICAgIG1fd2ViVmlldy0+
Y2xpZW50KCktPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBjbGlwUmVjdCk7CisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmIChtX3dlYlZpZXctPmNsaWVu
dCgpKSB7CisgICAgICAgICAgICBpbnQgZHggPSBzY3JvbGxEZWx0YS53aWR0aCgpOworICAgICAg
ICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CisgICAgICAgICAgICBtX3dlYlZp
ZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJlY3QpOworICAgICAgICB9
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0gZWxzZSB7CisgICAgICAg
IG1fd2ViVmlldy0+c2Nyb2xsUm9vdExheWVyKHNjcm9sbERlbHRhLCBjbGlwUmVjdCk7CiAgICAg
fQorI2VuZGlmCiB9CiAKIEludFBvaW50IENocm9tZUNsaWVudEltcGw6OnNjcmVlblRvV2luZG93
KGNvbnN0IEludFBvaW50JikgY29uc3QKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUG9wdXBNZW51SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUlt
cGwuY3BwCmluZGV4IDc1ZDZjYzE0MzgyNGI3ZjU5MjkxMDI5YjQyN2NlOTIwYzIzZTQ1MzkuLjcx
N2ZmODJlMjVlNWNmNGFjZDAzMjgzNjgzYTYwOGFkNzg0NzcwNWEgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtMTU1LDEyICsxNTUsMTIgQEAgdm9pZCBXZWJQ
b3B1cE1lbnVJbXBsOjpsYXlvdXQoKQogewogfQogCi12b2lkIFdlYlBvcHVwTWVudUltcGw6OnBh
aW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQordm9pZCBXZWJQb3B1
cE1lbnVJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgdmlld3Bv
cnQpCiB7CiAgICAgaWYgKCFtX3dpZGdldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFy
ZWN0LmlzRW1wdHkoKSkgeworICAgIGlmICghdmlld3BvcnQuaXNFbXB0eSgpKSB7CiAjaWYgV0VC
S0lUX1VTSU5HX0NHCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjYW52YXMpOwogI2VsaWYg
V0VCS0lUX1VTSU5HX1NLSUEKQEAgLTE3MCwxMCArMTcwLDE5IEBAIHZvaWQgV2ViUG9wdXBNZW51
SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAjZWxz
ZQogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogI2VuZGlmCi0gICAgICAgIG1fd2lkZ2V0LT5w
YWludCgmZ2MsIHJlY3QpOworICAgICAgICBtX3dpZGdldC0+cGFpbnQoJmdjLCB2aWV3cG9ydCk7
CiAgICAgfQogfQogCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OnRoZW1lQ2hhbmdlZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6Y29tcG9zaXRl
KGJvb2wgZmluaXNoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgV2ViUG9w
dXBNZW51SW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBpbnB1dEV2
ZW50KQogewogICAgIGlmICghbV93aWRnZXQpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51
SW1wbC5oCmluZGV4IGVkYmI0YWI1MGQ0MTZiMDNiN2JkMWE1ZmNlODAwNTU2MDkxZWEyMjcuLjIy
MWJhMDM4ZjJjNGM3MzZkNjc3ZmFiZmEzMjJlMDUxZjkwNDI2NGMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUG9wdXBNZW51SW1wbC5oCkBAIC02Myw2ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJS
ZWN0JiByZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CisgICAgdmlydHVh
bCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlu
cHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNh
cHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNGIxMjlkNjk0YjFmMTEyZjI3YjIxYWU3
MjRkYjY3YTY4YTc0ZTAyYS4uMTRkM2YwMTlmNmU2M2FhYmE3YjRlZTY3OWY2ZGIyMTcwZDgxYzk4
MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTkwOSw3ICs5MDksMTIgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAKICAgICBp
ZiAobV9jbGllbnQpIHsKICAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwotICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJl
Y3QoZGFtYWdlZFJlY3QpOworICAgICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKCkpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgICAgICBp
bnZhbGlkYXRlUm9vdExheWVyUmVjdChkYW1hZ2VkUmVjdCk7CisjZW5kaWYKKyAgICAgICAgfSBl
bHNlIAorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0
KTsKICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkBAIC05NDMsMzMgKzk0OCwxNyBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpsYXlvdXQoKQogCiB2b2lkIFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMq
IGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKLQorICAgIGlmIChpc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisgICAgICAgIGlu
dmFsaWRhdGVSb290TGF5ZXJSZWN0KHJlY3QpOworICAgICAgICBkb0NvbXBvc2l0ZShjYW52YXMs
IGZhbHNlKTsKICNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRPRE8sIGlmIGFjY2Vs
ZXJhdGVkLCByZWRpcmVjdCB0byBwYWludCBjb21wb3NpdGVkIGxvb3AKICAgICAgICAgV2ViRnJh
bWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICAgICAgaWYgKHdlYmZyYW1l
KQogICAgICAgICAgICAgd2ViZnJhbWUtPnBhaW50KGNhbnZhcywgcmVjdCk7Ci0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERyYXcgdGhl
IGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgotICAgICAgICB1cGRhdGVSb290TGF5ZXJDb250
ZW50cyhyZWN0KTsKLQotICAgICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1l
SW1wbCgpOwotICAgICAgICBpZiAoIXdlYmZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7Ci0gICAgICAgIGlm
ICghdmlldykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBUaGUgdmlzaWJsZVJl
Y3QgaW5jbHVkZXMgc2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250ZW50UmVjdCBkb2Vzbid0Lgot
ICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRy
dWUpOwotICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KGZhbHNlKTsKLQotICAgICAgICAvLyBBc2sgdGhlIGxheWVyIGNvbXBvc2l0b3IgdG8gcmVk
cmF3IGFsbCB0aGUgbGF5ZXJzLgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMo
cmVjdCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBJbnRQb2ludCh2aWV3LT5zY3JvbGxYKCks
IHZpZXctPnNjcm9sbFkoKSkpOwogICAgIH0KLSNlbmRpZgogfQogCiAvLyBGSVhNRTogbV9jdXJy
ZW50SW5wdXRFdmVudCBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIENocm9tZUNsaWVudDo6c2hvdygp
IGNhbgpAQCAtMjEwNSw5ICsyMDk0LDE3IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRhYnNUb0xpbmtz
KCkgY29uc3QKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBsYXllcikK
IHsKKyAgICBib29sIHdhc0FjdGl2ZSA9IG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
OwogICAgIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShsYXllciA/IHRydWUgOiBm
YWxzZSk7CiAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5zZXRSb290TGF5ZXIobGF5ZXIpOworICAgIGlmICh3YXNBY3RpdmUgIT0gbV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUpIHsKKyAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAw
LCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAgICAgICBpZiAobV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUpIAorICAgICAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJl
Y3QoZGFtYWdlZFJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlk
SW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworICAgIH0KIH0KIAogdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQpAQCAtMjEx
OSwxMCArMjExNiw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUoZ2V0T25zY3JlZW5HTEVTMkNvbnRleHQoKSk7CiAgICAg
ICAgIGlmIChtX2xheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkgewogICAgICAg
ICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBGb3JjZSBhIHJlZHJhdyB0aGUgZW50aXJlIHZpZXcgc28gdGhh
dCB0aGUgY29tcG9zaXRvciBnZXRzIHRoZSBlbnRpcmUgdmlldywKLSAgICAgICAgICAgIC8vIHJh
dGhlciB0aGFuIGp1c3QgdGhlIGN1cnJlbnRseS1kaXJ0eSBzdWJzZXQuCi0gICAgICAgICAgICBt
X2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1f
c2l6ZS5oZWlnaHQpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fbGF5ZXJSZW5k
ZXJlci5jbGVhcigpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUgPSBmYWxzZTsKQEAgLTIxMzgsMTIgKzIxMzEsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRh
dGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIGlmICghaXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJ
WE1FOiBUaGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgcGF0aCBpbnZhbGlkYXRlcyBhIDF4MSBy
ZWN0IGF0ICgwLCAwKQotICAgIC8vIGluIG9yZGVyIHRvIGdldCB0aGUgcmVuZGVyZXIgdG8gYXNr
IHRoZSBjb21wb3NpdG9yIHRvIHJlZHJhdy4gVGhpcyBpcyBvbmx5Ci0gICAgLy8gdGVtcG9yYXJ5
IHVudGlsIHdlIGdldCB0aGUgY29tcG9zaXRvciB0byByZW5kZXIgZGlyZWN0bHkgZnJvbSBpdHMg
b3duIHRocmVhZC4KLSAgICBpZiAoIXJlY3QueCAmJiAhcmVjdC55ICYmIHJlY3Qud2lkdGggPT0g
MSAmJiByZWN0LmhlaWdodCA9PSAxKQotICAgICAgICByZXR1cm47Ci0KICAgICBXZWJGcmFtZUlt
cGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwogICAgIGlmICghd2ViZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKQEAgLTIxOTUsMjEgKzIxODIsMTc0IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVw
ZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAKIHZvaWQgV2ViVmll
d0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBu
b3cgd2UncmUgcG9zdGluZyBhIHJlcGFpbnQgZXZlbnQgZm9yIHRoZSBlbnRpcmUgcGFnZSB3aGlj
aCBpcyBhbiBvdmVya2lsbC4KLSAgICBpZiAoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5G
cmFtZUltcGwoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZy
YW1lVmlldygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGhhY2sgdG8gaW52
YWxpZGF0ZSBwYXJ0IG9mIHRoZSBwYWdlIHNvIHRoYXQgd2UgZ2V0IGNhbGxlZCB0byByZW5kZXIK
LSAgICAgICAgICAgIC8vICAgICAgICBhZ2Fpbi4KLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJs
ZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0gICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxLCAxKSk7CisgICAgbV9jbGll
bnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKworLy8gV2ViVmlld0lt
cGwgbWV0aG9kCit2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQoreworICAgIGlmIChp
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+c2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworI2VuZGlm
CisgICAgfSBlbHNlIHsKKyAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJl
Y3QoZGFtYWdlZFJlY3QpOworICAgIH0KK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9v
dExheWVyKGNvbnN0IFdlYlNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBXZWJSZWN0JiBjbGlwUmVj
dCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICAvLyBDb21wdXRlIHRoZSBk
YW1hZ2UgcmVjdCBpbiB2aWV3cG9ydCBzcGFjZQorICAgIC8vIFNob3VsZCBvbmx5IGJlIHNjcm9s
bGluZyBpbiBvbmUgZGlyZWN0aW9uIGF0IGEgdGltZS4KKyAgICBBU1NFUlQoIShzY3JvbGxEZWx0
YS53aWR0aCAmJiBzY3JvbGxEZWx0YS5oZWlnaHQpKTsKKyAgICBXZWJGcmFtZUltcGwqIHdlYmZy
YW1lID0gbWFpbkZyYW1lSW1wbCgpOworICAgIGlmICghd2ViZnJhbWUpCisgICAgICAgIHJldHVy
bjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CisgICAgaWYg
KCF2aWV3KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgRmxvYXRSZWN0IGRhbWFnZWRSZWN0
OworICAgIC8vIFB1dCB0aGUgdmlld3BvcnRSZWN0IGluIF9sYXllciBzcGFjZV8gcHJpb3IgdG8g
dGhlIHNjcm9sbCBzaW5jZSB0aGUgbG9naWMKKyAgICAvLyBiZWxvdyBlbWl0cyBkYW1hZ2UgaW4g
dGhlIHNwYWNlICJiZWZvcmUiIHNjcm9sbGluZworICAgIC8vIFVzaW5nIGxheWVyIHNwYWNlIGZv
ciBkYW1hZ2UgcmVjdHMgYWxsb3dzIHVzIHRvIGludGVybWl4IGludmFsaWRhdGVzIHdpdGggc2Ny
b2xscworICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3Qo
ZmFsc2UpOworICAgIEZsb2F0UmVjdCB2aWV3cG9ydFJlY3QoY29udGVudFJlY3QueCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFJlY3QueSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOwor
ICAgIAorICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiB3ZSB3aWxsIGV4cG9zZSBieSBzY3JvbGxp
bmcsIGFuZCBwYWludCB0aGF0IGludG8gYQorICAgIC8vIHNoYXJlZCBtZW1vcnkgc2VjdGlvbi4K
KyAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgpIHsKKyAgICAgICAgZmxvYXQgZHggPSAoZmxvYXQp
c2Nyb2xsRGVsdGEud2lkdGg7CisgICAgICAgIGRhbWFnZWRSZWN0LnNldFkodmlld3BvcnRSZWN0
LnkoKSk7CisgICAgICAgIGRhbWFnZWRSZWN0LnNldEhlaWdodCh2aWV3cG9ydFJlY3QuaGVpZ2h0
KCkpOworICAgICAgICBpZiAoZHggPiAwKSB7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRY
KHZpZXdwb3J0UmVjdC54KCkpOworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0V2lkdGgoZHgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0WCh2aWV3cG9y
dFJlY3QucmlnaHQoKSArIGR4KTsKKyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldFdpZHRoKC1k
eCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmbG9hdCBkeSA9IChmbG9hdClz
Y3JvbGxEZWx0YS5oZWlnaHQ7CisgICAgICAgIGRhbWFnZWRSZWN0LnNldFgodmlld3BvcnRSZWN0
LngoKSk7CisgICAgICAgIGRhbWFnZWRSZWN0LnNldFdpZHRoKHZpZXdwb3J0UmVjdC53aWR0aCgp
KTsKKyAgICAgICAgaWYgKGR5ID4gMCkgeworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0WSh2
aWV3cG9ydFJlY3QueSgpKTsKKyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldEhlaWdodChkeSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRZKHZpZXdwb3J0
UmVjdC5ib3R0b20oKSArIGR5KTsKKyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldEhlaWdodCgt
ZHkpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIC8vIFRPRE86IGFkZCBhIHNtYXJ0ZXIg
ZGFtYWdlIGFnZ3JlZ2F0aW9uIGxvZ2ljPyBSaWdodCBub3csIExheWVyQ2hyb21pdW0gZG9lcyBz
aW1wbGUgdW5pb24taW5nCisgICAgSW50UmVjdCBpRGFtYWdlZFJlY3QoZGFtYWdlZFJlY3QpOwor
ICAgIGlEYW1hZ2VkUmVjdC51bml0ZShtX3Njcm9sbERhbWFnZSk7CisgICAgbV9zY3JvbGxEYW1h
Z2UgPSBpRGFtYWdlZFJlY3Q7CisgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Cit9Cit2
b2lkIFdlYlZpZXdJbXBsOjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBXZWJSZWN0JiBy
ZWN0KQoreworICAgIC8vIHJlY3QgaXMgaW4gdmlld3BvcnQgc3BhY2UuIENvbnZlcnQgdG8gbGF5
ZXIgc3BhY2UKKyAgICAvLyBzbyB0aGF0IGludmFsaWRhdGlvbnMgYW5kIHNjcm9sbCBpbnZhbGlk
YXRpb25zIHBsYXkgd2VsbCB3aXRoIG9uZS1hbm90aGVyCisgICAgQVNTRVJUKG1fbGF5ZXJSZW5k
ZXJlcik7CisgICAgCisgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwo
KTsKKyAgICBpZiAoIXdlYmZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVWaWV3KiB2
aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBGbG9hdFJlY3QgbHNSZWN0KHJlY3QueCArIHZpZXct
PnNjcm9sbFgoKSwKKyAgICAgICAgICAgICAgICAgICAgICByZWN0LnkgKyB2aWV3LT5zY3JvbGxZ
KCksCisgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAg
IAorICAgIC8vIFRPRE86IGFkZCBhIHNtYXJ0ZXIgZGFtYWdlIGFnZ3JlZ2F0aW9uIGxvZ2ljPyBS
aWdodCBub3csIExheWVyQ2hyb21pdW0gZG9lcyBzaW1wbGUgdW5pb24taW5nCisgICAgbV9sYXll
clJlbmRlcmVyLT5yb290TGF5ZXIoKS0+c2V0TmVlZHNEaXNwbGF5KGxzUmVjdCk7CiB9CiAjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCisvLyBXZWJXaWRldCBtZXRob2QK
K3ZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgZG9Db21wb3NpdGUoMCwgZmluaXNoKTsKKyNlbmRp
ZgorfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViVmlld0ltcGw6
OmRvQ29tcG9zaXRlKFdlYkNhbnZhcyogY2FudmFzLCBib29sIGZpbmlzaCkKK3sKKyAgICBBU1NF
UlQoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpOworICAgIFdlYkZyYW1lSW1wbCog
d2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAgaWYgKCF3ZWJmcmFtZSkKKyAgICAgICAg
cmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKKyAg
ICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBp
bmNsdWRlcyBzY3JvbGxiYXJzIHdoZXJlYXMgdGhlIGNvbnRlbnRSZWN0IGRvZXNuJ3QuCisgICAg
SW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKKyAg
ICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsK
KyAgICBJbnRSZWN0IHZpZXdwb3J0ICAgID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1f
c2l6ZS5oZWlnaHQpOworCisgICAgLy8gR2l2ZSB0aGUgY29tcG9pc2l0b3IgYSBjaGFuY2UgdG8g
c2V0dXAvcmVzaXplIHRoZSByb290IHRleHR1cmUgaGFuZGxlIGFuZCBwZXJmb3JtIHNjcm9sbGlu
ZworICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlcGFyZVRvRHJhd0xheWVycyh2aXNpYmxlUmVjdCwg
Y29udGVudFJlY3QsIEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7
CisKKyAgICAvLyBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllcgorICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IGRhbWFnZVJlY3RzOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChGbG9hdFJl
Y3QobV9zY3JvbGxEYW1hZ2UueCwgbV9zY3JvbGxEYW1hZ2UueSwgbV9zY3JvbGxEYW1hZ2Uud2lk
dGgsIG1fc2Nyb2xsRGFtYWdlLmhlaWdodCkpOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChtX2xh
eWVyUmVuZGVyZXItPnJvb3RMYXllcigpLT5kaXJ0eVJlY3QoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBkYW1hZ2VSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyB0aGUgZGFt
YWdlIHJlY3RzIGZvciB0aGUgcm9vdCBsYXllciBpcyBpbiBsYXllciBzcGFjZSBbZS5nLiB1bnNj
cm9sbGVkLl0KKyAgICAgICAgLy8gY29udmVydCBmcm9tIGxheWVyIHNwYWNlIHRvIHZpZXdwb3J0
IHNwYWNlCisgICAgICAgIGNvbnN0IEZsb2F0UmVjdCBzc1JlY3QgPSBkYW1hZ2VSZWN0c1tpXTsK
KyAgICAgICAgRmxvYXRSZWN0IHJlY3Qoc3NSZWN0LngoKSAtIHZpZXctPnNjcm9sbFgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgc3NSZWN0LnkoKSAtIHZpZXctPnNjcm9sbFkoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgc3NSZWN0LndpZHRoKCksIHNzUmVjdC5oZWlnaHQoKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBpbnRlcnNlY3QgdGhpcyByZWN0YW5nbGUgd2l0aCB0aGUgdmlld3Bv
cnQKKyAgICAgICAgcmVjdC5pbnRlcnNlY3Qodmlld3BvcnQpOworICAgICAgICAKKyAgICAgICAg
CisgICAgICAgIC8vIG5vdyByZW5kZXIgaXQKKyAgICAgICAgV2ViUmVjdCB3cmVjdChyZWN0Lngo
KSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmICh3
cmVjdC53aWR0aCAmJiB3cmVjdC5oZWlnaHQpIHsKKyAgICAgICAgICAgIHVwZGF0ZVJvb3RMYXll
ckNvbnRlbnRzKHdyZWN0KTsKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlUm9v
dExheWVyVGV4dHVyZVJlY3Qod3JlY3QpOworICAgICAgICB9CisgICAgfQorICAgIG1fbGF5ZXJS
ZW5kZXJlci0+cm9vdExheWVyKCktPnJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9zY3JvbGxE
YW1hZ2UgPSBXZWJSZWN0KCk7CisgICAgICAgIAorICAgIC8vIERyYXcgdGhlIGFjdHVhbCBsYXll
cnMuLi4KKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRl
bnRSZWN0KTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNv
bnRlbnRSZWN0KTsKKworICAgIC8vIHJlYWRiYWNrIGludG8gdGhlIGNhbnZhcywgaWYgcmVxdWVz
dGVkCisgICAgLy8gRklYTUUgSW5zZXJ0IHdqbWFjbGVhbidzIHJlYWRiYWNrIGNvZGUgaGVyZSBm
b3Igd2Via2l0IGJ1ZyA0NDEyNworICAgIAorICAgIC8vIGZpbmlzaCBpZiByZXF1ZXN0ZWQKKyAg
ICAvLyBGSVhNRTogaGFuZGxlIGZpbmlzaCBmbGFnCisgICAgCisgICAgLy8gd2UncmUgZG9uZS4u
LiBwdXQgcmVzdWx0IG9uc2NyZWVuCisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisK
KyAgICAvLyB0ZWxsIHRoZSBicm93c2VyIHRoYXQgdGhlIHJlbmRlcmluZyBpcyBkb25lIC0tLQor
ICAgIC8vIFRPRE86IHRoaXMgaXMgYmVpbmcgY2FsbGVkIHRvbyBlYXJseSwgd2UgbmVlZCB0byBk
ZWZlciBjYWxsaW5nIHRoaXMgCisgICAgLy8gICAgICAgdW50aWwgdGhlIHN3YXBidWZmZXJzIGl0
c2VsZiBoYXMgZXhlY3V0ZWQgb24gdGhlIEdQVS4KKyAgICAvLyBtX2NsaWVudC0+b25Db21wb3Np
dGVDb21wbGV0ZSgpOworfQorI2VuZGlmCisKKwogUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdl
YlZpZXdJbXBsOjpnZXRPbnNjcmVlbkdMRVMyQ29udGV4dCgpCiB7CiAgICAgcmV0dXJuIEdMRVMy
Q29udGV4dDo6Y3JlYXRlKEdMRVMyQ29udGV4dEludGVybmFsOjpjcmVhdGUoZ2xlczJDb250ZXh0
KCksIGZhbHNlKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYzI5NjEyMTIzZjQ1
MTRjOTRkZDdkOTcwYzczMTE0YTRiZWVlYzM1NS4uYmNkNGY0NmQ4N2YxYTVmYzNkNmZkNjRmMzVh
OTJkYmRjNjk2MDI4NiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIldlYkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRp
b25Qb2xpY3kuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIK
ICNpbmNsdWRlICJXZWJTaXplLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAi
V2ViVmlldy5oIgpAQCAtOTIsNiArOTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
c2l6ZShjb25zdCBXZWJTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHRoZW1lQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBm
aW5pc2gpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0
RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CkBAIC0zMjIsNiArMzI1LDkgQEAgcHVibGlj
OgogICAgIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGRv
Q29tcG9zaXRlKFdlYkNhbnZhcyosIGJvb2wgZmluaXNoKTsKKyAgICB2b2lkIHNjcm9sbFJvb3RM
YXllcihjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3Qp
OworICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViUmVjdCYpOwogICAg
IHZvaWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzZXRSb290R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKik7CiAjZW5kaWYKQEAgLTUxMCw2ICs1MTYs
NyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX21vdXNlQ2FwdHVyZU5v
ZGU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgV2ViUmVjdCBtX3Nj
cm9sbERhbWFnZTsKICAgICBPd25QdHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBt
X2xheWVyUmVuZGVyZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRl
c3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCmluZGV4IDUw
MzE5YWYyM2IwYTkyZjQ0YzkxNThlZmIzZTY0NjE4MjM5ODFkMTAuLmFlZjI5Y2YyZDA0MTI0YjRj
ODdlZjA3YTJlNWYzODUwOTY3ODJiNjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9Qb3B1cE1lbnVUZXN0LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51
VGVzdC5jcHAKQEAgLTEyOCw2ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
c2l6ZShjb25zdCBXZWJTaXplJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21w
b3NpdGUoYm9vbCBmaW5pc2gpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50
KGNvbnN0IFdlYklucHV0RXZlbnQmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lk
IG1vdXNlQ2FwdHVyZUxvc3QoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCkg
eyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66447</attachid>
            <date>2010-09-02 17:57:55 -0700</date>
            <delta_ts>2010-09-03 11:19:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100902175753.patch</filename>
            <type>text/plain</type>
            <size>37453</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmFkMTBkZjJhMjRlYjcwZDhjYzJhZWU5ZTg0YjIyOWY5YzAwNDFhYi4uMWM0ODdhMTEyM2E4N2Q2
OTRmNjM2MTdlODdhMTE1NjkyNjViZDFmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wMiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY1MTlmMWZmMmJhMTgyNmYyZTI4
NTk2MmIwMzgxNzEyYTQ2ZTlkY2MuLjkyZWM0OWI1Y2M3ZjdmZjhiNjM3YjZkMzBhMTI0YTE0ZGMw
YmMzYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcApAQCAtMjk5LDEwICsyOTksMTUgQEAgdm9pZCBMYXllckNocm9taXVt
OjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBpZiAobV9ib3VuZHMgPT0gc2l6
ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBmaXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53
aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWln
aHQoKTsKKyAgICAKICAgICBtX2JvdW5kcyA9IHNpemU7CiAgICAgbV9iYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKIAotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgaWYgKGZpcnN0UmVzaXplKQor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCiBjb25zdCBMYXll
ckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApAQCAtMzUzLDcgKzM1
OCw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAKICAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MzYzLDYgKzM2NywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewog
ICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJhMTUwODg0NGJhMzViMzQ1MWY4
MmNkNTg5YTY1Mzk3NjUyMWEwOGMuLjJkMjI1ZGFmNWEyMDcxYmFiZmViZDZhN2NmM2NjMDVlMjZi
MzkwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnR5UmVjdDsgfQorICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTAzMzhkMmQ1ZjczMjRlNWExMTljNTA5MTkwZGZlZjg2OThi
MTc2OS4uYWY2MGM4ZWRmYTc3YmJkZWEzZWRiYThlMmU1ZmIzYjY4YjJmN2IyNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMTA5LDYgKzEwOSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkZWJ1Z0dMQ2FsbChjb25zdCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiBmaWxl
LCBpCiAvLyBDcmVhdGVzIGEgY2FudmFzIGFuZCBhbiBhc3NvY2lhdGVkIGdyYXBoaWNzIGNvbnRl
eHQgdGhhdCB0aGUgcm9vdCBsYXllciB3aWxsCiAvLyByZW5kZXIgaW50by4KIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXJDYW52YXNTaXplKGNvbnN0IEludFNpemUmIHNp
emUpCisKIHsKICAgICBpZiAoc2l6ZSA9PSBtX3Jvb3RMYXllckNhbnZhc1NpemUpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1Miw4ICsxNTMsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXNlU2hhZGVyKHVuc2lnbmVkIHByb2dyYW1JZCkKIAogLy8gVXBkYXRlcyB0aGUgY29udGVudHMg
b2YgdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZSB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0
CiAvLyBhbmQgcmUtY29tcG9zaXRzIGFsbCBzdWJsYXllcnMuCi12b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyhjb25z
dCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9p
bnQmIHNjcm9sbFBvc2l0aW9uKQogewogICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OwogCkBAIC0xODAsMTAgKzE4MSwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIC8v
IFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEsIGluY2x1ZGlu
ZyB0aGUgc2Nyb2xsYmFycy4KICAgICBHTEMoZ2xWaWV3cG9ydCgwLCAwLCB2aXNpYmxlUmVjdFdp
ZHRoLCB2aXNpYmxlUmVjdEhlaWdodCkpOwogCisKICAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVy
dGV4IGF0dHJpYnV0ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxheWVycy4KICAgICBMYXll
ckNocm9taXVtOjpwcmVwYXJlRm9yRHJhdyhsYXllclNoYXJlZFZhbHVlcygpKTsKKyAgICAKIAot
ICAgIC8vIEZJWE1FOiBUaGVzZSBjYWxscyBjYW4gYmUgbWFkZSBvbmNlLCB3aGVuIHRoZSBjb21w
b3NpdG9yIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQuCiAgICAgR0xDKGdsRGlzYWJsZShHTF9ERVBU
SF9URVNUKSk7CiAgICAgR0xDKGdsRGlzYWJsZShHTF9DVUxMX0ZBQ0UpKTsKICAgICBHTEMoZ2xE
ZXB0aEZ1bmMoR0xfTEVRVUFMKSk7CkBAIC0xOTMsMTQgKzE5NSwxMiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25z
dCBJbnRSZWN0JgogICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAK
ICAgICBJbnRQb2ludCBzY3JvbGxEZWx0YSA9IHRvUG9pbnQoc2Nyb2xsUG9zaXRpb24gLSBtX3Nj
cm9sbFBvc2l0aW9uKTsKLSAgICAvLyBTY3JvbGwgb25seSB3aGVuIHRoZSB1cGRhdGVSZWN0IGNv
bnRhaW5zIHBpeGVscyBmb3IgdGhlIG5ld2x5IHVuY292ZXJlZCByZWdpb24gdG8gYXZvaWQgZmxh
c2hpbmcuCi0gICAgaWYgKChzY3JvbGxEZWx0YS54KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID49
IGFicyhzY3JvbGxEZWx0YS54KCkpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gY29udGVudFJl
Y3QuaGVpZ2h0KCkpCi0gICAgICAgIHx8IChzY3JvbGxEZWx0YS55KCkgJiYgdXBkYXRlUmVjdC5o
ZWlnaHQoKSA+PSBhYnMoc2Nyb2xsRGVsdGEueSgpKSAmJiB1cGRhdGVSZWN0LndpZHRoKCkgPj0g
Y29udGVudFJlY3Qud2lkdGgoKSkpIHsKKyAgICAvLyBTY3JvbGwgdGhlIGJhY2tidWZmZXIKKyAg
ICBpZiAoc2Nyb2xsRGVsdGEueCgpIHx8IHNjcm9sbERlbHRhLnkoKSkgewogICAgICAgICAvLyBT
Y3JvbGxpbmcgd29ya3MgYXMgZm9sbG93czogV2UgcmVuZGVyIGEgcXVhZCB3aXRoIHRoZSBjdXJy
ZW50IHJvb3QgbGF5ZXIgY29udGVudHMKICAgICAgICAgLy8gdHJhbnNsYXRlZCBieSB0aGUgYW1v
dW50IHRoZSBwYWdlIGhhcyBzY3JvbGxlZCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUgYW5kIHRoZW4g
cmVhZCB0aGUKICAgICAgICAgLy8gcGl4ZWxzIG9mIHRoZSBjb250ZW50IGFyZWEgKHZpc2libGUg
YXJlYSBleGNsdWRpbmcgdGhlIHNjcm9sbCBiYXJzKSBiYWNrIGludG8gdGhlCi0gICAgICAgIC8v
IHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQgYXJlYSBpcyBzdWJlc3F1ZW50
bHkgZmlsbGVkIGFzIHVzdWFsIHdpdGgKLSAgICAgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVSZWN0LgorICAgICAgICAvLyByb290IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBv
c2VkIGFyZWEgd2lsbCBiZSBmaWxsZWQgYnkgYSBzdWJzZXF1ZW50IGRyYXdMYXllcnNJbnRvUmVj
dCBjYWxsCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbGVkTGF5ZXJNYXRyaXg7
CiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmOwpA
QCAtMjMwLDQzICsyMzAsNjQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICAgICAgLy8g
bm8gbmVlZCB0byBjb3B5IGZyYW1lYnVmZmVyIHBpeGVscyBiYWNrIGludG8gdGhlIHRleHR1cmUu
CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9CisgICAg
CisgICAgLy8gVHJhbnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9s
bCBwb3NpdGlvbi4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgbWF0cml4
LnRyYW5zbGF0ZTNkKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgp
LCAwKTsKIAotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGNoZWNrIHNob3VsZCBnbyBhd2F5
IHdoZW4gdGhlIGNvbXBvc2l0b3IgcmVuZGVycyBpbmRlcGVuZGVudGx5IGZyb20gaXRzIG93biB0
aHJlYWQuCi0gICAgLy8gSWdub3JlIGEgMXgxIHVwZGF0ZSByZWN0IGF0ICgwLCAwKSBhcyB0aGF0
J3MgdXNlZCBhIHdheSB0byBraWNrIG9mZiBhIHJlZHJhdyBmb3IgdGhlIGNvbXBvc2l0b3IuCi0g
ICAgaWYgKCEoIXVwZGF0ZVJlY3QueCgpICYmICF1cGRhdGVSZWN0LnkoKSAmJiB1cGRhdGVSZWN0
LndpZHRoKCkgPT0gMSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID09IDEpKSB7Ci0gICAgICAgIC8v
IFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBBU1NFUlQoKHVwZGF0ZVJl
Y3QueCgpICsgdXBkYXRlUmVjdC53aWR0aCgpIDw9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQot
ICAgICAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QueSgpICsgdXBkYXRlUmVjdC5oZWlnaHQoKSA8
PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsKKyAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIg
dHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zvcm1zLgorICAgIGZsb2F0IG9wYWNpdHkg
PSAxOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJz
ID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOworICAgIHNpemVfdCBpOworICAgIGZvciAo
aSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAgICAgIHVwZGF0ZUxheWVyc1Jl
Y3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwgb3BhY2l0eSk7Cit9CiAKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OworCisgICAgaWYgKCFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVXBk
YXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgQVNTRVJUKCh1cGRhdGVSZWN0LngoKSAr
IHVwZGF0ZVJlY3Qud2lkdGgoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKKyAgICAgICAg
ICAgJiYgKHVwZGF0ZVJlY3QueSgpICsgdXBkYXRlUmVjdC5oZWlnaHQoKSA8PSBtX3Jvb3RMYXll
clRleHR1cmVIZWlnaHQpKTsKKyAgICAKICNpZiBQTEFURk9STShTS0lBKQotICAgICAgICAvLyBH
ZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIGNvbnN0IFNrQml0
bWFwIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFw
KGZhbHNlKTsKLSAgICAgICAgaW50IHJvb3RMYXllcldpZHRoID0gYml0bWFwLndpZHRoKCk7Ci0g
ICAgICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7Ci0gICAgICAgIEFT
U0VSVChyb290TGF5ZXJXaWR0aCA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgcm9vdExheWVySGVp
Z2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB2b2lkKiBwaXhlbHMgPSBiaXRt
YXAuZ2V0UGl4ZWxzKCk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVw
ZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBHTEMoZ2xUZXhT
dWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0Lnko
KSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVkIHJlY3QuCisgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGludCByb290TGF5ZXJX
aWR0aCA9IGJpdG1hcC53aWR0aCgpOworICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAu
aGVpZ2h0KCk7CisgICAgQVNTRVJUKHJvb3RMYXllcldpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgo
KSAmJiByb290TGF5ZXJIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCog
cGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9m
IHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBHTEMoZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0
LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICAgICAv
LyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250
ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dC
aXRtYXBDb250ZXh0R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBk
YXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHZvaWQqIHBpeGVscyA9IG1fcm9vdExheWVyQmFj
a2luZ1N0b3JlLmRhdGEoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUg
dXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgICAgIC8vIFRoZSBv
cmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBz
eXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgotICAgICAgICBHTEMoZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXBkYXRlUmVjdC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3Qu
eSgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgLy8g
R2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIC8vIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0
LmdldCgpKSkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRt
YXBDb250ZXh0R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRl
UmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3Rv
cmUuZGF0YSgpOworCisgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVj
dCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgorICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhl
IGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQg
dG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgorICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jv
b3RMYXllclRleHR1cmVIZWlnaHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJl
Y3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBwaXhlbHMpKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5
b3VyIHBsYXRmb3JtLiIKICNlbmRpZgotICAgIH0KK30KIAordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwor
ICAgIAogICAgIGdsQ2xlYXJDb2xvcigwLCAwLCAxLCAxKTsKICAgICBnbENsZWFyKEdMX0NPTE9S
X0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKTsKLQorICAgIAorICAgIEdMQyhnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CisgICAgCiAg
ICAgLy8gUmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRo
ZSBlbnRpcmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cuCiAgICAgLy8gV2UgcmV1c2UgdGhl
IHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCiAgICAgY29uc3Qg
Q29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0g
Y29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7CkBAIC0yOTAsMjIgKzMxMSwxMyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhnbEVuYWJsZShHTF9CTEVORCkpOwogICAgIEdMQyhn
bEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKIAotICAgIC8vIFRy
YW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24u
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgIG1hdHJpeC50cmFuc2xhdGUz
ZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7Ci0KLSAg
ICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zv
cm1zLgotICAgIGZsb2F0IG9wYWNpdHkgPSAxOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOwot
ICAgIHNpemVfdCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKysp
Ci0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJp
eCwgb3BhY2l0eSk7Ci0KLSAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwotCiAg
ICAgLy8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5
ZXJzIG92ZXIgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVT
VCkpOwogICAgIEZsb2F0UmVjdCBzY2lzc29yUmVjdChjb250ZW50UmVjdCk7CisKKyAgICAvLyBT
ZXQgdGhlIHJvb3RWaXNpYmxlUmVjdCAtLS0gdXNlZCBieSBzdWJzZXF1ZW50IGRyYXdMYXllcnMg
Y2FsbHMKKyAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OworCiAgICAgLy8gVGhl
IHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9mZnNldC4KICAgICBz
Y2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24u
eSgpKTsKICAgICBzY2lzc29yVG9SZWN0KHNjaXNzb3JSZWN0KTsKQEAgLTMxNiwxMyArMzI4LDE3
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3Qm
IHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgR0xDKGdsU3RlbmNpbE1hc2soMCkpOwog
CiAgICAgLy8gVHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgb25lIG1vcmUgdGltZSB0byBkcmF3IHRo
ZSBsYXllcnMuCi0gICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKKyAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9v
dExheWVyLT5nZXRTdWJsYXllcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1Ymxh
eWVycy5zaXplKCk7IGkrKykKICAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNb
aV0uZ2V0KCksIHNjaXNzb3JSZWN0KTsKIAogICAgIEdMQyhnbERpc2FibGUoR0xfU0NJU1NPUl9U
RVNUKSk7Cit9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVzZW50KCkKK3sKKyAg
ICAvLyBXZSdyZSBkb25lISBUaW1lIHRvIHN3YXBidWZmZXJzIQogICAgIG1fZ2xlczJDb250ZXh0
LT5zd2FwQnVmZmVycygpOwotCiAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKaW5kZXggOGY0NGFmZWJkMGEyYzdiNDc1ZDA0YmE0ODcyM2YxY2RjNTQ1
NTA5MS4uMmY5ZWRlZjY3YzIzM2ZmYjdjMDJkNDM1MTdkZTViNzU0NzAxYjEyOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCkBAIC02MSw5ICs2MSwxNyBAQCBwdWJsaWM6CiAgICAgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBnbGVzMkNvbnRleHQpOwogICAgIH5M
YXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIAotICAgIC8vIFVwZGF0ZXMgdGhlIGNvbnRlbnRzIG9m
IHRoZSByb290IGxheWVyIHRoYXQgZmFsbCBpbnNpZGUgdGhlIHVwZGF0ZVJlY3QgYW5kIHJlY29t
cG9zaXRlcwotICAgIC8vIGFsbCB0aGUgbGF5ZXJzLgotICAgIHZvaWQgZHJhd0xheWVycyhjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7Cisg
ICAgLy8gdXBkYXRlcyBzaXplIG9mIHJvb3QgdGV4dHVyZSwgaWYgbmVlZGVkLCBhbmQgc2Nyb2xs
cyB0aGUgYmFja2J1ZmZlcgorICAgIHZvaWQgcHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbik7CisgICAgCisgICAgLy8gdXBkYXRlcyBhIHJlY3RhbmdsZSB3
aXRoaW4gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZQorICAgIHZvaWQgdXBkYXRlUm9vdExheWVyVGV4
dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCk7CisKKyAgICAvLyBkcmF3cyB0aGUg
Y3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgorICAgIHZvaWQgZHJhd0xheWVycyhj
b25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwor
CisgICAgLy8gcHV0cyBiYWNrYnVmZWZmZXIgb25zY3JlZW4KKyAgICB2b2lkIHByZXNlbnQoKTsK
IAogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIp
IHsgbV9yb290TGF5ZXIgPSBsYXllcjsgfQogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigp
IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1MjdlOGVmY2Nh
ZTM5MDQ1ZmQ5ODVkZWQzYmYyMGQ3MTY2YWZjNjlkLi41OTUwOTI1MWExZTM2NzI2NmVkMjBjN2Zh
YjJlNzBhZWQzNDU3Y2RhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wOS0w
MiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3Np
dGluZzogc2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgSW50cm9kdWNlIGEg
bmV3IEFQSSBvbiBXZWJXaWRnZXQgZm9yIHBhaW50aW5nIHdpdGggYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgdGhhdCBhbGxvd3MgdGhlIGNvbXBvc2l0b3IgdG8gcHJvcGVybHkgZGlz
dGluZ2l1c2gKKyAgICAgICAgc2Nyb2xsaW5nLCBpbnZhbGlkYXRpb24gYW5kIHJlcGFpbnRpbmcg
ZnJvbSBvbmUgYW5vdGhlci4gVGhlIGtleQorICAgICAgICBjaGFuZ2UgaXMgdGhhdCBpbiBhY2Nl
bGVyYXRlZCByZW5kZXJpbmcgY2FzZSwgaW52YWxpZGF0ZXMgYW5kCisgICAgICAgIHNjcm9sbGlu
ZyBwYXNzIGRpcmVjdGx5IHRvIHRoZSBjb21wb3NpdG9yLCByYXRoZXIgdGhhbiBwYXNzaW5nIHVw
CisgICAgICAgIHRvIHRoZSBjbGllbnQgYXMgd2FzIHRoZSBjYXNlIGluIHRoZSBzb2Z0d2FyZSBw
YXRoLiBGb3IKKyAgICAgICAgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nLCB0aGUgcHJldmlvdXMgcGFp
bnQoKSBtZXRob2QgaXMgcmVwbGFjZWQgYnkKKyAgICAgICAgYSBwYWlyIG9mIG1ldGhvZHM6IHBh
aW50Q29tcG9zaXRlZCBhbmQKKyAgICAgICAgaW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJS
ZWN0LgorCisKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgICogcHVibGlj
L1dlYldpZGdldENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXRDbGllbnQ6OnNj
aGVkdWxlRGVmZXJyZWRDb21wb3NpdGUpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0ZUNvbnRl
bnRzQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xs
KToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudUltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51
SW1wbDo6aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUG9wdXBNZW51SW1wbDo6cGFpbnRDb21wb3NpdGVkKToKKyAgICAgICAgKiBzcmMvV2Vi
UG9wdXBNZW51SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBo
aWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJv
b3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnZh
bGlkYXRlUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3Jv
bGxSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZUNv
bXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBh
aW50Q29tcG9zaXRlZCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICog
dGVzdHMvUG9wdXBNZW51VGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJXaWRnZXQ6
OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRl
c3RXZWJXaWRnZXQ6OnBhaW50Q29tcG9zaXRlZCk6CisKIDIwMTAtMDktMDIgIElseWEgU2hlcm1h
biAgPGlzaGVybWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCA1YzlmNTRlNzkzNjZiODNhZmVl
N2MwZTFlM2EzMjg4YzM0NDEyY2E5Li5kYTY5MGE2M2VkYzNkM2NhM2ExMDRlOWI4Nzc0YzNhMmUy
M2I3ODNhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTU5LDE1ICs1OSwyOCBA
QCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIGxheW91dCB0aGUgV2ViV2lkZ2V0LiAgVGhpcyBN
VVNUIGJlIGNhbGxlZCBiZWZvcmUgUGFpbnQsCiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQgaW4g
Y2FsbHMgdG8gV2ViV2lkZ2V0Q2xpZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCkgPSAwOwotCi0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSBzcGVjaWZp
ZWQgcmVnaW9uIG9mIHRoZSBXZWJXaWRnZXQgb250byB0aGUgZ2l2ZW4KLSAgICAvLyBjYW52YXMu
ICBZb3UgTVVTVCBjYWxsIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlz
Ci0gICAgLy8gb2theSB0byBjYWxsIHBhaW50IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhh
cyBiZWVuIGNhbGxlZCwKLSAgICAvLyBhc3N1bWluZyBubyBvdGhlciBjaGFuZ2VzIGFyZSBtYWRl
IHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9uY2UKLSAgICAvLyBldmVudHMgYXJlIHByb2Nlc3Nl
ZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8KLSAgICAvLyBsYXlv
dXQgaXMgd2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSA9IDA7Ci0KKyAgICAKKyAgICAvLyBD
YWxsZWQgdG8gcGFpbnQgdGhlIHNwZWNpZmllZCB2aWV3cG9ydCBvZiB0aGUgV2ViV2lkZ2V0IAor
ICAgIC8vIG9udG8gdGhlIHNwZWNpZmllZCBjYW52YXMgYXQgKHZpZXdwb3J0Lngsdmlld3BvcnQu
eSkuIFlvdSBNVVNUIGNhbGwKKyAgICAvLyBMYXlvdXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRo
b2QuICBJdCBpcyBva2F5IHRvIGNhbGwgcGFpbnQKKyAgICAvLyBtdWx0aXBsZSB0aW1lcyBvbmNl
IGxheW91dCBoYXMgYmVlbiBjYWxsZWQsIGFzc3VtaW5nIG5vIG90aGVyCisgICAgLy8gY2hhbmdl
cyBhcmUgbWFkZSB0byB0aGUgV2ViV2lkZ2V0IChlLmcuLCBvbmNlIGV2ZW50cyBhcmUKKyAgICAv
LyBwcm9jZXNzZWQsIGl0IHNob3VsZCBiZSBhc3N1bWVkIHRoYXQgYW5vdGhlciBjYWxsIHRvIGxh
eW91dCBpcworICAgIC8vIHdhcnJhbnRlZCBiZWZvcmUgcGFpbnRpbmcgYWdhaW4pLgorICAgIHZp
cnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JiB2aWV3cG9ydCkgPSAw
OworICAgIAorICAgIC8vIFRyaWdnZXJzIGNvbXBvc2l0aW5nIG9mIHRoZSBjdXJyZW50IGxheWVy
cyBvbnRvIHRoZSBzY3JlZW4uCisgICAgLy8gVGhlIGZpbmlzaCBhcmd1bWVudCBjb250cm9scyB3
aGV0aGVyIHRoZSBjb21wb3NpdG9yIHdpbGwgd2FpdGluZyBmb3IgdGhlCisgICAgLy8gR1BVIHRv
IGZpbmlzaCByZW5kZXJpbmcgYmVmb3JlIHJldHVybmluZy4gWW91IE1VU1QgY2FsbCBMYXlvdXQK
KyAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCwgZm9yIHRoZSBzYW1lIHJlYXNvbnMg
ZGVzY3JpYmVkIGluCisgICAgLy8gdGhlIHBhaW50IG1ldGhvZCBhYm92ZS4KKyAgICB2aXJ0dWFs
IHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgdG8gaW5m
b3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gbmF0aXZlIHdpZGdldCBzZXR0aW5ncy4K
KyAgICAvLyBJbXBsZW1lbnRvcnMgdGhhdCBjYWNoZSByZW5kZXJlZCBjb3BpZXMgb2Ygd2lkZ2V0
cyBuZWVkIHRvIHJlLXJlbmRlcgorICAgIC8vIG9uIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UKKyAg
ICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgPSAwOworICAgIAogICAgIC8vIENhbGxlZCB0
byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhbiBpbnB1dCBldmVudC4gIFJldHVybnMgdHJ1ZSBp
ZgogICAgIC8vIHRoZSBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQsIGZhbHNlIG90aGVyd2lzZS4K
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jikg
PSAwOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQu
aCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgKaW5kZXggYmQ3YmQ2
YTc0ZmNiYWYzNzFkZjNlOWE2ZTQxMGJlZGJmMzU5MjMyMC4uYjNlZTlmNTZmZDExNDc3ODdiMmU0
NjkyNWYwZGU0NTFkOWFjNDUxYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJXaWRnZXRDbGllbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENs
aWVudC5oCkBAIC00NSw3ICs0NSwxMCBAQCBjbGFzcyBXZWJXaWRnZXRDbGllbnQgewogcHVibGlj
OgogICAgIC8vIENhbGxlZCB3aGVuIGEgcmVnaW9uIG9mIHRoZSBXZWJXaWRnZXQgbmVlZHMgdG8g
YmUgcmUtcGFpbnRlZC4KICAgICB2aXJ0dWFsIHZvaWQgZGlkSW52YWxpZGF0ZVJlY3QoY29uc3Qg
V2ViUmVjdCYpIHsgfQotCisgICAgCisgICAgLy8gQ2FsbGVkIHdoZW4gYSBjYWxsIHRvIFdlYldp
ZGdldDo6Y29tcG9zaXRlIGlzIHJlcXVpcmVkCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRlKCkgeyB9CisgICAgCiAgICAgLy8gQ2FsbGVkIHdoZW4gYSByZWdpb24gb2YgdGhlIFdl
YldpZGdldCwgZ2l2ZW4gYnkgY2xpcFJlY3QsIHNob3VsZCBiZQogICAgIC8vIHNjcm9sbGVkIGJ5
IHRoZSBzcGVjaWZpZWQgZHggYW5kIGR5IGFtb3VudHMuCiAgICAgdmlydHVhbCB2b2lkIGRpZFNj
cm9sbFJlY3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0KSB7IH0KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IGU2ZjE0MDA3MTgwZDhk
M2JmNjEyOGIxMzBkYzI4YWJhYWVjMWY5MGEuLjJmZGE4ZTY4ZTYxNGZmMzY4MTdiNGMzOGJhZGZi
MWQzMTE2MDI0OGQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApA
QCAtNDkyLDggKzQ5MiwxNiBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250
ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBibwogewogICAgIGlmICh1
cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3dlYlZpZXct
PmNsaWVudCgpKQotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVj
dCh1cGRhdGVSZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYg
KCFtX3dlYlZpZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjZW5kaWYK
KyAgICAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgICAgICBtX3dlYlZpZXct
PmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVSZWN0KTsKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV93ZWJWaWV3LT5pbnZh
bGlkYXRlUm9vdExheWVyUmVjdCh1cGRhdGVSZWN0KTsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9p
ZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0
IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQpAQCAtNTA3LDExICs1MTUsMTkg
QEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGwoCiAgICAgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QpCiB7CiAgICAgbV93ZWJWaWV3LT5oaWRlUG9wdXBzKCk7Ci0gICAgaWYgKG1fd2ViVmll
dy0+Y2xpZW50KCkpIHsKLSAgICAgICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKLSAg
ICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0gICAgICAgIG1fd2ViVmlldy0+
Y2xpZW50KCktPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBjbGlwUmVjdCk7CisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmIChtX3dlYlZpZXctPmNsaWVu
dCgpKSB7CisgICAgICAgICAgICBpbnQgZHggPSBzY3JvbGxEZWx0YS53aWR0aCgpOworICAgICAg
ICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CisgICAgICAgICAgICBtX3dlYlZp
ZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJlY3QpOworICAgICAgICB9
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0gZWxzZSB7CisgICAgICAg
IG1fd2ViVmlldy0+c2Nyb2xsUm9vdExheWVyKHNjcm9sbERlbHRhLCBjbGlwUmVjdCk7CiAgICAg
fQorI2VuZGlmCiB9CiAKIEludFBvaW50IENocm9tZUNsaWVudEltcGw6OnNjcmVlblRvV2luZG93
KGNvbnN0IEludFBvaW50JikgY29uc3QKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUG9wdXBNZW51SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUlt
cGwuY3BwCmluZGV4IDc1ZDZjYzE0MzgyNGI3ZjU5MjkxMDI5YjQyN2NlOTIwYzIzZTQ1MzkuLjcx
N2ZmODJlMjVlNWNmNGFjZDAzMjgzNjgzYTYwOGFkNzg0NzcwNWEgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtMTU1LDEyICsxNTUsMTIgQEAgdm9pZCBXZWJQ
b3B1cE1lbnVJbXBsOjpsYXlvdXQoKQogewogfQogCi12b2lkIFdlYlBvcHVwTWVudUltcGw6OnBh
aW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQordm9pZCBXZWJQb3B1
cE1lbnVJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgdmlld3Bv
cnQpCiB7CiAgICAgaWYgKCFtX3dpZGdldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFy
ZWN0LmlzRW1wdHkoKSkgeworICAgIGlmICghdmlld3BvcnQuaXNFbXB0eSgpKSB7CiAjaWYgV0VC
S0lUX1VTSU5HX0NHCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjYW52YXMpOwogI2VsaWYg
V0VCS0lUX1VTSU5HX1NLSUEKQEAgLTE3MCwxMCArMTcwLDE5IEBAIHZvaWQgV2ViUG9wdXBNZW51
SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAjZWxz
ZQogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogI2VuZGlmCi0gICAgICAgIG1fd2lkZ2V0LT5w
YWludCgmZ2MsIHJlY3QpOworICAgICAgICBtX3dpZGdldC0+cGFpbnQoJmdjLCB2aWV3cG9ydCk7
CiAgICAgfQogfQogCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OnRoZW1lQ2hhbmdlZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6Y29tcG9zaXRl
KGJvb2wgZmluaXNoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgV2ViUG9w
dXBNZW51SW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBpbnB1dEV2
ZW50KQogewogICAgIGlmICghbV93aWRnZXQpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51
SW1wbC5oCmluZGV4IGVkYmI0YWI1MGQ0MTZiMDNiN2JkMWE1ZmNlODAwNTU2MDkxZWEyMjcuLjIy
MWJhMDM4ZjJjNGM3MzZkNjc3ZmFiZmEzMjJlMDUxZjkwNDI2NGMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUG9wdXBNZW51SW1wbC5oCkBAIC02Myw2ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJS
ZWN0JiByZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CisgICAgdmlydHVh
bCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlu
cHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNh
cHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNGIxMjlkNjk0YjFmMTEyZjI3YjIxYWU3
MjRkYjY3YTY4YTc0ZTAyYS4uOGE0ODQ0MmZjOWQ1ZDYzYTgyOTdhZWFkMTI0MzQ3YjBjZWU3NDVk
NSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTkwOSw3ICs5MDksMTIgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAKICAgICBp
ZiAobV9jbGllbnQpIHsKICAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwotICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJl
Y3QoZGFtYWdlZFJlY3QpOworICAgICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKCkpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgICAgICBp
bnZhbGlkYXRlUm9vdExheWVyUmVjdChkYW1hZ2VkUmVjdCk7CisjZW5kaWYKKyAgICAgICAgfSBl
bHNlIAorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0
KTsKICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkBAIC05NDMsMzMgKzk0OCwxNyBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpsYXlvdXQoKQogCiB2b2lkIFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMq
IGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKLQorICAgIGlmIChpc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisgICAgICAgIGlu
dmFsaWRhdGVSb290TGF5ZXJSZWN0KHJlY3QpOworICAgICAgICBkb0NvbXBvc2l0ZShjYW52YXMs
IGZhbHNlKTsKICNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRPRE8sIGlmIGFjY2Vs
ZXJhdGVkLCByZWRpcmVjdCB0byBwYWludCBjb21wb3NpdGVkIGxvb3AKICAgICAgICAgV2ViRnJh
bWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICAgICAgaWYgKHdlYmZyYW1l
KQogICAgICAgICAgICAgd2ViZnJhbWUtPnBhaW50KGNhbnZhcywgcmVjdCk7Ci0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERyYXcgdGhl
IGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgotICAgICAgICB1cGRhdGVSb290TGF5ZXJDb250
ZW50cyhyZWN0KTsKLQotICAgICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1l
SW1wbCgpOwotICAgICAgICBpZiAoIXdlYmZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7Ci0gICAgICAgIGlm
ICghdmlldykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBUaGUgdmlzaWJsZVJl
Y3QgaW5jbHVkZXMgc2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250ZW50UmVjdCBkb2Vzbid0Lgot
ICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRy
dWUpOwotICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KGZhbHNlKTsKLQotICAgICAgICAvLyBBc2sgdGhlIGxheWVyIGNvbXBvc2l0b3IgdG8gcmVk
cmF3IGFsbCB0aGUgbGF5ZXJzLgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMo
cmVjdCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBJbnRQb2ludCh2aWV3LT5zY3JvbGxYKCks
IHZpZXctPnNjcm9sbFkoKSkpOwogICAgIH0KLSNlbmRpZgogfQogCiAvLyBGSVhNRTogbV9jdXJy
ZW50SW5wdXRFdmVudCBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIENocm9tZUNsaWVudDo6c2hvdygp
IGNhbgpAQCAtMjEwNSw5ICsyMDk0LDE3IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRhYnNUb0xpbmtz
KCkgY29uc3QKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBsYXllcikK
IHsKKyAgICBib29sIHdhc0FjdGl2ZSA9IG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
OwogICAgIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShsYXllciA/IHRydWUgOiBm
YWxzZSk7CiAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5zZXRSb290TGF5ZXIobGF5ZXIpOworICAgIGlmICh3YXNBY3RpdmUgIT0gbV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUpIHsKKyAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAw
LCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAgICAgICBpZiAobV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUpIAorICAgICAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJl
Y3QoZGFtYWdlZFJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlk
SW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworICAgIH0KIH0KIAogdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQpAQCAtMjEx
OSwxMCArMjExNiw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUoZ2V0T25zY3JlZW5HTEVTMkNvbnRleHQoKSk7CiAgICAg
ICAgIGlmIChtX2xheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkgewogICAgICAg
ICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBGb3JjZSBhIHJlZHJhdyB0aGUgZW50aXJlIHZpZXcgc28gdGhh
dCB0aGUgY29tcG9zaXRvciBnZXRzIHRoZSBlbnRpcmUgdmlldywKLSAgICAgICAgICAgIC8vIHJh
dGhlciB0aGFuIGp1c3QgdGhlIGN1cnJlbnRseS1kaXJ0eSBzdWJzZXQuCi0gICAgICAgICAgICBt
X2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1f
c2l6ZS5oZWlnaHQpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fbGF5ZXJSZW5k
ZXJlci5jbGVhcigpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUgPSBmYWxzZTsKQEAgLTIxMzgsMTIgKzIxMzEsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRh
dGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIGlmICghaXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJ
WE1FOiBUaGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgcGF0aCBpbnZhbGlkYXRlcyBhIDF4MSBy
ZWN0IGF0ICgwLCAwKQotICAgIC8vIGluIG9yZGVyIHRvIGdldCB0aGUgcmVuZGVyZXIgdG8gYXNr
IHRoZSBjb21wb3NpdG9yIHRvIHJlZHJhdy4gVGhpcyBpcyBvbmx5Ci0gICAgLy8gdGVtcG9yYXJ5
IHVudGlsIHdlIGdldCB0aGUgY29tcG9zaXRvciB0byByZW5kZXIgZGlyZWN0bHkgZnJvbSBpdHMg
b3duIHRocmVhZC4KLSAgICBpZiAoIXJlY3QueCAmJiAhcmVjdC55ICYmIHJlY3Qud2lkdGggPT0g
MSAmJiByZWN0LmhlaWdodCA9PSAxKQotICAgICAgICByZXR1cm47Ci0KICAgICBXZWJGcmFtZUlt
cGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwogICAgIGlmICghd2ViZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKQEAgLTIxOTUsMjEgKzIxODIsMTc0IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVw
ZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAKIHZvaWQgV2ViVmll
d0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBu
b3cgd2UncmUgcG9zdGluZyBhIHJlcGFpbnQgZXZlbnQgZm9yIHRoZSBlbnRpcmUgcGFnZSB3aGlj
aCBpcyBhbiBvdmVya2lsbC4KLSAgICBpZiAoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5G
cmFtZUltcGwoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZy
YW1lVmlldygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGhhY2sgdG8gaW52
YWxpZGF0ZSBwYXJ0IG9mIHRoZSBwYWdlIHNvIHRoYXQgd2UgZ2V0IGNhbGxlZCB0byByZW5kZXIK
LSAgICAgICAgICAgIC8vICAgICAgICBhZ2Fpbi4KLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJs
ZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0gICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxLCAxKSk7CisgICAgbV9jbGll
bnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKworLy8gV2ViVmlld0lt
cGwgbWV0aG9kCit2b2lkIFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXIoY29uc3QgV2ViU2l6
ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0KQoreworICAgIEFTU0VSVCht
X2xheWVyUmVuZGVyZXIpOworICAgIC8vIENvbXB1dGUgdGhlIGRhbWFnZSByZWN0IGluIHZpZXdw
b3J0IHNwYWNlCisgICAgLy8gU2hvdWxkIG9ubHkgYmUgc2Nyb2xsaW5nIGluIG9uZSBkaXJlY3Rp
b24gYXQgYSB0aW1lLgorICAgIEFTU0VSVCghKHNjcm9sbERlbHRhLndpZHRoICYmIHNjcm9sbERl
bHRhLmhlaWdodCkpOworICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBs
KCk7CisgICAgaWYgKCF3ZWJmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyog
dmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBGbG9hdFJlY3QgZGFtYWdlZFJlY3Q7CisgICAgLy8gUHV0IHRoZSB2
aWV3cG9ydFJlY3QgaW4gX2xheWVyIHNwYWNlXyBwcmlvciB0byB0aGUgc2Nyb2xsIHNpbmNlIHRo
ZSBsb2dpYworICAgIC8vIGJlbG93IGVtaXRzIGRhbWFnZSBpbiB0aGUgc3BhY2UgImJlZm9yZSIg
c2Nyb2xsaW5nCisgICAgLy8gVXNpbmcgbGF5ZXIgc3BhY2UgZm9yIGRhbWFnZSByZWN0cyBhbGxv
d3MgdXMgdG8gaW50ZXJtaXggaW52YWxpZGF0ZXMgd2l0aCBzY3JvbGxzCisgICAgSW50UmVjdCBj
b250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7CisgICAgRmxvYXRS
ZWN0IHZpZXdwb3J0UmVjdChjb250ZW50UmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZW50UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50
UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgCisgICAgLy8gQ29tcHV0
ZSB0aGUgcmVnaW9uIHdlIHdpbGwgZXhwb3NlIGJ5IHNjcm9sbGluZywgYW5kIHBhaW50IHRoYXQg
aW50byBhCisgICAgLy8gc2hhcmVkIG1lbW9yeSBzZWN0aW9uLgorICAgIGlmIChzY3JvbGxEZWx0
YS53aWR0aCkgeworICAgICAgICBmbG9hdCBkeCA9IChmbG9hdClzY3JvbGxEZWx0YS53aWR0aDsK
KyAgICAgICAgZGFtYWdlZFJlY3Quc2V0WSh2aWV3cG9ydFJlY3QueSgpKTsKKyAgICAgICAgZGFt
YWdlZFJlY3Quc2V0SGVpZ2h0KHZpZXdwb3J0UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChk
eCA+IDApIHsKKyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldFgodmlld3BvcnRSZWN0LngoKSk7
CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRXaWR0aChkeCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRYKHZpZXdwb3J0UmVjdC5yaWdodCgpICsgZHgp
OworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0V2lkdGgoLWR4KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGZsb2F0IGR5ID0gKGZsb2F0KXNjcm9sbERlbHRhLmhlaWdodDsK
KyAgICAgICAgZGFtYWdlZFJlY3Quc2V0WCh2aWV3cG9ydFJlY3QueCgpKTsKKyAgICAgICAgZGFt
YWdlZFJlY3Quc2V0V2lkdGgodmlld3BvcnRSZWN0LndpZHRoKCkpOworICAgICAgICBpZiAoZHkg
PiAwKSB7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRZKHZpZXdwb3J0UmVjdC55KCkpOwor
ICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0SGVpZ2h0KGR5KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldFkodmlld3BvcnRSZWN0LmJvdHRvbSgpICsgZHkp
OworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0SGVpZ2h0KC1keSk7CiAgICAgICAgIH0KICAg
ICB9CisgICAgCisgICAgLy8gVE9ETzogYWRkIGEgc21hcnRlciBkYW1hZ2UgYWdncmVnYXRpb24g
bG9naWM/IFJpZ2h0IG5vdywgTGF5ZXJDaHJvbWl1bSBkb2VzIHNpbXBsZSB1bmlvbi1pbmcKKyAg
ICBJbnRSZWN0IGlEYW1hZ2VkUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgaURhbWFnZWRSZWN0LnVu
aXRlKG1fc2Nyb2xsRGFtYWdlKTsKKyAgICBtX3Njcm9sbERhbWFnZSA9IGlEYW1hZ2VkUmVjdDsK
KyAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKK30KK3ZvaWQgV2ViVmlld0ltcGw6Omlu
dmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYlJlY3QmIHJlY3QpCit7CisgICAgLy8gcmVj
dCBpcyBpbiB2aWV3cG9ydCBzcGFjZS4gQ29udmVydCB0byBsYXllciBzcGFjZQorICAgIC8vIHNv
IHRoYXQgaW52YWxpZGF0aW9ucyBhbmQgc2Nyb2xsIGludmFsaWRhdGlvbnMgcGxheSB3ZWxsIHdp
dGggb25lLWFub3RoZXIKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICAKKyAgICBX
ZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOworICAgIGlmICghd2ViZnJh
bWUpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJh
bWVWaWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9s
YXllclJlbmRlcmVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzRGlzcGxheSgp
OworICAgIEZsb2F0UmVjdCBsc1JlY3QocmVjdC54ICsgdmlldy0+c2Nyb2xsWCgpLAorICAgICAg
ICAgICAgICAgICAgICAgIHJlY3QueSArIHZpZXctPnNjcm9sbFkoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgCisgICAgLy8gVE9ETzogYWRk
IGEgc21hcnRlciBkYW1hZ2UgYWdncmVnYXRpb24gbG9naWM/IFJpZ2h0IG5vdywgTGF5ZXJDaHJv
bWl1bSBkb2VzIHNpbXBsZSB1bmlvbi1pbmcKKyAgICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXll
cigpLT5zZXROZWVkc0Rpc3BsYXkobHNSZWN0KTsKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAKKy8vIFdlYldpZGV0IG1ldGhvZAordm9pZCBXZWJWaWV3SW1wbDo6
dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+cm9vdExheWVyKCktPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBzZXRSb290
TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIFdlYlJl
Y3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKKyAgICAg
ICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICB9Cit9CisK
K3ZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgZG9Db21wb3NpdGUoMCwgZmluaXNoKTsKKyNlbmRp
ZgorfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViVmlld0ltcGw6
OmRvQ29tcG9zaXRlKFdlYkNhbnZhcyogY2FudmFzLCBib29sIGZpbmlzaCkKK3sKKyAgICBBU1NF
UlQoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpOworICAgIFdlYkZyYW1lSW1wbCog
d2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAgaWYgKCF3ZWJmcmFtZSkKKyAgICAgICAg
cmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKKyAg
ICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBp
bmNsdWRlcyBzY3JvbGxiYXJzIHdoZXJlYXMgdGhlIGNvbnRlbnRSZWN0IGRvZXNuJ3QuCisgICAg
SW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKKyAg
ICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsK
KyAgICBJbnRSZWN0IHZpZXdwb3J0ICAgID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1f
c2l6ZS5oZWlnaHQpOworCisgICAgLy8gR2l2ZSB0aGUgY29tcG9pc2l0b3IgYSBjaGFuY2UgdG8g
c2V0dXAvcmVzaXplIHRoZSByb290IHRleHR1cmUgaGFuZGxlIGFuZCBwZXJmb3JtIHNjcm9sbGlu
ZworICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlcGFyZVRvRHJhd0xheWVycyh2aXNpYmxlUmVjdCwg
Y29udGVudFJlY3QsIEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7
CisKKyAgICAvLyBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllcgorICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IGRhbWFnZVJlY3RzOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChGbG9hdFJl
Y3QobV9zY3JvbGxEYW1hZ2UueCwgbV9zY3JvbGxEYW1hZ2UueSwgbV9zY3JvbGxEYW1hZ2Uud2lk
dGgsIG1fc2Nyb2xsRGFtYWdlLmhlaWdodCkpOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChtX2xh
eWVyUmVuZGVyZXItPnJvb3RMYXllcigpLT5kaXJ0eVJlY3QoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBkYW1hZ2VSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyB0aGUgZGFt
YWdlIHJlY3RzIGZvciB0aGUgcm9vdCBsYXllciBpcyBpbiBsYXllciBzcGFjZSBbZS5nLiB1bnNj
cm9sbGVkLl0KKyAgICAgICAgLy8gY29udmVydCBmcm9tIGxheWVyIHNwYWNlIHRvIHZpZXdwb3J0
IHNwYWNlCisgICAgICAgIGNvbnN0IEZsb2F0UmVjdCBzc1JlY3QgPSBkYW1hZ2VSZWN0c1tpXTsK
KyAgICAgICAgRmxvYXRSZWN0IHJlY3Qoc3NSZWN0LngoKSAtIHZpZXctPnNjcm9sbFgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgc3NSZWN0LnkoKSAtIHZpZXctPnNjcm9sbFkoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgc3NSZWN0LndpZHRoKCksIHNzUmVjdC5oZWlnaHQoKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBpbnRlcnNlY3QgdGhpcyByZWN0YW5nbGUgd2l0aCB0aGUgdmlld3Bv
cnQKKyAgICAgICAgcmVjdC5pbnRlcnNlY3Qodmlld3BvcnQpOworICAgICAgICAKKyAgICAgICAg
CisgICAgICAgIC8vIG5vdyByZW5kZXIgaXQKKyAgICAgICAgV2ViUmVjdCB3cmVjdChyZWN0Lngo
KSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmICh3
cmVjdC53aWR0aCAmJiB3cmVjdC5oZWlnaHQpIHsKKyAgICAgICAgICAgIHVwZGF0ZVJvb3RMYXll
ckNvbnRlbnRzKHdyZWN0KTsKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlUm9v
dExheWVyVGV4dHVyZVJlY3Qod3JlY3QpOworICAgICAgICB9CisgICAgfQorICAgIG1fbGF5ZXJS
ZW5kZXJlci0+cm9vdExheWVyKCktPnJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9zY3JvbGxE
YW1hZ2UgPSBXZWJSZWN0KCk7CisgICAgICAgIAorICAgIC8vIERyYXcgdGhlIGFjdHVhbCBsYXll
cnMuLi4KKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRl
bnRSZWN0KTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNv
bnRlbnRSZWN0KTsKKworICAgIC8vIHJlYWRiYWNrIGludG8gdGhlIGNhbnZhcywgaWYgcmVxdWVz
dGVkCisgICAgLy8gRklYTUUgSW5zZXJ0IHdqbWFjbGVhbidzIHJlYWRiYWNrIGNvZGUgaGVyZSBm
b3Igd2Via2l0IGJ1ZyA0NDEyNworICAgIAorICAgIC8vIGZpbmlzaCBpZiByZXF1ZXN0ZWQKKyAg
ICAvLyBGSVhNRTogaGFuZGxlIGZpbmlzaCBmbGFnCisgICAgCisgICAgLy8gd2UncmUgZG9uZS4u
LiBwdXQgcmVzdWx0IG9uc2NyZWVuCisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisK
KyAgICAvLyB0ZWxsIHRoZSBicm93c2VyIHRoYXQgdGhlIHJlbmRlcmluZyBpcyBkb25lIC0tLQor
ICAgIC8vIFRPRE86IHRoaXMgaXMgYmVpbmcgY2FsbGVkIHRvbyBlYXJseSwgd2UgbmVlZCB0byBk
ZWZlciBjYWxsaW5nIHRoaXMgCisgICAgLy8gICAgICAgdW50aWwgdGhlIHN3YXBidWZmZXJzIGl0
c2VsZiBoYXMgZXhlY3V0ZWQgb24gdGhlIEdQVS4KKyAgICAvLyBtX2NsaWVudC0+b25Db21wb3Np
dGVDb21wbGV0ZSgpOworfQorI2VuZGlmCisKKwogUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdl
YlZpZXdJbXBsOjpnZXRPbnNjcmVlbkdMRVMyQ29udGV4dCgpCiB7CiAgICAgcmV0dXJuIEdMRVMy
Q29udGV4dDo6Y3JlYXRlKEdMRVMyQ29udGV4dEludGVybmFsOjpjcmVhdGUoZ2xlczJDb250ZXh0
KCksIGZhbHNlKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYzI5NjEyMTIzZjQ1
MTRjOTRkZDdkOTcwYzczMTE0YTRiZWVlYzM1NS4uYmNkNGY0NmQ4N2YxYTVmYzNkNmZkNjRmMzVh
OTJkYmRjNjk2MDI4NiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIldlYkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRp
b25Qb2xpY3kuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIK
ICNpbmNsdWRlICJXZWJTaXplLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAi
V2ViVmlldy5oIgpAQCAtOTIsNiArOTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
c2l6ZShjb25zdCBXZWJTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHRoZW1lQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBm
aW5pc2gpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0
RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CkBAIC0zMjIsNiArMzI1LDkgQEAgcHVibGlj
OgogICAgIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGRv
Q29tcG9zaXRlKFdlYkNhbnZhcyosIGJvb2wgZmluaXNoKTsKKyAgICB2b2lkIHNjcm9sbFJvb3RM
YXllcihjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3Qp
OworICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViUmVjdCYpOwogICAg
IHZvaWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzZXRSb290R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKik7CiAjZW5kaWYKQEAgLTUxMCw2ICs1MTYs
NyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX21vdXNlQ2FwdHVyZU5v
ZGU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgV2ViUmVjdCBtX3Nj
cm9sbERhbWFnZTsKICAgICBPd25QdHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBt
X2xheWVyUmVuZGVyZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRl
c3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCmluZGV4IDUw
MzE5YWYyM2IwYTkyZjQ0YzkxNThlZmIzZTY0NjE4MjM5ODFkMTAuLmFlZjI5Y2YyZDA0MTI0YjRj
ODdlZjA3YTJlNWYzODUwOTY3ODJiNjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9Qb3B1cE1lbnVUZXN0LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51
VGVzdC5jcHAKQEAgLTEyOCw2ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
c2l6ZShjb25zdCBXZWJTaXplJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21w
b3NpdGUoYm9vbCBmaW5pc2gpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50
KGNvbnN0IFdlYklucHV0RXZlbnQmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lk
IG1vdXNlQ2FwdHVyZUxvc3QoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCkg
eyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66522</attachid>
            <date>2010-09-03 11:19:55 -0700</date>
            <delta_ts>2010-09-03 11:27:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100903111954.patch</filename>
            <type>text/plain</type>
            <size>37453</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmFkMTBkZjJhMjRlYjcwZDhjYzJhZWU5ZTg0YjIyOWY5YzAwNDFhYi4uMWM0ODdhMTEyM2E4N2Q2
OTRmNjM2MTdlODdhMTE1NjkyNjViZDFmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wMiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY1MTlmMWZmMmJhMTgyNmYyZTI4
NTk2MmIwMzgxNzEyYTQ2ZTlkY2MuLjkyZWM0OWI1Y2M3ZjdmZjhiNjM3YjZkMzBhMTI0YTE0ZGMw
YmMzYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcApAQCAtMjk5LDEwICsyOTksMTUgQEAgdm9pZCBMYXllckNocm9taXVt
OjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBpZiAobV9ib3VuZHMgPT0gc2l6
ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBmaXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53
aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWln
aHQoKTsKKyAgICAKICAgICBtX2JvdW5kcyA9IHNpemU7CiAgICAgbV9iYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKIAotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgaWYgKGZpcnN0UmVzaXplKQor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCiBjb25zdCBMYXll
ckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApAQCAtMzUzLDcgKzM1
OCw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAKICAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MzYzLDYgKzM2NywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewog
ICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJhMTUwODg0NGJhMzViMzQ1MWY4
MmNkNTg5YTY1Mzk3NjUyMWEwOGMuLjJkMjI1ZGFmNWEyMDcxYmFiZmViZDZhN2NmM2NjMDVlMjZi
MzkwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnR5UmVjdDsgfQorICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTAzMzhkMmQ1ZjczMjRlNWExMTljNTA5MTkwZGZlZjg2OThi
MTc2OS4uYWY2MGM4ZWRmYTc3YmJkZWEzZWRiYThlMmU1ZmIzYjY4YjJmN2IyNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMTA5LDYgKzEwOSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkZWJ1Z0dMQ2FsbChjb25zdCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiBmaWxl
LCBpCiAvLyBDcmVhdGVzIGEgY2FudmFzIGFuZCBhbiBhc3NvY2lhdGVkIGdyYXBoaWNzIGNvbnRl
eHQgdGhhdCB0aGUgcm9vdCBsYXllciB3aWxsCiAvLyByZW5kZXIgaW50by4KIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXJDYW52YXNTaXplKGNvbnN0IEludFNpemUmIHNp
emUpCisKIHsKICAgICBpZiAoc2l6ZSA9PSBtX3Jvb3RMYXllckNhbnZhc1NpemUpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1Miw4ICsxNTMsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXNlU2hhZGVyKHVuc2lnbmVkIHByb2dyYW1JZCkKIAogLy8gVXBkYXRlcyB0aGUgY29udGVudHMg
b2YgdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZSB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0
CiAvLyBhbmQgcmUtY29tcG9zaXRzIGFsbCBzdWJsYXllcnMuCi12b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyhjb25z
dCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9p
bnQmIHNjcm9sbFBvc2l0aW9uKQogewogICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OwogCkBAIC0xODAsMTAgKzE4MSwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIC8v
IFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEsIGluY2x1ZGlu
ZyB0aGUgc2Nyb2xsYmFycy4KICAgICBHTEMoZ2xWaWV3cG9ydCgwLCAwLCB2aXNpYmxlUmVjdFdp
ZHRoLCB2aXNpYmxlUmVjdEhlaWdodCkpOwogCisKICAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVy
dGV4IGF0dHJpYnV0ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxheWVycy4KICAgICBMYXll
ckNocm9taXVtOjpwcmVwYXJlRm9yRHJhdyhsYXllclNoYXJlZFZhbHVlcygpKTsKKyAgICAKIAot
ICAgIC8vIEZJWE1FOiBUaGVzZSBjYWxscyBjYW4gYmUgbWFkZSBvbmNlLCB3aGVuIHRoZSBjb21w
b3NpdG9yIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQuCiAgICAgR0xDKGdsRGlzYWJsZShHTF9ERVBU
SF9URVNUKSk7CiAgICAgR0xDKGdsRGlzYWJsZShHTF9DVUxMX0ZBQ0UpKTsKICAgICBHTEMoZ2xE
ZXB0aEZ1bmMoR0xfTEVRVUFMKSk7CkBAIC0xOTMsMTQgKzE5NSwxMiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25z
dCBJbnRSZWN0JgogICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAK
ICAgICBJbnRQb2ludCBzY3JvbGxEZWx0YSA9IHRvUG9pbnQoc2Nyb2xsUG9zaXRpb24gLSBtX3Nj
cm9sbFBvc2l0aW9uKTsKLSAgICAvLyBTY3JvbGwgb25seSB3aGVuIHRoZSB1cGRhdGVSZWN0IGNv
bnRhaW5zIHBpeGVscyBmb3IgdGhlIG5ld2x5IHVuY292ZXJlZCByZWdpb24gdG8gYXZvaWQgZmxh
c2hpbmcuCi0gICAgaWYgKChzY3JvbGxEZWx0YS54KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID49
IGFicyhzY3JvbGxEZWx0YS54KCkpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gY29udGVudFJl
Y3QuaGVpZ2h0KCkpCi0gICAgICAgIHx8IChzY3JvbGxEZWx0YS55KCkgJiYgdXBkYXRlUmVjdC5o
ZWlnaHQoKSA+PSBhYnMoc2Nyb2xsRGVsdGEueSgpKSAmJiB1cGRhdGVSZWN0LndpZHRoKCkgPj0g
Y29udGVudFJlY3Qud2lkdGgoKSkpIHsKKyAgICAvLyBTY3JvbGwgdGhlIGJhY2tidWZmZXIKKyAg
ICBpZiAoc2Nyb2xsRGVsdGEueCgpIHx8IHNjcm9sbERlbHRhLnkoKSkgewogICAgICAgICAvLyBT
Y3JvbGxpbmcgd29ya3MgYXMgZm9sbG93czogV2UgcmVuZGVyIGEgcXVhZCB3aXRoIHRoZSBjdXJy
ZW50IHJvb3QgbGF5ZXIgY29udGVudHMKICAgICAgICAgLy8gdHJhbnNsYXRlZCBieSB0aGUgYW1v
dW50IHRoZSBwYWdlIGhhcyBzY3JvbGxlZCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUgYW5kIHRoZW4g
cmVhZCB0aGUKICAgICAgICAgLy8gcGl4ZWxzIG9mIHRoZSBjb250ZW50IGFyZWEgKHZpc2libGUg
YXJlYSBleGNsdWRpbmcgdGhlIHNjcm9sbCBiYXJzKSBiYWNrIGludG8gdGhlCi0gICAgICAgIC8v
IHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQgYXJlYSBpcyBzdWJlc3F1ZW50
bHkgZmlsbGVkIGFzIHVzdWFsIHdpdGgKLSAgICAgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVSZWN0LgorICAgICAgICAvLyByb290IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBv
c2VkIGFyZWEgd2lsbCBiZSBmaWxsZWQgYnkgYSBzdWJzZXF1ZW50IGRyYXdMYXllcnNJbnRvUmVj
dCBjYWxsCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbGVkTGF5ZXJNYXRyaXg7
CiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmOwpA
QCAtMjMwLDQzICsyMzAsNjQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICAgICAgLy8g
bm8gbmVlZCB0byBjb3B5IGZyYW1lYnVmZmVyIHBpeGVscyBiYWNrIGludG8gdGhlIHRleHR1cmUu
CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9CisgICAg
CisgICAgLy8gVHJhbnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9s
bCBwb3NpdGlvbi4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgbWF0cml4
LnRyYW5zbGF0ZTNkKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgp
LCAwKTsKIAotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGNoZWNrIHNob3VsZCBnbyBhd2F5
IHdoZW4gdGhlIGNvbXBvc2l0b3IgcmVuZGVycyBpbmRlcGVuZGVudGx5IGZyb20gaXRzIG93biB0
aHJlYWQuCi0gICAgLy8gSWdub3JlIGEgMXgxIHVwZGF0ZSByZWN0IGF0ICgwLCAwKSBhcyB0aGF0
J3MgdXNlZCBhIHdheSB0byBraWNrIG9mZiBhIHJlZHJhdyBmb3IgdGhlIGNvbXBvc2l0b3IuCi0g
ICAgaWYgKCEoIXVwZGF0ZVJlY3QueCgpICYmICF1cGRhdGVSZWN0LnkoKSAmJiB1cGRhdGVSZWN0
LndpZHRoKCkgPT0gMSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID09IDEpKSB7Ci0gICAgICAgIC8v
IFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBBU1NFUlQoKHVwZGF0ZVJl
Y3QueCgpICsgdXBkYXRlUmVjdC53aWR0aCgpIDw9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQot
ICAgICAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QueSgpICsgdXBkYXRlUmVjdC5oZWlnaHQoKSA8
PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsKKyAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIg
dHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zvcm1zLgorICAgIGZsb2F0IG9wYWNpdHkg
PSAxOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJz
ID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOworICAgIHNpemVfdCBpOworICAgIGZvciAo
aSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAgICAgIHVwZGF0ZUxheWVyc1Jl
Y3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwgb3BhY2l0eSk7Cit9CiAKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OworCisgICAgaWYgKCFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVXBk
YXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgQVNTRVJUKCh1cGRhdGVSZWN0LngoKSAr
IHVwZGF0ZVJlY3Qud2lkdGgoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKKyAgICAgICAg
ICAgJiYgKHVwZGF0ZVJlY3QueSgpICsgdXBkYXRlUmVjdC5oZWlnaHQoKSA8PSBtX3Jvb3RMYXll
clRleHR1cmVIZWlnaHQpKTsKKyAgICAKICNpZiBQTEFURk9STShTS0lBKQotICAgICAgICAvLyBH
ZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIGNvbnN0IFNrQml0
bWFwIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFw
KGZhbHNlKTsKLSAgICAgICAgaW50IHJvb3RMYXllcldpZHRoID0gYml0bWFwLndpZHRoKCk7Ci0g
ICAgICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7Ci0gICAgICAgIEFT
U0VSVChyb290TGF5ZXJXaWR0aCA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgcm9vdExheWVySGVp
Z2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB2b2lkKiBwaXhlbHMgPSBiaXRt
YXAuZ2V0UGl4ZWxzKCk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVw
ZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBHTEMoZ2xUZXhT
dWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0Lnko
KSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVkIHJlY3QuCisgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGludCByb290TGF5ZXJX
aWR0aCA9IGJpdG1hcC53aWR0aCgpOworICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAu
aGVpZ2h0KCk7CisgICAgQVNTRVJUKHJvb3RMYXllcldpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgo
KSAmJiByb290TGF5ZXJIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCog
cGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9m
IHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBHTEMoZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0
LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICAgICAv
LyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250
ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dC
aXRtYXBDb250ZXh0R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBk
YXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHZvaWQqIHBpeGVscyA9IG1fcm9vdExheWVyQmFj
a2luZ1N0b3JlLmRhdGEoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUg
dXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgICAgIC8vIFRoZSBv
cmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBz
eXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgotICAgICAgICBHTEMoZ2xU
ZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXBkYXRlUmVjdC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3Qu
eSgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgLy8g
R2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIC8vIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0
LmdldCgpKSkgPT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRt
YXBDb250ZXh0R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRl
UmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3Rv
cmUuZGF0YSgpOworCisgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVj
dCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgorICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhl
IGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQg
dG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgorICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jv
b3RMYXllclRleHR1cmVIZWlnaHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJl
Y3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBwaXhlbHMpKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5
b3VyIHBsYXRmb3JtLiIKICNlbmRpZgotICAgIH0KK30KIAordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwor
ICAgIAogICAgIGdsQ2xlYXJDb2xvcigwLCAwLCAxLCAxKTsKICAgICBnbENsZWFyKEdMX0NPTE9S
X0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKTsKLQorICAgIAorICAgIEdMQyhnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CisgICAgCiAg
ICAgLy8gUmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRo
ZSBlbnRpcmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cuCiAgICAgLy8gV2UgcmV1c2UgdGhl
IHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCiAgICAgY29uc3Qg
Q29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0g
Y29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7CkBAIC0yOTAsMjIgKzMxMSwxMyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhnbEVuYWJsZShHTF9CTEVORCkpOwogICAgIEdMQyhn
bEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKIAotICAgIC8vIFRy
YW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24u
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgIG1hdHJpeC50cmFuc2xhdGUz
ZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7Ci0KLSAg
ICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zv
cm1zLgotICAgIGZsb2F0IG9wYWNpdHkgPSAxOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVycygpOwot
ICAgIHNpemVfdCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKysp
Ci0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJp
eCwgb3BhY2l0eSk7Ci0KLSAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwotCiAg
ICAgLy8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5
ZXJzIG92ZXIgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVT
VCkpOwogICAgIEZsb2F0UmVjdCBzY2lzc29yUmVjdChjb250ZW50UmVjdCk7CisKKyAgICAvLyBT
ZXQgdGhlIHJvb3RWaXNpYmxlUmVjdCAtLS0gdXNlZCBieSBzdWJzZXF1ZW50IGRyYXdMYXllcnMg
Y2FsbHMKKyAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OworCiAgICAgLy8gVGhl
IHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9mZnNldC4KICAgICBz
Y2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24u
eSgpKTsKICAgICBzY2lzc29yVG9SZWN0KHNjaXNzb3JSZWN0KTsKQEAgLTMxNiwxMyArMzI4LDE3
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3Qm
IHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgR0xDKGdsU3RlbmNpbE1hc2soMCkpOwog
CiAgICAgLy8gVHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgb25lIG1vcmUgdGltZSB0byBkcmF3IHRo
ZSBsYXllcnMuCi0gICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKKyAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9v
dExheWVyLT5nZXRTdWJsYXllcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1Ymxh
eWVycy5zaXplKCk7IGkrKykKICAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNb
aV0uZ2V0KCksIHNjaXNzb3JSZWN0KTsKIAogICAgIEdMQyhnbERpc2FibGUoR0xfU0NJU1NPUl9U
RVNUKSk7Cit9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVzZW50KCkKK3sKKyAg
ICAvLyBXZSdyZSBkb25lISBUaW1lIHRvIHN3YXBidWZmZXJzIQogICAgIG1fZ2xlczJDb250ZXh0
LT5zd2FwQnVmZmVycygpOwotCiAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKaW5kZXggOGY0NGFmZWJkMGEyYzdiNDc1ZDA0YmE0ODcyM2YxY2RjNTQ1
NTA5MS4uMmY5ZWRlZjY3YzIzM2ZmYjdjMDJkNDM1MTdkZTViNzU0NzAxYjEyOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCkBAIC02MSw5ICs2MSwxNyBAQCBwdWJsaWM6CiAgICAgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBnbGVzMkNvbnRleHQpOwogICAgIH5M
YXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIAotICAgIC8vIFVwZGF0ZXMgdGhlIGNvbnRlbnRzIG9m
IHRoZSByb290IGxheWVyIHRoYXQgZmFsbCBpbnNpZGUgdGhlIHVwZGF0ZVJlY3QgYW5kIHJlY29t
cG9zaXRlcwotICAgIC8vIGFsbCB0aGUgbGF5ZXJzLgotICAgIHZvaWQgZHJhd0xheWVycyhjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7Cisg
ICAgLy8gdXBkYXRlcyBzaXplIG9mIHJvb3QgdGV4dHVyZSwgaWYgbmVlZGVkLCBhbmQgc2Nyb2xs
cyB0aGUgYmFja2J1ZmZlcgorICAgIHZvaWQgcHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbik7CisgICAgCisgICAgLy8gdXBkYXRlcyBhIHJlY3RhbmdsZSB3
aXRoaW4gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZQorICAgIHZvaWQgdXBkYXRlUm9vdExheWVyVGV4
dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCk7CisKKyAgICAvLyBkcmF3cyB0aGUg
Y3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgorICAgIHZvaWQgZHJhd0xheWVycyhj
b25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwor
CisgICAgLy8gcHV0cyBiYWNrYnVmZWZmZXIgb25zY3JlZW4KKyAgICB2b2lkIHByZXNlbnQoKTsK
IAogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIp
IHsgbV9yb290TGF5ZXIgPSBsYXllcjsgfQogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigp
IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1MjdlOGVmY2Nh
ZTM5MDQ1ZmQ5ODVkZWQzYmYyMGQ3MTY2YWZjNjlkLi41OTUwOTI1MWExZTM2NzI2NmVkMjBjN2Zh
YjJlNzBhZWQzNDU3Y2RhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wOS0w
MiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3Np
dGluZzogc2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgSW50cm9kdWNlIGEg
bmV3IEFQSSBvbiBXZWJXaWRnZXQgZm9yIHBhaW50aW5nIHdpdGggYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgdGhhdCBhbGxvd3MgdGhlIGNvbXBvc2l0b3IgdG8gcHJvcGVybHkgZGlz
dGluZ2l1c2gKKyAgICAgICAgc2Nyb2xsaW5nLCBpbnZhbGlkYXRpb24gYW5kIHJlcGFpbnRpbmcg
ZnJvbSBvbmUgYW5vdGhlci4gVGhlIGtleQorICAgICAgICBjaGFuZ2UgaXMgdGhhdCBpbiBhY2Nl
bGVyYXRlZCByZW5kZXJpbmcgY2FzZSwgaW52YWxpZGF0ZXMgYW5kCisgICAgICAgIHNjcm9sbGlu
ZyBwYXNzIGRpcmVjdGx5IHRvIHRoZSBjb21wb3NpdG9yLCByYXRoZXIgdGhhbiBwYXNzaW5nIHVw
CisgICAgICAgIHRvIHRoZSBjbGllbnQgYXMgd2FzIHRoZSBjYXNlIGluIHRoZSBzb2Z0d2FyZSBw
YXRoLiBGb3IKKyAgICAgICAgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nLCB0aGUgcHJldmlvdXMgcGFp
bnQoKSBtZXRob2QgaXMgcmVwbGFjZWQgYnkKKyAgICAgICAgYSBwYWlyIG9mIG1ldGhvZHM6IHBh
aW50Q29tcG9zaXRlZCBhbmQKKyAgICAgICAgaW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJS
ZWN0LgorCisKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgICogcHVibGlj
L1dlYldpZGdldENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXRDbGllbnQ6OnNj
aGVkdWxlRGVmZXJyZWRDb21wb3NpdGUpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0ZUNvbnRl
bnRzQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xs
KToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudUltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51
SW1wbDo6aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUG9wdXBNZW51SW1wbDo6cGFpbnRDb21wb3NpdGVkKToKKyAgICAgICAgKiBzcmMvV2Vi
UG9wdXBNZW51SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBo
aWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0
ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJv
b3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnZh
bGlkYXRlUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3Jv
bGxSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZUNv
bXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBh
aW50Q29tcG9zaXRlZCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICog
dGVzdHMvUG9wdXBNZW51VGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJXaWRnZXQ6
OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRl
c3RXZWJXaWRnZXQ6OnBhaW50Q29tcG9zaXRlZCk6CisKIDIwMTAtMDktMDIgIElseWEgU2hlcm1h
biAgPGlzaGVybWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCA1YzlmNTRlNzkzNjZiODNhZmVl
N2MwZTFlM2EzMjg4YzM0NDEyY2E5Li5kYTY5MGE2M2VkYzNkM2NhM2ExMDRlOWI4Nzc0YzNhMmUy
M2I3ODNhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTU5LDE1ICs1OSwyOCBA
QCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHRvIGxheW91dCB0aGUgV2ViV2lkZ2V0LiAgVGhpcyBN
VVNUIGJlIGNhbGxlZCBiZWZvcmUgUGFpbnQsCiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQgaW4g
Y2FsbHMgdG8gV2ViV2lkZ2V0Q2xpZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCkgPSAwOwotCi0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSBzcGVjaWZp
ZWQgcmVnaW9uIG9mIHRoZSBXZWJXaWRnZXQgb250byB0aGUgZ2l2ZW4KLSAgICAvLyBjYW52YXMu
ICBZb3UgTVVTVCBjYWxsIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlz
Ci0gICAgLy8gb2theSB0byBjYWxsIHBhaW50IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhh
cyBiZWVuIGNhbGxlZCwKLSAgICAvLyBhc3N1bWluZyBubyBvdGhlciBjaGFuZ2VzIGFyZSBtYWRl
IHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9uY2UKLSAgICAvLyBldmVudHMgYXJlIHByb2Nlc3Nl
ZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8KLSAgICAvLyBsYXlv
dXQgaXMgd2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSA9IDA7Ci0KKyAgICAKKyAgICAvLyBD
YWxsZWQgdG8gcGFpbnQgdGhlIHNwZWNpZmllZCB2aWV3cG9ydCBvZiB0aGUgV2ViV2lkZ2V0IAor
ICAgIC8vIG9udG8gdGhlIHNwZWNpZmllZCBjYW52YXMgYXQgKHZpZXdwb3J0Lngsdmlld3BvcnQu
eSkuIFlvdSBNVVNUIGNhbGwKKyAgICAvLyBMYXlvdXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRo
b2QuICBJdCBpcyBva2F5IHRvIGNhbGwgcGFpbnQKKyAgICAvLyBtdWx0aXBsZSB0aW1lcyBvbmNl
IGxheW91dCBoYXMgYmVlbiBjYWxsZWQsIGFzc3VtaW5nIG5vIG90aGVyCisgICAgLy8gY2hhbmdl
cyBhcmUgbWFkZSB0byB0aGUgV2ViV2lkZ2V0IChlLmcuLCBvbmNlIGV2ZW50cyBhcmUKKyAgICAv
LyBwcm9jZXNzZWQsIGl0IHNob3VsZCBiZSBhc3N1bWVkIHRoYXQgYW5vdGhlciBjYWxsIHRvIGxh
eW91dCBpcworICAgIC8vIHdhcnJhbnRlZCBiZWZvcmUgcGFpbnRpbmcgYWdhaW4pLgorICAgIHZp
cnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JiB2aWV3cG9ydCkgPSAw
OworICAgIAorICAgIC8vIFRyaWdnZXJzIGNvbXBvc2l0aW5nIG9mIHRoZSBjdXJyZW50IGxheWVy
cyBvbnRvIHRoZSBzY3JlZW4uCisgICAgLy8gVGhlIGZpbmlzaCBhcmd1bWVudCBjb250cm9scyB3
aGV0aGVyIHRoZSBjb21wb3NpdG9yIHdpbGwgd2FpdGluZyBmb3IgdGhlCisgICAgLy8gR1BVIHRv
IGZpbmlzaCByZW5kZXJpbmcgYmVmb3JlIHJldHVybmluZy4gWW91IE1VU1QgY2FsbCBMYXlvdXQK
KyAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCwgZm9yIHRoZSBzYW1lIHJlYXNvbnMg
ZGVzY3JpYmVkIGluCisgICAgLy8gdGhlIHBhaW50IG1ldGhvZCBhYm92ZS4KKyAgICB2aXJ0dWFs
IHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgdG8gaW5m
b3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gbmF0aXZlIHdpZGdldCBzZXR0aW5ncy4K
KyAgICAvLyBJbXBsZW1lbnRvcnMgdGhhdCBjYWNoZSByZW5kZXJlZCBjb3BpZXMgb2Ygd2lkZ2V0
cyBuZWVkIHRvIHJlLXJlbmRlcgorICAgIC8vIG9uIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UKKyAg
ICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgPSAwOworICAgIAogICAgIC8vIENhbGxlZCB0
byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhbiBpbnB1dCBldmVudC4gIFJldHVybnMgdHJ1ZSBp
ZgogICAgIC8vIHRoZSBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQsIGZhbHNlIG90aGVyd2lzZS4K
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jikg
PSAwOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQu
aCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgKaW5kZXggYmQ3YmQ2
YTc0ZmNiYWYzNzFkZjNlOWE2ZTQxMGJlZGJmMzU5MjMyMC4uYjNlZTlmNTZmZDExNDc3ODdiMmU0
NjkyNWYwZGU0NTFkOWFjNDUxYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJXaWRnZXRDbGllbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENs
aWVudC5oCkBAIC00NSw3ICs0NSwxMCBAQCBjbGFzcyBXZWJXaWRnZXRDbGllbnQgewogcHVibGlj
OgogICAgIC8vIENhbGxlZCB3aGVuIGEgcmVnaW9uIG9mIHRoZSBXZWJXaWRnZXQgbmVlZHMgdG8g
YmUgcmUtcGFpbnRlZC4KICAgICB2aXJ0dWFsIHZvaWQgZGlkSW52YWxpZGF0ZVJlY3QoY29uc3Qg
V2ViUmVjdCYpIHsgfQotCisgICAgCisgICAgLy8gQ2FsbGVkIHdoZW4gYSBjYWxsIHRvIFdlYldp
ZGdldDo6Y29tcG9zaXRlIGlzIHJlcXVpcmVkCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29t
cG9zaXRlKCkgeyB9CisgICAgCiAgICAgLy8gQ2FsbGVkIHdoZW4gYSByZWdpb24gb2YgdGhlIFdl
YldpZGdldCwgZ2l2ZW4gYnkgY2xpcFJlY3QsIHNob3VsZCBiZQogICAgIC8vIHNjcm9sbGVkIGJ5
IHRoZSBzcGVjaWZpZWQgZHggYW5kIGR5IGFtb3VudHMuCiAgICAgdmlydHVhbCB2b2lkIGRpZFNj
cm9sbFJlY3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0KSB7IH0KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IGU2ZjE0MDA3MTgwZDhk
M2JmNjEyOGIxMzBkYzI4YWJhYWVjMWY5MGEuLjJmZGE4ZTY4ZTYxNGZmMzY4MTdiNGMzOGJhZGZi
MWQzMTE2MDI0OGQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApA
QCAtNDkyLDggKzQ5MiwxNiBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250
ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBibwogewogICAgIGlmICh1
cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3dlYlZpZXct
PmNsaWVudCgpKQotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVj
dCh1cGRhdGVSZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYg
KCFtX3dlYlZpZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjZW5kaWYK
KyAgICAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgICAgICBtX3dlYlZpZXct
PmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVSZWN0KTsKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV93ZWJWaWV3LT5pbnZh
bGlkYXRlUm9vdExheWVyUmVjdCh1cGRhdGVSZWN0KTsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9p
ZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0
IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQpAQCAtNTA3LDExICs1MTUsMTkg
QEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGwoCiAgICAgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QpCiB7CiAgICAgbV93ZWJWaWV3LT5oaWRlUG9wdXBzKCk7Ci0gICAgaWYgKG1fd2ViVmll
dy0+Y2xpZW50KCkpIHsKLSAgICAgICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKLSAg
ICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0gICAgICAgIG1fd2ViVmlldy0+
Y2xpZW50KCktPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBjbGlwUmVjdCk7CisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmIChtX3dlYlZpZXctPmNsaWVu
dCgpKSB7CisgICAgICAgICAgICBpbnQgZHggPSBzY3JvbGxEZWx0YS53aWR0aCgpOworICAgICAg
ICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CisgICAgICAgICAgICBtX3dlYlZp
ZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJlY3QpOworICAgICAgICB9
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0gZWxzZSB7CisgICAgICAg
IG1fd2ViVmlldy0+c2Nyb2xsUm9vdExheWVyKHNjcm9sbERlbHRhLCBjbGlwUmVjdCk7CiAgICAg
fQorI2VuZGlmCiB9CiAKIEludFBvaW50IENocm9tZUNsaWVudEltcGw6OnNjcmVlblRvV2luZG93
KGNvbnN0IEludFBvaW50JikgY29uc3QKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUG9wdXBNZW51SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUlt
cGwuY3BwCmluZGV4IDc1ZDZjYzE0MzgyNGI3ZjU5MjkxMDI5YjQyN2NlOTIwYzIzZTQ1MzkuLjcx
N2ZmODJlMjVlNWNmNGFjZDAzMjgzNjgzYTYwOGFkNzg0NzcwNWEgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtMTU1LDEyICsxNTUsMTIgQEAgdm9pZCBXZWJQ
b3B1cE1lbnVJbXBsOjpsYXlvdXQoKQogewogfQogCi12b2lkIFdlYlBvcHVwTWVudUltcGw6OnBh
aW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQordm9pZCBXZWJQb3B1
cE1lbnVJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgdmlld3Bv
cnQpCiB7CiAgICAgaWYgKCFtX3dpZGdldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFy
ZWN0LmlzRW1wdHkoKSkgeworICAgIGlmICghdmlld3BvcnQuaXNFbXB0eSgpKSB7CiAjaWYgV0VC
S0lUX1VTSU5HX0NHCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjYW52YXMpOwogI2VsaWYg
V0VCS0lUX1VTSU5HX1NLSUEKQEAgLTE3MCwxMCArMTcwLDE5IEBAIHZvaWQgV2ViUG9wdXBNZW51
SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAjZWxz
ZQogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogI2VuZGlmCi0gICAgICAgIG1fd2lkZ2V0LT5w
YWludCgmZ2MsIHJlY3QpOworICAgICAgICBtX3dpZGdldC0+cGFpbnQoJmdjLCB2aWV3cG9ydCk7
CiAgICAgfQogfQogCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OnRoZW1lQ2hhbmdlZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6Y29tcG9zaXRl
KGJvb2wgZmluaXNoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgV2ViUG9w
dXBNZW51SW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JiBpbnB1dEV2
ZW50KQogewogICAgIGlmICghbV93aWRnZXQpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51
SW1wbC5oCmluZGV4IGVkYmI0YWI1MGQ0MTZiMDNiN2JkMWE1ZmNlODAwNTU2MDkxZWEyMjcuLjIy
MWJhMDM4ZjJjNGM3MzZkNjc3ZmFiZmEzMjJlMDUxZjkwNDI2NGMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUG9wdXBNZW51SW1wbC5oCkBAIC02Myw2ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJS
ZWN0JiByZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CisgICAgdmlydHVh
bCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlu
cHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNh
cHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNGIxMjlkNjk0YjFmMTEyZjI3YjIxYWU3
MjRkYjY3YTY4YTc0ZTAyYS4uOGE0ODQ0MmZjOWQ1ZDYzYTgyOTdhZWFkMTI0MzQ3YjBjZWU3NDVk
NSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTkwOSw3ICs5MDksMTIgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAKICAgICBp
ZiAobV9jbGllbnQpIHsKICAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwotICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJl
Y3QoZGFtYWdlZFJlY3QpOworICAgICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKCkpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgICAgICBp
bnZhbGlkYXRlUm9vdExheWVyUmVjdChkYW1hZ2VkUmVjdCk7CisjZW5kaWYKKyAgICAgICAgfSBl
bHNlIAorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0
KTsKICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkBAIC05NDMsMzMgKzk0OCwxNyBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpsYXlvdXQoKQogCiB2b2lkIFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMq
IGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKLQorICAgIGlmIChpc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisgICAgICAgIGlu
dmFsaWRhdGVSb290TGF5ZXJSZWN0KHJlY3QpOworICAgICAgICBkb0NvbXBvc2l0ZShjYW52YXMs
IGZhbHNlKTsKICNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRPRE8sIGlmIGFjY2Vs
ZXJhdGVkLCByZWRpcmVjdCB0byBwYWludCBjb21wb3NpdGVkIGxvb3AKICAgICAgICAgV2ViRnJh
bWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICAgICAgaWYgKHdlYmZyYW1l
KQogICAgICAgICAgICAgd2ViZnJhbWUtPnBhaW50KGNhbnZhcywgcmVjdCk7Ci0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERyYXcgdGhl
IGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgotICAgICAgICB1cGRhdGVSb290TGF5ZXJDb250
ZW50cyhyZWN0KTsKLQotICAgICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1l
SW1wbCgpOwotICAgICAgICBpZiAoIXdlYmZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7Ci0gICAgICAgIGlm
ICghdmlldykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBUaGUgdmlzaWJsZVJl
Y3QgaW5jbHVkZXMgc2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250ZW50UmVjdCBkb2Vzbid0Lgot
ICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRy
dWUpOwotICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KGZhbHNlKTsKLQotICAgICAgICAvLyBBc2sgdGhlIGxheWVyIGNvbXBvc2l0b3IgdG8gcmVk
cmF3IGFsbCB0aGUgbGF5ZXJzLgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMo
cmVjdCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBJbnRQb2ludCh2aWV3LT5zY3JvbGxYKCks
IHZpZXctPnNjcm9sbFkoKSkpOwogICAgIH0KLSNlbmRpZgogfQogCiAvLyBGSVhNRTogbV9jdXJy
ZW50SW5wdXRFdmVudCBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIENocm9tZUNsaWVudDo6c2hvdygp
IGNhbgpAQCAtMjEwNSw5ICsyMDk0LDE3IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRhYnNUb0xpbmtz
KCkgY29uc3QKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBsYXllcikK
IHsKKyAgICBib29sIHdhc0FjdGl2ZSA9IG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
OwogICAgIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShsYXllciA/IHRydWUgOiBm
YWxzZSk7CiAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5zZXRSb290TGF5ZXIobGF5ZXIpOworICAgIGlmICh3YXNBY3RpdmUgIT0gbV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUpIHsKKyAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAw
LCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAgICAgICBpZiAobV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUpIAorICAgICAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJl
Y3QoZGFtYWdlZFJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlk
SW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworICAgIH0KIH0KIAogdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQpAQCAtMjEx
OSwxMCArMjExNiw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUoZ2V0T25zY3JlZW5HTEVTMkNvbnRleHQoKSk7CiAgICAg
ICAgIGlmIChtX2xheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkgewogICAgICAg
ICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBGb3JjZSBhIHJlZHJhdyB0aGUgZW50aXJlIHZpZXcgc28gdGhh
dCB0aGUgY29tcG9zaXRvciBnZXRzIHRoZSBlbnRpcmUgdmlldywKLSAgICAgICAgICAgIC8vIHJh
dGhlciB0aGFuIGp1c3QgdGhlIGN1cnJlbnRseS1kaXJ0eSBzdWJzZXQuCi0gICAgICAgICAgICBt
X2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1f
c2l6ZS5oZWlnaHQpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fbGF5ZXJSZW5k
ZXJlci5jbGVhcigpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUgPSBmYWxzZTsKQEAgLTIxMzgsMTIgKzIxMzEsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRh
dGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIGlmICghaXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJ
WE1FOiBUaGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgcGF0aCBpbnZhbGlkYXRlcyBhIDF4MSBy
ZWN0IGF0ICgwLCAwKQotICAgIC8vIGluIG9yZGVyIHRvIGdldCB0aGUgcmVuZGVyZXIgdG8gYXNr
IHRoZSBjb21wb3NpdG9yIHRvIHJlZHJhdy4gVGhpcyBpcyBvbmx5Ci0gICAgLy8gdGVtcG9yYXJ5
IHVudGlsIHdlIGdldCB0aGUgY29tcG9zaXRvciB0byByZW5kZXIgZGlyZWN0bHkgZnJvbSBpdHMg
b3duIHRocmVhZC4KLSAgICBpZiAoIXJlY3QueCAmJiAhcmVjdC55ICYmIHJlY3Qud2lkdGggPT0g
MSAmJiByZWN0LmhlaWdodCA9PSAxKQotICAgICAgICByZXR1cm47Ci0KICAgICBXZWJGcmFtZUlt
cGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwogICAgIGlmICghd2ViZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKQEAgLTIxOTUsMjEgKzIxODIsMTc0IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVw
ZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAKIHZvaWQgV2ViVmll
d0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBu
b3cgd2UncmUgcG9zdGluZyBhIHJlcGFpbnQgZXZlbnQgZm9yIHRoZSBlbnRpcmUgcGFnZSB3aGlj
aCBpcyBhbiBvdmVya2lsbC4KLSAgICBpZiAoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5G
cmFtZUltcGwoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZy
YW1lVmlldygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGhhY2sgdG8gaW52
YWxpZGF0ZSBwYXJ0IG9mIHRoZSBwYWdlIHNvIHRoYXQgd2UgZ2V0IGNhbGxlZCB0byByZW5kZXIK
LSAgICAgICAgICAgIC8vICAgICAgICBhZ2Fpbi4KLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJs
ZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0gICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxLCAxKSk7CisgICAgbV9jbGll
bnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKworLy8gV2ViVmlld0lt
cGwgbWV0aG9kCit2b2lkIFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXIoY29uc3QgV2ViU2l6
ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0KQoreworICAgIEFTU0VSVCht
X2xheWVyUmVuZGVyZXIpOworICAgIC8vIENvbXB1dGUgdGhlIGRhbWFnZSByZWN0IGluIHZpZXdw
b3J0IHNwYWNlCisgICAgLy8gU2hvdWxkIG9ubHkgYmUgc2Nyb2xsaW5nIGluIG9uZSBkaXJlY3Rp
b24gYXQgYSB0aW1lLgorICAgIEFTU0VSVCghKHNjcm9sbERlbHRhLndpZHRoICYmIHNjcm9sbERl
bHRhLmhlaWdodCkpOworICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBs
KCk7CisgICAgaWYgKCF3ZWJmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyog
dmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBGbG9hdFJlY3QgZGFtYWdlZFJlY3Q7CisgICAgLy8gUHV0IHRoZSB2
aWV3cG9ydFJlY3QgaW4gX2xheWVyIHNwYWNlXyBwcmlvciB0byB0aGUgc2Nyb2xsIHNpbmNlIHRo
ZSBsb2dpYworICAgIC8vIGJlbG93IGVtaXRzIGRhbWFnZSBpbiB0aGUgc3BhY2UgImJlZm9yZSIg
c2Nyb2xsaW5nCisgICAgLy8gVXNpbmcgbGF5ZXIgc3BhY2UgZm9yIGRhbWFnZSByZWN0cyBhbGxv
d3MgdXMgdG8gaW50ZXJtaXggaW52YWxpZGF0ZXMgd2l0aCBzY3JvbGxzCisgICAgSW50UmVjdCBj
b250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7CisgICAgRmxvYXRS
ZWN0IHZpZXdwb3J0UmVjdChjb250ZW50UmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZW50UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50
UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgCisgICAgLy8gQ29tcHV0
ZSB0aGUgcmVnaW9uIHdlIHdpbGwgZXhwb3NlIGJ5IHNjcm9sbGluZywgYW5kIHBhaW50IHRoYXQg
aW50byBhCisgICAgLy8gc2hhcmVkIG1lbW9yeSBzZWN0aW9uLgorICAgIGlmIChzY3JvbGxEZWx0
YS53aWR0aCkgeworICAgICAgICBmbG9hdCBkeCA9IChmbG9hdClzY3JvbGxEZWx0YS53aWR0aDsK
KyAgICAgICAgZGFtYWdlZFJlY3Quc2V0WSh2aWV3cG9ydFJlY3QueSgpKTsKKyAgICAgICAgZGFt
YWdlZFJlY3Quc2V0SGVpZ2h0KHZpZXdwb3J0UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChk
eCA+IDApIHsKKyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldFgodmlld3BvcnRSZWN0LngoKSk7
CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRXaWR0aChkeCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRYKHZpZXdwb3J0UmVjdC5yaWdodCgpICsgZHgp
OworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0V2lkdGgoLWR4KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGZsb2F0IGR5ID0gKGZsb2F0KXNjcm9sbERlbHRhLmhlaWdodDsK
KyAgICAgICAgZGFtYWdlZFJlY3Quc2V0WCh2aWV3cG9ydFJlY3QueCgpKTsKKyAgICAgICAgZGFt
YWdlZFJlY3Quc2V0V2lkdGgodmlld3BvcnRSZWN0LndpZHRoKCkpOworICAgICAgICBpZiAoZHkg
PiAwKSB7CisgICAgICAgICAgICBkYW1hZ2VkUmVjdC5zZXRZKHZpZXdwb3J0UmVjdC55KCkpOwor
ICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0SGVpZ2h0KGR5KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGRhbWFnZWRSZWN0LnNldFkodmlld3BvcnRSZWN0LmJvdHRvbSgpICsgZHkp
OworICAgICAgICAgICAgZGFtYWdlZFJlY3Quc2V0SGVpZ2h0KC1keSk7CiAgICAgICAgIH0KICAg
ICB9CisgICAgCisgICAgLy8gVE9ETzogYWRkIGEgc21hcnRlciBkYW1hZ2UgYWdncmVnYXRpb24g
bG9naWM/IFJpZ2h0IG5vdywgTGF5ZXJDaHJvbWl1bSBkb2VzIHNpbXBsZSB1bmlvbi1pbmcKKyAg
ICBJbnRSZWN0IGlEYW1hZ2VkUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgaURhbWFnZWRSZWN0LnVu
aXRlKG1fc2Nyb2xsRGFtYWdlKTsKKyAgICBtX3Njcm9sbERhbWFnZSA9IGlEYW1hZ2VkUmVjdDsK
KyAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKK30KK3ZvaWQgV2ViVmlld0ltcGw6Omlu
dmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYlJlY3QmIHJlY3QpCit7CisgICAgLy8gcmVj
dCBpcyBpbiB2aWV3cG9ydCBzcGFjZS4gQ29udmVydCB0byBsYXllciBzcGFjZQorICAgIC8vIHNv
IHRoYXQgaW52YWxpZGF0aW9ucyBhbmQgc2Nyb2xsIGludmFsaWRhdGlvbnMgcGxheSB3ZWxsIHdp
dGggb25lLWFub3RoZXIKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICAKKyAgICBX
ZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOworICAgIGlmICghd2ViZnJh
bWUpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJh
bWVWaWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9s
YXllclJlbmRlcmVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzRGlzcGxheSgp
OworICAgIEZsb2F0UmVjdCBsc1JlY3QocmVjdC54ICsgdmlldy0+c2Nyb2xsWCgpLAorICAgICAg
ICAgICAgICAgICAgICAgIHJlY3QueSArIHZpZXctPnNjcm9sbFkoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgCisgICAgLy8gVE9ETzogYWRk
IGEgc21hcnRlciBkYW1hZ2UgYWdncmVnYXRpb24gbG9naWM/IFJpZ2h0IG5vdywgTGF5ZXJDaHJv
bWl1bSBkb2VzIHNpbXBsZSB1bmlvbi1pbmcKKyAgICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXll
cigpLT5zZXROZWVkc0Rpc3BsYXkobHNSZWN0KTsKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAKKy8vIFdlYldpZGV0IG1ldGhvZAordm9pZCBXZWJWaWV3SW1wbDo6
dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+cm9vdExheWVyKCktPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBzZXRSb290
TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIFdlYlJl
Y3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKKyAgICAg
ICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICB9Cit9CisK
K3ZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgZG9Db21wb3NpdGUoMCwgZmluaXNoKTsKKyNlbmRp
ZgorfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViVmlld0ltcGw6
OmRvQ29tcG9zaXRlKFdlYkNhbnZhcyogY2FudmFzLCBib29sIGZpbmlzaCkKK3sKKyAgICBBU1NF
UlQoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpOworICAgIFdlYkZyYW1lSW1wbCog
d2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAgaWYgKCF3ZWJmcmFtZSkKKyAgICAgICAg
cmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKKyAg
ICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBp
bmNsdWRlcyBzY3JvbGxiYXJzIHdoZXJlYXMgdGhlIGNvbnRlbnRSZWN0IGRvZXNuJ3QuCisgICAg
SW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKKyAg
ICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsK
KyAgICBJbnRSZWN0IHZpZXdwb3J0ICAgID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1f
c2l6ZS5oZWlnaHQpOworCisgICAgLy8gR2l2ZSB0aGUgY29tcG9pc2l0b3IgYSBjaGFuY2UgdG8g
c2V0dXAvcmVzaXplIHRoZSByb290IHRleHR1cmUgaGFuZGxlIGFuZCBwZXJmb3JtIHNjcm9sbGlu
ZworICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlcGFyZVRvRHJhd0xheWVycyh2aXNpYmxlUmVjdCwg
Y29udGVudFJlY3QsIEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7
CisKKyAgICAvLyBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllcgorICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IGRhbWFnZVJlY3RzOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChGbG9hdFJl
Y3QobV9zY3JvbGxEYW1hZ2UueCwgbV9zY3JvbGxEYW1hZ2UueSwgbV9zY3JvbGxEYW1hZ2Uud2lk
dGgsIG1fc2Nyb2xsRGFtYWdlLmhlaWdodCkpOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChtX2xh
eWVyUmVuZGVyZXItPnJvb3RMYXllcigpLT5kaXJ0eVJlY3QoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBkYW1hZ2VSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyB0aGUgZGFt
YWdlIHJlY3RzIGZvciB0aGUgcm9vdCBsYXllciBpcyBpbiBsYXllciBzcGFjZSBbZS5nLiB1bnNj
cm9sbGVkLl0KKyAgICAgICAgLy8gY29udmVydCBmcm9tIGxheWVyIHNwYWNlIHRvIHZpZXdwb3J0
IHNwYWNlCisgICAgICAgIGNvbnN0IEZsb2F0UmVjdCBzc1JlY3QgPSBkYW1hZ2VSZWN0c1tpXTsK
KyAgICAgICAgRmxvYXRSZWN0IHJlY3Qoc3NSZWN0LngoKSAtIHZpZXctPnNjcm9sbFgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgc3NSZWN0LnkoKSAtIHZpZXctPnNjcm9sbFkoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgc3NSZWN0LndpZHRoKCksIHNzUmVjdC5oZWlnaHQoKSk7CisgICAg
ICAgIAorICAgICAgICAvLyBpbnRlcnNlY3QgdGhpcyByZWN0YW5nbGUgd2l0aCB0aGUgdmlld3Bv
cnQKKyAgICAgICAgcmVjdC5pbnRlcnNlY3Qodmlld3BvcnQpOworICAgICAgICAKKyAgICAgICAg
CisgICAgICAgIC8vIG5vdyByZW5kZXIgaXQKKyAgICAgICAgV2ViUmVjdCB3cmVjdChyZWN0Lngo
KSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmICh3
cmVjdC53aWR0aCAmJiB3cmVjdC5oZWlnaHQpIHsKKyAgICAgICAgICAgIHVwZGF0ZVJvb3RMYXll
ckNvbnRlbnRzKHdyZWN0KTsKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlUm9v
dExheWVyVGV4dHVyZVJlY3Qod3JlY3QpOworICAgICAgICB9CisgICAgfQorICAgIG1fbGF5ZXJS
ZW5kZXJlci0+cm9vdExheWVyKCktPnJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9zY3JvbGxE
YW1hZ2UgPSBXZWJSZWN0KCk7CisgICAgICAgIAorICAgIC8vIERyYXcgdGhlIGFjdHVhbCBsYXll
cnMuLi4KKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRl
bnRSZWN0KTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNv
bnRlbnRSZWN0KTsKKworICAgIC8vIHJlYWRiYWNrIGludG8gdGhlIGNhbnZhcywgaWYgcmVxdWVz
dGVkCisgICAgLy8gRklYTUUgSW5zZXJ0IHdqbWFjbGVhbidzIHJlYWRiYWNrIGNvZGUgaGVyZSBm
b3Igd2Via2l0IGJ1ZyA0NDEyNworICAgIAorICAgIC8vIGZpbmlzaCBpZiByZXF1ZXN0ZWQKKyAg
ICAvLyBGSVhNRTogaGFuZGxlIGZpbmlzaCBmbGFnCisgICAgCisgICAgLy8gd2UncmUgZG9uZS4u
LiBwdXQgcmVzdWx0IG9uc2NyZWVuCisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisK
KyAgICAvLyB0ZWxsIHRoZSBicm93c2VyIHRoYXQgdGhlIHJlbmRlcmluZyBpcyBkb25lIC0tLQor
ICAgIC8vIFRPRE86IHRoaXMgaXMgYmVpbmcgY2FsbGVkIHRvbyBlYXJseSwgd2UgbmVlZCB0byBk
ZWZlciBjYWxsaW5nIHRoaXMgCisgICAgLy8gICAgICAgdW50aWwgdGhlIHN3YXBidWZmZXJzIGl0
c2VsZiBoYXMgZXhlY3V0ZWQgb24gdGhlIEdQVS4KKyAgICAvLyBtX2NsaWVudC0+b25Db21wb3Np
dGVDb21wbGV0ZSgpOworfQorI2VuZGlmCisKKwogUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdl
YlZpZXdJbXBsOjpnZXRPbnNjcmVlbkdMRVMyQ29udGV4dCgpCiB7CiAgICAgcmV0dXJuIEdMRVMy
Q29udGV4dDo6Y3JlYXRlKEdMRVMyQ29udGV4dEludGVybmFsOjpjcmVhdGUoZ2xlczJDb250ZXh0
KCksIGZhbHNlKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYzI5NjEyMTIzZjQ1
MTRjOTRkZDdkOTcwYzczMTE0YTRiZWVlYzM1NS4uYmNkNGY0NmQ4N2YxYTVmYzNkNmZkNjRmMzVh
OTJkYmRjNjk2MDI4NiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIldlYkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRp
b25Qb2xpY3kuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIK
ICNpbmNsdWRlICJXZWJTaXplLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAi
V2ViVmlldy5oIgpAQCAtOTIsNiArOTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
c2l6ZShjb25zdCBXZWJTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHRoZW1lQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBm
aW5pc2gpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0
RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CkBAIC0zMjIsNiArMzI1LDkgQEAgcHVibGlj
OgogICAgIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGRv
Q29tcG9zaXRlKFdlYkNhbnZhcyosIGJvb2wgZmluaXNoKTsKKyAgICB2b2lkIHNjcm9sbFJvb3RM
YXllcihjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3Qp
OworICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViUmVjdCYpOwogICAg
IHZvaWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzZXRSb290R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKik7CiAjZW5kaWYKQEAgLTUxMCw2ICs1MTYs
NyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX21vdXNlQ2FwdHVyZU5v
ZGU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgV2ViUmVjdCBtX3Nj
cm9sbERhbWFnZTsKICAgICBPd25QdHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBt
X2xheWVyUmVuZGVyZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRl
c3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCmluZGV4IDUw
MzE5YWYyM2IwYTkyZjQ0YzkxNThlZmIzZTY0NjE4MjM5ODFkMTAuLmFlZjI5Y2YyZDA0MTI0YjRj
ODdlZjA3YTJlNWYzODUwOTY3ODJiNjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9Qb3B1cE1lbnVUZXN0LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51
VGVzdC5jcHAKQEAgLTEyOCw2ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
c2l6ZShjb25zdCBXZWJTaXplJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21w
b3NpdGUoYm9vbCBmaW5pc2gpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50
KGNvbnN0IFdlYklucHV0RXZlbnQmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lk
IG1vdXNlQ2FwdHVyZUxvc3QoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCkg
eyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66524</attachid>
            <date>2010-09-03 11:27:49 -0700</date>
            <delta_ts>2010-09-03 12:50:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100903112748.patch</filename>
            <type>text/plain</type>
            <size>36976</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmFkMTBkZjJhMjRlYjcwZDhjYzJhZWU5ZTg0YjIyOWY5YzAwNDFhYi4uMWM0ODdhMTEyM2E4N2Q2
OTRmNjM2MTdlODdhMTE1NjkyNjViZDFmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wMiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY1MTlmMWZmMmJhMTgyNmYyZTI4
NTk2MmIwMzgxNzEyYTQ2ZTlkY2MuLjkyZWM0OWI1Y2M3ZjdmZjhiNjM3YjZkMzBhMTI0YTE0ZGMw
YmMzYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcApAQCAtMjk5LDEwICsyOTksMTUgQEAgdm9pZCBMYXllckNocm9taXVt
OjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBpZiAobV9ib3VuZHMgPT0gc2l6
ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBmaXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53
aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWln
aHQoKTsKKyAgICAKICAgICBtX2JvdW5kcyA9IHNpemU7CiAgICAgbV9iYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKIAotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgaWYgKGZpcnN0UmVzaXplKQor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCiBjb25zdCBMYXll
ckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApAQCAtMzUzLDcgKzM1
OCw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAKICAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MzYzLDYgKzM2NywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewog
ICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJhMTUwODg0NGJhMzViMzQ1MWY4
MmNkNTg5YTY1Mzk3NjUyMWEwOGMuLjJkMjI1ZGFmNWEyMDcxYmFiZmViZDZhN2NmM2NjMDVlMjZi
MzkwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnR5UmVjdDsgfQorICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTAzMzhkMmQ1ZjczMjRlNWExMTljNTA5MTkwZGZlZjg2OThi
MTc2OS4uNzJhMmZkYWEwNmIzZDRhMWVkODFmMGRhMjYwZWMyNmU2NGI3OTAzYSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMTUyLDggKzE1Miw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQogCiAvLyBVcGRhdGVzIHRoZSBj
b250ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0ZXh0dXJlIHRoYXQgZmFsbCBpbnNpZGUgdGhlIHVw
ZGF0ZVJlY3QKIC8vIGFuZCByZS1jb21wb3NpdHMgYWxsIHN1YmxheWVycy4KLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKG1faGFyZHdhcmVDb21w
b3NpdGluZyk7CiAKQEAgLTE4Miw3ICsxODIsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0Jgog
CiAgICAgLy8gQmluZCB0aGUgY29tbW9uIHZlcnRleCBhdHRyaWJ1dGVzIHVzZWQgZm9yIGRyYXdp
bmcgYWxsIHRoZSBsYXllcnMuCiAgICAgTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZUZvckRyYXcobGF5
ZXJTaGFyZWRWYWx1ZXMoKSk7Ci0KICAgICAvLyBGSVhNRTogVGhlc2UgY2FsbHMgY2FuIGJlIG1h
ZGUgb25jZSwgd2hlbiB0aGUgY29tcG9zaXRvciBjb250ZXh0IGlzIGluaXRpYWxpemVkLgogICAg
IEdMQyhnbERpc2FibGUoR0xfREVQVEhfVEVTVCkpOwogICAgIEdMQyhnbERpc2FibGUoR0xfQ1VM
TF9GQUNFKSk7CkBAIC0xOTMsMTQgKzE5MiwxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0Jgog
ICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAKICAgICBJbnRQb2lu
dCBzY3JvbGxEZWx0YSA9IHRvUG9pbnQoc2Nyb2xsUG9zaXRpb24gLSBtX3Njcm9sbFBvc2l0aW9u
KTsKLSAgICAvLyBTY3JvbGwgb25seSB3aGVuIHRoZSB1cGRhdGVSZWN0IGNvbnRhaW5zIHBpeGVs
cyBmb3IgdGhlIG5ld2x5IHVuY292ZXJlZCByZWdpb24gdG8gYXZvaWQgZmxhc2hpbmcuCi0gICAg
aWYgKChzY3JvbGxEZWx0YS54KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID49IGFicyhzY3JvbGxE
ZWx0YS54KCkpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gY29udGVudFJlY3QuaGVpZ2h0KCkp
Ci0gICAgICAgIHx8IChzY3JvbGxEZWx0YS55KCkgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA+PSBh
YnMoc2Nyb2xsRGVsdGEueSgpKSAmJiB1cGRhdGVSZWN0LndpZHRoKCkgPj0gY29udGVudFJlY3Qu
d2lkdGgoKSkpIHsKKyAgICAvLyBTY3JvbGwgdGhlIGJhY2tidWZmZXIKKyAgICBpZiAoc2Nyb2xs
RGVsdGEueCgpIHx8IHNjcm9sbERlbHRhLnkoKSkgewogICAgICAgICAvLyBTY3JvbGxpbmcgd29y
a3MgYXMgZm9sbG93czogV2UgcmVuZGVyIGEgcXVhZCB3aXRoIHRoZSBjdXJyZW50IHJvb3QgbGF5
ZXIgY29udGVudHMKICAgICAgICAgLy8gdHJhbnNsYXRlZCBieSB0aGUgYW1vdW50IHRoZSBwYWdl
IGhhcyBzY3JvbGxlZCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUgYW5kIHRoZW4gcmVhZCB0aGUKICAg
ICAgICAgLy8gcGl4ZWxzIG9mIHRoZSBjb250ZW50IGFyZWEgKHZpc2libGUgYXJlYSBleGNsdWRp
bmcgdGhlIHNjcm9sbCBiYXJzKSBiYWNrIGludG8gdGhlCi0gICAgICAgIC8vIHJvb3QgbGF5ZXIg
dGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQgYXJlYSBpcyBzdWJlc3F1ZW50bHkgZmlsbGVkIGFz
IHVzdWFsIHdpdGgKLSAgICAgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVSZWN0Lgor
ICAgICAgICAvLyByb290IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEgd2ls
bCBiZSBmaWxsZWQgYnkgYSBzdWJzZXF1ZW50IGRyYXdMYXllcnNJbnRvUmVjdCBjYWxsCiAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbGVkTGF5ZXJNYXRyaXg7CiAjaWYgUExBVEZP
Uk0oU0tJQSkKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmOwpAQCAtMjMwLDQzICsy
MjcsNjYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50
UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICAgICAgLy8gbm8gbmVlZCB0byBj
b3B5IGZyYW1lYnVmZmVyIHBpeGVscyBiYWNrIGludG8gdGhlIHRleHR1cmUuCiAgICAgICAgIG1f
c2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9CisgICAgCisgICAgLy8gVHJh
bnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbi4K
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgbWF0cml4LnRyYW5zbGF0ZTNk
KC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsKKworICAg
IC8vIFRyYXZlcnNlIHRoZSBsYXllciB0cmVlIGFuZCB1cGRhdGUgdGhlIGxheWVyIHRyYW5zZm9y
bXMuCisgICAgZmxvYXQgb3BhY2l0eSA9IDE7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBtX3Jvb3RMYXllci0+Z2V0U3VibGF5ZXJzKCk7Cisg
ICAgc2l6ZV90IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykK
KyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgbWF0cml4
LCBvcGFjaXR5KTsKK30KIAotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGNoZWNrIHNob3Vs
ZCBnbyBhd2F5IHdoZW4gdGhlIGNvbXBvc2l0b3IgcmVuZGVycyBpbmRlcGVuZGVudGx5IGZyb20g
aXRzIG93biB0aHJlYWQuCi0gICAgLy8gSWdub3JlIGEgMXgxIHVwZGF0ZSByZWN0IGF0ICgwLCAw
KSBhcyB0aGF0J3MgdXNlZCBhIHdheSB0byBraWNrIG9mZiBhIHJlZHJhdyBmb3IgdGhlIGNvbXBv
c2l0b3IuCi0gICAgaWYgKCEoIXVwZGF0ZVJlY3QueCgpICYmICF1cGRhdGVSZWN0LnkoKSAmJiB1
cGRhdGVSZWN0LndpZHRoKCkgPT0gMSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID09IDEpKSB7Ci0g
ICAgICAgIC8vIFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBBU1NFUlQo
KHVwZGF0ZVJlY3QueCgpICsgdXBkYXRlUmVjdC53aWR0aCgpIDw9IG1fcm9vdExheWVyVGV4dHVy
ZVdpZHRoKQotICAgICAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QueSgpICsgdXBkYXRlUmVjdC5o
ZWlnaHQoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRh
dGVSZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOworCisgICAgaWYg
KCFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgR0xDKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKIAorICAgIC8vIFVwZGF0ZSB0
aGUgcm9vdCBsYXllciB0ZXh0dXJlLgorICAgIEFTU0VSVCgodXBkYXRlUmVjdC5yaWdodCgpICA8
PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKKyAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QuYm90
dG9tKCkgPD0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KSk7CisgICAgCiAjaWYgUExBVEZPUk0o
U0tJQSkKLSAgICAgICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0Lgot
ICAgICAgICBjb25zdCBTa0JpdG1hcCBiaXRtYXAgPSBtX3Jvb3RMYXllckNhbnZhcy0+Z2V0RGV2
aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Ci0gICAgICAgIGludCByb290TGF5ZXJXaWR0aCA9
IGJpdG1hcC53aWR0aCgpOwotICAgICAgICBpbnQgcm9vdExheWVySGVpZ2h0ID0gYml0bWFwLmhl
aWdodCgpOwotICAgICAgICBBU1NFUlQocm9vdExheWVyV2lkdGggPT0gdXBkYXRlUmVjdC53aWR0
aCgpICYmIHJvb3RMYXllckhlaWdodCA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAg
dm9pZCogcGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOwotCi0gICAgICAgIC8vIENvcHkgdGhl
IGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4K
LSAgICAgICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0
LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWln
aHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgLy8gR2V0IHRo
ZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIGNvbnN0IFNrQml0bWFwIGJpdG1h
cCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsK
KyAgICBpbnQgYml0bWFwV2lkdGggPSBiaXRtYXAud2lkdGgoKTsKKyAgICBpbnQgYml0bWFwSGVp
Z2h0ID0gYml0bWFwLmhlaWdodCgpOworICAgIEFTU0VSVChiaXRtYXBXaWR0aCA9PSB1cGRhdGVS
ZWN0LndpZHRoKCkgJiYgYml0bWFwSGVpZ2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOworICAg
IHZvaWQqIHBpeGVscyA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKKyAgICAvLyBDb3B5IHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAg
R0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBk
YXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CiAjZWxpZiBQTEFURk9STShDRykKLSAg
ICAgICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgotICAgICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRXaWR0aChtX3Jvb3RMYXll
ckNHQ29udGV4dC5nZXQoKSkpID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBzdGF0aWNfY2FzdDxp
bnQ+KENHQml0bWFwQ29udGV4dEdldEhlaWdodChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkp
ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RM
YXllckJhY2tpbmdTdG9yZS5kYXRhKCk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMg
b2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICAv
LyBUaGUgb3JpZ2luIGlzIGF0IHRoZSBsb3dlciBsZWZ0IGluIENvcmUgR3JhcGhpY3MnIGNvb3Jk
aW5hdGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNvcnJlY3QgZm9yIHRoaXMgaGVyZS4KLSAgICAgICAg
R0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQgLSB1cGRh
dGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwor
ICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICAvLyBBU1NF
UlQoc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRXaWR0aChtX3Jvb3RMYXllckNH
Q29udGV4dC5nZXQoKSkpID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+
KENHQml0bWFwQ29udGV4dEdldEhlaWdodChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkpID09
IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOworICAgIHZvaWQqIHBpeGVscyA9IG1fcm9vdExheWVyQmFj
a2luZ1N0b3JlLmRhdGEoKTsKKworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRh
dGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICAvLyBUaGUgb3JpZ2luIGlz
IGF0IHRoZSBsb3dlciBsZWZ0IGluIENvcmUgR3JhcGhpY3MnIGNvb3JkaW5hdGUgc3lzdGVtLiBX
ZSBuZWVkIHRvIGNvcnJlY3QgZm9yIHRoaXMgaGVyZS4KKyAgICBHTEMoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0Lngo
KSwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0IC0gdXBkYXRlUmVjdC55KCkgLSB1cGRhdGVSZWN0
LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC53aWR0aCgpLCB1
cGRhdGVSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CiAjZWxzZQogI2Vycm9yICJOZWVkIHRvIGltcGxlbWVu
dCBmb3IgeW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKLSAgICB9Cit9CiAKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0
aW5nKTsKKyAgICAKICAgICBnbENsZWFyQ29sb3IoMCwgMCwgMSwgMSk7CiAgICAgZ2xDbGVhcihH
TF9DT0xPUl9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCk7Ci0KKyAgICAKKyAgICBH
TEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOwor
ICAgIAogICAgIC8vIFJlbmRlciB0aGUgcm9vdCBsYXllciB1c2luZyBhIHF1YWQgdGhhdCB0YWtl
cyB1cCB0aGUgZW50aXJlIHZpc2libGUgYXJlYSBvZiB0aGUgd2luZG93LgogICAgIC8vIFdlIHJl
dXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IENvbnRlbnRMYXllckNocm9taXVtLgogICAg
IGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNvbnRlbnRMYXllclZh
bHVlcyA9IGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygpOwpAQCAtMjkwLDIyICszMTAsMTMgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBk
YXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICBHTEMoZ2xFbmFibGUoR0xfQkxFTkQpKTsKICAg
ICBHTEMoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiAKLSAg
ICAvLyBUcmFuc2xhdGUgYWxsIHRoZSBjb21wb3NpdGVkIGxheWVycyBieSB0aGUgc2Nyb2xsIHBv
c2l0aW9uLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICBtYXRyaXgudHJh
bnNsYXRlM2QoLW1fc2Nyb2xsUG9zaXRpb24ueCgpLCAtbV9zY3JvbGxQb3NpdGlvbi55KCksIDAp
OwotCi0gICAgLy8gVHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgYW5kIHVwZGF0ZSB0aGUgbGF5ZXIg
dHJhbnNmb3Jtcy4KLSAgICBmbG9hdCBvcGFjaXR5ID0gMTsKLSAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9vdExheWVyLT5nZXRTdWJsYXll
cnMoKTsKLSAgICBzaXplX3QgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUo
KTsgaSsrKQotICAgICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgp
LCBtYXRyaXgsIG9wYWNpdHkpOwotCi0gICAgbV9yb290VmlzaWJsZVJlY3QgPSB2aXNpYmxlUmVj
dDsKLQogICAgIC8vIEVuYWJsZSBzY2lzc29yaW5nIHRvIGF2b2lkIHJlbmRlcmluZyBjb21wb3Np
dGVkIGxheWVycyBvdmVyIHRoZSBzY3JvbGxiYXJzLgogICAgIEdMQyhnbEVuYWJsZShHTF9TQ0lT
U09SX1RFU1QpKTsKICAgICBGbG9hdFJlY3Qgc2Npc3NvclJlY3QoY29udGVudFJlY3QpOworCisg
ICAgLy8gU2V0IHRoZSByb290VmlzaWJsZVJlY3QgLS0tIHVzZWQgYnkgc3Vic2VxdWVudCBkcmF3
TGF5ZXJzIGNhbGxzCisgICAgbV9yb290VmlzaWJsZVJlY3QgPSB2aXNpYmxlUmVjdDsKKwogICAg
IC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQu
CiAgICAgc2Npc3NvclJlY3QubW92ZSgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBv
c2l0aW9uLnkoKSk7CiAgICAgc2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7CkBAIC0zMTYsMTMg
KzMyNywxNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhnbFN0ZW5jaWxNYXNr
KDApKTsKIAogICAgIC8vIFRyYXZlcnNlIHRoZSBsYXllciB0cmVlIG9uZSBtb3JlIHRpbWUgdG8g
ZHJhdyB0aGUgbGF5ZXJzLgotICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBp
KyspCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMg
PSBtX3Jvb3RMYXllci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3Vi
bGF5ZXJzW2ldLmdldCgpLCBzY2lzc29yUmVjdCk7CiAKICAgICBHTEMoZ2xEaXNhYmxlKEdMX1ND
SVNTT1JfVEVTVCkpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgp
Cit7CisgICAgLy8gV2UncmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVycyEKICAgICBtX2dsZXMy
Q29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLQogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDhmNDRhZmViZDBhMmM3YjQ3NWQwNGJhNDg3MjNm
MWNkYzU0NTUwOTEuLjE1Y2YzMWFiZDQ2MjUyMzMzNTg0ZjRmNDZkYzI1MjczNjgyNzJhYTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNjEsOSArNjEsMTcgQEAgcHVibGljOgogICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bShQYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gZ2xlczJDb250ZXh0KTsK
ICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKLSAgICAvLyBVcGRhdGVzIHRoZSBjb250
ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0IGFu
ZCByZWNvbXBvc2l0ZXMKLSAgICAvLyBhbGwgdGhlIGxheWVycy4KLSAgICB2b2lkIGRyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pOworICAgIC8vIHVwZGF0ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5k
IHNjcm9sbHMgdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIHByZXBhcmVUb0RyYXdMYXllcnMoY29u
c3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIAorICAgIC8vIHVwZGF0ZXMgYSByZWN0
YW5nbGUgd2l0aGluIHRoZSByb290IGxheWVyIHRleHR1cmUKKyAgICB2b2lkIHVwZGF0ZVJvb3RM
YXllclRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOworCisgICAgLy8gZHJh
d3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIGRyYXdM
YXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KTsKKworICAgIC8vIHB1dHMgYmFja2J1ZmZlciBvbnNjcmVlbgorICAgIHZvaWQgcHJlc2Vu
dCgpOwogCiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBs
YXllcikgeyBtX3Jvb3RMYXllciA9IGxheWVyOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDUyN2U4
ZWZjY2FlMzkwNDVmZDk4NWRlZDNiZjIwZDcxNjZhZmM2OWQuLjU5NTA5MjUxYTFlMzY3MjY2ZWQy
MGM3ZmFiMmU3MGFlZDM0NTdjZGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEw
LTA5LTAyICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEFjY2VsZXJhdGVkIENv
bXBvc2l0aW5nOiBzY3JlZW4gZ2FyYmFnZSB3aGVuIHNjcm9sbGluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUwOTIKKworICAgICAgICBJbnRyb2R1
Y2UgYSBuZXcgQVBJIG9uIFdlYldpZGdldCBmb3IgcGFpbnRpbmcgd2l0aCBhY2NlbGVyYXRlZAor
ICAgICAgICBjb21wb3NpdGluZyB0aGF0IGFsbG93cyB0aGUgY29tcG9zaXRvciB0byBwcm9wZXJs
eSBkaXN0aW5naXVzaAorICAgICAgICBzY3JvbGxpbmcsIGludmFsaWRhdGlvbiBhbmQgcmVwYWlu
dGluZyBmcm9tIG9uZSBhbm90aGVyLiBUaGUga2V5CisgICAgICAgIGNoYW5nZSBpcyB0aGF0IGlu
IGFjY2VsZXJhdGVkIHJlbmRlcmluZyBjYXNlLCBpbnZhbGlkYXRlcyBhbmQKKyAgICAgICAgc2Ny
b2xsaW5nIHBhc3MgZGlyZWN0bHkgdG8gdGhlIGNvbXBvc2l0b3IsIHJhdGhlciB0aGFuIHBhc3Np
bmcgdXAKKyAgICAgICAgdG8gdGhlIGNsaWVudCBhcyB3YXMgdGhlIGNhc2UgaW4gdGhlIHNvZnR3
YXJlIHBhdGguIEZvcgorICAgICAgICBhY2NlbGVyYXRlZCByZW5kZXJpbmcsIHRoZSBwcmV2aW91
cyBwYWludCgpIG1ldGhvZCBpcyByZXBsYWNlZCBieQorICAgICAgICBhIHBhaXIgb2YgbWV0aG9k
czogcGFpbnRDb21wb3NpdGVkIGFuZAorICAgICAgICBpbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RM
YXllclJlY3QuCisKKworICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKiBw
dWJsaWMvV2ViV2lkZ2V0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldENsaWVu
dDo6c2NoZWR1bGVEZWZlcnJlZENvbXBvc2l0ZSk6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVu
dEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRl
Q29udGVudHNBbmRXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpz
Y3JvbGwpOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBNZW51SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1
cE1lbnVJbXBsOjppbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpwYWludENvbXBvc2l0ZWQpOgorICAgICAgICAqIHNy
Yy9XZWJQb3B1cE1lbnVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlc2l6ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290
R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
dXBkYXRlUm9vdExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnNjcm9sbFJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnZhbGlk
YXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6cGFpbnRDb21wb3NpdGVkKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAg
ICAgKiB0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGVzdFdlYldp
ZGdldDo6aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6VGVzdFdlYldpZGdldDo6cGFpbnRDb21wb3NpdGVkKToKKwogMjAxMC0wOS0wMiAgSWx5YSBT
aGVybWFuICA8aXNoZXJtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IDVjOWY1NGU3OTM2NmI4
M2FmZWU3YzBlMWUzYTMyODhjMzQ0MTJjYTkuLmI3NTdiZjY2ZDY1NGEyNDFlNDQ3M2QyYThlNTUw
MjMxYWZhODE2NzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNTksMTUgKzU5
LDI4IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgdG8gbGF5b3V0IHRoZSBXZWJXaWRnZXQuICBU
aGlzIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSBQYWludCwKICAgICAvLyBhbmQgaXQgbWF5IHJlc3Vs
dCBpbiBjYWxscyB0byBXZWJXaWRnZXRDbGllbnQ6OmRpZEludmFsaWRhdGVSZWN0LgogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7Ci0KLSAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHNw
ZWNpZmllZCByZWdpb24gb2YgdGhlIFdlYldpZGdldCBvbnRvIHRoZSBnaXZlbgotICAgIC8vIGNh
bnZhcy4gIFlvdSBNVVNUIGNhbGwgTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAg
SXQgaXMKLSAgICAvLyBva2F5IHRvIGNhbGwgcGFpbnQgbXVsdGlwbGUgdGltZXMgb25jZSBsYXlv
dXQgaGFzIGJlZW4gY2FsbGVkLAotICAgIC8vIGFzc3VtaW5nIG5vIG90aGVyIGNoYW5nZXMgYXJl
IG1hZGUgdG8gdGhlIFdlYldpZGdldCAoZS5nLiwgb25jZQotICAgIC8vIGV2ZW50cyBhcmUgcHJv
Y2Vzc2VkLCBpdCBzaG91bGQgYmUgYXNzdW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0bwotICAgIC8v
IGxheW91dCBpcyB3YXJyYW50ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpID0gMDsKLQorICAgIAorICAg
IC8vIENhbGxlZCB0byBwYWludCB0aGUgcmVjdGFuZ3VsYXIgcmVnaW9uICJ2aWV3cG9ydCIgd2l0
aGluIHRoZSBXZWJXaWRnZXQgCisgICAgLy8gb250byB0aGUgc3BlY2lmaWVkIGNhbnZhcyBhdCAo
dmlld3BvcnQueCx2aWV3cG9ydC55KS4gWW91IE1VU1QgY2FsbAorICAgIC8vIExheW91dCBiZWZv
cmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlzIG9rYXkgdG8gY2FsbCBwYWludAorICAgIC8v
IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhhcyBiZWVuIGNhbGxlZCwgYXNzdW1pbmcgbm8g
b3RoZXIKKyAgICAvLyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9u
Y2UgZXZlbnRzIGFyZQorICAgIC8vIHByb2Nlc3NlZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhh
dCBhbm90aGVyIGNhbGwgdG8gbGF5b3V0IGlzCisgICAgLy8gd2FycmFudGVkIGJlZm9yZSBwYWlu
dGluZyBhZ2FpbikuCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdl
YlJlY3QmIHZpZXdwb3J0KSA9IDA7CisgICAgCisgICAgLy8gVHJpZ2dlcnMgY29tcG9zaXRpbmcg
b2YgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIHNjcmVlbi4KKyAgICAvLyBUaGUgZmluaXNo
IGFyZ3VtZW50IGNvbnRyb2xzIHdoZXRoZXIgdGhlIGNvbXBvc2l0b3Igd2lsbCB3YWl0aW5nIGZv
ciB0aGUKKyAgICAvLyBHUFUgdG8gZmluaXNoIHJlbmRlcmluZyBiZWZvcmUgcmV0dXJuaW5nLiBZ
b3UgTVVTVCBjYWxsIExheW91dAorICAgIC8vIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBm
b3IgdGhlIHNhbWUgcmVhc29ucyBkZXNjcmliZWQgaW4KKyAgICAvLyB0aGUgcGFpbnQgbWV0aG9k
IGFib3ZlLgorICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpID0gMDsKKwor
ICAgIC8vIENhbGxlZCB0byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhIGNoYW5nZSBpbiBuYXRp
dmUgd2lkZ2V0IHNldHRpbmdzLgorICAgIC8vIEltcGxlbWVudG9ycyB0aGF0IGNhY2hlIHJlbmRl
cmVkIGNvcGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCisgICAgLy8gb24gcmVjZWl2
aW5nIHRoaXMgbWVzc2FnZQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKSA9IDA7Cisg
ICAgCiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0IG9mIGFuIGlucHV0IGV2
ZW50LiAgUmV0dXJucyB0cnVlIGlmCiAgICAgLy8gdGhlIGV2ZW50IGhhcyBiZWVuIHByb2Nlc3Nl
ZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNv
bnN0IFdlYklucHV0RXZlbnQmKSA9IDA7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYldpZGdldENsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRD
bGllbnQuaAppbmRleCBiZDdiZDZhNzRmY2JhZjM3MWRmM2U5YTZlNDEwYmVkYmYzNTkyMzIwLi5i
M2VlOWY1NmZkMTE0Nzc4N2IyZTQ2OTI1ZjBkZTQ1MWQ5YWM0NTFiIDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgKQEAgLTQ1LDcgKzQ1LDEwIEBAIGNsYXNzIFdlYldp
ZGdldENsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSByZWdpb24gb2YgdGhl
IFdlYldpZGdldCBuZWVkcyB0byBiZSByZS1wYWludGVkLgogICAgIHZpcnR1YWwgdm9pZCBkaWRJ
bnZhbGlkYXRlUmVjdChjb25zdCBXZWJSZWN0JikgeyB9Ci0KKyAgICAKKyAgICAvLyBDYWxsZWQg
d2hlbiBhIGNhbGwgdG8gV2ViV2lkZ2V0Ojpjb21wb3NpdGUgaXMgcmVxdWlyZWQKKyAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKyAgICAKICAgICAvLyBDYWxsZWQgd2hl
biBhIHJlZ2lvbiBvZiB0aGUgV2ViV2lkZ2V0LCBnaXZlbiBieSBjbGlwUmVjdCwgc2hvdWxkIGJl
CiAgICAgLy8gc2Nyb2xsZWQgYnkgdGhlIHNwZWNpZmllZCBkeCBhbmQgZHkgYW1vdW50cy4KICAg
ICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsUmVjdChpbnQgZHgsIGludCBkeSwgY29uc3QgV2ViUmVj
dCYgY2xpcFJlY3QpIHsgfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAK
aW5kZXggZTZmMTQwMDcxODBkOGQzYmY2MTI4YjEzMGRjMjhhYmFhZWMxZjkwYS4uMmZkYThlNjhl
NjE0ZmYzNjgxN2I0YzM4YmFkZmIxZDMxMTYwMjQ4ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuY3BwCkBAIC00OTIsOCArNDkyLDE2IEBAIHZvaWQgQ2hyb21lQ2xpZW50
SW1wbDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QsIGJvCiB7CiAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCi0gICAgICAgIG1fd2ViVmlldy0+Y2xpZW50
KCktPmRpZEludmFsaWRhdGVSZWN0KHVwZGF0ZVJlY3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBpZiAoIW1fd2ViVmlldy0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKCkpIHsKKyNlbmRpZgorICAgICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKKyAg
ICAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZEludmFsaWRhdGVSZWN0KHVwZGF0ZVJl
Y3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX3dlYlZpZXctPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KHVwZGF0ZVJlY3QpOworICAg
IH0KKyNlbmRpZgogfQogCiB2b2lkIENocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250ZW50
c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUp
CkBAIC01MDcsMTEgKzUxNSwxOSBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OnNjcm9sbCgKICAg
ICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBtX3dlYlZpZXctPmhpZGVQb3B1cHMo
KTsKLSAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkgewotICAgICAgICBpbnQgZHggPSBzY3Jv
bGxEZWx0YS53aWR0aCgpOwotICAgICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0YS5oZWlnaHQoKTsK
LSAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU2Nyb2xsUmVjdChkeCwgZHksIGNsaXBS
ZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKCFtX3dlYlZp
ZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjZW5kaWYKKyAgICAgICAg
aWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAgIGludCBkeCA9IHNjcm9sbERl
bHRhLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0YS5oZWlnaHQoKTsK
KyAgICAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBj
bGlwUmVjdCk7CisgICAgICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV93ZWJWaWV3LT5zY3JvbGxSb290TGF5ZXIoc2Nyb2xsRGVs
dGEsIGNsaXBSZWN0KTsKICAgICB9CisjZW5kaWYKIH0KIAogSW50UG9pbnQgQ2hyb21lQ2xpZW50
SW1wbDo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKaW5kZXggNzVkNmNjMTQzODI0YjdmNTkyOTEwMjli
NDI3Y2U5MjBjMjNlNDUzOS4uNzE3ZmY4MmUyNWU1Y2Y0YWNkMDMyODM2ODNhNjA4YWQ3ODQ3NzA1
YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCkBAIC0xNTUsMTIg
KzE1NSwxMiBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OmxheW91dCgpCiB7CiB9CiAKLXZvaWQg
V2ViUG9wdXBNZW51SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3Qm
IHJlY3QpCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBj
b25zdCBXZWJSZWN0JiB2aWV3cG9ydCkKIHsKICAgICBpZiAoIW1fd2lkZ2V0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisgICAgaWYgKCF2aWV3cG9ydC5p
c0VtcHR5KCkpIHsKICNpZiBXRUJLSVRfVVNJTkdfQ0cKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
IGdjKGNhbnZhcyk7CiAjZWxpZiBXRUJLSVRfVVNJTkdfU0tJQQpAQCAtMTcwLDEwICsxNzAsMTkg
QEAgdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3Qg
V2ViUmVjdCYgcmVjdCkKICNlbHNlCiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAjZW5kaWYK
LSAgICAgICAgbV93aWRnZXQtPnBhaW50KCZnYywgcmVjdCk7CisgICAgICAgIG1fd2lkZ2V0LT5w
YWludCgmZ2MsIHZpZXdwb3J0KTsKICAgICB9CiB9CiAKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6
dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBXZWJQb3B1
cE1lbnVJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwogYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdl
YklucHV0RXZlbnQmIGlucHV0RXZlbnQpCiB7CiAgICAgaWYgKCFtX3dpZGdldCkKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKaW5kZXggZWRiYjRhYjUwZDQxNmIwM2I3YmQxYTVm
Y2U4MDA1NTYwOTFlYTIyNy4uMjIxYmEwMzhmMmM0YzczNmQ2NzdmYWJmYTMyMmUwNTFmOTA0MjY0
YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKQEAgLTYzLDYgKzYzLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFz
KiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpOworICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNo
YW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKICAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAgICAg
dmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9j
dXMoYm9vbCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA0YjEy
OWQ2OTRiMWYxMTJmMjdiMjFhZTcyNGRiNjdhNjhhNzRlMDJhLi5lZmQ4NmQ3NTE3MDMyNGZhZDRm
Zjc4NDE3M2Q0MTM0NmI0NzMzMzZiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApA
QCAtOTA5LDcgKzkwOSwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6
ZSYgbmV3U2l6ZSkKIAogICAgIGlmIChtX2NsaWVudCkgewogICAgICAgICBXZWJSZWN0IGRhbWFn
ZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0gICAgICAgIG1fY2xp
ZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgICAgIGlmIChpc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsK
KyNlbmRpZgorICAgICAgICB9IGVsc2UgCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxp
ZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogICAgIH0KIAogI2lmIE9TKERBUldJTikKQEAgLTk0Mywz
MyArOTQ4LDE2IEBAIHZvaWQgV2ViVmlld0ltcGw6OmxheW91dCgpCiAKIHZvaWQgV2ViVmlld0lt
cGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQogewotCisg
ICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmICghaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKCkpIHsKKyAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QocmVjdCk7CisgICAgICAg
IGRvQ29tcG9zaXRlKGNhbnZhcywgZmFsc2UpOwogI2VuZGlmCisgICAgfSBlbHNlIHsKICAgICAg
ICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICAgICAgaWYg
KHdlYmZyYW1lKQogICAgICAgICAgICAgd2ViZnJhbWUtPnBhaW50KGNhbnZhcywgcmVjdCk7Ci0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IERyYXcgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgotICAgICAgICB1cGRhdGVSb290
TGF5ZXJDb250ZW50cyhyZWN0KTsKLQotICAgICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0g
bWFpbkZyYW1lSW1wbCgpOwotICAgICAgICBpZiAoIXdlYmZyYW1lKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7Ci0g
ICAgICAgIGlmICghdmlldykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBUaGUg
dmlzaWJsZVJlY3QgaW5jbHVkZXMgc2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250ZW50UmVjdCBk
b2Vzbid0LgotICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KHRydWUpOwotICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KGZhbHNlKTsKLQotICAgICAgICAvLyBBc2sgdGhlIGxheWVyIGNvbXBvc2l0
b3IgdG8gcmVkcmF3IGFsbCB0aGUgbGF5ZXJzLgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRy
YXdMYXllcnMocmVjdCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBJbnRQb2ludCh2aWV3LT5z
Y3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSkpOwogICAgIH0KLSNlbmRpZgogfQogCiAvLyBGSVhN
RTogbV9jdXJyZW50SW5wdXRFdmVudCBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIENocm9tZUNsaWVu
dDo6c2hvdygpIGNhbgpAQCAtMjEwNSw5ICsyMDkzLDE3IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRh
YnNUb0xpbmtzKCkgY29uc3QKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lk
IFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVy
KiBsYXllcikKIHsKKyAgICBib29sIHdhc0FjdGl2ZSA9IG1faXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlOwogICAgIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShsYXllciA/
IHRydWUgOiBmYWxzZSk7CiAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgbV9sYXll
clJlbmRlcmVyLT5zZXRSb290TGF5ZXIobGF5ZXIpOworICAgIGlmICh3YXNBY3RpdmUgIT0gbV9p
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpIHsKKyAgICAgICAgV2ViUmVjdCBkYW1hZ2Vk
UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAgICAgICBpZiAobV9p
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpIAorICAgICAgICAgICAgaW52YWxpZGF0ZVJv
b3RMYXllclJlY3QoZGFtYWdlZFJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworICAgIH0KIH0KIAogdm9pZCBX
ZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZl
KQpAQCAtMjExOSwxMCArMjExNSw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVy
ID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoZ2V0T25zY3JlZW5HTEVTMkNvbnRleHQo
KSk7CiAgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkg
ewogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGb3JjZSBhIHJlZHJhdyB0aGUgZW50aXJlIHZp
ZXcgc28gdGhhdCB0aGUgY29tcG9zaXRvciBnZXRzIHRoZSBlbnRpcmUgdmlldywKLSAgICAgICAg
ICAgIC8vIHJhdGhlciB0aGFuIGp1c3QgdGhlIGN1cnJlbnRseS1kaXJ0eSBzdWJzZXQuCi0gICAg
ICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgsIG1fc2l6ZS5oZWlnaHQpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1f
bGF5ZXJSZW5kZXJlci5jbGVhcigpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUgPSBmYWxzZTsKQEAgLTIxMzgsMTIgKzIxMzAsNiBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIGlm
ICghaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIEZJWE1FOiBUaGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgcGF0aCBpbnZhbGlkYXRl
cyBhIDF4MSByZWN0IGF0ICgwLCAwKQotICAgIC8vIGluIG9yZGVyIHRvIGdldCB0aGUgcmVuZGVy
ZXIgdG8gYXNrIHRoZSBjb21wb3NpdG9yIHRvIHJlZHJhdy4gVGhpcyBpcyBvbmx5Ci0gICAgLy8g
dGVtcG9yYXJ5IHVudGlsIHdlIGdldCB0aGUgY29tcG9zaXRvciB0byByZW5kZXIgZGlyZWN0bHkg
ZnJvbSBpdHMgb3duIHRocmVhZC4KLSAgICBpZiAoIXJlY3QueCAmJiAhcmVjdC55ICYmIHJlY3Qu
d2lkdGggPT0gMSAmJiByZWN0LmhlaWdodCA9PSAxKQotICAgICAgICByZXR1cm47Ci0KICAgICBX
ZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwogICAgIGlmICghd2ViZnJh
bWUpCiAgICAgICAgIHJldHVybjsKQEAgLTIxOTUsMjEgKzIxODEsMTc5IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAKIHZv
aWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiB7Ci0gICAgLy8gRklY
TUU6IEZvciBub3cgd2UncmUgcG9zdGluZyBhIHJlcGFpbnQgZXZlbnQgZm9yIHRoZSBlbnRpcmUg
cGFnZSB3aGljaCBpcyBhbiBvdmVya2lsbC4KLSAgICBpZiAoV2ViRnJhbWVJbXBsKiB3ZWJmcmFt
ZSA9IG1haW5GcmFtZUltcGwoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gd2Vi
ZnJhbWUtPmZyYW1lVmlldygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGhh
Y2sgdG8gaW52YWxpZGF0ZSBwYXJ0IG9mIHRoZSBwYWdlIHNvIHRoYXQgd2UgZ2V0IGNhbGxlZCB0
byByZW5kZXIKLSAgICAgICAgICAgIC8vICAgICAgICBhZ2Fpbi4KLSAgICAgICAgICAgIEludFJl
Y3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0gICAgICAg
ICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxLCAxKSk7Cisg
ICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJl
cikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKworLy8g
V2ViVmlld0ltcGwgbWV0aG9kCit2b2lkIFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXIoY29u
c3QgV2ViU2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0KQoreworICAg
IEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIC8vIENvbXB1dGUgdGhlIGRhbWFnZSByZWN0
IGluIHZpZXdwb3J0IHNwYWNlCisgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFt
ZUltcGwoKTsKKyAgICBpZiAoIXdlYmZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVW
aWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOworICAgIGlmICghdmlldykKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxl
Q29udGVudFJlY3QoZmFsc2UpOworCisgICAgLy8gV2Ugc3VwcG9ydCBmYXN0IHNjcm9sbGluZyBp
biBvbmUgZGlyZWN0aW9uIGF0IGEgdGltZS4KKyAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGggJiYg
c2Nyb2xsRGVsdGEuaGVpZ2h0KSB7CisgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KFdl
YlJlY3QoY29udGVudFJlY3QpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBG
bG9hdFJlY3QgZGFtYWdlZFJlY3Q7CisgICAgLy8gUHV0IHRoZSB2aWV3cG9ydFJlY3QgaW4gX2xh
eWVyIHNwYWNlXyBwcmlvciB0byB0aGUgc2Nyb2xsIHNpbmNlIHRoZSBsb2dpYworICAgIC8vIGJl
bG93IGVtaXRzIGRhbWFnZSBpbiB0aGUgc3BhY2UgImJlZm9yZSIgc2Nyb2xsaW5nCisgICAgLy8g
VXNpbmcgbGF5ZXIgc3BhY2UgZm9yIGRhbWFnZSByZWN0cyBhbGxvd3MgdXMgdG8gaW50ZXJtaXgg
aW52YWxpZGF0ZXMgd2l0aCBzY3JvbGxzCisgICAgRmxvYXRSZWN0IHZpZXdwb3J0UmVjdChjb250
ZW50UmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UmVjdC55KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50
UmVjdC5oZWlnaHQoKSk7CisgICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgcmVnaW9uIHdlIHdpbGwg
ZXhwb3NlIGJ5IHNjcm9sbGluZywgYW5kIHBhaW50IHRoYXQgaW50byBhCisgICAgLy8gc2hhcmVk
IG1lbW9yeSBzZWN0aW9uLgorICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCkgeworICAgICAgICBm
bG9hdCBkeCA9IChmbG9hdClzY3JvbGxEZWx0YS53aWR0aDsKKyAgICAgICAgZGFtYWdlZFJlY3Qu
c2V0WSh2aWV3cG9ydFJlY3QueSgpKTsKKyAgICAgICAgZGFtYWdlZFJlY3Quc2V0SGVpZ2h0KHZp
ZXdwb3J0UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChkeCA+IDApIHsKKyAgICAgICAgICAg
IGRhbWFnZWRSZWN0LnNldFgodmlld3BvcnRSZWN0LngoKSk7CisgICAgICAgICAgICBkYW1hZ2Vk
UmVjdC5zZXRXaWR0aChkeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYW1hZ2Vk
UmVjdC5zZXRYKHZpZXdwb3J0UmVjdC5yaWdodCgpICsgZHgpOworICAgICAgICAgICAgZGFtYWdl
ZFJlY3Quc2V0V2lkdGgoLWR4KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZs
b2F0IGR5ID0gKGZsb2F0KXNjcm9sbERlbHRhLmhlaWdodDsKKyAgICAgICAgZGFtYWdlZFJlY3Qu
c2V0WCh2aWV3cG9ydFJlY3QueCgpKTsKKyAgICAgICAgZGFtYWdlZFJlY3Quc2V0V2lkdGgodmll
d3BvcnRSZWN0LndpZHRoKCkpOworICAgICAgICBpZiAoZHkgPiAwKSB7CisgICAgICAgICAgICBk
YW1hZ2VkUmVjdC5zZXRZKHZpZXdwb3J0UmVjdC55KCkpOworICAgICAgICAgICAgZGFtYWdlZFJl
Y3Quc2V0SGVpZ2h0KGR5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhbWFnZWRS
ZWN0LnNldFkodmlld3BvcnRSZWN0LmJvdHRvbSgpICsgZHkpOworICAgICAgICAgICAgZGFtYWdl
ZFJlY3Quc2V0SGVpZ2h0KC1keSk7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgLy8gVE9E
TzogYWRkIGEgc21hcnRlciBkYW1hZ2UgYWdncmVnYXRpb24gbG9naWM/IFJpZ2h0IG5vdywgTGF5
ZXJDaHJvbWl1bSBkb2VzIHNpbXBsZSB1bmlvbi1pbmcKKyAgICBJbnRSZWN0IGlEYW1hZ2VkUmVj
dChkYW1hZ2VkUmVjdCk7CisgICAgaURhbWFnZWRSZWN0LnVuaXRlKG1fc2Nyb2xsRGFtYWdlKTsK
KyAgICBtX3Njcm9sbERhbWFnZSA9IGlEYW1hZ2VkUmVjdDsKKyAgICBzZXRSb290TGF5ZXJOZWVk
c0Rpc3BsYXkoKTsKK30KK3ZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0
KGNvbnN0IFdlYlJlY3QmIHJlY3QpCit7CisgICAgLy8gcmVjdCBpcyBpbiB2aWV3cG9ydCBzcGFj
ZS4gQ29udmVydCB0byBsYXllciBzcGFjZQorICAgIC8vIHNvIHRoYXQgaW52YWxpZGF0aW9ucyBh
bmQgc2Nyb2xsIGludmFsaWRhdGlvbnMgcGxheSB3ZWxsIHdpdGggb25lLWFub3RoZXIKKyAgICBB
U1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICAKKyAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1l
ID0gbWFpbkZyYW1lSW1wbCgpOworICAgIGlmICghd2ViZnJhbWUpCisgICAgICAgIHJldHVybjsK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CisgICAgaWYgKCF2
aWV3KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgIEZsb2F0UmVjdCBsc1Jl
Y3QocmVjdC54ICsgdmlldy0+c2Nyb2xsWCgpLAorICAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
eSArIHZpZXctPnNjcm9sbFkoKSwKKyAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoLCBy
ZWN0LmhlaWdodCk7CisgICAgCisgICAgLy8gVE9ETzogYWRkIGEgc21hcnRlciBkYW1hZ2UgYWdn
cmVnYXRpb24gbG9naWM/IFJpZ2h0IG5vdywgTGF5ZXJDaHJvbWl1bSBkb2VzIHNpbXBsZSB1bmlv
bi1pbmcKKyAgICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpLT5zZXROZWVkc0Rpc3BsYXko
bHNSZWN0KTsKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKy8v
IFdlYldpZGV0IG1ldGhvZAordm9pZCBXZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkt
PnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsK
KyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIFdlYlJlY3QgZGFtYWdlZFJlY3QoMCwgMCwg
bV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKKyAgICAgICAgbV9jbGllbnQtPmRpZEludmFs
aWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmNv
bXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisgICAgZG9Db21wb3NpdGUoMCwgZmluaXNoKTsKKyNlbmRpZgorfQorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKFdlYkNhbnZh
cyogY2FudmFzLCBib29sIGZpbmlzaCkKK3sKKyAgICBBU1NFUlQoaXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlKCkpOworICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJ
bXBsKCk7CisgICAgaWYgKCF3ZWJmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmll
dyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBpbmNsdWRlcyBzY3JvbGxiYXJzIHdo
ZXJlYXMgdGhlIGNvbnRlbnRSZWN0IGRvZXNuJ3QuCisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9
IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0
ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKKyAgICBJbnRSZWN0IHZpZXdwb3J0
ICAgID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworCisgICAg
Ly8gR2l2ZSB0aGUgY29tcG9pc2l0b3IgYSBjaGFuY2UgdG8gc2V0dXAvcmVzaXplIHRoZSByb290
IHRleHR1cmUgaGFuZGxlIGFuZCBwZXJmb3JtIHNjcm9sbGluZworICAgIG1fbGF5ZXJSZW5kZXJl
ci0+cHJlcGFyZVRvRHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIEludFBvaW50
KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7CisKKyAgICAvLyBEcmF3IHRoZSBj
b250ZW50cyBvZiB0aGUgcm9vdCBsYXllcgorICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRhbWFnZVJl
Y3RzOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChGbG9hdFJlY3QobV9zY3JvbGxEYW1hZ2UueCwg
bV9zY3JvbGxEYW1hZ2UueSwgbV9zY3JvbGxEYW1hZ2Uud2lkdGgsIG1fc2Nyb2xsRGFtYWdlLmhl
aWdodCkpOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChtX2xheWVyUmVuZGVyZXItPnJvb3RMYXll
cigpLT5kaXJ0eVJlY3QoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYW1hZ2VSZWN0
cy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyB0aGUgZGFtYWdlIHJlY3RzIGZvciB0aGUgcm9v
dCBsYXllciBpcyBpbiBsYXllciBzcGFjZSBbZS5nLiB1bnNjcm9sbGVkLl0KKyAgICAgICAgLy8g
Y29udmVydCBmcm9tIGxheWVyIHNwYWNlIHRvIHZpZXdwb3J0IHNwYWNlCisgICAgICAgIGNvbnN0
IEZsb2F0UmVjdCBzc1JlY3QgPSBkYW1hZ2VSZWN0c1tpXTsKKyAgICAgICAgRmxvYXRSZWN0IHJl
Y3Qoc3NSZWN0LngoKSAtIHZpZXctPnNjcm9sbFgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
c3NSZWN0LnkoKSAtIHZpZXctPnNjcm9sbFkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NS
ZWN0LndpZHRoKCksIHNzUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBpbnRl
cnNlY3QgdGhpcyByZWN0YW5nbGUgd2l0aCB0aGUgdmlld3BvcnQKKyAgICAgICAgcmVjdC5pbnRl
cnNlY3Qodmlld3BvcnQpOworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8vIG5vdyByZW5k
ZXIgaXQKKyAgICAgICAgV2ViUmVjdCB3cmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmICh3cmVjdC53aWR0aCAmJiB3cmVjdC5o
ZWlnaHQpIHsKKyAgICAgICAgICAgIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKHdyZWN0KTsKKyAg
ICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3Qod3Jl
Y3QpOworICAgICAgICB9CisgICAgfQorICAgIG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkt
PnJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9zY3JvbGxEYW1hZ2UgPSBXZWJSZWN0KCk7Cisg
ICAgICAgIAorICAgIC8vIERyYXcgdGhlIGFjdHVhbCBsYXllcnMuLi4KKyAgICBtX2xheWVyUmVu
ZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICBtX2xheWVy
UmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKworICAgIC8v
IHJlYWRiYWNrIGludG8gdGhlIGNhbnZhcywgaWYgcmVxdWVzdGVkCisgICAgLy8gRklYTUUgSW5z
ZXJ0IHdqbWFjbGVhbidzIHJlYWRiYWNrIGNvZGUgaGVyZSBmb3Igd2Via2l0IGJ1ZyA0NDEyNwor
ICAgIAorICAgIC8vIGZpbmlzaCBpZiByZXF1ZXN0ZWQKKyAgICAvLyBGSVhNRTogaGFuZGxlIGZp
bmlzaCBmbGFnCisgICAgCisgICAgLy8gd2UncmUgZG9uZS4uLiBwdXQgcmVzdWx0IG9uc2NyZWVu
CisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisKKyAgICAvLyB0ZWxsIHRoZSBicm93
c2VyIHRoYXQgdGhlIHJlbmRlcmluZyBpcyBkb25lIC0tLQorICAgIC8vIFRPRE86IHRoaXMgaXMg
YmVpbmcgY2FsbGVkIHRvbyBlYXJseSwgd2UgbmVlZCB0byBkZWZlciBjYWxsaW5nIHRoaXMgCisg
ICAgLy8gICAgICAgdW50aWwgdGhlIHN3YXBidWZmZXJzIGl0c2VsZiBoYXMgZXhlY3V0ZWQgb24g
dGhlIEdQVS4KKyAgICAvLyBtX2NsaWVudC0+b25Db21wb3NpdGVDb21wbGV0ZSgpOworfQorI2Vu
ZGlmCisKKwogUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdlYlZpZXdJbXBsOjpnZXRPbnNjcmVl
bkdMRVMyQ29udGV4dCgpCiB7CiAgICAgcmV0dXJuIEdMRVMyQ29udGV4dDo6Y3JlYXRlKEdMRVMy
Q29udGV4dEludGVybmFsOjpjcmVhdGUoZ2xlczJDb250ZXh0KCksIGZhbHNlKSk7CmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYzI5NjEyMTIzZjQ1MTRjOTRkZDdkOTcwYzczMTE0YTRi
ZWVlYzM1NS4uYmNkNGY0NmQ4N2YxYTVmYzNkNmZkNjRmMzVhOTJkYmRjNjk2MDI4NiAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldlYkdM
RVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25Qb2xpY3kuaCIKICNpbmNsdWRl
ICJXZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJTaXplLmgi
CiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVmlldy5oIgpAQCAtOTIsNiAr
OTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJD
YW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgp
OworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOwogICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICAgICB2aXJ0dWFs
IHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29s
IGVuYWJsZSk7CkBAIC0zMjIsNiArMzI1LDkgQEAgcHVibGljOgogICAgIH0KIAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGRvQ29tcG9zaXRlKFdlYkNhbnZhcyos
IGJvb2wgZmluaXNoKTsKKyAgICB2b2lkIHNjcm9sbFJvb3RMYXllcihjb25zdCBXZWJTaXplJiBz
Y3JvbGxEZWx0YSwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3QpOworICAgIHZvaWQgaW52YWxpZGF0
ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViUmVjdCYpOwogICAgIHZvaWQgc2V0Um9vdExheWVyTmVl
ZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0
Zm9ybUxheWVyKik7CiAjZW5kaWYKQEAgLTUxMCw2ICs1MTYsNyBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxXZWJDb3JlOjpOb2RlPiBtX21vdXNlQ2FwdHVyZU5vZGU7CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgV2ViUmVjdCBtX3Njcm9sbERhbWFnZTsKICAgICBPd25Q
dHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAg
Ym9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCmluZGV4IDUwMzE5YWYyM2IwYTkyZjQ0YzkxNThl
ZmIzZTY0NjE4MjM5ODFkMTAuLmFlZjI5Y2YyZDA0MTI0YjRjODdlZjA3YTJlNWYzODUwOTY3ODJi
NjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKQEAgLTEyOCw2ICsx
MjgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHRoZW1l
Q2hhbmdlZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpIHsg
fQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQm
KSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCkgeyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66535</attachid>
            <date>2010-09-03 12:50:59 -0700</date>
            <delta_ts>2010-09-07 14:55:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100903125058.patch</filename>
            <type>text/plain</type>
            <size>36916</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmFkMTBkZjJhMjRlYjcwZDhjYzJhZWU5ZTg0YjIyOWY5YzAwNDFhYi4uMWM0ODdhMTEyM2E4N2Q2
OTRmNjM2MTdlODdhMTE1NjkyNjViZDFmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wMiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY1MTlmMWZmMmJhMTgyNmYyZTI4
NTk2MmIwMzgxNzEyYTQ2ZTlkY2MuLjkyZWM0OWI1Y2M3ZjdmZjhiNjM3YjZkMzBhMTI0YTE0ZGMw
YmMzYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcApAQCAtMjk5LDEwICsyOTksMTUgQEAgdm9pZCBMYXllckNocm9taXVt
OjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBpZiAobV9ib3VuZHMgPT0gc2l6
ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBmaXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53
aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWln
aHQoKTsKKyAgICAKICAgICBtX2JvdW5kcyA9IHNpemU7CiAgICAgbV9iYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKIAotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgaWYgKGZpcnN0UmVzaXplKQor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCiBjb25zdCBMYXll
ckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApAQCAtMzUzLDcgKzM1
OCw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAKICAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MzYzLDYgKzM2NywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewog
ICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJhMTUwODg0NGJhMzViMzQ1MWY4
MmNkNTg5YTY1Mzk3NjUyMWEwOGMuLjJkMjI1ZGFmNWEyMDcxYmFiZmViZDZhN2NmM2NjMDVlMjZi
MzkwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnR5UmVjdDsgfQorICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTAzMzhkMmQ1ZjczMjRlNWExMTljNTA5MTkwZGZlZjg2OThi
MTc2OS4uNzJhMmZkYWEwNmIzZDRhMWVkODFmMGRhMjYwZWMyNmU2NGI3OTAzYSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMTUyLDggKzE1Miw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQogCiAvLyBVcGRhdGVzIHRoZSBj
b250ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0ZXh0dXJlIHRoYXQgZmFsbCBpbnNpZGUgdGhlIHVw
ZGF0ZVJlY3QKIC8vIGFuZCByZS1jb21wb3NpdHMgYWxsIHN1YmxheWVycy4KLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKG1faGFyZHdhcmVDb21w
b3NpdGluZyk7CiAKQEAgLTE4Miw3ICsxODIsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0Jgog
CiAgICAgLy8gQmluZCB0aGUgY29tbW9uIHZlcnRleCBhdHRyaWJ1dGVzIHVzZWQgZm9yIGRyYXdp
bmcgYWxsIHRoZSBsYXllcnMuCiAgICAgTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZUZvckRyYXcobGF5
ZXJTaGFyZWRWYWx1ZXMoKSk7Ci0KICAgICAvLyBGSVhNRTogVGhlc2UgY2FsbHMgY2FuIGJlIG1h
ZGUgb25jZSwgd2hlbiB0aGUgY29tcG9zaXRvciBjb250ZXh0IGlzIGluaXRpYWxpemVkLgogICAg
IEdMQyhnbERpc2FibGUoR0xfREVQVEhfVEVTVCkpOwogICAgIEdMQyhnbERpc2FibGUoR0xfQ1VM
TF9GQUNFKSk7CkBAIC0xOTMsMTQgKzE5MiwxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0Jgog
ICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAKICAgICBJbnRQb2lu
dCBzY3JvbGxEZWx0YSA9IHRvUG9pbnQoc2Nyb2xsUG9zaXRpb24gLSBtX3Njcm9sbFBvc2l0aW9u
KTsKLSAgICAvLyBTY3JvbGwgb25seSB3aGVuIHRoZSB1cGRhdGVSZWN0IGNvbnRhaW5zIHBpeGVs
cyBmb3IgdGhlIG5ld2x5IHVuY292ZXJlZCByZWdpb24gdG8gYXZvaWQgZmxhc2hpbmcuCi0gICAg
aWYgKChzY3JvbGxEZWx0YS54KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID49IGFicyhzY3JvbGxE
ZWx0YS54KCkpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gY29udGVudFJlY3QuaGVpZ2h0KCkp
Ci0gICAgICAgIHx8IChzY3JvbGxEZWx0YS55KCkgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA+PSBh
YnMoc2Nyb2xsRGVsdGEueSgpKSAmJiB1cGRhdGVSZWN0LndpZHRoKCkgPj0gY29udGVudFJlY3Qu
d2lkdGgoKSkpIHsKKyAgICAvLyBTY3JvbGwgdGhlIGJhY2tidWZmZXIKKyAgICBpZiAoc2Nyb2xs
RGVsdGEueCgpIHx8IHNjcm9sbERlbHRhLnkoKSkgewogICAgICAgICAvLyBTY3JvbGxpbmcgd29y
a3MgYXMgZm9sbG93czogV2UgcmVuZGVyIGEgcXVhZCB3aXRoIHRoZSBjdXJyZW50IHJvb3QgbGF5
ZXIgY29udGVudHMKICAgICAgICAgLy8gdHJhbnNsYXRlZCBieSB0aGUgYW1vdW50IHRoZSBwYWdl
IGhhcyBzY3JvbGxlZCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUgYW5kIHRoZW4gcmVhZCB0aGUKICAg
ICAgICAgLy8gcGl4ZWxzIG9mIHRoZSBjb250ZW50IGFyZWEgKHZpc2libGUgYXJlYSBleGNsdWRp
bmcgdGhlIHNjcm9sbCBiYXJzKSBiYWNrIGludG8gdGhlCi0gICAgICAgIC8vIHJvb3QgbGF5ZXIg
dGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQgYXJlYSBpcyBzdWJlc3F1ZW50bHkgZmlsbGVkIGFz
IHVzdWFsIHdpdGgKLSAgICAgICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVSZWN0Lgor
ICAgICAgICAvLyByb290IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEgd2ls
bCBiZSBmaWxsZWQgYnkgYSBzdWJzZXF1ZW50IGRyYXdMYXllcnNJbnRvUmVjdCBjYWxsCiAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbGVkTGF5ZXJNYXRyaXg7CiAjaWYgUExBVEZP
Uk0oU0tJQSkKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmOwpAQCAtMjMwLDQzICsy
MjcsNjYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50
UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICAgICAgLy8gbm8gbmVlZCB0byBj
b3B5IGZyYW1lYnVmZmVyIHBpeGVscyBiYWNrIGludG8gdGhlIHRleHR1cmUuCiAgICAgICAgIG1f
c2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9CisgICAgCisgICAgLy8gVHJh
bnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbi4K
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgbWF0cml4LnRyYW5zbGF0ZTNk
KC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsKKworICAg
IC8vIFRyYXZlcnNlIHRoZSBsYXllciB0cmVlIGFuZCB1cGRhdGUgdGhlIGxheWVyIHRyYW5zZm9y
bXMuCisgICAgZmxvYXQgb3BhY2l0eSA9IDE7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBtX3Jvb3RMYXllci0+Z2V0U3VibGF5ZXJzKCk7Cisg
ICAgc2l6ZV90IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykK
KyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgbWF0cml4
LCBvcGFjaXR5KTsKK30KIAotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGNoZWNrIHNob3Vs
ZCBnbyBhd2F5IHdoZW4gdGhlIGNvbXBvc2l0b3IgcmVuZGVycyBpbmRlcGVuZGVudGx5IGZyb20g
aXRzIG93biB0aHJlYWQuCi0gICAgLy8gSWdub3JlIGEgMXgxIHVwZGF0ZSByZWN0IGF0ICgwLCAw
KSBhcyB0aGF0J3MgdXNlZCBhIHdheSB0byBraWNrIG9mZiBhIHJlZHJhdyBmb3IgdGhlIGNvbXBv
c2l0b3IuCi0gICAgaWYgKCEoIXVwZGF0ZVJlY3QueCgpICYmICF1cGRhdGVSZWN0LnkoKSAmJiB1
cGRhdGVSZWN0LndpZHRoKCkgPT0gMSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID09IDEpKSB7Ci0g
ICAgICAgIC8vIFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBBU1NFUlQo
KHVwZGF0ZVJlY3QueCgpICsgdXBkYXRlUmVjdC53aWR0aCgpIDw9IG1fcm9vdExheWVyVGV4dHVy
ZVdpZHRoKQotICAgICAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QueSgpICsgdXBkYXRlUmVjdC5o
ZWlnaHQoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRh
dGVSZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOworCisgICAgaWYg
KCFtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgR0xDKGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKIAorICAgIC8vIFVwZGF0ZSB0
aGUgcm9vdCBsYXllciB0ZXh0dXJlLgorICAgIEFTU0VSVCgodXBkYXRlUmVjdC5yaWdodCgpICA8
PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKKyAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QuYm90
dG9tKCkgPD0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KSk7CisgICAgCiAjaWYgUExBVEZPUk0o
U0tJQSkKLSAgICAgICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0Lgot
ICAgICAgICBjb25zdCBTa0JpdG1hcCBiaXRtYXAgPSBtX3Jvb3RMYXllckNhbnZhcy0+Z2V0RGV2
aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Ci0gICAgICAgIGludCByb290TGF5ZXJXaWR0aCA9
IGJpdG1hcC53aWR0aCgpOwotICAgICAgICBpbnQgcm9vdExheWVySGVpZ2h0ID0gYml0bWFwLmhl
aWdodCgpOwotICAgICAgICBBU1NFUlQocm9vdExheWVyV2lkdGggPT0gdXBkYXRlUmVjdC53aWR0
aCgpICYmIHJvb3RMYXllckhlaWdodCA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAg
dm9pZCogcGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOwotCi0gICAgICAgIC8vIENvcHkgdGhl
IGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4K
LSAgICAgICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0
LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWln
aHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgLy8gR2V0IHRo
ZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIGNvbnN0IFNrQml0bWFwIGJpdG1h
cCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsK
KyAgICBpbnQgYml0bWFwV2lkdGggPSBiaXRtYXAud2lkdGgoKTsKKyAgICBpbnQgYml0bWFwSGVp
Z2h0ID0gYml0bWFwLmhlaWdodCgpOworICAgIEFTU0VSVChiaXRtYXBXaWR0aCA9PSB1cGRhdGVS
ZWN0LndpZHRoKCkgJiYgYml0bWFwSGVpZ2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOworICAg
IHZvaWQqIHBpeGVscyA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKKyAgICAvLyBDb3B5IHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAg
R0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBk
YXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CiAjZWxpZiBQTEFURk9STShDRykKLSAg
ICAgICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgotICAgICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRXaWR0aChtX3Jvb3RMYXll
ckNHQ29udGV4dC5nZXQoKSkpID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBzdGF0aWNfY2FzdDxp
bnQ+KENHQml0bWFwQ29udGV4dEdldEhlaWdodChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkp
ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RM
YXllckJhY2tpbmdTdG9yZS5kYXRhKCk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMg
b2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICAv
LyBUaGUgb3JpZ2luIGlzIGF0IHRoZSBsb3dlciBsZWZ0IGluIENvcmUgR3JhcGhpY3MnIGNvb3Jk
aW5hdGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNvcnJlY3QgZm9yIHRoaXMgaGVyZS4KLSAgICAgICAg
R0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQgLSB1cGRh
dGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwor
ICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICAvLyBBU1NF
UlQoc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRXaWR0aChtX3Jvb3RMYXllckNH
Q29udGV4dC5nZXQoKSkpID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+
KENHQml0bWFwQ29udGV4dEdldEhlaWdodChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkpID09
IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOworICAgIHZvaWQqIHBpeGVscyA9IG1fcm9vdExheWVyQmFj
a2luZ1N0b3JlLmRhdGEoKTsKKworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRh
dGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICAvLyBUaGUgb3JpZ2luIGlz
IGF0IHRoZSBsb3dlciBsZWZ0IGluIENvcmUgR3JhcGhpY3MnIGNvb3JkaW5hdGUgc3lzdGVtLiBX
ZSBuZWVkIHRvIGNvcnJlY3QgZm9yIHRoaXMgaGVyZS4KKyAgICBHTEMoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0Lngo
KSwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0IC0gdXBkYXRlUmVjdC55KCkgLSB1cGRhdGVSZWN0
LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC53aWR0aCgpLCB1
cGRhdGVSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CiAjZWxzZQogI2Vycm9yICJOZWVkIHRvIGltcGxlbWVu
dCBmb3IgeW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKLSAgICB9Cit9CiAKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0
aW5nKTsKKyAgICAKICAgICBnbENsZWFyQ29sb3IoMCwgMCwgMSwgMSk7CiAgICAgZ2xDbGVhcihH
TF9DT0xPUl9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCk7Ci0KKyAgICAKKyAgICBH
TEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOwor
ICAgIAogICAgIC8vIFJlbmRlciB0aGUgcm9vdCBsYXllciB1c2luZyBhIHF1YWQgdGhhdCB0YWtl
cyB1cCB0aGUgZW50aXJlIHZpc2libGUgYXJlYSBvZiB0aGUgd2luZG93LgogICAgIC8vIFdlIHJl
dXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IENvbnRlbnRMYXllckNocm9taXVtLgogICAg
IGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNvbnRlbnRMYXllclZh
bHVlcyA9IGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygpOwpAQCAtMjkwLDIyICszMTAsMTMgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBk
YXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICBHTEMoZ2xFbmFibGUoR0xfQkxFTkQpKTsKICAg
ICBHTEMoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiAKLSAg
ICAvLyBUcmFuc2xhdGUgYWxsIHRoZSBjb21wb3NpdGVkIGxheWVycyBieSB0aGUgc2Nyb2xsIHBv
c2l0aW9uLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICBtYXRyaXgudHJh
bnNsYXRlM2QoLW1fc2Nyb2xsUG9zaXRpb24ueCgpLCAtbV9zY3JvbGxQb3NpdGlvbi55KCksIDAp
OwotCi0gICAgLy8gVHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgYW5kIHVwZGF0ZSB0aGUgbGF5ZXIg
dHJhbnNmb3Jtcy4KLSAgICBmbG9hdCBvcGFjaXR5ID0gMTsKLSAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9vdExheWVyLT5nZXRTdWJsYXll
cnMoKTsKLSAgICBzaXplX3QgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUo
KTsgaSsrKQotICAgICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgp
LCBtYXRyaXgsIG9wYWNpdHkpOwotCi0gICAgbV9yb290VmlzaWJsZVJlY3QgPSB2aXNpYmxlUmVj
dDsKLQogICAgIC8vIEVuYWJsZSBzY2lzc29yaW5nIHRvIGF2b2lkIHJlbmRlcmluZyBjb21wb3Np
dGVkIGxheWVycyBvdmVyIHRoZSBzY3JvbGxiYXJzLgogICAgIEdMQyhnbEVuYWJsZShHTF9TQ0lT
U09SX1RFU1QpKTsKICAgICBGbG9hdFJlY3Qgc2Npc3NvclJlY3QoY29udGVudFJlY3QpOworCisg
ICAgLy8gU2V0IHRoZSByb290VmlzaWJsZVJlY3QgLS0tIHVzZWQgYnkgc3Vic2VxdWVudCBkcmF3
TGF5ZXJzIGNhbGxzCisgICAgbV9yb290VmlzaWJsZVJlY3QgPSB2aXNpYmxlUmVjdDsKKwogICAg
IC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQu
CiAgICAgc2Npc3NvclJlY3QubW92ZSgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBv
c2l0aW9uLnkoKSk7CiAgICAgc2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7CkBAIC0zMTYsMTMg
KzMyNywxNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhnbFN0ZW5jaWxNYXNr
KDApKTsKIAogICAgIC8vIFRyYXZlcnNlIHRoZSBsYXllciB0cmVlIG9uZSBtb3JlIHRpbWUgdG8g
ZHJhdyB0aGUgbGF5ZXJzLgotICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBp
KyspCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMg
PSBtX3Jvb3RMYXllci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3Vi
bGF5ZXJzW2ldLmdldCgpLCBzY2lzc29yUmVjdCk7CiAKICAgICBHTEMoZ2xEaXNhYmxlKEdMX1ND
SVNTT1JfVEVTVCkpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgp
Cit7CisgICAgLy8gV2UncmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVycyEKICAgICBtX2dsZXMy
Q29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLQogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDhmNDRhZmViZDBhMmM3YjQ3NWQwNGJhNDg3MjNm
MWNkYzU0NTUwOTEuLjE1Y2YzMWFiZDQ2MjUyMzMzNTg0ZjRmNDZkYzI1MjczNjgyNzJhYTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNjEsOSArNjEsMTcgQEAgcHVibGljOgogICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bShQYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gZ2xlczJDb250ZXh0KTsK
ICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKLSAgICAvLyBVcGRhdGVzIHRoZSBjb250
ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0IGFu
ZCByZWNvbXBvc2l0ZXMKLSAgICAvLyBhbGwgdGhlIGxheWVycy4KLSAgICB2b2lkIGRyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pOworICAgIC8vIHVwZGF0ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5k
IHNjcm9sbHMgdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIHByZXBhcmVUb0RyYXdMYXllcnMoY29u
c3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIAorICAgIC8vIHVwZGF0ZXMgYSByZWN0
YW5nbGUgd2l0aGluIHRoZSByb290IGxheWVyIHRleHR1cmUKKyAgICB2b2lkIHVwZGF0ZVJvb3RM
YXllclRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOworCisgICAgLy8gZHJh
d3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIGRyYXdM
YXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KTsKKworICAgIC8vIHB1dHMgYmFja2J1ZmZlciBvbnNjcmVlbgorICAgIHZvaWQgcHJlc2Vu
dCgpOwogCiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBs
YXllcikgeyBtX3Jvb3RMYXllciA9IGxheWVyOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDUyN2U4
ZWZjY2FlMzkwNDVmZDk4NWRlZDNiZjIwZDcxNjZhZmM2OWQuLjU5NTA5MjUxYTFlMzY3MjY2ZWQy
MGM3ZmFiMmU3MGFlZDM0NTdjZGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEw
LTA5LTAyICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEFjY2VsZXJhdGVkIENv
bXBvc2l0aW5nOiBzY3JlZW4gZ2FyYmFnZSB3aGVuIHNjcm9sbGluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUwOTIKKworICAgICAgICBJbnRyb2R1
Y2UgYSBuZXcgQVBJIG9uIFdlYldpZGdldCBmb3IgcGFpbnRpbmcgd2l0aCBhY2NlbGVyYXRlZAor
ICAgICAgICBjb21wb3NpdGluZyB0aGF0IGFsbG93cyB0aGUgY29tcG9zaXRvciB0byBwcm9wZXJs
eSBkaXN0aW5naXVzaAorICAgICAgICBzY3JvbGxpbmcsIGludmFsaWRhdGlvbiBhbmQgcmVwYWlu
dGluZyBmcm9tIG9uZSBhbm90aGVyLiBUaGUga2V5CisgICAgICAgIGNoYW5nZSBpcyB0aGF0IGlu
IGFjY2VsZXJhdGVkIHJlbmRlcmluZyBjYXNlLCBpbnZhbGlkYXRlcyBhbmQKKyAgICAgICAgc2Ny
b2xsaW5nIHBhc3MgZGlyZWN0bHkgdG8gdGhlIGNvbXBvc2l0b3IsIHJhdGhlciB0aGFuIHBhc3Np
bmcgdXAKKyAgICAgICAgdG8gdGhlIGNsaWVudCBhcyB3YXMgdGhlIGNhc2UgaW4gdGhlIHNvZnR3
YXJlIHBhdGguIEZvcgorICAgICAgICBhY2NlbGVyYXRlZCByZW5kZXJpbmcsIHRoZSBwcmV2aW91
cyBwYWludCgpIG1ldGhvZCBpcyByZXBsYWNlZCBieQorICAgICAgICBhIHBhaXIgb2YgbWV0aG9k
czogcGFpbnRDb21wb3NpdGVkIGFuZAorICAgICAgICBpbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RM
YXllclJlY3QuCisKKworICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKiBw
dWJsaWMvV2ViV2lkZ2V0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldENsaWVu
dDo6c2NoZWR1bGVEZWZlcnJlZENvbXBvc2l0ZSk6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVu
dEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRl
Q29udGVudHNBbmRXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpz
Y3JvbGwpOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBNZW51SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1
cE1lbnVJbXBsOjppbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpwYWludENvbXBvc2l0ZWQpOgorICAgICAgICAqIHNy
Yy9XZWJQb3B1cE1lbnVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlc2l6ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290
R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
dXBkYXRlUm9vdExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnNjcm9sbFJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnZhbGlk
YXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6cGFpbnRDb21wb3NpdGVkKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAg
ICAgKiB0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGVzdFdlYldp
ZGdldDo6aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6VGVzdFdlYldpZGdldDo6cGFpbnRDb21wb3NpdGVkKToKKwogMjAxMC0wOS0wMiAgSWx5YSBT
aGVybWFuICA8aXNoZXJtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IDVjOWY1NGU3OTM2NmI4
M2FmZWU3YzBlMWUzYTMyODhjMzQ0MTJjYTkuLmI3NTdiZjY2ZDY1NGEyNDFlNDQ3M2QyYThlNTUw
MjMxYWZhODE2NzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNTksMTUgKzU5
LDI4IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgdG8gbGF5b3V0IHRoZSBXZWJXaWRnZXQuICBU
aGlzIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSBQYWludCwKICAgICAvLyBhbmQgaXQgbWF5IHJlc3Vs
dCBpbiBjYWxscyB0byBXZWJXaWRnZXRDbGllbnQ6OmRpZEludmFsaWRhdGVSZWN0LgogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7Ci0KLSAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHNw
ZWNpZmllZCByZWdpb24gb2YgdGhlIFdlYldpZGdldCBvbnRvIHRoZSBnaXZlbgotICAgIC8vIGNh
bnZhcy4gIFlvdSBNVVNUIGNhbGwgTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAg
SXQgaXMKLSAgICAvLyBva2F5IHRvIGNhbGwgcGFpbnQgbXVsdGlwbGUgdGltZXMgb25jZSBsYXlv
dXQgaGFzIGJlZW4gY2FsbGVkLAotICAgIC8vIGFzc3VtaW5nIG5vIG90aGVyIGNoYW5nZXMgYXJl
IG1hZGUgdG8gdGhlIFdlYldpZGdldCAoZS5nLiwgb25jZQotICAgIC8vIGV2ZW50cyBhcmUgcHJv
Y2Vzc2VkLCBpdCBzaG91bGQgYmUgYXNzdW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0bwotICAgIC8v
IGxheW91dCBpcyB3YXJyYW50ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpID0gMDsKLQorICAgIAorICAg
IC8vIENhbGxlZCB0byBwYWludCB0aGUgcmVjdGFuZ3VsYXIgcmVnaW9uICJ2aWV3cG9ydCIgd2l0
aGluIHRoZSBXZWJXaWRnZXQgCisgICAgLy8gb250byB0aGUgc3BlY2lmaWVkIGNhbnZhcyBhdCAo
dmlld3BvcnQueCx2aWV3cG9ydC55KS4gWW91IE1VU1QgY2FsbAorICAgIC8vIExheW91dCBiZWZv
cmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlzIG9rYXkgdG8gY2FsbCBwYWludAorICAgIC8v
IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhhcyBiZWVuIGNhbGxlZCwgYXNzdW1pbmcgbm8g
b3RoZXIKKyAgICAvLyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9u
Y2UgZXZlbnRzIGFyZQorICAgIC8vIHByb2Nlc3NlZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhh
dCBhbm90aGVyIGNhbGwgdG8gbGF5b3V0IGlzCisgICAgLy8gd2FycmFudGVkIGJlZm9yZSBwYWlu
dGluZyBhZ2FpbikuCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdl
YlJlY3QmIHZpZXdwb3J0KSA9IDA7CisgICAgCisgICAgLy8gVHJpZ2dlcnMgY29tcG9zaXRpbmcg
b2YgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIHNjcmVlbi4KKyAgICAvLyBUaGUgZmluaXNo
IGFyZ3VtZW50IGNvbnRyb2xzIHdoZXRoZXIgdGhlIGNvbXBvc2l0b3Igd2lsbCB3YWl0aW5nIGZv
ciB0aGUKKyAgICAvLyBHUFUgdG8gZmluaXNoIHJlbmRlcmluZyBiZWZvcmUgcmV0dXJuaW5nLiBZ
b3UgTVVTVCBjYWxsIExheW91dAorICAgIC8vIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBm
b3IgdGhlIHNhbWUgcmVhc29ucyBkZXNjcmliZWQgaW4KKyAgICAvLyB0aGUgcGFpbnQgbWV0aG9k
IGFib3ZlLgorICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpID0gMDsKKwor
ICAgIC8vIENhbGxlZCB0byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhIGNoYW5nZSBpbiBuYXRp
dmUgd2lkZ2V0IHNldHRpbmdzLgorICAgIC8vIEltcGxlbWVudG9ycyB0aGF0IGNhY2hlIHJlbmRl
cmVkIGNvcGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCisgICAgLy8gb24gcmVjZWl2
aW5nIHRoaXMgbWVzc2FnZQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKSA9IDA7Cisg
ICAgCiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0IG9mIGFuIGlucHV0IGV2
ZW50LiAgUmV0dXJucyB0cnVlIGlmCiAgICAgLy8gdGhlIGV2ZW50IGhhcyBiZWVuIHByb2Nlc3Nl
ZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNv
bnN0IFdlYklucHV0RXZlbnQmKSA9IDA7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYldpZGdldENsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRD
bGllbnQuaAppbmRleCBiZDdiZDZhNzRmY2JhZjM3MWRmM2U5YTZlNDEwYmVkYmYzNTkyMzIwLi5i
M2VlOWY1NmZkMTE0Nzc4N2IyZTQ2OTI1ZjBkZTQ1MWQ5YWM0NTFiIDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgKQEAgLTQ1LDcgKzQ1LDEwIEBAIGNsYXNzIFdlYldp
ZGdldENsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSByZWdpb24gb2YgdGhl
IFdlYldpZGdldCBuZWVkcyB0byBiZSByZS1wYWludGVkLgogICAgIHZpcnR1YWwgdm9pZCBkaWRJ
bnZhbGlkYXRlUmVjdChjb25zdCBXZWJSZWN0JikgeyB9Ci0KKyAgICAKKyAgICAvLyBDYWxsZWQg
d2hlbiBhIGNhbGwgdG8gV2ViV2lkZ2V0Ojpjb21wb3NpdGUgaXMgcmVxdWlyZWQKKyAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKyAgICAKICAgICAvLyBDYWxsZWQgd2hl
biBhIHJlZ2lvbiBvZiB0aGUgV2ViV2lkZ2V0LCBnaXZlbiBieSBjbGlwUmVjdCwgc2hvdWxkIGJl
CiAgICAgLy8gc2Nyb2xsZWQgYnkgdGhlIHNwZWNpZmllZCBkeCBhbmQgZHkgYW1vdW50cy4KICAg
ICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsUmVjdChpbnQgZHgsIGludCBkeSwgY29uc3QgV2ViUmVj
dCYgY2xpcFJlY3QpIHsgfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAK
aW5kZXggZTZmMTQwMDcxODBkOGQzYmY2MTI4YjEzMGRjMjhhYmFhZWMxZjkwYS4uMmZkYThlNjhl
NjE0ZmYzNjgxN2I0YzM4YmFkZmIxZDMxMTYwMjQ4ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuY3BwCkBAIC00OTIsOCArNDkyLDE2IEBAIHZvaWQgQ2hyb21lQ2xpZW50
SW1wbDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QsIGJvCiB7CiAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCi0gICAgICAgIG1fd2ViVmlldy0+Y2xpZW50
KCktPmRpZEludmFsaWRhdGVSZWN0KHVwZGF0ZVJlY3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBpZiAoIW1fd2ViVmlldy0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKCkpIHsKKyNlbmRpZgorICAgICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKKyAg
ICAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZEludmFsaWRhdGVSZWN0KHVwZGF0ZVJl
Y3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX3dlYlZpZXctPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KHVwZGF0ZVJlY3QpOworICAg
IH0KKyNlbmRpZgogfQogCiB2b2lkIENocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250ZW50
c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUp
CkBAIC01MDcsMTEgKzUxNSwxOSBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OnNjcm9sbCgKICAg
ICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBtX3dlYlZpZXctPmhpZGVQb3B1cHMo
KTsKLSAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkgewotICAgICAgICBpbnQgZHggPSBzY3Jv
bGxEZWx0YS53aWR0aCgpOwotICAgICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0YS5oZWlnaHQoKTsK
LSAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU2Nyb2xsUmVjdChkeCwgZHksIGNsaXBS
ZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKCFtX3dlYlZp
ZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjZW5kaWYKKyAgICAgICAg
aWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAgIGludCBkeCA9IHNjcm9sbERl
bHRhLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0YS5oZWlnaHQoKTsK
KyAgICAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBj
bGlwUmVjdCk7CisgICAgICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV93ZWJWaWV3LT5zY3JvbGxSb290TGF5ZXIoc2Nyb2xsRGVs
dGEsIGNsaXBSZWN0KTsKICAgICB9CisjZW5kaWYKIH0KIAogSW50UG9pbnQgQ2hyb21lQ2xpZW50
SW1wbDo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKaW5kZXggNzVkNmNjMTQzODI0YjdmNTkyOTEwMjli
NDI3Y2U5MjBjMjNlNDUzOS4uNzE3ZmY4MmUyNWU1Y2Y0YWNkMDMyODM2ODNhNjA4YWQ3ODQ3NzA1
YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCkBAIC0xNTUsMTIg
KzE1NSwxMiBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OmxheW91dCgpCiB7CiB9CiAKLXZvaWQg
V2ViUG9wdXBNZW51SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3Qm
IHJlY3QpCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBj
b25zdCBXZWJSZWN0JiB2aWV3cG9ydCkKIHsKICAgICBpZiAoIW1fd2lkZ2V0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisgICAgaWYgKCF2aWV3cG9ydC5p
c0VtcHR5KCkpIHsKICNpZiBXRUJLSVRfVVNJTkdfQ0cKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
IGdjKGNhbnZhcyk7CiAjZWxpZiBXRUJLSVRfVVNJTkdfU0tJQQpAQCAtMTcwLDEwICsxNzAsMTkg
QEAgdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3Qg
V2ViUmVjdCYgcmVjdCkKICNlbHNlCiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAjZW5kaWYK
LSAgICAgICAgbV93aWRnZXQtPnBhaW50KCZnYywgcmVjdCk7CisgICAgICAgIG1fd2lkZ2V0LT5w
YWludCgmZ2MsIHZpZXdwb3J0KTsKICAgICB9CiB9CiAKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6
dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQordm9pZCBXZWJQb3B1
cE1lbnVJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwogYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdl
YklucHV0RXZlbnQmIGlucHV0RXZlbnQpCiB7CiAgICAgaWYgKCFtX3dpZGdldCkKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKaW5kZXggZWRiYjRhYjUwZDQxNmIwM2I3YmQxYTVm
Y2U4MDA1NTYwOTFlYTIyNy4uMjIxYmEwMzhmMmM0YzczNmQ2NzdmYWJmYTMyMmUwNTFmOTA0MjY0
YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKQEAgLTYzLDYgKzYzLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFz
KiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpOworICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNo
YW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKICAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAgICAg
dmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9j
dXMoYm9vbCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA0YjEy
OWQ2OTRiMWYxMTJmMjdiMjFhZTcyNGRiNjdhNjhhNzRlMDJhLi4zZGZmMWEwMDBkNTUwYjZjYmY1
OGFmNWE2MWQ2Nzk2MGM0Mjg4NTZlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApA
QCAtOTA5LDcgKzkwOSwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6
ZSYgbmV3U2l6ZSkKIAogICAgIGlmIChtX2NsaWVudCkgewogICAgICAgICBXZWJSZWN0IGRhbWFn
ZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0gICAgICAgIG1fY2xp
ZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgICAgIGlmIChpc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsK
KyNlbmRpZgorICAgICAgICB9IGVsc2UgCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxp
ZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogICAgIH0KIAogI2lmIE9TKERBUldJTikKQEAgLTk0Mywz
MyArOTQ4LDE2IEBAIHZvaWQgV2ViVmlld0ltcGw6OmxheW91dCgpCiAKIHZvaWQgV2ViVmlld0lt
cGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQogewotCisg
ICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmICghaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKCkpIHsKKyAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QocmVjdCk7CisgICAgICAg
IGRvQ29tcG9zaXRlKGNhbnZhcywgZmFsc2UpOwogI2VuZGlmCisgICAgfSBlbHNlIHsKICAgICAg
ICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICAgICAgaWYg
KHdlYmZyYW1lKQogICAgICAgICAgICAgd2ViZnJhbWUtPnBhaW50KGNhbnZhcywgcmVjdCk7Ci0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IERyYXcgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgotICAgICAgICB1cGRhdGVSb290
TGF5ZXJDb250ZW50cyhyZWN0KTsKLQotICAgICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0g
bWFpbkZyYW1lSW1wbCgpOwotICAgICAgICBpZiAoIXdlYmZyYW1lKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7Ci0g
ICAgICAgIGlmICghdmlldykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBUaGUg
dmlzaWJsZVJlY3QgaW5jbHVkZXMgc2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250ZW50UmVjdCBk
b2Vzbid0LgotICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KHRydWUpOwotICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KGZhbHNlKTsKLQotICAgICAgICAvLyBBc2sgdGhlIGxheWVyIGNvbXBvc2l0
b3IgdG8gcmVkcmF3IGFsbCB0aGUgbGF5ZXJzLgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRy
YXdMYXllcnMocmVjdCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBJbnRQb2ludCh2aWV3LT5z
Y3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSkpOwogICAgIH0KLSNlbmRpZgogfQogCiAvLyBGSVhN
RTogbV9jdXJyZW50SW5wdXRFdmVudCBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIENocm9tZUNsaWVu
dDo6c2hvdygpIGNhbgpAQCAtMjEwNSw5ICsyMDkzLDE3IEBAIGJvb2wgV2ViVmlld0ltcGw6OnRh
YnNUb0xpbmtzKCkgY29uc3QKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lk
IFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVy
KiBsYXllcikKIHsKKyAgICBib29sIHdhc0FjdGl2ZSA9IG1faXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlOwogICAgIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShsYXllciA/
IHRydWUgOiBmYWxzZSk7CiAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgbV9sYXll
clJlbmRlcmVyLT5zZXRSb290TGF5ZXIobGF5ZXIpOworICAgIGlmICh3YXNBY3RpdmUgIT0gbV9p
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpIHsKKyAgICAgICAgV2ViUmVjdCBkYW1hZ2Vk
UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAgICAgICBpZiAobV9p
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpIAorICAgICAgICAgICAgaW52YWxpZGF0ZVJv
b3RMYXllclJlY3QoZGFtYWdlZFJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworICAgIH0KIH0KIAogdm9pZCBX
ZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZl
KQpAQCAtMjExOSwxMCArMjExNSw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVy
ID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoZ2V0T25zY3JlZW5HTEVTMkNvbnRleHQo
KSk7CiAgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkg
ewogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGb3JjZSBhIHJlZHJhdyB0aGUgZW50aXJlIHZp
ZXcgc28gdGhhdCB0aGUgY29tcG9zaXRvciBnZXRzIHRoZSBlbnRpcmUgdmlldywKLSAgICAgICAg
ICAgIC8vIHJhdGhlciB0aGFuIGp1c3QgdGhlIGN1cnJlbnRseS1kaXJ0eSBzdWJzZXQuCi0gICAg
ICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUu
d2lkdGgsIG1fc2l6ZS5oZWlnaHQpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1f
bGF5ZXJSZW5kZXJlci5jbGVhcigpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUgPSBmYWxzZTsKQEAgLTIxMzgsMTIgKzIxMzAsNiBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIGlm
ICghaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIEZJWE1FOiBUaGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgcGF0aCBpbnZhbGlkYXRl
cyBhIDF4MSByZWN0IGF0ICgwLCAwKQotICAgIC8vIGluIG9yZGVyIHRvIGdldCB0aGUgcmVuZGVy
ZXIgdG8gYXNrIHRoZSBjb21wb3NpdG9yIHRvIHJlZHJhdy4gVGhpcyBpcyBvbmx5Ci0gICAgLy8g
dGVtcG9yYXJ5IHVudGlsIHdlIGdldCB0aGUgY29tcG9zaXRvciB0byByZW5kZXIgZGlyZWN0bHkg
ZnJvbSBpdHMgb3duIHRocmVhZC4KLSAgICBpZiAoIXJlY3QueCAmJiAhcmVjdC55ICYmIHJlY3Qu
d2lkdGggPT0gMSAmJiByZWN0LmhlaWdodCA9PSAxKQotICAgICAgICByZXR1cm47Ci0KICAgICBX
ZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwogICAgIGlmICghd2ViZnJh
bWUpCiAgICAgICAgIHJldHVybjsKQEAgLTIxOTUsMjEgKzIxODEsMTc4IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAKIHZv
aWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiB7Ci0gICAgLy8gRklY
TUU6IEZvciBub3cgd2UncmUgcG9zdGluZyBhIHJlcGFpbnQgZXZlbnQgZm9yIHRoZSBlbnRpcmUg
cGFnZSB3aGljaCBpcyBhbiBvdmVya2lsbC4KLSAgICBpZiAoV2ViRnJhbWVJbXBsKiB3ZWJmcmFt
ZSA9IG1haW5GcmFtZUltcGwoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gd2Vi
ZnJhbWUtPmZyYW1lVmlldygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGhh
Y2sgdG8gaW52YWxpZGF0ZSBwYXJ0IG9mIHRoZSBwYWdlIHNvIHRoYXQgd2UgZ2V0IGNhbGxlZCB0
byByZW5kZXIKLSAgICAgICAgICAgIC8vICAgICAgICBhZ2Fpbi4KLSAgICAgICAgICAgIEludFJl
Y3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0gICAgICAg
ICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxLCAxKSk7Cisg
ICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJl
cikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKworLy8g
V2ViVmlld0ltcGwgbWV0aG9kCit2b2lkIFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXIoY29u
c3QgV2ViU2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0KQoreworICAg
IEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIC8vIENvbXB1dGUgdGhlIGRhbWFnZSByZWN0
IGluIHZpZXdwb3J0IHNwYWNlCisgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFt
ZUltcGwoKTsKKyAgICBpZiAoIXdlYmZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVW
aWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOworICAgIGlmICghdmlldykKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxl
Q29udGVudFJlY3QoZmFsc2UpOworCisgICAgLy8gV2Ugc3VwcG9ydCBmYXN0IHNjcm9sbGluZyBp
biBvbmUgZGlyZWN0aW9uIGF0IGEgdGltZS4KKyAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGggJiYg
c2Nyb2xsRGVsdGEuaGVpZ2h0KSB7CisgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KFdl
YlJlY3QoY29udGVudFJlY3QpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBG
bG9hdFJlY3QgZGFtYWdlZFJlY3Q7CisgICAgLy8gUHV0IHRoZSB2aWV3cG9ydFJlY3QgaW4gX2xh
eWVyIHNwYWNlXyBwcmlvciB0byB0aGUgc2Nyb2xsIHNpbmNlIHRoZSBsb2dpYworICAgIC8vIGJl
bG93IGVtaXRzIGRhbWFnZSBpbiB0aGUgc3BhY2UgImJlZm9yZSIgc2Nyb2xsaW5nCisgICAgLy8g
VXNpbmcgbGF5ZXIgc3BhY2UgZm9yIGRhbWFnZSByZWN0cyBhbGxvd3MgdXMgdG8gaW50ZXJtaXgg
aW52YWxpZGF0ZXMgd2l0aCBzY3JvbGxzCisgICAgRmxvYXRSZWN0IHZpZXdwb3J0UmVjdChjb250
ZW50UmVjdC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UmVjdC55KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50
UmVjdC5oZWlnaHQoKSk7CisgICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgcmVnaW9uIHdlIHdpbGwg
ZXhwb3NlIGJ5IHNjcm9sbGluZywgYW5kIHBhaW50IHRoYXQgaW50byBhCisgICAgLy8gc2hhcmVk
IG1lbW9yeSBzZWN0aW9uLgorICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCkgeworICAgICAgICBm
bG9hdCBkeCA9IChmbG9hdClzY3JvbGxEZWx0YS53aWR0aDsKKyAgICAgICAgZGFtYWdlZFJlY3Qu
c2V0WSh2aWV3cG9ydFJlY3QueSgpKTsKKyAgICAgICAgZGFtYWdlZFJlY3Quc2V0SGVpZ2h0KHZp
ZXdwb3J0UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChkeCA+IDApIHsKKyAgICAgICAgICAg
IGRhbWFnZWRSZWN0LnNldFgodmlld3BvcnRSZWN0LngoKSk7CisgICAgICAgICAgICBkYW1hZ2Vk
UmVjdC5zZXRXaWR0aChkeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYW1hZ2Vk
UmVjdC5zZXRYKHZpZXdwb3J0UmVjdC5yaWdodCgpICsgZHgpOworICAgICAgICAgICAgZGFtYWdl
ZFJlY3Quc2V0V2lkdGgoLWR4KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZs
b2F0IGR5ID0gKGZsb2F0KXNjcm9sbERlbHRhLmhlaWdodDsKKyAgICAgICAgZGFtYWdlZFJlY3Qu
c2V0WCh2aWV3cG9ydFJlY3QueCgpKTsKKyAgICAgICAgZGFtYWdlZFJlY3Quc2V0V2lkdGgodmll
d3BvcnRSZWN0LndpZHRoKCkpOworICAgICAgICBpZiAoZHkgPiAwKSB7CisgICAgICAgICAgICBk
YW1hZ2VkUmVjdC5zZXRZKHZpZXdwb3J0UmVjdC55KCkpOworICAgICAgICAgICAgZGFtYWdlZFJl
Y3Quc2V0SGVpZ2h0KGR5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhbWFnZWRS
ZWN0LnNldFkodmlld3BvcnRSZWN0LmJvdHRvbSgpICsgZHkpOworICAgICAgICAgICAgZGFtYWdl
ZFJlY3Quc2V0SGVpZ2h0KC1keSk7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgLy8gVE9E
TzogYWRkIGEgc21hcnRlciBkYW1hZ2UgYWdncmVnYXRpb24gbG9naWM/IFJpZ2h0IG5vdywgTGF5
ZXJDaHJvbWl1bSBkb2VzIHNpbXBsZSB1bmlvbi1pbmcKKyAgICBJbnRSZWN0IGlEYW1hZ2VkUmVj
dChkYW1hZ2VkUmVjdCk7CisgICAgaURhbWFnZWRSZWN0LnVuaXRlKG1fc2Nyb2xsRGFtYWdlKTsK
KyAgICBtX3Njcm9sbERhbWFnZSA9IGlEYW1hZ2VkUmVjdDsKKyAgICBzZXRSb290TGF5ZXJOZWVk
c0Rpc3BsYXkoKTsKK30KK3ZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0
KGNvbnN0IFdlYlJlY3QmIHJlY3QpCit7CisgICAgLy8gcmVjdCBpcyBpbiB2aWV3cG9ydCBzcGFj
ZS4gQ29udmVydCB0byBsYXllciBzcGFjZQorICAgIC8vIHNvIHRoYXQgaW52YWxpZGF0aW9ucyBh
bmQgc2Nyb2xsIGludmFsaWRhdGlvbnMgcGxheSB3ZWxsIHdpdGggb25lLWFub3RoZXIKKyAgICBB
U1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICAKKyAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1l
ID0gbWFpbkZyYW1lSW1wbCgpOworICAgIGlmICghd2ViZnJhbWUpCisgICAgICAgIHJldHVybjsK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CisgICAgaWYgKCF2
aWV3KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgIEZsb2F0UmVjdCBsc1Jl
Y3QocmVjdC54ICsgdmlldy0+c2Nyb2xsWCgpLAorICAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
eSArIHZpZXctPnNjcm9sbFkoKSwKKyAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoLCBy
ZWN0LmhlaWdodCk7CisgICAgCisgICAgLy8gVE9ETzogYWRkIGEgc21hcnRlciBkYW1hZ2UgYWdn
cmVnYXRpb24gbG9naWM/IFJpZ2h0IG5vdywgTGF5ZXJDaHJvbWl1bSBkb2VzIHNpbXBsZSB1bmlv
bi1pbmcKKyAgICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpLT5zZXROZWVkc0Rpc3BsYXko
bHNSZWN0KTsKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKy8v
IFdlYldpZGV0IG1ldGhvZAordm9pZCBXZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkt
PnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsK
KyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIFdlYlJlY3QgZGFtYWdlZFJlY3QoMCwgMCwg
bV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKKyAgICAgICAgbV9jbGllbnQtPmRpZEludmFs
aWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmNv
bXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisgICAgZG9Db21wb3NpdGUoMCwgZmluaXNoKTsKKyNlbmRpZgorfQorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKFdlYkNhbnZh
cyogY2FudmFzLCBib29sIGZpbmlzaCkKK3sKKyAgICBBU1NFUlQoaXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlKCkpOworICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJ
bXBsKCk7CisgICAgaWYgKCF3ZWJmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmll
dyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBpbmNsdWRlcyBzY3JvbGxiYXJzIHdo
ZXJlYXMgdGhlIGNvbnRlbnRSZWN0IGRvZXNuJ3QuCisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9
IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0
ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKKyAgICBJbnRSZWN0IHZpZXdwb3J0
ICAgID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworCisgICAg
Ly8gR2l2ZSB0aGUgY29tcG9pc2l0b3IgYSBjaGFuY2UgdG8gc2V0dXAvcmVzaXplIHRoZSByb290
IHRleHR1cmUgaGFuZGxlIGFuZCBwZXJmb3JtIHNjcm9sbGluZworICAgIG1fbGF5ZXJSZW5kZXJl
ci0+cHJlcGFyZVRvRHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIEludFBvaW50
KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7CisKKyAgICAvLyBEcmF3IHRoZSBj
b250ZW50cyBvZiB0aGUgcm9vdCBsYXllcgorICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRhbWFnZVJl
Y3RzOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChGbG9hdFJlY3QobV9zY3JvbGxEYW1hZ2UueCwg
bV9zY3JvbGxEYW1hZ2UueSwgbV9zY3JvbGxEYW1hZ2Uud2lkdGgsIG1fc2Nyb2xsRGFtYWdlLmhl
aWdodCkpOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChtX2xheWVyUmVuZGVyZXItPnJvb3RMYXll
cigpLT5kaXJ0eVJlY3QoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYW1hZ2VSZWN0
cy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyB0aGUgZGFtYWdlIHJlY3RzIGZvciB0aGUgcm9v
dCBsYXllciBpcyBpbiBsYXllciBzcGFjZSBbZS5nLiB1bnNjcm9sbGVkLl0KKyAgICAgICAgLy8g
Y29udmVydCBmcm9tIGxheWVyIHNwYWNlIHRvIHZpZXdwb3J0IHNwYWNlCisgICAgICAgIGNvbnN0
IEZsb2F0UmVjdCBzc1JlY3QgPSBkYW1hZ2VSZWN0c1tpXTsKKyAgICAgICAgRmxvYXRSZWN0IHJl
Y3Qoc3NSZWN0LngoKSAtIHZpZXctPnNjcm9sbFgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
c3NSZWN0LnkoKSAtIHZpZXctPnNjcm9sbFkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3NS
ZWN0LndpZHRoKCksIHNzUmVjdC5oZWlnaHQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBpbnRl
cnNlY3QgdGhpcyByZWN0YW5nbGUgd2l0aCB0aGUgdmlld3BvcnQKKyAgICAgICAgcmVjdC5pbnRl
cnNlY3Qodmlld3BvcnQpOworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8vIG5vdyByZW5k
ZXIgaXQKKyAgICAgICAgV2ViUmVjdCB3cmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmICh3cmVjdC53aWR0aCAmJiB3cmVjdC5o
ZWlnaHQpIHsKKyAgICAgICAgICAgIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKHdyZWN0KTsKKyAg
ICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3Qod3Jl
Y3QpOworICAgICAgICB9CisgICAgfQorICAgIG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCkt
PnJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9zY3JvbGxEYW1hZ2UgPSBXZWJSZWN0KCk7Cisg
ICAgICAgIAorICAgIC8vIERyYXcgdGhlIGFjdHVhbCBsYXllcnMuLi4KKyAgICBtX2xheWVyUmVu
ZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKworICAgIC8vIHJl
YWRiYWNrIGludG8gdGhlIGNhbnZhcywgaWYgcmVxdWVzdGVkCisgICAgLy8gRklYTUUgSW5zZXJ0
IHdqbWFjbGVhbidzIHJlYWRiYWNrIGNvZGUgaGVyZSBmb3Igd2Via2l0IGJ1ZyA0NDEyNworICAg
IAorICAgIC8vIGZpbmlzaCBpZiByZXF1ZXN0ZWQKKyAgICAvLyBGSVhNRTogaGFuZGxlIGZpbmlz
aCBmbGFnCisgICAgCisgICAgLy8gd2UncmUgZG9uZS4uLiBwdXQgcmVzdWx0IG9uc2NyZWVuCisg
ICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisKKyAgICAvLyB0ZWxsIHRoZSBicm93c2Vy
IHRoYXQgdGhlIHJlbmRlcmluZyBpcyBkb25lIC0tLQorICAgIC8vIFRPRE86IHRoaXMgaXMgYmVp
bmcgY2FsbGVkIHRvbyBlYXJseSwgd2UgbmVlZCB0byBkZWZlciBjYWxsaW5nIHRoaXMgCisgICAg
Ly8gICAgICAgdW50aWwgdGhlIHN3YXBidWZmZXJzIGl0c2VsZiBoYXMgZXhlY3V0ZWQgb24gdGhl
IEdQVS4KKyAgICAvLyBtX2NsaWVudC0+b25Db21wb3NpdGVDb21wbGV0ZSgpOworfQorI2VuZGlm
CisKKwogUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdlYlZpZXdJbXBsOjpnZXRPbnNjcmVlbkdM
RVMyQ29udGV4dCgpCiB7CiAgICAgcmV0dXJuIEdMRVMyQ29udGV4dDo6Y3JlYXRlKEdMRVMyQ29u
dGV4dEludGVybmFsOjpjcmVhdGUoZ2xlczJDb250ZXh0KCksIGZhbHNlKSk7CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKaW5kZXggYzI5NjEyMTIzZjQ1MTRjOTRkZDdkOTcwYzczMTE0YTRiZWVl
YzM1NS4uYmNkNGY0NmQ4N2YxYTVmYzNkNmZkNjRmMzVhOTJkYmRjNjk2MDI4NiAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldlYkdMRVMy
Q29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25Qb2xpY3kuaCIKICNpbmNsdWRlICJX
ZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJTaXplLmgiCiAj
aW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVmlldy5oIgpAQCAtOTIsNiArOTMs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7CiAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52
YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOwogICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZv
aWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sIGVu
YWJsZSk7CkBAIC0zMjIsNiArMzI1LDkgQEAgcHVibGljOgogICAgIH0KIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGRvQ29tcG9zaXRlKFdlYkNhbnZhcyosIGJv
b2wgZmluaXNoKTsKKyAgICB2b2lkIHNjcm9sbFJvb3RMYXllcihjb25zdCBXZWJTaXplJiBzY3Jv
bGxEZWx0YSwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3QpOworICAgIHZvaWQgaW52YWxpZGF0ZVJv
b3RMYXllclJlY3QoY29uc3QgV2ViUmVjdCYpOwogICAgIHZvaWQgc2V0Um9vdExheWVyTmVlZHNE
aXNwbGF5KCk7CiAgICAgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9y
bUxheWVyKik7CiAjZW5kaWYKQEAgLTUxMCw2ICs1MTYsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxXZWJDb3JlOjpOb2RlPiBtX21vdXNlQ2FwdHVyZU5vZGU7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgV2ViUmVjdCBtX3Njcm9sbERhbWFnZTsKICAgICBPd25QdHI8
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgYm9v
bCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCmluZGV4IDUwMzE5YWYyM2IwYTkyZjQ0YzkxNThlZmIz
ZTY0NjE4MjM5ODFkMTAuLmFlZjI5Y2YyZDA0MTI0YjRjODdlZjA3YTJlNWYzODUwOTY3ODJiNjgg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKQEAgLTEyOCw2ICsxMjgs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludChX
ZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hh
bmdlZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpIHsgfQog
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKSB7
IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCkgeyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66768</attachid>
            <date>2010-09-07 14:55:29 -0700</date>
            <delta_ts>2010-09-07 18:19:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100907145523.patch</filename>
            <type>text/plain</type>
            <size>35831</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTY4NTM3NTQ4M2Q3YjViYTgwYjA4OTY2ZmQyZjI2ZGZlY2FjYmJlMy4uYjVlNzQ2N2FjZmVlZDZi
NTM2MjVjNDQ1NDYzZTA2MWEyZTM0NGFjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wNiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNjUxOWYxZmYyYmExODI2ZjJlMjg1OTYy
YjAzODE3MTJhNDZlOWRjYy4uOTJlYzQ5YjVjYzdmN2ZmOGI2MzdiNmQzMGExMjRhMTRkYzBiYzNi
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCkBAIC0yOTksMTAgKzI5OSwxNSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNl
dEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmIChtX2JvdW5kcyA9PSBzaXplKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBib29sIGZpcnN0UmVzaXplID0gIW1fYm91bmRzLndpZHRo
KCkgJiYgIW1fYm91bmRzLmhlaWdodCgpICYmIHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgp
OworICAgIAogICAgIG1fYm91bmRzID0gc2l6ZTsKICAgICBtX2JhY2tpbmdTdG9yZVNpemUgPSBz
aXplOwogCi0gICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICBpZiAoZmlyc3RSZXNpemUpCisgICAg
ICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJlY3QoMCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9i
b3VuZHMuaGVpZ2h0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9
CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpA
QCAtMzExLDcgKzMxNiw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgICAgcmV0dXJuOwogCiAgICAgbV9mcmFtZSA9IHJlY3Q7Ci0gICAg
c2V0TmVlZHNDb21taXQoKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1f
Ym91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpKSk7CiB9CiAKIGNvbnN0IExheWVyQ2hy
b21pdW0qIExheWVyQ2hyb21pdW06OnJvb3RMYXllcigpIGNvbnN0CkBAIC0zNTMsNyArMzU4LDYg
QEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBk
aXJ0eVJlY3QpCiAgICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIAogICAgIG1fZGlydHlSZWN0
LnVuaXRlKGRpcnR5UmVjdCk7Ci0KICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCkBAIC0zNjMs
NiArMzY3LDEyIEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKICAgICBt
X2NvbnRlbnRzRGlydHkgPSB0cnVlOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnJlc2V0TmVl
ZHNEaXNwbGF5KCkKK3sKKyAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOworICAgIG1fY29u
dGVudHNEaXJ0eSA9IGZhbHNlOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnRvR0xNYXRyaXgo
ZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiB7CiAgICAg
ZmxhdHRlbmVkWzBdID0gbS5tMTEoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggYmExNTA4ODQ0YmEzNWIzNDUxZjgyY2Q1
ODlhNjUzOTc2NTIxYTA4Yy4uMmQyMjVkYWY1YTIwNzFiYWJmZWJkNmE3Y2YzY2MwNWUyNmIzOTA4
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKQEAgLTExMiw2ICsxMTIsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE5lZWRz
RGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCk7CiAgICAgdm9pZCBzZXROZWVkc0Rp
c3BsYXkoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlydHlSZWN0OyB9CisgICAgdm9pZCByZXNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShib29sIG5lZWRzRGlzcGxheSkgeyBtX25l
ZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlID0gbmVlZHNEaXNwbGF5OyB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAppbmRleCA3ODkyOThhZWQ4Y2U5NzYzMDIwY2ZlMGFlMjI0OGUzNzMzZGYyYzhj
Li4wYTk2NWM5M2RiNGU1NWVhMDlmZTczMTlhZmNjZTNhMTllMjA3ZTEzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCkBAIC0xNTksOCArMTU5LDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVNoYWRlcih1bnNpZ25lZCBwcm9ncmFtSWQpCiAKIC8vIFVwZGF0ZXMgdGhlIGNvbnRl
bnRzIG9mIHRoZSByb290IGxheWVyIHRleHR1cmUgdGhhdCBmYWxsIGluc2lkZSB0aGUgdXBkYXRl
UmVjdAogLy8gYW5kIHJlLWNvbXBvc2l0cyBhbGwgc3VibGF5ZXJzLgotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3Qg
SW50UmVjdCYgdmlzaWJsZVJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBv
c2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMo
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0
aW5nKTsKIApAQCAtMjAwLDE0ICsyMDAsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAg
ICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwogCiAgICAgSW50UG9pbnQg
c2Nyb2xsRGVsdGEgPSB0b1BvaW50KHNjcm9sbFBvc2l0aW9uIC0gbV9zY3JvbGxQb3NpdGlvbik7
Ci0gICAgLy8gU2Nyb2xsIG9ubHkgd2hlbiB0aGUgdXBkYXRlUmVjdCBjb250YWlucyBwaXhlbHMg
Zm9yIHRoZSBuZXdseSB1bmNvdmVyZWQgcmVnaW9uIHRvIGF2b2lkIGZsYXNoaW5nLgotICAgIGlm
ICgoc2Nyb2xsRGVsdGEueCgpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA+PSBhYnMoc2Nyb2xsRGVs
dGEueCgpKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID49IGNvbnRlbnRSZWN0LmhlaWdodCgpKQot
ICAgICAgICB8fCAoc2Nyb2xsRGVsdGEueSgpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gYWJz
KHNjcm9sbERlbHRhLnkoKSkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID49IGNvbnRlbnRSZWN0Lndp
ZHRoKCkpKSB7CisgICAgLy8gU2Nyb2xsIHRoZSBiYWNrYnVmZmVyCisgICAgaWYgKHNjcm9sbERl
bHRhLngoKSB8fCBzY3JvbGxEZWx0YS55KCkpIHsKICAgICAgICAgLy8gU2Nyb2xsaW5nIHdvcmtz
IGFzIGZvbGxvd3M6IFdlIHJlbmRlciBhIHF1YWQgd2l0aCB0aGUgY3VycmVudCByb290IGxheWVy
IGNvbnRlbnRzCiAgICAgICAgIC8vIHRyYW5zbGF0ZWQgYnkgdGhlIGFtb3VudCB0aGUgcGFnZSBo
YXMgc2Nyb2xsZWQgc2luY2UgdGhlIGxhc3QgdXBkYXRlIGFuZCB0aGVuIHJlYWQgdGhlCiAgICAg
ICAgIC8vIHBpeGVscyBvZiB0aGUgY29udGVudCBhcmVhICh2aXNpYmxlIGFyZWEgZXhjbHVkaW5n
IHRoZSBzY3JvbGwgYmFycykgYmFjayBpbnRvIHRoZQotICAgICAgICAvLyByb290IGxheWVyIHRl
eHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEgaXMgc3ViZXNxdWVudGx5IGZpbGxlZCBhcyB1
c3VhbCB3aXRoCi0gICAgICAgIC8vIHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlUmVjdC4KKyAg
ICAgICAgLy8gcm9vdCBsYXllciB0ZXh0dXJlLiBUaGUgbmV3bHkgZXhwb3NlZCBhcmVhIHdpbGwg
YmUgZmlsbGVkIGJ5IGEgc3Vic2VxdWVudCBkcmF3TGF5ZXJzSW50b1JlY3QgY2FsbAogICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGxlZExheWVyTWF0cml4OwogI2lmIFBMQVRGT1JN
KFNLSUEpCiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZjsKQEAgLTIzNyw0MyArMjM1
LDY2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgICAgIC8vIG5vIG5lZWQgdG8gY29w
eSBmcmFtZWJ1ZmZlciBwaXhlbHMgYmFjayBpbnRvIHRoZSB0ZXh0dXJlLgogICAgICAgICBtX3Nj
cm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAgICAgfQorICAgIAorICAgIC8vIFRyYW5z
bGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24uCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC50cmFuc2xhdGUzZCgt
bV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7CiAKLSAgICAv
LyBGSVhNRTogVGhlIGZvbGxvd2luZyBjaGVjayBzaG91bGQgZ28gYXdheSB3aGVuIHRoZSBjb21w
b3NpdG9yIHJlbmRlcnMgaW5kZXBlbmRlbnRseSBmcm9tIGl0cyBvd24gdGhyZWFkLgotICAgIC8v
IElnbm9yZSBhIDF4MSB1cGRhdGUgcmVjdCBhdCAoMCwgMCkgYXMgdGhhdCdzIHVzZWQgYSB3YXkg
dG8ga2ljayBvZmYgYSByZWRyYXcgZm9yIHRoZSBjb21wb3NpdG9yLgotICAgIGlmICghKCF1cGRh
dGVSZWN0LngoKSAmJiAhdXBkYXRlUmVjdC55KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID09IDEg
JiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA9PSAxKSkgewotICAgICAgICAvLyBVcGRhdGUgdGhlIHJv
b3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAgICAgQVNTRVJUKCh1cGRhdGVSZWN0LngoKSArIHVwZGF0
ZVJlY3Qud2lkdGgoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKLSAgICAgICAgICAgICAg
ICYmICh1cGRhdGVSZWN0LnkoKSArIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPD0gbV9yb290TGF5ZXJU
ZXh0dXJlSGVpZ2h0KSk7CisgICAgLy8gVHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgYW5kIHVwZGF0
ZSB0aGUgbGF5ZXIgdHJhbnNmb3Jtcy4KKyAgICBmbG9hdCBvcGFjaXR5ID0gMTsKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9vdExheWVy
LT5nZXRTdWJsYXllcnMoKTsKKyAgICBzaXplX3QgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3Vi
bGF5ZXJzLnNpemUoKTsgaSsrKQorICAgICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5
ZXJzW2ldLmdldCgpLCBtYXRyaXgsIG9wYWNpdHkpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRl
UmVjdCkKK3sKKyAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIAorICAgIGlmICgh
bV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdMQyhnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CisKKyAgICAvLyBVcGRhdGUgdGhl
IHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBBU1NFUlQoKHVwZGF0ZVJlY3QucmlnaHQoKSAgPD0g
bV9yb290TGF5ZXJUZXh0dXJlV2lkdGgpCisgICAgICAgICAgICYmICh1cGRhdGVSZWN0LmJvdHRv
bSgpIDw9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkpOworICAgIAogI2lmIFBMQVRGT1JNKFNL
SUEpCi0gICAgICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAg
ICAgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52YXMtPmdldERldmlj
ZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgICAgICBpbnQgcm9vdExheWVyV2lkdGggPSBi
aXRtYXAud2lkdGgoKTsKLSAgICAgICAgaW50IHJvb3RMYXllckhlaWdodCA9IGJpdG1hcC5oZWln
aHQoKTsKLSAgICAgICAgQVNTRVJUKHJvb3RMYXllcldpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgo
KSAmJiByb290TGF5ZXJIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHZv
aWQqIHBpeGVscyA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBj
b250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0g
ICAgICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54
KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0
KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOworICAgIC8vIEdldCB0aGUg
Y29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCBiaXRtYXAg
PSBtX3Jvb3RMYXllckNhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Cisg
ICAgaW50IGJpdG1hcFdpZHRoID0gYml0bWFwLndpZHRoKCk7CisgICAgaW50IGJpdG1hcEhlaWdo
dCA9IGJpdG1hcC5oZWlnaHQoKTsKKyAgICBBU1NFUlQoYml0bWFwV2lkdGggPT0gdXBkYXRlUmVj
dC53aWR0aCgpICYmIGJpdG1hcEhlaWdodCA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKKyAgICB2
b2lkKiBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7CisgICAgLy8gQ29weSB0aGUgY29udGVu
dHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgorICAgIEdM
QyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0
ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAg
ICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJD
R0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50
PihDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9
PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5
ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwotCi0gICAgICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9m
IHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAgICAgLy8g
VGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGlu
YXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCi0gICAgICAgIEdM
QyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGRhdGVSZWN0LngoKSwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0IC0gdXBkYXRl
UmVjdC55KCkgLSB1cGRhdGVSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAg
ICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCisgICAgLy8gQVNTRVJU
KHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJDR0Nv
bnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihD
R0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1
cGRhdGVSZWN0LmhlaWdodCgpKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RMYXllckJhY2tp
bmdTdG9yZS5kYXRhKCk7CisKKyAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRl
ZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgLy8gVGhlIG9yaWdpbiBpcyBh
dCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGluYXRlIHN5c3RlbS4gV2Ug
bmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCisgICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC54KCks
IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRlUmVjdC5o
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBk
YXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQg
Zm9yIHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCi0gICAgfQorfQogCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGlu
Zyk7CisgICAgCiAgICAgZ2xDbGVhckNvbG9yKDAsIDAsIDEsIDEpOwogICAgIGdsQ2xlYXIoR0xf
Q09MT1JfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpOwotCisgICAgCisgICAgR0xD
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKyAg
ICAKICAgICAvLyBSZW5kZXIgdGhlIHJvb3QgbGF5ZXIgdXNpbmcgYSBxdWFkIHRoYXQgdGFrZXMg
dXAgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEgb2YgdGhlIHdpbmRvdy4KICAgICAvLyBXZSByZXVz
ZSB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCBieSBDb250ZW50TGF5ZXJDaHJvbWl1bS4KICAgICBj
b25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5ZXJWYWx1
ZXMgPSBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKQEAgLTI5Nyw2ICszMTgsOSBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVS
ZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhnbEVuYWJsZShHTF9CTEVORCkpOwogICAgIEdM
QyhnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKIAorICAgIC8v
IFNldCB0aGUgcm9vdFZpc2libGVSZWN0IC0tLSB1c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xheWVy
cyBjYWxscworICAgIG1fcm9vdFZpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7CisgICAgCiAgICAg
Ly8gVHJhbnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9sbCBwb3Np
dGlvbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5z
bGF0ZTNkKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsK
QEAgLTMwOCwxMSArMzMyLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgZm9yIChp
ID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKICAgICAgICAgdXBkYXRlTGF5ZXJzUmVj
dXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgbWF0cml4LCBvcGFjaXR5KTsKIAotICAgIG1fcm9v
dFZpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7Ci0KICAgICAvLyBFbmFibGUgc2Npc3NvcmluZyB0
byBhdm9pZCByZW5kZXJpbmcgY29tcG9zaXRlZCBsYXllcnMgb3ZlciB0aGUgc2Nyb2xsYmFycy4K
ICAgICBHTEMoZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKSk7CiAgICAgRmxvYXRSZWN0IHNjaXNz
b3JSZWN0KGNvbnRlbnRSZWN0KTsKKwogICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90
IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQuCiAgICAgc2Npc3NvclJlY3QubW92ZSgtbV9zY3Jv
bGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSk7CiAgICAgc2Npc3NvclRvUmVj
dChzY2lzc29yUmVjdCk7CkBAIC0zMjMsMTMgKzM0NiwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRS
ZWN0JgogICAgIEdMQyhnbFN0ZW5jaWxNYXNrKDApKTsKIAogICAgIC8vIFRyYXZlcnNlIHRoZSBs
YXllciB0cmVlIG9uZSBtb3JlIHRpbWUgdG8gZHJhdyB0aGUgbGF5ZXJzLgotICAgIGZvciAoaSA9
IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3Vi
bGF5ZXJzW2ldLmdldCgpLCBzY2lzc29yUmVjdCk7CiAKICAgICBHTEMoZ2xEaXNhYmxlKEdMX1ND
SVNTT1JfVEVTVCkpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgp
Cit7CisgICAgLy8gV2UncmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVycyEKICAgICBtX2dsZXMy
Q29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLQogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDhmNDRhZmViZDBhMmM3YjQ3NWQwNGJhNDg3MjNm
MWNkYzU0NTUwOTEuLjE1Y2YzMWFiZDQ2MjUyMzMzNTg0ZjRmNDZkYzI1MjczNjgyNzJhYTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNjEsOSArNjEsMTcgQEAgcHVibGljOgogICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bShQYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gZ2xlczJDb250ZXh0KTsK
ICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKLSAgICAvLyBVcGRhdGVzIHRoZSBjb250
ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0IGFu
ZCByZWNvbXBvc2l0ZXMKLSAgICAvLyBhbGwgdGhlIGxheWVycy4KLSAgICB2b2lkIGRyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pOworICAgIC8vIHVwZGF0ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5k
IHNjcm9sbHMgdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIHByZXBhcmVUb0RyYXdMYXllcnMoY29u
c3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIAorICAgIC8vIHVwZGF0ZXMgYSByZWN0
YW5nbGUgd2l0aGluIHRoZSByb290IGxheWVyIHRleHR1cmUKKyAgICB2b2lkIHVwZGF0ZVJvb3RM
YXllclRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOworCisgICAgLy8gZHJh
d3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIGRyYXdM
YXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KTsKKworICAgIC8vIHB1dHMgYmFja2J1ZmZlciBvbnNjcmVlbgorICAgIHZvaWQgcHJlc2Vu
dCgpOwogCiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBs
YXllcikgeyBtX3Jvb3RMYXllciA9IGxheWVyOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGMwNzY5
MDFhNjM1ZTI1YWIyMzdkNDdhNDI3ZTc0ZTQ2YTY3MjljYTYuLmYzYTNmN2JhNDcwMDlhOGNmMDQ3
MmFiZmY1YWYxNWVjMWI0OWE3MWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEw
LTA5LTA3IE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0ZWQgQ29t
cG9zaXRpbmc6IHNjcmVlbiBnYXJiYWdlIHdoZW4gc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA5MgorCisgICAgICAgIEludHJvZHVj
ZSBhIG5ldyBBUEkgb24gV2ViV2lkZ2V0IGZvciBwYWludGluZyB3aXRoIGFjY2VsZXJhdGVkCisg
ICAgICAgIGNvbXBvc2l0aW5nIHRoYXQgYWxsb3dzIHRoZSBjb21wb3NpdG9yIHRvIHByb3Blcmx5
IGRpc3RpbmdpdXNoCisgICAgICAgIHNjcm9sbGluZywgaW52YWxpZGF0aW9uIGFuZCByZXBhaW50
aW5nIGZyb20gb25lIGFub3RoZXIuIFRoZSBrZXkKKyAgICAgICAgY2hhbmdlIGlzIHRoYXQgaW4g
YWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGNhc2UsIGludmFsaWRhdGVzIGFuZAorICAgICAgICBzY3Jv
bGxpbmcgcGFzcyBkaXJlY3RseSB0byB0aGUgY29tcG9zaXRvciwgcmF0aGVyIHRoYW4gcGFzc2lu
ZyB1cAorICAgICAgICB0byB0aGUgY2xpZW50IGFzIHdhcyB0aGUgY2FzZSBpbiB0aGUgc29mdHdh
cmUgcGF0aC4gRm9yCisgICAgICAgIGFjY2VsZXJhdGVkIHJlbmRlcmluZywgdGhlIHByZXZpb3Vz
IHBhaW50KCkgbWV0aG9kIGlzIHJlcGxhY2VkIGJ5CisgICAgICAgIGEgcGFpciBvZiBtZXRob2Rz
OiBwYWludENvbXBvc2l0ZWQgYW5kCisgICAgICAgIGludmFsaWRhdGVDb21wb3NpdGVkUm9vdExh
eWVyUmVjdC4KKworCisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAgICAgICAqIHB1
YmxpYy9XZWJXaWRnZXRDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2lkZ2V0Q2xpZW50
OjpzY2hlZHVsZURlZmVycmVkQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVD
b250ZW50c0FuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNj
cm9sbCk6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVw
TWVudUltcGw6OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OnBhaW50Q29tcG9zaXRlZCk6CisgICAgICAgICogc3Jj
L1dlYlBvcHVwTWVudUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RH
cmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1
cGRhdGVSb290TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
ZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2Nyb2xsUm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmludmFsaWRh
dGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpwYWludENvbXBvc2l0ZWQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAg
ICAqIHRlc3RzL1BvcHVwTWVudVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpUZXN0V2ViV2lk
Z2V0OjppbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpUZXN0V2ViV2lkZ2V0OjpwYWludENvbXBvc2l0ZWQpOgorCiAyMDEwLTA5LTA2ICBKb25hdGhh
biBEaXhvbiAgPGpvdGhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVt
eSBPcmxvdy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IDVjOWY1NGU3OTM2NmI4
M2FmZWU3YzBlMWUzYTMyODhjMzQ0MTJjYTkuLmI3NTdiZjY2ZDY1NGEyNDFlNDQ3M2QyYThlNTUw
MjMxYWZhODE2NzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNTksMTUgKzU5
LDI4IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgdG8gbGF5b3V0IHRoZSBXZWJXaWRnZXQuICBU
aGlzIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSBQYWludCwKICAgICAvLyBhbmQgaXQgbWF5IHJlc3Vs
dCBpbiBjYWxscyB0byBXZWJXaWRnZXRDbGllbnQ6OmRpZEludmFsaWRhdGVSZWN0LgogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7Ci0KLSAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHNw
ZWNpZmllZCByZWdpb24gb2YgdGhlIFdlYldpZGdldCBvbnRvIHRoZSBnaXZlbgotICAgIC8vIGNh
bnZhcy4gIFlvdSBNVVNUIGNhbGwgTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAg
SXQgaXMKLSAgICAvLyBva2F5IHRvIGNhbGwgcGFpbnQgbXVsdGlwbGUgdGltZXMgb25jZSBsYXlv
dXQgaGFzIGJlZW4gY2FsbGVkLAotICAgIC8vIGFzc3VtaW5nIG5vIG90aGVyIGNoYW5nZXMgYXJl
IG1hZGUgdG8gdGhlIFdlYldpZGdldCAoZS5nLiwgb25jZQotICAgIC8vIGV2ZW50cyBhcmUgcHJv
Y2Vzc2VkLCBpdCBzaG91bGQgYmUgYXNzdW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0bwotICAgIC8v
IGxheW91dCBpcyB3YXJyYW50ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpID0gMDsKLQorICAgIAorICAg
IC8vIENhbGxlZCB0byBwYWludCB0aGUgcmVjdGFuZ3VsYXIgcmVnaW9uICJ2aWV3cG9ydCIgd2l0
aGluIHRoZSBXZWJXaWRnZXQgCisgICAgLy8gb250byB0aGUgc3BlY2lmaWVkIGNhbnZhcyBhdCAo
dmlld3BvcnQueCx2aWV3cG9ydC55KS4gWW91IE1VU1QgY2FsbAorICAgIC8vIExheW91dCBiZWZv
cmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlzIG9rYXkgdG8gY2FsbCBwYWludAorICAgIC8v
IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhhcyBiZWVuIGNhbGxlZCwgYXNzdW1pbmcgbm8g
b3RoZXIKKyAgICAvLyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9u
Y2UgZXZlbnRzIGFyZQorICAgIC8vIHByb2Nlc3NlZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhh
dCBhbm90aGVyIGNhbGwgdG8gbGF5b3V0IGlzCisgICAgLy8gd2FycmFudGVkIGJlZm9yZSBwYWlu
dGluZyBhZ2FpbikuCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdl
YlJlY3QmIHZpZXdwb3J0KSA9IDA7CisgICAgCisgICAgLy8gVHJpZ2dlcnMgY29tcG9zaXRpbmcg
b2YgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIHNjcmVlbi4KKyAgICAvLyBUaGUgZmluaXNo
IGFyZ3VtZW50IGNvbnRyb2xzIHdoZXRoZXIgdGhlIGNvbXBvc2l0b3Igd2lsbCB3YWl0aW5nIGZv
ciB0aGUKKyAgICAvLyBHUFUgdG8gZmluaXNoIHJlbmRlcmluZyBiZWZvcmUgcmV0dXJuaW5nLiBZ
b3UgTVVTVCBjYWxsIExheW91dAorICAgIC8vIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBm
b3IgdGhlIHNhbWUgcmVhc29ucyBkZXNjcmliZWQgaW4KKyAgICAvLyB0aGUgcGFpbnQgbWV0aG9k
IGFib3ZlLgorICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpID0gMDsKKwor
ICAgIC8vIENhbGxlZCB0byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhIGNoYW5nZSBpbiBuYXRp
dmUgd2lkZ2V0IHNldHRpbmdzLgorICAgIC8vIEltcGxlbWVudG9ycyB0aGF0IGNhY2hlIHJlbmRl
cmVkIGNvcGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCisgICAgLy8gb24gcmVjZWl2
aW5nIHRoaXMgbWVzc2FnZQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKSA9IDA7Cisg
ICAgCiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0IG9mIGFuIGlucHV0IGV2
ZW50LiAgUmV0dXJucyB0cnVlIGlmCiAgICAgLy8gdGhlIGV2ZW50IGhhcyBiZWVuIHByb2Nlc3Nl
ZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNv
bnN0IFdlYklucHV0RXZlbnQmKSA9IDA7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYldpZGdldENsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRD
bGllbnQuaAppbmRleCBiZDdiZDZhNzRmY2JhZjM3MWRmM2U5YTZlNDEwYmVkYmYzNTkyMzIwLi5i
M2VlOWY1NmZkMTE0Nzc4N2IyZTQ2OTI1ZjBkZTQ1MWQ5YWM0NTFiIDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgKQEAgLTQ1LDcgKzQ1LDEwIEBAIGNsYXNzIFdlYldp
ZGdldENsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSByZWdpb24gb2YgdGhl
IFdlYldpZGdldCBuZWVkcyB0byBiZSByZS1wYWludGVkLgogICAgIHZpcnR1YWwgdm9pZCBkaWRJ
bnZhbGlkYXRlUmVjdChjb25zdCBXZWJSZWN0JikgeyB9Ci0KKyAgICAKKyAgICAvLyBDYWxsZWQg
d2hlbiBhIGNhbGwgdG8gV2ViV2lkZ2V0Ojpjb21wb3NpdGUgaXMgcmVxdWlyZWQKKyAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKyAgICAKICAgICAvLyBDYWxsZWQgd2hl
biBhIHJlZ2lvbiBvZiB0aGUgV2ViV2lkZ2V0LCBnaXZlbiBieSBjbGlwUmVjdCwgc2hvdWxkIGJl
CiAgICAgLy8gc2Nyb2xsZWQgYnkgdGhlIHNwZWNpZmllZCBkeCBhbmQgZHkgYW1vdW50cy4KICAg
ICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsUmVjdChpbnQgZHgsIGludCBkeSwgY29uc3QgV2ViUmVj
dCYgY2xpcFJlY3QpIHsgfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAK
aW5kZXggOGEzZWRhNjY2NmNiNTVhMmFjMDAzZDY5N2M2NjEyZWY4OTZkYmFmYy4uODE4NGE0MGQx
MmQwMjgzNTJjNzVmMDJkMDUzYmE4NDQ2NTJhNzYzNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuY3BwCkBAIC00OTMsOCArNDkzLDE2IEBAIHZvaWQgQ2hyb21lQ2xpZW50
SW1wbDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QsIGJvCiB7CiAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCi0gICAgICAgIG1fd2ViVmlldy0+Y2xpZW50
KCktPmRpZEludmFsaWRhdGVSZWN0KHVwZGF0ZVJlY3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBpZiAoIW1fd2ViVmlldy0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKCkpIHsKKyNlbmRpZgorICAgICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKKyAg
ICAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZEludmFsaWRhdGVSZWN0KHVwZGF0ZVJl
Y3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX3dlYlZpZXctPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KHVwZGF0ZVJlY3QpOworICAg
IH0KKyNlbmRpZgogfQogCiB2b2lkIENocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250ZW50
c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUp
CkBAIC01MDgsMTEgKzUxNiwxOSBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OnNjcm9sbCgKICAg
ICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBtX3dlYlZpZXctPmhpZGVQb3B1cHMo
KTsKLSAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkgewotICAgICAgICBpbnQgZHggPSBzY3Jv
bGxEZWx0YS53aWR0aCgpOwotICAgICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0YS5oZWlnaHQoKTsK
LSAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU2Nyb2xsUmVjdChkeCwgZHksIGNsaXBS
ZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKCFtX3dlYlZp
ZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjZW5kaWYKKyAgICAgICAg
aWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAgIGludCBkeCA9IHNjcm9sbERl
bHRhLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0YS5oZWlnaHQoKTsK
KyAgICAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBj
bGlwUmVjdCk7CisgICAgICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV93ZWJWaWV3LT5zY3JvbGxSb290TGF5ZXIoc2Nyb2xsRGVs
dGEsIGNsaXBSZWN0KTsKICAgICB9CisjZW5kaWYKIH0KIAogSW50UG9pbnQgQ2hyb21lQ2xpZW50
SW1wbDo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKaW5kZXggNzVkNmNjMTQzODI0YjdmNTkyOTEwMjli
NDI3Y2U5MjBjMjNlNDUzOS4uMGI4NDk4MDg5MzZhOWZiMzI3ZTlmMWJhODRhMjVmNTNiYjY3NDVj
ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCkBAIC0xNzQsNiAr
MTc0LDE1IEBAIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMs
IGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAgICAgfQogfQogCit2b2lkIFdlYlBvcHVwTWVudUltcGw6
OnRoZW1lQ2hhbmdlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KK3ZvaWQgV2ViUG9w
dXBNZW51SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKIGJvb2wgV2ViUG9wdXBNZW51SW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBX
ZWJJbnB1dEV2ZW50JiBpbnB1dEV2ZW50KQogewogICAgIGlmICghbV93aWRnZXQpCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCmluZGV4IGVkYmI0YWI1MGQ0MTZiMDNiN2JkMWE1
ZmNlODAwNTU2MDkxZWEyMjcuLjIyMWJhMDM4ZjJjNGM3MzZkNjc3ZmFiZmEzMjJlMDUxZjkwNDI2
NGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCkBAIC02Myw2ICs2Myw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZh
cyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVD
aGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CiAgICAg
dmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAg
IHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZv
Y3VzKGJvb2wgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggZjYz
YzkwODI1NjI2Y2IwNmNiYzZmMGE1YTM1ZjIyN2JiZDViZTc4Mi4uYTQwOTNkMDU5YWUzYWFlYjE2
Njk1NzU0M2YyM2Q2NmVkM2NmMGIwMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
QEAgLTkxMiw3ICs5MTIsMTIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNp
emUmIG5ld1NpemUpCiAKICAgICBpZiAobV9jbGllbnQpIHsKICAgICAgICAgV2ViUmVjdCBkYW1h
Z2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwotICAgICAgICBtX2Ns
aWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworICAgICAgICBpZiAoaXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChkYW1hZ2VkUmVjdCk7
CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFs
aWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkBAIC05NDYs
MzQgKzk1MSwxNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpsYXlvdXQoKQogCiB2b2lkIFdlYlZpZXdJ
bXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKLQor
ICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZSgpKSB7CisgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KHJlY3QpOworICAgICAg
ICBkb0NvbXBvc2l0ZShjYW52YXMsIGZhbHNlKTsKICNlbmRpZgorICAgIH0gZWxzZSB7CiAgICAg
ICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CiAgICAgICAgIGlm
ICh3ZWJmcmFtZSkKICAgICAgICAgICAgIHdlYmZyYW1lLT5wYWludChjYW52YXMsIHJlY3QpOwot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllci4KLSAgICAgICAgdXBkYXRlUm9v
dExheWVyQ29udGVudHMocmVjdCk7Ci0KLSAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9
IG1haW5GcmFtZUltcGwoKTsKLSAgICAgICAgaWYgKCF3ZWJmcmFtZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOwot
ICAgICAgICBpZiAoIXZpZXcpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gVGhl
IHZpc2libGVSZWN0IGluY2x1ZGVzIHNjcm9sbGJhcnMgd2hlcmVhcyB0aGUgY29udGVudFJlY3Qg
ZG9lc24ndC4KLSAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250
ZW50UmVjdCh0cnVlKTsKLSAgICAgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2li
bGVDb250ZW50UmVjdChmYWxzZSk7Ci0KLSAgICAgICAgLy8gQXNrIHRoZSBsYXllciBjb21wb3Np
dG9yIHRvIHJlZHJhdyBhbGwgdGhlIGxheWVycy4KLSAgICAgICAgQVNTRVJUKG1fbGF5ZXJSZW5k
ZXJlci0+aGFyZHdhcmVDb21wb3NpdGluZygpKTsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5k
cmF3TGF5ZXJzKHJlY3QsIHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwgSW50UG9pbnQodmlldy0+
c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkpKTsKICAgICB9Ci0jZW5kaWYKIH0KIAogLy8gRklY
TUU6IG1fY3VycmVudElucHV0RXZlbnQgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSBDaHJvbWVDbGll
bnQ6OnNob3coKSBjYW4KQEAgLTIxMTQsOSArMjEwMSwxNyBAQCBib29sIFdlYlZpZXdJbXBsOjph
bGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpCiB7CisgICAgYm9v
bCB3YXNBY3RpdmUgPSBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsKICAgICBzZXRJ
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUobGF5ZXIgPyB0cnVlIDogZmFsc2UpOwogICAg
IGlmIChtX2xheWVyUmVuZGVyZXIpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Um9vdExh
eWVyKGxheWVyKTsKKyAgICBpZiAod2FzQWN0aXZlICE9IG1faXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlKSB7CisgICAgICAgIFdlYlJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndp
ZHRoLCBtX3NpemUuaGVpZ2h0KTsKKyAgICAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlKSAKKyAgICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFnZWRS
ZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVS
ZWN0KGRhbWFnZWRSZWN0KTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKQEAgLTIxMjgsMTAgKzIxMjMs
NiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
Ym9vbCBhY3RpdmUpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y3JlYXRlKGdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCkpOwogICAgICAgICBpZiAobV9s
YXllclJlbmRlcmVyKSB7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVkcmF3
IHRoZSBlbnRpcmUgdmlldyBzbyB0aGF0IHRoZSBjb21wb3NpdG9yIGdldHMgdGhlIGVudGlyZSB2
aWV3LAotICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4ganVzdCB0aGUgY3VycmVudGx5LWRpcnR5
IHN1YnNldC4KLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChJbnRSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCkpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKICAg
ICAgICAgICAgIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkID0gdHJ1ZTsKQEAgLTIxNDcsMTIg
KzIxMzgsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25z
dCBXZWJSZWN0JiByZWN0KQogICAgIGlmICghaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBUaGUgYWNjZWxlcmF0ZWQgY29t
cG9zaXRpbmcgcGF0aCBpbnZhbGlkYXRlcyBhIDF4MSByZWN0IGF0ICgwLCAwKQotICAgIC8vIGlu
IG9yZGVyIHRvIGdldCB0aGUgcmVuZGVyZXIgdG8gYXNrIHRoZSBjb21wb3NpdG9yIHRvIHJlZHJh
dy4gVGhpcyBpcyBvbmx5Ci0gICAgLy8gdGVtcG9yYXJ5IHVudGlsIHdlIGdldCB0aGUgY29tcG9z
aXRvciB0byByZW5kZXIgZGlyZWN0bHkgZnJvbSBpdHMgb3duIHRocmVhZC4KLSAgICBpZiAoIXJl
Y3QueCAmJiAhcmVjdC55ICYmIHJlY3Qud2lkdGggPT0gMSAmJiByZWN0LmhlaWdodCA9PSAxKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1l
SW1wbCgpOwogICAgIGlmICghd2ViZnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMDQsMjEg
KzIxODksMTc2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNv
bnN0IFdlYlJlY3QmIHJlY3QpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRz
RGlzcGxheSgpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2UncmUgcG9zdGluZyBhIHJlcGFp
bnQgZXZlbnQgZm9yIHRoZSBlbnRpcmUgcGFnZSB3aGljaCBpcyBhbiBvdmVya2lsbC4KLSAgICBp
ZiAoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKSkgewotICAgICAgICBp
ZiAoRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpKSB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogVGVtcG9yYXJ5IGhhY2sgdG8gaW52YWxpZGF0ZSBwYXJ0IG9mIHRoZSBwYWdl
IHNvIHRoYXQgd2UgZ2V0IGNhbGxlZCB0byByZW5kZXIKLSAgICAgICAgICAgIC8vICAgICAgICBh
Z2Fpbi4KLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29u
dGVudFJlY3QodHJ1ZSk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3Qo
SW50UmVjdCgwLCAwLCAxLCAxKSk7CisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7
CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRO
ZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVyKGNv
bnN0IFdlYlNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBXZWJSZWN0JiBjbGlwUmVjdCkKK3sKKyAg
ICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICAvLyBDb21wdXRlIHRoZSBkYW1hZ2UgcmVj
dCBpbiB2aWV3cG9ydCBzcGFjZS4KKyAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZy
YW1lSW1wbCgpOworICAgIGlmICghd2ViZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFt
ZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2li
bGVDb250ZW50UmVjdChmYWxzZSk7CisKKyAgICAvLyBXZSBzdXBwb3J0IGZhc3Qgc2Nyb2xsaW5n
IGluIG9uZSBkaXJlY3Rpb24gYXQgYSB0aW1lLgorICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCAm
JiBzY3JvbGxEZWx0YS5oZWlnaHQpIHsKKyAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3Qo
V2ViUmVjdChjb250ZW50UmVjdCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IEZsb2F0UmVjdCBkYW1hZ2VkUmVjdDsKKyAgICAvLyBQdXQgdGhlIHZpZXdwb3J0UmVjdCBpbiBf
bGF5ZXIgc3BhY2VfIHByaW9yIHRvIHRoZSBzY3JvbGwgc2luY2UgdGhlIGxvZ2ljCisgICAgLy8g
YmVsb3cgZW1pdHMgZGFtYWdlIGluIHRoZSBzcGFjZSAiYmVmb3JlIiBzY3JvbGxpbmcuCisgICAg
Ly8gVXNpbmcgbGF5ZXIgc3BhY2UgZm9yIGRhbWFnZSByZWN0cyBhbGxvd3MgdXMgdG8gaW50ZXJt
aXggaW52YWxpZGF0ZXMgd2l0aCBzY3JvbGxzLgorICAgIEZsb2F0UmVjdCB2aWV3cG9ydFJlY3Qo
Y29udGVudFJlY3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFJlY3Qu
eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFJlY3Qud2lkdGgoKSwgY29u
dGVudFJlY3QuaGVpZ2h0KCkpOworICAgIAorICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiB3ZSB3
aWxsIGV4cG9zZSBieSBzY3JvbGxpbmcsIGFuZCBwYWludCB0aGF0IGludG8gYQorICAgIC8vIHNo
YXJlZCBtZW1vcnkgc2VjdGlvbi4KKyAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgpIHsKKyAgICAg
ICAgZmxvYXQgZHggPSAoZmxvYXQpc2Nyb2xsRGVsdGEud2lkdGg7CisgICAgICAgIGRhbWFnZWRS
ZWN0LnNldFkodmlld3BvcnRSZWN0LnkoKSk7CisgICAgICAgIGRhbWFnZWRSZWN0LnNldEhlaWdo
dCh2aWV3cG9ydFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBpZiAoZHggPiAwKSB7CisgICAgICAg
ICAgICBkYW1hZ2VkUmVjdC5zZXRYKHZpZXdwb3J0UmVjdC54KCkpOworICAgICAgICAgICAgZGFt
YWdlZFJlY3Quc2V0V2lkdGgoZHgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGFt
YWdlZFJlY3Quc2V0WCh2aWV3cG9ydFJlY3QucmlnaHQoKSArIGR4KTsKKyAgICAgICAgICAgIGRh
bWFnZWRSZWN0LnNldFdpZHRoKC1keCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBmbG9hdCBkeSA9IChmbG9hdClzY3JvbGxEZWx0YS5oZWlnaHQ7CisgICAgICAgIGRhbWFnZWRS
ZWN0LnNldFgodmlld3BvcnRSZWN0LngoKSk7CisgICAgICAgIGRhbWFnZWRSZWN0LnNldFdpZHRo
KHZpZXdwb3J0UmVjdC53aWR0aCgpKTsKKyAgICAgICAgaWYgKGR5ID4gMCkgeworICAgICAgICAg
ICAgZGFtYWdlZFJlY3Quc2V0WSh2aWV3cG9ydFJlY3QueSgpKTsKKyAgICAgICAgICAgIGRhbWFn
ZWRSZWN0LnNldEhlaWdodChkeSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYW1h
Z2VkUmVjdC5zZXRZKHZpZXdwb3J0UmVjdC5ib3R0b20oKSArIGR5KTsKKyAgICAgICAgICAgIGRh
bWFnZWRSZWN0LnNldEhlaWdodCgtZHkpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIC8v
IEZJWE1FOiBhZGQgYSBzbWFydGVyIGRhbWFnZSBhZ2dyZWdhdGlvbiBsb2dpYz8gUmlnaHQgbm93
LCBMYXllckNocm9taXVtIGRvZXMgc2ltcGxlIHVuaW9uLWluZy4KKyAgICBJbnRSZWN0IGlEYW1h
Z2VkUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgaURhbWFnZWRSZWN0LnVuaXRlKG1fc2Nyb2xsRGFt
YWdlKTsKKyAgICBtX3Njcm9sbERhbWFnZSA9IGlEYW1hZ2VkUmVjdDsKKyAgICBzZXRSb290TGF5
ZXJOZWVkc0Rpc3BsYXkoKTsKK30KK3ZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5
ZXJSZWN0KGNvbnN0IFdlYlJlY3QmIHJlY3QpCit7CisgICAgLy8gcmVjdCBpcyBpbiB2aWV3cG9y
dCBzcGFjZS4gQ29udmVydCB0byBsYXllciBzcGFjZQorICAgIC8vIHNvIHRoYXQgaW52YWxpZGF0
aW9ucyBhbmQgc2Nyb2xsIGludmFsaWRhdGlvbnMgcGxheSB3ZWxsIHdpdGggb25lLWFub3RoZXIu
CisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgCisgICAgV2ViRnJhbWVJbXBsKiB3
ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKKyAgICBpZiAoIXdlYmZyYW1lKQorICAgICAgICBy
ZXR1cm47CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOworICAg
IGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikK
LSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBGbG9hdFJl
Y3QgbHNSZWN0KHJlY3QueCArIHZpZXctPnNjcm9sbFgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICByZWN0LnkgKyB2aWV3LT5zY3JvbGxZKCksCisgICAgICAgICAgICAgICAgICAgICAgcmVjdC53
aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIAorICAgIC8vIEZJWE1FOiBhZGQgYSBzbWFydGVyIGRh
bWFnZSBhZ2dyZWdhdGlvbiBsb2dpYz8gUmlnaHQgbm93LCBMYXllckNocm9taXVtIGRvZXMgc2lt
cGxlIHVuaW9uLWluZy4KKyAgICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpLT5zZXROZWVk
c0Rpc3BsYXkobHNSZWN0KTsKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAKKy8vIFdlYldpZGV0IG1ldGhvZAordm9pZCBXZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2Vk
KCkKK3sKKyAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cm9v
dExheWVyKCktPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBzZXRSb290TGF5ZXJOZWVkc0Rp
c3BsYXkoKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIFdlYlJlY3QgZGFtYWdlZFJl
Y3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKKyAgICAgICAgbV9jbGllbnQt
PmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmll
d0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgZG9Db21wb3NpdGUoMCwgZmluaXNoKTsKKyNlbmRpZgorfQorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRl
KFdlYkNhbnZhcyogY2FudmFzLCBib29sIGZpbmlzaCkKK3sKKyAgICBBU1NFUlQoaXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpOworICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBt
YWluRnJhbWVJbXBsKCk7CisgICAgaWYgKCF3ZWJmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAg
IEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBpbmNsdWRlcyBzY3Jv
bGxiYXJzIHdoZXJlYXMgdGhlIGNvbnRlbnRSZWN0IGRvZXNuJ3QuCisgICAgSW50UmVjdCB2aXNp
YmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKKyAgICBJbnRSZWN0IGNv
bnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKKyAgICBJbnRSZWN0
IHZpZXdwb3J0ICAgID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQp
OworCisgICAgLy8gR2l2ZSB0aGUgY29tcG9zaXRvciBhIGNoYW5jZSB0byBzZXR1cC9yZXNpemUg
dGhlIHJvb3QgdGV4dHVyZSBoYW5kbGUgYW5kIHBlcmZvcm0gc2Nyb2xsaW5nLgorICAgIG1fbGF5
ZXJSZW5kZXJlci0+cHJlcGFyZVRvRHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3Qs
IEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7CisKKyAgICAvLyBE
cmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllci4KKyAgICBWZWN0b3I8RmxvYXRSZWN0
PiBkYW1hZ2VSZWN0czsKKyAgICBkYW1hZ2VSZWN0cy5hcHBlbmQoRmxvYXRSZWN0KG1fc2Nyb2xs
RGFtYWdlLngsIG1fc2Nyb2xsRGFtYWdlLnksIG1fc2Nyb2xsRGFtYWdlLndpZHRoLCBtX3Njcm9s
bERhbWFnZS5oZWlnaHQpKTsKKyAgICBkYW1hZ2VSZWN0cy5hcHBlbmQobV9sYXllclJlbmRlcmVy
LT5yb290TGF5ZXIoKS0+ZGlydHlSZWN0KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZGFtYWdlUmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gdGhlIGRhbWFnZSByZWN0cyBm
b3IgdGhlIHJvb3QgbGF5ZXIgaXMgaW4gbGF5ZXIgc3BhY2UgW2UuZy4gdW5zY3JvbGxlZC5dCisg
ICAgICAgIC8vIGNvbnZlcnQgZnJvbSBsYXllciBzcGFjZSB0byB2aWV3cG9ydCBzcGFjZS4KKyAg
ICAgICAgY29uc3QgRmxvYXRSZWN0IHNzUmVjdCA9IGRhbWFnZVJlY3RzW2ldOworICAgICAgICBG
bG9hdFJlY3QgcmVjdChzc1JlY3QueCgpIC0gdmlldy0+c2Nyb2xsWCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICBzc1JlY3QueSgpIC0gdmlldy0+c2Nyb2xsWSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICBzc1JlY3Qud2lkdGgoKSwgc3NSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIGludGVyc2VjdCB0aGlzIHJlY3RhbmdsZSB3aXRoIHRoZSB2aWV3cG9ydAorICAgICAg
ICByZWN0LmludGVyc2VjdCh2aWV3cG9ydCk7CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAg
Ly8gbm93IHJlbmRlciBpdAorICAgICAgICBXZWJSZWN0IHdyZWN0KHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgaWYgKHdyZWN0LndpZHRo
ICYmIHdyZWN0LmhlaWdodCkgeworICAgICAgICAgICAgdXBkYXRlUm9vdExheWVyQ29udGVudHMo
d3JlY3QpOworICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVSb290TGF5ZXJUZXh0
dXJlUmVjdCh3cmVjdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9sYXllclJlbmRlcmVyLT5y
b290TGF5ZXIoKS0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX3Njcm9sbERhbWFnZSA9IFdl
YlJlY3QoKTsKKyAgICAgICAgCisgICAgLy8gRHJhdyB0aGUgYWN0dWFsIGxheWVycy4uLgorICAg
IG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOwor
CisgICAgLy8gUmVhZGJhY2sgaW50byB0aGUgY2FudmFzLCBpZiByZXF1ZXN0ZWQuCisgICAgLy8g
RklYTUUgSW5zZXJ0IHdqbWFjbGVhbidzIHJlYWRiYWNrIGNvZGUgaGVyZSBmb3Igd2Via2l0IGJ1
ZyA0NDEyNworICAgIAorICAgIC8vIEZpbmlzaCBpZiByZXF1ZXN0ZWQKKyAgICAvLyBGSVhNRTog
aGFuZGxlIGZpbmlzaCBmbGFnLgorICAgIAorICAgIC8vIHdlJ3JlIGRvbmUuLi4gcHV0IHJlc3Vs
dCBvbnNjcmVlbgorICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOworCisgICAgLy8gdGVs
bCB0aGUgYnJvd3NlciB0aGF0IHRoZSByZW5kZXJpbmcgaXMgZG9uZSAtLS0KKyAgICAvLyBGSVhN
RTogdGhpcyBpcyBiZWluZyBjYWxsZWQgdG9vIGVhcmx5LCB3ZSBuZWVkIHRvIGRlZmVyIGNhbGxp
bmcgdGhpcyAKKyAgICAvLyAgICAgICB1bnRpbCB0aGUgc3dhcGJ1ZmZlcnMgaXRzZWxmIGhhcyBl
eGVjdXRlZCBvbiB0aGUgR1BVLgorfQorI2VuZGlmCisKKwogUGFzc093blB0cjxHTEVTMkNvbnRl
eHQ+IFdlYlZpZXdJbXBsOjpnZXRPbnNjcmVlbkdMRVMyQ29udGV4dCgpCiB7CiAgICAgV2ViR0xF
UzJDb250ZXh0KiBjb250ZXh0ID0gZ2xlczJDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmgKaW5kZXggYTQyMDk5YzlkNWY0ODQzYzJmM2U0N2Q3NTM3N2Q0ZDVhMGY3ZTlmMS4uMzQ0
MDA4OGUzMmY2MDA4N2FkNTFiNWJjMzg3ZGFjNmFmOWZlZTg3ZSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldlYkdMRVMyQ29udGV4dC5o
IgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25Qb2xpY3kuaCIKICNpbmNsdWRlICJXZWJQb2ludC5o
IgorI2luY2x1ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJTaXplLmgiCiAjaW5jbHVkZSAi
V2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVmlldy5oIgpAQCAtOTIsNiArOTMsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7CiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25z
dCBXZWJSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOworICAgIHZpcnR1
YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJ
bnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VD
YXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CkBA
IC0zMjIsNiArMzI1LDkgQEAgcHVibGljOgogICAgIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICB2b2lkIGRvQ29tcG9zaXRlKFdlYkNhbnZhcyosIGJvb2wgZmluaXNo
KTsKKyAgICB2b2lkIHNjcm9sbFJvb3RMYXllcihjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwg
Y29uc3QgV2ViUmVjdCYgY2xpcFJlY3QpOworICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJl
Y3QoY29uc3QgV2ViUmVjdCYpOwogICAgIHZvaWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7
CiAgICAgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKik7
CiAgICAgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CkBAIC01MTEsNiArNTE3
LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9tb3VzZUNhcHR1cmVO
b2RlOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFdlYlJlY3QgbV9z
Y3JvbGxEYW1hZ2U7CiAgICAgT3duUHRyPFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bT4g
bV9sYXllclJlbmRlcmVyOwogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmU7CiAgICAgYm9vbCBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZDsKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAppbmRleCA1MDMxOWFmMjNiMGE5MmY0NGM5MTU4ZWZiM2U2
NDYxODIzOTgxZDEwLi5hZWYyOWNmMmQwNDEyNGI0Yzg3ZWYwN2EyZTVmMzg1MDk2NzgyYjY4IDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCkBAIC0xMjgsNiArMTI4LDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2Vi
Q2FudmFzKiwgY29uc3QgV2ViUmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5n
ZWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSB7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66815</attachid>
            <date>2010-09-07 18:19:52 -0700</date>
            <delta_ts>2010-09-07 19:02:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100907181951.patch</filename>
            <type>text/plain</type>
            <size>36370</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTY4NTM3NTQ4M2Q3YjViYTgwYjA4OTY2ZmQyZjI2ZGZlY2FjYmJlMy4uYjVlNzQ2N2FjZmVlZDZi
NTM2MjVjNDQ1NDYzZTA2MWEyZTM0NGFjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wNiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNjUxOWYxZmYyYmExODI2ZjJlMjg1OTYy
YjAzODE3MTJhNDZlOWRjYy4uOTJlYzQ5YjVjYzdmN2ZmOGI2MzdiNmQzMGExMjRhMTRkYzBiYzNi
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCkBAIC0yOTksMTAgKzI5OSwxNSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNl
dEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmIChtX2JvdW5kcyA9PSBzaXplKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBib29sIGZpcnN0UmVzaXplID0gIW1fYm91bmRzLndpZHRo
KCkgJiYgIW1fYm91bmRzLmhlaWdodCgpICYmIHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgp
OworICAgIAogICAgIG1fYm91bmRzID0gc2l6ZTsKICAgICBtX2JhY2tpbmdTdG9yZVNpemUgPSBz
aXplOwogCi0gICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICBpZiAoZmlyc3RSZXNpemUpCisgICAg
ICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJlY3QoMCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9i
b3VuZHMuaGVpZ2h0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9
CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpA
QCAtMzExLDcgKzMxNiw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgICAgcmV0dXJuOwogCiAgICAgbV9mcmFtZSA9IHJlY3Q7Ci0gICAg
c2V0TmVlZHNDb21taXQoKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1f
Ym91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpKSk7CiB9CiAKIGNvbnN0IExheWVyQ2hy
b21pdW0qIExheWVyQ2hyb21pdW06OnJvb3RMYXllcigpIGNvbnN0CkBAIC0zNTMsNyArMzU4LDYg
QEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBk
aXJ0eVJlY3QpCiAgICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIAogICAgIG1fZGlydHlSZWN0
LnVuaXRlKGRpcnR5UmVjdCk7Ci0KICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCkBAIC0zNjMs
NiArMzY3LDEyIEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKICAgICBt
X2NvbnRlbnRzRGlydHkgPSB0cnVlOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnJlc2V0TmVl
ZHNEaXNwbGF5KCkKK3sKKyAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOworICAgIG1fY29u
dGVudHNEaXJ0eSA9IGZhbHNlOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnRvR0xNYXRyaXgo
ZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiB7CiAgICAg
ZmxhdHRlbmVkWzBdID0gbS5tMTEoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggYmExNTA4ODQ0YmEzNWIzNDUxZjgyY2Q1
ODlhNjUzOTc2NTIxYTA4Yy4uMmQyMjVkYWY1YTIwNzFiYWJmZWJkNmE3Y2YzY2MwNWUyNmIzOTA4
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKQEAgLTExMiw2ICsxMTIsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE5lZWRz
RGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCk7CiAgICAgdm9pZCBzZXROZWVkc0Rp
c3BsYXkoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlydHlSZWN0OyB9CisgICAgdm9pZCByZXNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShib29sIG5lZWRzRGlzcGxheSkgeyBtX25l
ZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlID0gbmVlZHNEaXNwbGF5OyB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAppbmRleCA3ODkyOThhZWQ4Y2U5NzYzMDIwY2ZlMGFlMjI0OGUzNzMzZGYyYzhj
Li4wYTk2NWM5M2RiNGU1NWVhMDlmZTczMTlhZmNjZTNhMTllMjA3ZTEzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCkBAIC0xNTksOCArMTU5LDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVNoYWRlcih1bnNpZ25lZCBwcm9ncmFtSWQpCiAKIC8vIFVwZGF0ZXMgdGhlIGNvbnRl
bnRzIG9mIHRoZSByb290IGxheWVyIHRleHR1cmUgdGhhdCBmYWxsIGluc2lkZSB0aGUgdXBkYXRl
UmVjdAogLy8gYW5kIHJlLWNvbXBvc2l0cyBhbGwgc3VibGF5ZXJzLgotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3Qg
SW50UmVjdCYgdmlzaWJsZVJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBv
c2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMo
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0
aW5nKTsKIApAQCAtMjAwLDE0ICsyMDAsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAg
ICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwogCiAgICAgSW50UG9pbnQg
c2Nyb2xsRGVsdGEgPSB0b1BvaW50KHNjcm9sbFBvc2l0aW9uIC0gbV9zY3JvbGxQb3NpdGlvbik7
Ci0gICAgLy8gU2Nyb2xsIG9ubHkgd2hlbiB0aGUgdXBkYXRlUmVjdCBjb250YWlucyBwaXhlbHMg
Zm9yIHRoZSBuZXdseSB1bmNvdmVyZWQgcmVnaW9uIHRvIGF2b2lkIGZsYXNoaW5nLgotICAgIGlm
ICgoc2Nyb2xsRGVsdGEueCgpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA+PSBhYnMoc2Nyb2xsRGVs
dGEueCgpKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID49IGNvbnRlbnRSZWN0LmhlaWdodCgpKQot
ICAgICAgICB8fCAoc2Nyb2xsRGVsdGEueSgpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gYWJz
KHNjcm9sbERlbHRhLnkoKSkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID49IGNvbnRlbnRSZWN0Lndp
ZHRoKCkpKSB7CisgICAgLy8gU2Nyb2xsIHRoZSBiYWNrYnVmZmVyCisgICAgaWYgKHNjcm9sbERl
bHRhLngoKSB8fCBzY3JvbGxEZWx0YS55KCkpIHsKICAgICAgICAgLy8gU2Nyb2xsaW5nIHdvcmtz
IGFzIGZvbGxvd3M6IFdlIHJlbmRlciBhIHF1YWQgd2l0aCB0aGUgY3VycmVudCByb290IGxheWVy
IGNvbnRlbnRzCiAgICAgICAgIC8vIHRyYW5zbGF0ZWQgYnkgdGhlIGFtb3VudCB0aGUgcGFnZSBo
YXMgc2Nyb2xsZWQgc2luY2UgdGhlIGxhc3QgdXBkYXRlIGFuZCB0aGVuIHJlYWQgdGhlCiAgICAg
ICAgIC8vIHBpeGVscyBvZiB0aGUgY29udGVudCBhcmVhICh2aXNpYmxlIGFyZWEgZXhjbHVkaW5n
IHRoZSBzY3JvbGwgYmFycykgYmFjayBpbnRvIHRoZQotICAgICAgICAvLyByb290IGxheWVyIHRl
eHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEgaXMgc3ViZXNxdWVudGx5IGZpbGxlZCBhcyB1
c3VhbCB3aXRoCi0gICAgICAgIC8vIHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlUmVjdC4KKyAg
ICAgICAgLy8gcm9vdCBsYXllciB0ZXh0dXJlLiBUaGUgbmV3bHkgZXhwb3NlZCBhcmVhIHdpbGwg
YmUgZmlsbGVkIGJ5IGEgc3Vic2VxdWVudCBkcmF3TGF5ZXJzSW50b1JlY3QgY2FsbAogICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGxlZExheWVyTWF0cml4OwogI2lmIFBMQVRGT1JN
KFNLSUEpCiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZjsKQEAgLTIzNyw0MyArMjM1
LDY2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgICAgIC8vIG5vIG5lZWQgdG8gY29w
eSBmcmFtZWJ1ZmZlciBwaXhlbHMgYmFjayBpbnRvIHRoZSB0ZXh0dXJlLgogICAgICAgICBtX3Nj
cm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAgICAgfQorICAgIAorICAgIC8vIFRyYW5z
bGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24uCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC50cmFuc2xhdGUzZCgt
bV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7CiAKLSAgICAv
LyBGSVhNRTogVGhlIGZvbGxvd2luZyBjaGVjayBzaG91bGQgZ28gYXdheSB3aGVuIHRoZSBjb21w
b3NpdG9yIHJlbmRlcnMgaW5kZXBlbmRlbnRseSBmcm9tIGl0cyBvd24gdGhyZWFkLgotICAgIC8v
IElnbm9yZSBhIDF4MSB1cGRhdGUgcmVjdCBhdCAoMCwgMCkgYXMgdGhhdCdzIHVzZWQgYSB3YXkg
dG8ga2ljayBvZmYgYSByZWRyYXcgZm9yIHRoZSBjb21wb3NpdG9yLgotICAgIGlmICghKCF1cGRh
dGVSZWN0LngoKSAmJiAhdXBkYXRlUmVjdC55KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID09IDEg
JiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA9PSAxKSkgewotICAgICAgICAvLyBVcGRhdGUgdGhlIHJv
b3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAgICAgQVNTRVJUKCh1cGRhdGVSZWN0LngoKSArIHVwZGF0
ZVJlY3Qud2lkdGgoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKLSAgICAgICAgICAgICAg
ICYmICh1cGRhdGVSZWN0LnkoKSArIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPD0gbV9yb290TGF5ZXJU
ZXh0dXJlSGVpZ2h0KSk7CisgICAgLy8gVHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgYW5kIHVwZGF0
ZSB0aGUgbGF5ZXIgdHJhbnNmb3Jtcy4KKyAgICBmbG9hdCBvcGFjaXR5ID0gMTsKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9vdExheWVy
LT5nZXRTdWJsYXllcnMoKTsKKyAgICBzaXplX3QgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3Vi
bGF5ZXJzLnNpemUoKTsgaSsrKQorICAgICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5
ZXJzW2ldLmdldCgpLCBtYXRyaXgsIG9wYWNpdHkpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRl
UmVjdCkKK3sKKyAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIAorICAgIGlmICgh
bV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdMQyhnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CisKKyAgICAvLyBVcGRhdGUgdGhl
IHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBBU1NFUlQoKHVwZGF0ZVJlY3QucmlnaHQoKSAgPD0g
bV9yb290TGF5ZXJUZXh0dXJlV2lkdGgpCisgICAgICAgICAgICYmICh1cGRhdGVSZWN0LmJvdHRv
bSgpIDw9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkpOworICAgIAogI2lmIFBMQVRGT1JNKFNL
SUEpCi0gICAgICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAg
ICAgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52YXMtPmdldERldmlj
ZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgICAgICBpbnQgcm9vdExheWVyV2lkdGggPSBi
aXRtYXAud2lkdGgoKTsKLSAgICAgICAgaW50IHJvb3RMYXllckhlaWdodCA9IGJpdG1hcC5oZWln
aHQoKTsKLSAgICAgICAgQVNTRVJUKHJvb3RMYXllcldpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgo
KSAmJiByb290TGF5ZXJIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHZv
aWQqIHBpeGVscyA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBj
b250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0g
ICAgICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54
KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0
KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOworICAgIC8vIEdldCB0aGUg
Y29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCBiaXRtYXAg
PSBtX3Jvb3RMYXllckNhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Cisg
ICAgaW50IGJpdG1hcFdpZHRoID0gYml0bWFwLndpZHRoKCk7CisgICAgaW50IGJpdG1hcEhlaWdo
dCA9IGJpdG1hcC5oZWlnaHQoKTsKKyAgICBBU1NFUlQoYml0bWFwV2lkdGggPT0gdXBkYXRlUmVj
dC53aWR0aCgpICYmIGJpdG1hcEhlaWdodCA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKKyAgICB2
b2lkKiBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7CisgICAgLy8gQ29weSB0aGUgY29udGVu
dHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgorICAgIEdM
QyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0
ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAg
ICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJD
R0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50
PihDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9
PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5
ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwotCi0gICAgICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9m
IHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAgICAgLy8g
VGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGlu
YXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCi0gICAgICAgIEdM
QyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGRhdGVSZWN0LngoKSwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0IC0gdXBkYXRl
UmVjdC55KCkgLSB1cGRhdGVSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAg
ICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCisgICAgLy8gQVNTRVJU
KHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJDR0Nv
bnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihD
R0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1
cGRhdGVSZWN0LmhlaWdodCgpKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RMYXllckJhY2tp
bmdTdG9yZS5kYXRhKCk7CisKKyAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRl
ZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgLy8gVGhlIG9yaWdpbiBpcyBh
dCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGluYXRlIHN5c3RlbS4gV2Ug
bmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCisgICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC54KCks
IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRlUmVjdC5o
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBk
YXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQg
Zm9yIHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCi0gICAgfQorfQogCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGlu
Zyk7CisgICAgCiAgICAgZ2xDbGVhckNvbG9yKDAsIDAsIDEsIDEpOwogICAgIGdsQ2xlYXIoR0xf
Q09MT1JfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpOwotCisgICAgCisgICAgR0xD
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKyAg
ICAKICAgICAvLyBSZW5kZXIgdGhlIHJvb3QgbGF5ZXIgdXNpbmcgYSBxdWFkIHRoYXQgdGFrZXMg
dXAgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEgb2YgdGhlIHdpbmRvdy4KICAgICAvLyBXZSByZXVz
ZSB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCBieSBDb250ZW50TGF5ZXJDaHJvbWl1bS4KICAgICBj
b25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5ZXJWYWx1
ZXMgPSBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKQEAgLTI5Nyw2ICszMTgsOSBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVS
ZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhnbEVuYWJsZShHTF9CTEVORCkpOwogICAgIEdM
QyhnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKIAorICAgIC8v
IFNldCB0aGUgcm9vdFZpc2libGVSZWN0IC0tLSB1c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xheWVy
cyBjYWxscworICAgIG1fcm9vdFZpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7CisgICAgCiAgICAg
Ly8gVHJhbnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9sbCBwb3Np
dGlvbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5z
bGF0ZTNkKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsK
QEAgLTMwOCwxMSArMzMyLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgZm9yIChp
ID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKICAgICAgICAgdXBkYXRlTGF5ZXJzUmVj
dXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgbWF0cml4LCBvcGFjaXR5KTsKIAotICAgIG1fcm9v
dFZpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7Ci0KICAgICAvLyBFbmFibGUgc2Npc3NvcmluZyB0
byBhdm9pZCByZW5kZXJpbmcgY29tcG9zaXRlZCBsYXllcnMgb3ZlciB0aGUgc2Nyb2xsYmFycy4K
ICAgICBHTEMoZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKSk7CiAgICAgRmxvYXRSZWN0IHNjaXNz
b3JSZWN0KGNvbnRlbnRSZWN0KTsKKwogICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90
IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQuCiAgICAgc2Npc3NvclJlY3QubW92ZSgtbV9zY3Jv
bGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSk7CiAgICAgc2Npc3NvclRvUmVj
dChzY2lzc29yUmVjdCk7CkBAIC0zMjMsMTMgKzM0NiwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRS
ZWN0JgogICAgIEdMQyhnbFN0ZW5jaWxNYXNrKDApKTsKIAogICAgIC8vIFRyYXZlcnNlIHRoZSBs
YXllciB0cmVlIG9uZSBtb3JlIHRpbWUgdG8gZHJhdyB0aGUgbGF5ZXJzLgotICAgIGZvciAoaSA9
IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3Vi
bGF5ZXJzW2ldLmdldCgpLCBzY2lzc29yUmVjdCk7CiAKICAgICBHTEMoZ2xEaXNhYmxlKEdMX1ND
SVNTT1JfVEVTVCkpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgp
Cit7CisgICAgLy8gV2UncmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVycyEKICAgICBtX2dsZXMy
Q29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLQogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDhmNDRhZmViZDBhMmM3YjQ3NWQwNGJhNDg3MjNm
MWNkYzU0NTUwOTEuLjE1Y2YzMWFiZDQ2MjUyMzMzNTg0ZjRmNDZkYzI1MjczNjgyNzJhYTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNjEsOSArNjEsMTcgQEAgcHVibGljOgogICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bShQYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gZ2xlczJDb250ZXh0KTsK
ICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKLSAgICAvLyBVcGRhdGVzIHRoZSBjb250
ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0IGFu
ZCByZWNvbXBvc2l0ZXMKLSAgICAvLyBhbGwgdGhlIGxheWVycy4KLSAgICB2b2lkIGRyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pOworICAgIC8vIHVwZGF0ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5k
IHNjcm9sbHMgdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIHByZXBhcmVUb0RyYXdMYXllcnMoY29u
c3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIAorICAgIC8vIHVwZGF0ZXMgYSByZWN0
YW5nbGUgd2l0aGluIHRoZSByb290IGxheWVyIHRleHR1cmUKKyAgICB2b2lkIHVwZGF0ZVJvb3RM
YXllclRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOworCisgICAgLy8gZHJh
d3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIGRyYXdM
YXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KTsKKworICAgIC8vIHB1dHMgYmFja2J1ZmZlciBvbnNjcmVlbgorICAgIHZvaWQgcHJlc2Vu
dCgpOwogCiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBs
YXllcikgeyBtX3Jvb3RMYXllciA9IGxheWVyOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGMwNzY5
MDFhNjM1ZTI1YWIyMzdkNDdhNDI3ZTc0ZTQ2YTY3MjljYTYuLmYzYTNmN2JhNDcwMDlhOGNmMDQ3
MmFiZmY1YWYxNWVjMWI0OWE3MWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEw
LTA5LTA3IE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0ZWQgQ29t
cG9zaXRpbmc6IHNjcmVlbiBnYXJiYWdlIHdoZW4gc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA5MgorCisgICAgICAgIEludHJvZHVj
ZSBhIG5ldyBBUEkgb24gV2ViV2lkZ2V0IGZvciBwYWludGluZyB3aXRoIGFjY2VsZXJhdGVkCisg
ICAgICAgIGNvbXBvc2l0aW5nIHRoYXQgYWxsb3dzIHRoZSBjb21wb3NpdG9yIHRvIHByb3Blcmx5
IGRpc3RpbmdpdXNoCisgICAgICAgIHNjcm9sbGluZywgaW52YWxpZGF0aW9uIGFuZCByZXBhaW50
aW5nIGZyb20gb25lIGFub3RoZXIuIFRoZSBrZXkKKyAgICAgICAgY2hhbmdlIGlzIHRoYXQgaW4g
YWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGNhc2UsIGludmFsaWRhdGVzIGFuZAorICAgICAgICBzY3Jv
bGxpbmcgcGFzcyBkaXJlY3RseSB0byB0aGUgY29tcG9zaXRvciwgcmF0aGVyIHRoYW4gcGFzc2lu
ZyB1cAorICAgICAgICB0byB0aGUgY2xpZW50IGFzIHdhcyB0aGUgY2FzZSBpbiB0aGUgc29mdHdh
cmUgcGF0aC4gRm9yCisgICAgICAgIGFjY2VsZXJhdGVkIHJlbmRlcmluZywgdGhlIHByZXZpb3Vz
IHBhaW50KCkgbWV0aG9kIGlzIHJlcGxhY2VkIGJ5CisgICAgICAgIGEgcGFpciBvZiBtZXRob2Rz
OiBwYWludENvbXBvc2l0ZWQgYW5kCisgICAgICAgIGludmFsaWRhdGVDb21wb3NpdGVkUm9vdExh
eWVyUmVjdC4KKworCisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAgICAgICAqIHB1
YmxpYy9XZWJXaWRnZXRDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2lkZ2V0Q2xpZW50
OjpzY2hlZHVsZURlZmVycmVkQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVD
b250ZW50c0FuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNj
cm9sbCk6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVw
TWVudUltcGw6OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OnBhaW50Q29tcG9zaXRlZCk6CisgICAgICAgICogc3Jj
L1dlYlBvcHVwTWVudUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RH
cmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1
cGRhdGVSb290TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
ZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2Nyb2xsUm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmludmFsaWRh
dGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpwYWludENvbXBvc2l0ZWQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAg
ICAqIHRlc3RzL1BvcHVwTWVudVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpUZXN0V2ViV2lk
Z2V0OjppbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpUZXN0V2ViV2lkZ2V0OjpwYWludENvbXBvc2l0ZWQpOgorCiAyMDEwLTA5LTA2ICBKb25hdGhh
biBEaXhvbiAgPGpvdGhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVt
eSBPcmxvdy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IDVjOWY1NGU3OTM2NmI4
M2FmZWU3YzBlMWUzYTMyODhjMzQ0MTJjYTkuLmQwMTAyNzA2NWM5ZTkwYzE0NzU2ZTc3ODdjYTI2
NmRmNjdlYWVjM2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNjAsMTMgKzYw
LDI2IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgaXQgbWF5IHJlc3VsdCBpbiBjYWxscyB0byBXZWJX
aWRnZXRDbGllbnQ6OmRpZEludmFsaWRhdGVSZWN0LgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KSA9IDA7CiAKLSAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHNwZWNpZmllZCByZWdpb24gb2Yg
dGhlIFdlYldpZGdldCBvbnRvIHRoZSBnaXZlbgotICAgIC8vIGNhbnZhcy4gIFlvdSBNVVNUIGNh
bGwgTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMKLSAgICAvLyBva2F5
IHRvIGNhbGwgcGFpbnQgbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4gY2FsbGVk
LAotICAgIC8vIGFzc3VtaW5nIG5vIG90aGVyIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIFdlYldp
ZGdldCAoZS5nLiwgb25jZQotICAgIC8vIGV2ZW50cyBhcmUgcHJvY2Vzc2VkLCBpdCBzaG91bGQg
YmUgYXNzdW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0bwotICAgIC8vIGxheW91dCBpcyB3YXJyYW50
ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2Fu
dmFzKiwgY29uc3QgV2ViUmVjdCYpID0gMDsKKyAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHJl
Y3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gdGhlIFdlYldpZGdldCAKKyAgICAvLyBvbnRvIHRoZSBz
cGVjaWZpZWQgY2FudmFzIGF0ICh2aWV3UG9ydC54LHZpZXdQb3J0LnkpLiBZb3UgTVVTVCBjYWxs
CisgICAgLy8gTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMgb2theSB0
byBjYWxsIHBhaW50CisgICAgLy8gbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4g
Y2FsbGVkLCBhc3N1bWluZyBubyBvdGhlcgorICAgIC8vIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhl
IFdlYldpZGdldCAoZS5nLiwgb25jZSBldmVudHMgYXJlCisgICAgLy8gcHJvY2Vzc2VkLCBpdCBz
aG91bGQgYmUgYXNzdW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0byBsYXlvdXQgaXMKKyAgICAvLyB3
YXJyYW50ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
V2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYgdmlld1BvcnQpID0gMDsKKworICAgIC8vIFRyaWdn
ZXJzIGNvbXBvc2l0aW5nIG9mIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBzY3JlZW4uCisg
ICAgLy8gVGhlIGZpbmlzaCBhcmd1bWVudCBjb250cm9scyB3aGV0aGVyIHRoZSBjb21wb3NpdG9y
IHdpbGwgd2FpdCBmb3IgdGhlCisgICAgLy8gR1BVIHRvIGZpbmlzaCByZW5kZXJpbmcgYmVmb3Jl
IHJldHVybmluZy4gWW91IE1VU1QgY2FsbCBMYXlvdXQKKyAgICAvLyBiZWZvcmUgY2FsbGluZyB0
aGlzIG1ldGhvZCwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgZGVzY3JpYmVkIGluCisgICAgLy8gdGhl
IHBhaW50IG1ldGhvZCBhYm92ZS4KKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmlu
aXNoKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBj
aGFuZ2UgaW4gdGhlbWUuCisgICAgLy8gSW1wbGVtZW50b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQg
Y29waWVzIG9mIHdpZGdldHMgbmVlZCB0byByZS1yZW5kZXIKKyAgICAvLyBvbiByZWNlaXZpbmcg
dGhpcyBtZXNzYWdlCisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpID0gMDsKIAogICAg
IC8vIENhbGxlZCB0byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhbiBpbnB1dCBldmVudC4gIFJl
dHVybnMgdHJ1ZSBpZgogICAgIC8vIHRoZSBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQsIGZhbHNl
IG90aGVyd2lzZS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
Q2xpZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCmluZGV4
IGJkN2JkNmE3NGZjYmFmMzcxZGYzZTlhNmU0MTBiZWRiZjM1OTIzMjAuLjQ4MTYyNWZjOTFlZjVh
MWRiMWNmOTI4ZTU2YjI5YWNiNWMxZGQwNDAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJX
aWRnZXRDbGllbnQuaApAQCAtNDUsMTEgKzQ1LDE0IEBAIGNsYXNzIFdlYldpZGdldENsaWVudCB7
CiBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSByZWdpb24gb2YgdGhlIFdlYldpZGdldCBu
ZWVkcyB0byBiZSByZS1wYWludGVkLgogICAgIHZpcnR1YWwgdm9pZCBkaWRJbnZhbGlkYXRlUmVj
dChjb25zdCBXZWJSZWN0JikgeyB9Ci0KKyAgICAKICAgICAvLyBDYWxsZWQgd2hlbiBhIHJlZ2lv
biBvZiB0aGUgV2ViV2lkZ2V0LCBnaXZlbiBieSBjbGlwUmVjdCwgc2hvdWxkIGJlCiAgICAgLy8g
c2Nyb2xsZWQgYnkgdGhlIHNwZWNpZmllZCBkeCBhbmQgZHkgYW1vdW50cy4KICAgICB2aXJ0dWFs
IHZvaWQgZGlkU2Nyb2xsUmVjdChpbnQgZHgsIGludCBkeSwgY29uc3QgV2ViUmVjdCYgY2xpcFJl
Y3QpIHsgfQogCisgICAgLy8gQ2FsbGVkIHdoZW4gYSBjYWxsIHRvIFdlYldpZGdldDo6Y29tcG9z
aXRlIGlzIHJlcXVpcmVkCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9
CisgICAgCiAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIHdpZGdldCBhY3F1aXJlcyBvciBsb3NlcyBm
b2N1cywgcmVzcGVjdGl2ZWx5LgogICAgIHZpcnR1YWwgdm9pZCBkaWRGb2N1cygpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBkaWRCbHVyKCkgeyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGll
bnRJbXBsLmNwcAppbmRleCA4YTNlZGE2NjY2Y2I1NWEyYWMwMDNkNjk3YzY2MTJlZjg5NmRiYWZj
Li5lMGRhZTAyYTM0NDkzNmUyMjhjMzA2NzAyMmRiNDUyOWNmNjRiNTYyIDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTQ5Myw4ICs0OTMsMTYgQEAgdm9pZCBD
aHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCwgYm8KIHsKICAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKLSAgICAgICAgbV93ZWJW
aWV3LT5jbGllbnQoKS0+ZGlkSW52YWxpZGF0ZVJlY3QodXBkYXRlUmVjdCk7CisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmIChtX3dlYlZpZXctPmNs
aWVudCgpKQorICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkSW52YWxpZGF0ZVJl
Y3QodXBkYXRlUmVjdCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0g
ZWxzZSB7CisgICAgICAgIG1fd2ViVmlldy0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QodXBkYXRl
UmVjdCk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6aW52YWxp
ZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29s
IGltbWVkaWF0ZSkKQEAgLTUwOCwxMSArNTE2LDE5IEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6
c2Nyb2xsKAogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIG1fd2ViVmlldy0+
aGlkZVBvcHVwcygpOwotICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7Ci0gICAgICAgIGlu
dCBkeCA9IHNjcm9sbERlbHRhLndpZHRoKCk7Ci0gICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRh
LmhlaWdodCgpOwotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4
LCBkeSwgY2xpcFJlY3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBp
ZiAoIW1fd2ViVmlldy0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNlbmRp
ZgorICAgICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkgeworICAgICAgICAgICAgaW50IGR4
ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKKyAgICAgICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRh
LmhlaWdodCgpOworICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU2Nyb2xsUmVj
dChkeCwgZHksIGNsaXBSZWN0KTsKKyAgICAgICAgfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICB9IGVsc2UgeworICAgICAgICBtX3dlYlZpZXctPnNjcm9sbFJvb3RMYXll
cihzY3JvbGxEZWx0YSk7CiAgICAgfQorI2VuZGlmCiB9CiAKIEludFBvaW50IENocm9tZUNsaWVu
dEltcGw6OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3QKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCmluZGV4IDc1ZDZjYzE0MzgyNGI3ZjU5MjkxMDI5
YjQyN2NlOTIwYzIzZTQ1MzkuLjA4NWExNTc1ZTU0YmYwZTdhNGFjOGU1ODc4YTAzODYwNTg5MmU1
ZDkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtMTc0LDYg
KzE3NCwxNiBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFz
LCBjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIH0KIH0KIAordm9pZCBXZWJQb3B1cE1lbnVJbXBs
Ojp0aGVtZUNoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2Vi
UG9wdXBNZW51SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKIGJvb2wgV2ViUG9wdXBNZW51SW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25z
dCBXZWJJbnB1dEV2ZW50JiBpbnB1dEV2ZW50KQogewogICAgIGlmICghbV93aWRnZXQpCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCmluZGV4IGVkYmI0YWI1MGQ0MTZiMDNiN2Jk
MWE1ZmNlODAwNTU2MDkxZWEyMjcuLjIyMWJhMDM4ZjJjNGM3MzZkNjc3ZmFiZmEzMjJlMDUxZjkw
NDI2NGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5o
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCkBAIC02Myw2ICs2
Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNh
bnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhl
bWVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CiAg
ICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwog
ICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dEZvY3VzKGJvb2wgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXgg
ZjYzYzkwODI1NjI2Y2IwNmNiYzZmMGE1YTM1ZjIyN2JiZDViZTc4Mi4uYjcwOGVhYzczZWVhMjM0
OWI3ZTM5MWRlMzU2MWIzMDk5Y2NmM2E1ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAKQEAgLTkxMiw3ICs5MTIsMTIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdl
YlNpemUmIG5ld1NpemUpCiAKICAgICBpZiAobV9jbGllbnQpIHsKICAgICAgICAgV2ViUmVjdCBk
YW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwotICAgICAgICBt
X2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworICAgICAgICBpZiAoaXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChkYW1hZ2VkUmVj
dCk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52
YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogICAgIH0KIAogI2lmIE9TKERBUldJTikKQEAgLTk0
NiwzMyArOTUxLDQwIEBAIHZvaWQgV2ViVmlld0ltcGw6OmxheW91dCgpCiAKIHZvaWQgV2ViVmll
d0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQogewot
CisgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmICghaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKCkpIHsKKyAgICAgICAgZG9Db21wb3NpdGUoY2FudmFzKTsKKworICAgICAgICAvLyBS
ZWFkYmFjayBpbnRvIHRoZSBjYW52YXMKKyAgICAgICAgLy8gRklYTUUgSW5zZXJ0IHdqbWFjbGVh
bidzIHJlYWRiYWNrIGNvZGUgaGVyZSBmb3Igd2Via2l0IGJ1ZyA0NDEyNwogI2VuZGlmCisgICAg
fSBlbHNlIHsKICAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwo
KTsKICAgICAgICAgaWYgKHdlYmZyYW1lKQogICAgICAgICAgICAgd2ViZnJhbWUtPnBhaW50KGNh
bnZhcywgcmVjdCk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIERyYXcgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgotICAg
ICAgICB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhyZWN0KTsKKyAgICB9Cit9CiAKLSAgICAgICAg
V2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKLSAgICAgICAgaWYgKCF3
ZWJmcmFtZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0g
d2ViZnJhbWUtPmZyYW1lVmlldygpOwotICAgICAgICBpZiAoIXZpZXcpCi0gICAgICAgICAgICBy
ZXR1cm47Cit2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQoreworICAgIGlmKCFwYWdl
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5G
cmFtZSgpLT52aWV3KCk7CiAKLSAgICAgICAgLy8gVGhlIHZpc2libGVSZWN0IGluY2x1ZGVzIHNj
cm9sbGJhcnMgd2hlcmVhcyB0aGUgY29udGVudFJlY3QgZG9lc24ndC4KLSAgICAgICAgSW50UmVj
dCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKLSAgICAgICAg
SW50UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7Cisg
ICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQp
OworICAgIHZpZXctPmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKK30KIAotICAgICAgICAv
LyBBc2sgdGhlIGxheWVyIGNvbXBvc2l0b3IgdG8gcmVkcmF3IGFsbCB0aGUgbGF5ZXJzLgotICAg
ICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyLT5oYXJkd2FyZUNvbXBvc2l0aW5nKCkpOwotICAg
ICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMocmVjdCwgdmlzaWJsZVJlY3QsIGNvbnRl
bnRSZWN0LCBJbnRQb2ludCh2aWV3LT5zY3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSkpOwotICAg
IH0KK3ZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgZG9Db21wb3NpdGUoMCk7CisKKyAgICAvLyBG
aW5pc2ggaWYgcmVxdWVzdGVkLgorICAgIC8vIEZJWE1FOiBoYW5kbGUgZmluaXNoIGZsYWcuCisK
KyAgICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVuLgorICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2Vu
dCgpOwogI2VuZGlmCiB9CiAKQEAgLTIxMTQsMTEgKzIxMjYsOTUgQEAgYm9vbCBXZWJWaWV3SW1w
bDo6YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNl
dFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogeworICAg
IGJvb2wgd2FzQWN0aXZlID0gbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CiAgICAg
c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGxheWVyID8gdHJ1ZSA6IGZhbHNlKTsK
ICAgICBpZiAobV9sYXllclJlbmRlcmVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJv
b3RMYXllcihsYXllcik7CisgICAgaWYgKHdhc0FjdGl2ZSAhPSBtX2lzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSkgeworICAgICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6
ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CisgICAgICAgIGlmIChtX2lzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSkgCisgICAgICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChkYW1h
Z2VkUmVjdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlk
YXRlUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgfQorfQorCit2b2lkIFdlYlZpZXdJbXBsOjpzZXRS
b290TGF5ZXJOZWVkc0Rpc3BsYXkoKQoreworICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAg
ICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9jbGllbnQtPnNj
aGVkdWxlQ29tcG9zaXRlKCk7Cit9CisKKwordm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExh
eWVyKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIEFTU0VSVChtX2xheWVyUmVu
ZGVyZXIpOworICAgIC8vIENvbXB1dGUgdGhlIGRhbWFnZSByZWN0IGluIHZpZXdwb3J0IHNwYWNl
LgorICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAgaWYg
KCF3ZWJmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZy
YW1lLT5mcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAg
IEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpOwor
CisgICAgLy8gV2Ugc3VwcG9ydCBmYXN0IHNjcm9sbGluZyBpbiBvbmUgZGlyZWN0aW9uIGF0IGEg
dGltZS4KKyAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSAmJiBzY3JvbGxEZWx0YS5oZWlnaHQo
KSkgeworICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChXZWJSZWN0KGNvbnRlbnRSZWN0
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDb21wdXRlIHRoZSByZWdpb24g
d2Ugd2lsbCBleHBvc2UgYnkgc2Nyb2xsaW5nIFdlIHVzZSB0aGUKKyAgICAvLyBjb250ZW50IHJl
Y3QgZm9yIGludmFsaWRhdGlvbi4gIFVzaW5nIHRoaXMgc3BhY2UgZm9yIGRhbWFnZQorICAgIC8v
IHJlY3RzIGFsbG93cyB1cyB0byBpbnRlcm1peCBpbnZhbGlkYXRlcyB3aXRoIHNjcm9sbHMuCisg
ICAgSW50UmVjdCBkYW1hZ2VkQ29udGVudHNSZWN0OworICAgIGlmIChzY3JvbGxEZWx0YS53aWR0
aCgpKSB7CisgICAgICAgIGZsb2F0IGR4ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNjcm9sbERlbHRh
LndpZHRoKCkpOworICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFkoY29udGVudFJlY3Qu
eSgpKTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoY29udGVudFJlY3Qu
aGVpZ2h0KCkpOworICAgICAgICBpZiAoZHggPiAwKSB7CisgICAgICAgICAgICBkYW1hZ2VkQ29u
dGVudHNSZWN0LnNldFgoY29udGVudFJlY3QueCgpKTsKKyAgICAgICAgICAgIGRhbWFnZWRDb250
ZW50c1JlY3Quc2V0V2lkdGgoZHgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGFt
YWdlZENvbnRlbnRzUmVjdC5zZXRYKGNvbnRlbnRSZWN0LnJpZ2h0KCkgKyBkeCk7CisgICAgICAg
ICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFdpZHRoKC1keCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBmbG9hdCBkeSA9IHN0YXRpY19jYXN0PGZsb2F0PihzY3JvbGxEZWx0
YS5oZWlnaHQoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WChjb250ZW50UmVj
dC54KCkpOworICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFdpZHRoKGNvbnRlbnRSZWN0
LndpZHRoKCkpOworICAgICAgICBpZiAoZHkgPiAwKSB7CisgICAgICAgICAgICBkYW1hZ2VkQ29u
dGVudHNSZWN0LnNldFkoY29udGVudFJlY3QueSgpKTsKKyAgICAgICAgICAgIGRhbWFnZWRDb250
ZW50c1JlY3Quc2V0SGVpZ2h0KGR5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRh
bWFnZWRDb250ZW50c1JlY3Quc2V0WShjb250ZW50UmVjdC5ib3R0b20oKSArIGR5KTsKKyAgICAg
ICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0SGVpZ2h0KC1keSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtX3Njcm9sbERhbWFnZS51bml0ZShkYW1hZ2VkQ29udGVudHNSZWN0KTsKKyAg
ICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6aW52
YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyByZWN0
IGlzIGluIHZpZXdwb3J0IHNwYWNlLiBDb252ZXJ0IHRvIGNvbnRlbnQgc3BhY2UKKyAgICAvLyBz
byB0aGF0IGludmFsaWRhdGlvbnMgYW5kIHNjcm9sbCBpbnZhbGlkYXRpb25zIHBsYXkgd2VsbCB3
aXRoIG9uZS1hbm90aGVyLgorICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIAorICAg
IGlmKCFwYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdl
KCktPm1haW5GcmFtZSgpLT52aWV3KCk7CisKKyAgICBGbG9hdFJlY3QgY29udGVudFJlY3QgPSB2
aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJlY3QpOworICAgIAorICAgIC8vIEZJWE1FOiBhZGQgYSBz
bWFydGVyIGRhbWFnZSBhZ2dyZWdhdGlvbiBsb2dpYz8gUmlnaHQgbm93LCBMYXllckNocm9taXVt
IGRvZXMgc2ltcGxlIHVuaW9uLWluZy4KKyAgICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigp
LT5zZXROZWVkc0Rpc3BsYXkoY29udGVudFJlY3QpOwogfQogCisKIHZvaWQgV2ViVmlld0ltcGw6
OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKICAgICBp
ZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPT0gYWN0aXZlKQpAQCAtMjEyOCwx
MCArMjIyNCw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoZ2V0T25zY3JlZW5HTEVTMkNvbnRleHQoKSk7CiAgICAgICAg
IGlmIChtX2xheWVyUmVuZGVyZXIpIHsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yY2Ug
YSByZWRyYXcgdGhlIGVudGlyZSB2aWV3IHNvIHRoYXQgdGhlIGNvbXBvc2l0b3IgZ2V0cyB0aGUg
ZW50aXJlIHZpZXcsCi0gICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBqdXN0IHRoZSBjdXJyZW50
bHktZGlydHkgc3Vic2V0LgotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0
KEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IGZh
bHNlOwogICAgICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSB0cnVlOwpAQCAt
MjE0MiwxNyArMjIzNCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgfQogfQogCi12b2lkIFdlYlZpZXdJbXBs
Ojp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQordm9pZCBXZWJW
aWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBGSVhNRTogVGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIHBhdGggaW52
YWxpZGF0ZXMgYSAxeDEgcmVjdCBhdCAoMCwgMCkKLSAgICAvLyBpbiBvcmRlciB0byBnZXQgdGhl
IHJlbmRlcmVyIHRvIGFzayB0aGUgY29tcG9zaXRvciB0byByZWRyYXcuIFRoaXMgaXMgb25seQot
ICAgIC8vIHRlbXBvcmFyeSB1bnRpbCB3ZSBnZXQgdGhlIGNvbXBvc2l0b3IgdG8gcmVuZGVyIGRp
cmVjdGx5IGZyb20gaXRzIG93biB0aHJlYWQuCi0gICAgaWYgKCFyZWN0LnggJiYgIXJlY3QueSAm
JiByZWN0LndpZHRoID09IDEgJiYgcmVjdC5oZWlnaHQgPT0gMSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICBpZiAo
IXdlYmZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC0yMTY0LDcgKzIyNTAsNyBAQCB2b2lkIFdl
YlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQog
ICAgIGlmIChyb290TGF5ZXIpIHsKICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXct
PnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKIAotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNl
dFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6ZShyZWN0LndpZHRoLCByZWN0LmhlaWdodCkpOwor
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6ZShy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBy
b290TGF5ZXJDb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXJHcmFwaGljc0NvbnRl
eHQoKTsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCkBAIC0yMTc0LDcgKzIyNjAsNyBAQCB2b2lkIFdl
YlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQog
ICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+c2F2ZSgpOwogCiAgICAgICAgIC8vIEJyaW5nIHRoZSBj
YW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAg
ICAgIHBsYXRmb3JtQ2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1yZWN0
LngpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueSkpOworICAgICAgICBwbGF0Zm9ybUNh
bnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtcmVjdC54KCkpLCBzdGF0aWNf
Y2FzdDxTa1NjYWxhcj4oLXJlY3QueSgpKSk7CiAKICAgICAgICAgcm9vdExheWVyQ29udGV4dC0+
c2F2ZSgpOwogCkBAIC0yMTg4LDcgKzIyNzQsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVS
b290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgICAgICBDR0NvbnRleHRT
YXZlR1N0YXRlKGNnQ29udGV4dCk7CiAKICAgICAgICAgLy8gQnJpbmcgdGhlIENvcmVHcmFwaGlj
cyBjb250ZXh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0Lgot
ICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCAtcmVjdC54LCAtcmVjdC55
KTsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgLXJlY3QueCgpLCAt
cmVjdC55KCkpOwogCiAgICAgICAgIHJvb3RMYXllckNvbnRleHQtPnNhdmUoKTsKIApAQCAtMjIw
MiwyMiArMjI4OCw0OCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50
cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIH0KIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6c2V0
Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKK3ZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKFdl
YkNhbnZhcyogY2FudmFzKQogewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlJ3JlIHBvc3Rpbmcg
YSByZXBhaW50IGV2ZW50IGZvciB0aGUgZW50aXJlIHBhZ2Ugd2hpY2ggaXMgYW4gb3ZlcmtpbGwu
Ci0gICAgaWYgKFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCkpIHsKLSAg
ICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFyeSBoYWNrIHRvIGludmFsaWRhdGUgcGFydCBvZiB0
aGUgcGFnZSBzbyB0aGF0IHdlIGdldCBjYWxsZWQgdG8gcmVuZGVyCi0gICAgICAgICAgICAvLyAg
ICAgICAgYWdhaW4uCi0gICAgICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlz
aWJsZUNvbnRlbnRSZWN0KHRydWUpOwotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRh
dGVSZWN0KEludFJlY3QoMCwgMCwgMSwgMSkpOworICAgIEFTU0VSVChpc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoKSk7CisgICAgaWYoIXBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKworICAgIC8v
IFRoZSB2aXNpYmxlUmVjdCBpbmNsdWRlcyBzY3JvbGxiYXJzIHdoZXJlYXMgdGhlIGNvbnRlbnRS
ZWN0IGRvZXNuJ3QuCisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250
ZW50UmVjdCh0cnVlKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KGZhbHNlKTsKKyAgICBJbnRSZWN0IHZpZXdQb3J0ID0gSW50UmVjdCgwLCAwLCBt
X3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworCisgICAgLy8gR2l2ZSB0aGUgY29tcG9zaXRv
ciBhIGNoYW5jZSB0byBzZXR1cC9yZXNpemUgdGhlIHJvb3QgdGV4dHVyZSBoYW5kbGUgYW5kIHBl
cmZvcm0gc2Nyb2xsaW5nLgorICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlcGFyZVRvRHJhd0xheWVy
cyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgdmll
dy0+c2Nyb2xsWSgpKSk7CisKKyAgICAvLyBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBs
YXllci4KKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBkYW1hZ2VSZWN0czsKKyAgICBkYW1hZ2VSZWN0
cy5hcHBlbmQobV9zY3JvbGxEYW1hZ2UpOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChtX2xheWVy
UmVuZGVyZXItPnJvb3RMYXllcigpLT5kaXJ0eVJlY3QoKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBkYW1hZ2VSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBUaGUgZGFtYWdl
IHJlY3QgZm9yIHRoZSByb290IGxheWVyIGlzIGluIGNvbnRlbnQgc3BhY2UgW2UuZy4gdW5zY3Jv
bGxlZF0uCisgICAgICAgIC8vIENvbnZlcnQgZnJvbSBjb250ZW50IHNwYWNlIHRvIHZpZXdQb3J0
IHNwYWNlLgorICAgICAgICBjb25zdCBGbG9hdFJlY3QgZGFtYWdlZENvbnRlbnRSZWN0ID0gZGFt
YWdlUmVjdHNbaV07CisgICAgICAgIEludFJlY3QgZGFtYWdlZFJlY3QgPSB2aWV3LT5jb250ZW50
c1RvV2luZG93KEludFJlY3QoZGFtYWdlZENvbnRlbnRSZWN0KSk7CisKKyAgICAgICAgLy8gSW50
ZXJzZWN0IHRoaXMgcmVjdGFuZ2xlIHdpdGggdGhlIHZpZXdQb3J0LgorICAgICAgICBkYW1hZ2Vk
UmVjdC5pbnRlcnNlY3Qodmlld1BvcnQpOworCisgICAgICAgIC8vIE5vdyByZW5kZXIgaXQuCisg
ICAgICAgIGlmIChkYW1hZ2VkUmVjdC53aWR0aCgpICYmIGRhbWFnZWRSZWN0LmhlaWdodCgpKSB7
CisgICAgICAgICAgICB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhkYW1hZ2VkUmVjdCk7CisgICAg
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGRhbWFn
ZWRSZWN0KTsKICAgICAgICAgfQogICAgIH0KKyAgICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXll
cigpLT5yZXNldE5lZWRzRGlzcGxheSgpOworICAgIG1fc2Nyb2xsRGFtYWdlID0gV2ViUmVjdCgp
OwogCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAvLyBEcmF3IHRoZSBhY3R1YWwgbGF5ZXJzLi4uCisgICAg
bV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7CiB9
Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmCisKIAogUGFz
c093blB0cjxHTEVTMkNvbnRleHQ+IFdlYlZpZXdJbXBsOjpnZXRPbnNjcmVlbkdMRVMyQ29udGV4
dCgpCiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYTQyMDk5YzlkNWY0ODQzYzJm
M2U0N2Q3NTM3N2Q0ZDVhMGY3ZTlmMS4uOGFiZTA2ZDU2ZTc2OWQxMjJhNmZjOWM2YWY1YjQ1ZTFl
ZmFmNDExYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIldlYkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25Qb2xp
Y3kuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIKICNpbmNs
dWRlICJXZWJTaXplLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVmll
dy5oIgpAQCAtOTIsNiArOTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShj
b25zdCBXZWJTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwg
dm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IHRoZW1lQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gp
OwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQm
KTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CkBAIC0zMjIsOSArMzI1LDExIEBAIHB1YmxpYzoKICAg
ICB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBzZXRSb290
TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNv
cmU6OlBsYXRmb3JtTGF5ZXIqKTsKICAgICBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKTsKKyAgICB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5
ZXIqKTsKKyAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2Ny
b2xsUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhKTsKKyAgICB2
b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICNl
bmRpZgogICAgIC8vIE9uc2NyZWVuIGNvbnRleHRzIGRpc3BsYXkgdG8gdGhlIHNjcmVlbiBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyB2aWV3LgogICAgIC8vIE9mZnNjcmVlbiBjb250ZXh0cyByZW5kZXIg
b2Zmc2NyZWVuIGJ1dCBjYW4gc2hhcmUgcmVzb3VyY2VzIHdpdGggdGhlCkBAIC0zODYsNyArMzkx
LDggQEAgcHJpdmF0ZToKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2
b2lkIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sKTsKLSAgICB2b2lkIHVw
ZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IFdlYlJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVJv
b3RMYXllckNvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGRvQ29t
cG9zaXRlKFdlYkNhbnZhcyopOwogI2VuZGlmCiAKICAgICBXZWJWaWV3Q2xpZW50KiBtX2NsaWVu
dDsKQEAgLTUxMSw2ICs1MTcsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2Rl
PiBtX21vdXNlQ2FwdHVyZU5vZGU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Njcm9sbERhbWFnZTsKICAgICBPd25QdHI8V2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgYm9vbCBtX2lz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsKICAgICBib29sIG1fY29tcG9zaXRvckNyZWF0
aW9uRmFpbGVkOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRl
c3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCmluZGV4IDUw
MzE5YWYyM2IwYTkyZjQ0YzkxNThlZmIzZTY0NjE4MjM5ODFkMTAuLmFlZjI5Y2YyZDA0MTI0YjRj
ODdlZjA3YTJlNWYzODUwOTY3ODJiNjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9Qb3B1cE1lbnVUZXN0LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51
VGVzdC5jcHAKQEAgLTEyOCw2ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
c2l6ZShjb25zdCBXZWJTaXplJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21w
b3NpdGUoYm9vbCBmaW5pc2gpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50
KGNvbnN0IFdlYklucHV0RXZlbnQmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lk
IG1vdXNlQ2FwdHVyZUxvc3QoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCkg
eyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66828</attachid>
            <date>2010-09-07 19:02:33 -0700</date>
            <delta_ts>2010-09-08 16:34:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100907190231.patch</filename>
            <type>text/plain</type>
            <size>36132</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTY4NTM3NTQ4M2Q3YjViYTgwYjA4OTY2ZmQyZjI2ZGZlY2FjYmJlMy4uYjVlNzQ2N2FjZmVlZDZi
NTM2MjVjNDQ1NDYzZTA2MWEyZTM0NGFjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wNiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNjUxOWYxZmYyYmExODI2ZjJlMjg1OTYy
YjAzODE3MTJhNDZlOWRjYy4uOTJlYzQ5YjVjYzdmN2ZmOGI2MzdiNmQzMGExMjRhMTRkYzBiYzNi
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCkBAIC0yOTksMTAgKzI5OSwxNSBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNl
dEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmIChtX2JvdW5kcyA9PSBzaXplKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBib29sIGZpcnN0UmVzaXplID0gIW1fYm91bmRzLndpZHRo
KCkgJiYgIW1fYm91bmRzLmhlaWdodCgpICYmIHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgp
OworICAgIAogICAgIG1fYm91bmRzID0gc2l6ZTsKICAgICBtX2JhY2tpbmdTdG9yZVNpemUgPSBz
aXplOwogCi0gICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICBpZiAoZmlyc3RSZXNpemUpCisgICAg
ICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJlY3QoMCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9i
b3VuZHMuaGVpZ2h0KCkpKTsKKyAgICBlbHNlCisgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9
CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpA
QCAtMzExLDcgKzMxNiw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgICAgcmV0dXJuOwogCiAgICAgbV9mcmFtZSA9IHJlY3Q7Ci0gICAg
c2V0TmVlZHNDb21taXQoKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1f
Ym91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpKSk7CiB9CiAKIGNvbnN0IExheWVyQ2hy
b21pdW0qIExheWVyQ2hyb21pdW06OnJvb3RMYXllcigpIGNvbnN0CkBAIC0zNTMsNyArMzU4LDYg
QEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBk
aXJ0eVJlY3QpCiAgICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIAogICAgIG1fZGlydHlSZWN0
LnVuaXRlKGRpcnR5UmVjdCk7Ci0KICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCkBAIC0zNjMs
NiArMzY3LDEyIEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKICAgICBt
X2NvbnRlbnRzRGlydHkgPSB0cnVlOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnJlc2V0TmVl
ZHNEaXNwbGF5KCkKK3sKKyAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOworICAgIG1fY29u
dGVudHNEaXJ0eSA9IGZhbHNlOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnRvR0xNYXRyaXgo
ZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiB7CiAgICAg
ZmxhdHRlbmVkWzBdID0gbS5tMTEoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggYmExNTA4ODQ0YmEzNWIzNDUxZjgyY2Q1
ODlhNjUzOTc2NTIxYTA4Yy4uMmQyMjVkYWY1YTIwNzFiYWJmZWJkNmE3Y2YzY2MwNWUyNmIzOTA4
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKQEAgLTExMiw2ICsxMTIsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE5lZWRz
RGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCk7CiAgICAgdm9pZCBzZXROZWVkc0Rp
c3BsYXkoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlydHlSZWN0OyB9CisgICAgdm9pZCByZXNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShib29sIG5lZWRzRGlzcGxheSkgeyBtX25l
ZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlID0gbmVlZHNEaXNwbGF5OyB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAppbmRleCA3ODkyOThhZWQ4Y2U5NzYzMDIwY2ZlMGFlMjI0OGUzNzMzZGYyYzhj
Li4wYTk2NWM5M2RiNGU1NWVhMDlmZTczMTlhZmNjZTNhMTllMjA3ZTEzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCkBAIC0xNTksOCArMTU5LDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVNoYWRlcih1bnNpZ25lZCBwcm9ncmFtSWQpCiAKIC8vIFVwZGF0ZXMgdGhlIGNvbnRl
bnRzIG9mIHRoZSByb290IGxheWVyIHRleHR1cmUgdGhhdCBmYWxsIGluc2lkZSB0aGUgdXBkYXRl
UmVjdAogLy8gYW5kIHJlLWNvbXBvc2l0cyBhbGwgc3VibGF5ZXJzLgotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3Qg
SW50UmVjdCYgdmlzaWJsZVJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBv
c2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMo
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0
aW5nKTsKIApAQCAtMjAwLDE0ICsyMDAsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAg
ICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwogCiAgICAgSW50UG9pbnQg
c2Nyb2xsRGVsdGEgPSB0b1BvaW50KHNjcm9sbFBvc2l0aW9uIC0gbV9zY3JvbGxQb3NpdGlvbik7
Ci0gICAgLy8gU2Nyb2xsIG9ubHkgd2hlbiB0aGUgdXBkYXRlUmVjdCBjb250YWlucyBwaXhlbHMg
Zm9yIHRoZSBuZXdseSB1bmNvdmVyZWQgcmVnaW9uIHRvIGF2b2lkIGZsYXNoaW5nLgotICAgIGlm
ICgoc2Nyb2xsRGVsdGEueCgpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA+PSBhYnMoc2Nyb2xsRGVs
dGEueCgpKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID49IGNvbnRlbnRSZWN0LmhlaWdodCgpKQot
ICAgICAgICB8fCAoc2Nyb2xsRGVsdGEueSgpICYmIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gYWJz
KHNjcm9sbERlbHRhLnkoKSkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID49IGNvbnRlbnRSZWN0Lndp
ZHRoKCkpKSB7CisgICAgLy8gU2Nyb2xsIHRoZSBiYWNrYnVmZmVyCisgICAgaWYgKHNjcm9sbERl
bHRhLngoKSB8fCBzY3JvbGxEZWx0YS55KCkpIHsKICAgICAgICAgLy8gU2Nyb2xsaW5nIHdvcmtz
IGFzIGZvbGxvd3M6IFdlIHJlbmRlciBhIHF1YWQgd2l0aCB0aGUgY3VycmVudCByb290IGxheWVy
IGNvbnRlbnRzCiAgICAgICAgIC8vIHRyYW5zbGF0ZWQgYnkgdGhlIGFtb3VudCB0aGUgcGFnZSBo
YXMgc2Nyb2xsZWQgc2luY2UgdGhlIGxhc3QgdXBkYXRlIGFuZCB0aGVuIHJlYWQgdGhlCiAgICAg
ICAgIC8vIHBpeGVscyBvZiB0aGUgY29udGVudCBhcmVhICh2aXNpYmxlIGFyZWEgZXhjbHVkaW5n
IHRoZSBzY3JvbGwgYmFycykgYmFjayBpbnRvIHRoZQotICAgICAgICAvLyByb290IGxheWVyIHRl
eHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEgaXMgc3ViZXNxdWVudGx5IGZpbGxlZCBhcyB1
c3VhbCB3aXRoCi0gICAgICAgIC8vIHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlUmVjdC4KKyAg
ICAgICAgLy8gcm9vdCBsYXllciB0ZXh0dXJlLiBUaGUgbmV3bHkgZXhwb3NlZCBhcmVhIHdpbGwg
YmUgZmlsbGVkIGJ5IGEgc3Vic2VxdWVudCBkcmF3TGF5ZXJzSW50b1JlY3QgY2FsbAogICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGxlZExheWVyTWF0cml4OwogI2lmIFBMQVRGT1JN
KFNLSUEpCiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZjsKQEAgLTIzNyw0MyArMjM1
LDY2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgICAgIC8vIG5vIG5lZWQgdG8gY29w
eSBmcmFtZWJ1ZmZlciBwaXhlbHMgYmFjayBpbnRvIHRoZSB0ZXh0dXJlLgogICAgICAgICBtX3Nj
cm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAgICAgfQorICAgIAorICAgIC8vIFRyYW5z
bGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24uCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC50cmFuc2xhdGUzZCgt
bV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7CiAKLSAgICAv
LyBGSVhNRTogVGhlIGZvbGxvd2luZyBjaGVjayBzaG91bGQgZ28gYXdheSB3aGVuIHRoZSBjb21w
b3NpdG9yIHJlbmRlcnMgaW5kZXBlbmRlbnRseSBmcm9tIGl0cyBvd24gdGhyZWFkLgotICAgIC8v
IElnbm9yZSBhIDF4MSB1cGRhdGUgcmVjdCBhdCAoMCwgMCkgYXMgdGhhdCdzIHVzZWQgYSB3YXkg
dG8ga2ljayBvZmYgYSByZWRyYXcgZm9yIHRoZSBjb21wb3NpdG9yLgotICAgIGlmICghKCF1cGRh
dGVSZWN0LngoKSAmJiAhdXBkYXRlUmVjdC55KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID09IDEg
JiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA9PSAxKSkgewotICAgICAgICAvLyBVcGRhdGUgdGhlIHJv
b3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAgICAgQVNTRVJUKCh1cGRhdGVSZWN0LngoKSArIHVwZGF0
ZVJlY3Qud2lkdGgoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKLSAgICAgICAgICAgICAg
ICYmICh1cGRhdGVSZWN0LnkoKSArIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPD0gbV9yb290TGF5ZXJU
ZXh0dXJlSGVpZ2h0KSk7CisgICAgLy8gVHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgYW5kIHVwZGF0
ZSB0aGUgbGF5ZXIgdHJhbnNmb3Jtcy4KKyAgICBmbG9hdCBvcGFjaXR5ID0gMTsKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9vdExheWVy
LT5nZXRTdWJsYXllcnMoKTsKKyAgICBzaXplX3QgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3Vi
bGF5ZXJzLnNpemUoKTsgaSsrKQorICAgICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5
ZXJzW2ldLmdldCgpLCBtYXRyaXgsIG9wYWNpdHkpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYgdXBkYXRl
UmVjdCkKK3sKKyAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIAorICAgIGlmICgh
bV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdMQyhnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CisKKyAgICAvLyBVcGRhdGUgdGhl
IHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBBU1NFUlQoKHVwZGF0ZVJlY3QucmlnaHQoKSAgPD0g
bV9yb290TGF5ZXJUZXh0dXJlV2lkdGgpCisgICAgICAgICAgICYmICh1cGRhdGVSZWN0LmJvdHRv
bSgpIDw9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkpOworICAgIAogI2lmIFBMQVRGT1JNKFNL
SUEpCi0gICAgICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAg
ICAgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52YXMtPmdldERldmlj
ZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgICAgICBpbnQgcm9vdExheWVyV2lkdGggPSBi
aXRtYXAud2lkdGgoKTsKLSAgICAgICAgaW50IHJvb3RMYXllckhlaWdodCA9IGJpdG1hcC5oZWln
aHQoKTsKLSAgICAgICAgQVNTRVJUKHJvb3RMYXllcldpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgo
KSAmJiByb290TGF5ZXJIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHZv
aWQqIHBpeGVscyA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBj
b250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0g
ICAgICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54
KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0
KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOworICAgIC8vIEdldCB0aGUg
Y29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCBiaXRtYXAg
PSBtX3Jvb3RMYXllckNhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Cisg
ICAgaW50IGJpdG1hcFdpZHRoID0gYml0bWFwLndpZHRoKCk7CisgICAgaW50IGJpdG1hcEhlaWdo
dCA9IGJpdG1hcC5oZWlnaHQoKTsKKyAgICBBU1NFUlQoYml0bWFwV2lkdGggPT0gdXBkYXRlUmVj
dC53aWR0aCgpICYmIGJpdG1hcEhlaWdodCA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKKyAgICB2
b2lkKiBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7CisgICAgLy8gQ29weSB0aGUgY29udGVu
dHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgorICAgIEdM
QyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0
ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAg
ICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJD
R0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50
PihDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9
PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5
ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwotCi0gICAgICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9m
IHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAgICAgLy8g
VGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGlu
YXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCi0gICAgICAgIEdM
QyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGRhdGVSZWN0LngoKSwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0IC0gdXBkYXRl
UmVjdC55KCkgLSB1cGRhdGVSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAg
ICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCisgICAgLy8gQVNTRVJU
KHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJDR0Nv
bnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihD
R0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1
cGRhdGVSZWN0LmhlaWdodCgpKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RMYXllckJhY2tp
bmdTdG9yZS5kYXRhKCk7CisKKyAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRl
ZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgLy8gVGhlIG9yaWdpbiBpcyBh
dCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGluYXRlIHN5c3RlbS4gV2Ug
bmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCisgICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC54KCks
IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRlUmVjdC5o
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBk
YXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQg
Zm9yIHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCi0gICAgfQorfQogCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGlu
Zyk7CisgICAgCiAgICAgZ2xDbGVhckNvbG9yKDAsIDAsIDEsIDEpOwogICAgIGdsQ2xlYXIoR0xf
Q09MT1JfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpOwotCisgICAgCisgICAgR0xD
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKyAg
ICAKICAgICAvLyBSZW5kZXIgdGhlIHJvb3QgbGF5ZXIgdXNpbmcgYSBxdWFkIHRoYXQgdGFrZXMg
dXAgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEgb2YgdGhlIHdpbmRvdy4KICAgICAvLyBXZSByZXVz
ZSB0aGUgc2hhZGVyIHByb2dyYW0gdXNlZCBieSBDb250ZW50TGF5ZXJDaHJvbWl1bS4KICAgICBj
b25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5ZXJWYWx1
ZXMgPSBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKQEAgLTI5Nyw2ICszMTgsOSBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVS
ZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhnbEVuYWJsZShHTF9CTEVORCkpOwogICAgIEdM
QyhnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKIAorICAgIC8v
IFNldCB0aGUgcm9vdFZpc2libGVSZWN0IC0tLSB1c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xheWVy
cyBjYWxscworICAgIG1fcm9vdFZpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7CisgICAgCiAgICAg
Ly8gVHJhbnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9sbCBwb3Np
dGlvbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5z
bGF0ZTNkKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsK
QEAgLTMwOCwxMSArMzMyLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgZm9yIChp
ID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKICAgICAgICAgdXBkYXRlTGF5ZXJzUmVj
dXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgbWF0cml4LCBvcGFjaXR5KTsKIAotICAgIG1fcm9v
dFZpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7Ci0KICAgICAvLyBFbmFibGUgc2Npc3NvcmluZyB0
byBhdm9pZCByZW5kZXJpbmcgY29tcG9zaXRlZCBsYXllcnMgb3ZlciB0aGUgc2Nyb2xsYmFycy4K
ICAgICBHTEMoZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKSk7CiAgICAgRmxvYXRSZWN0IHNjaXNz
b3JSZWN0KGNvbnRlbnRSZWN0KTsKKwogICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90
IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQuCiAgICAgc2Npc3NvclJlY3QubW92ZSgtbV9zY3Jv
bGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSk7CiAgICAgc2Npc3NvclRvUmVj
dChzY2lzc29yUmVjdCk7CkBAIC0zMjMsMTMgKzM0NiwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRS
ZWN0JgogICAgIEdMQyhnbFN0ZW5jaWxNYXNrKDApKTsKIAogICAgIC8vIFRyYXZlcnNlIHRoZSBs
YXllciB0cmVlIG9uZSBtb3JlIHRpbWUgdG8gZHJhdyB0aGUgbGF5ZXJzLgotICAgIGZvciAoaSA9
IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3Vi
bGF5ZXJzW2ldLmdldCgpLCBzY2lzc29yUmVjdCk7CiAKICAgICBHTEMoZ2xEaXNhYmxlKEdMX1ND
SVNTT1JfVEVTVCkpOworfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgp
Cit7CisgICAgLy8gV2UncmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVycyEKICAgICBtX2dsZXMy
Q29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLQogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDhmNDRhZmViZDBhMmM3YjQ3NWQwNGJhNDg3MjNm
MWNkYzU0NTUwOTEuLjE1Y2YzMWFiZDQ2MjUyMzMzNTg0ZjRmNDZkYzI1MjczNjgyNzJhYTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNjEsOSArNjEsMTcgQEAgcHVibGljOgogICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bShQYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gZ2xlczJDb250ZXh0KTsK
ICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKLSAgICAvLyBVcGRhdGVzIHRoZSBjb250
ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0IGFu
ZCByZWNvbXBvc2l0ZXMKLSAgICAvLyBhbGwgdGhlIGxheWVycy4KLSAgICB2b2lkIGRyYXdMYXll
cnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pOworICAgIC8vIHVwZGF0ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5k
IHNjcm9sbHMgdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIHByZXBhcmVUb0RyYXdMYXllcnMoY29u
c3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIAorICAgIC8vIHVwZGF0ZXMgYSByZWN0
YW5nbGUgd2l0aGluIHRoZSByb290IGxheWVyIHRleHR1cmUKKyAgICB2b2lkIHVwZGF0ZVJvb3RM
YXllclRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOworCisgICAgLy8gZHJh
d3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIGRyYXdM
YXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KTsKKworICAgIC8vIHB1dHMgYmFja2J1ZmZlciBvbnNjcmVlbgorICAgIHZvaWQgcHJlc2Vu
dCgpOwogCiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBs
YXllcikgeyBtX3Jvb3RMYXllciA9IGxheWVyOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGMwNzY5
MDFhNjM1ZTI1YWIyMzdkNDdhNDI3ZTc0ZTQ2YTY3MjljYTYuLmYzYTNmN2JhNDcwMDlhOGNmMDQ3
MmFiZmY1YWYxNWVjMWI0OWE3MWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEw
LTA5LTA3IE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0ZWQgQ29t
cG9zaXRpbmc6IHNjcmVlbiBnYXJiYWdlIHdoZW4gc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA5MgorCisgICAgICAgIEludHJvZHVj
ZSBhIG5ldyBBUEkgb24gV2ViV2lkZ2V0IGZvciBwYWludGluZyB3aXRoIGFjY2VsZXJhdGVkCisg
ICAgICAgIGNvbXBvc2l0aW5nIHRoYXQgYWxsb3dzIHRoZSBjb21wb3NpdG9yIHRvIHByb3Blcmx5
IGRpc3RpbmdpdXNoCisgICAgICAgIHNjcm9sbGluZywgaW52YWxpZGF0aW9uIGFuZCByZXBhaW50
aW5nIGZyb20gb25lIGFub3RoZXIuIFRoZSBrZXkKKyAgICAgICAgY2hhbmdlIGlzIHRoYXQgaW4g
YWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGNhc2UsIGludmFsaWRhdGVzIGFuZAorICAgICAgICBzY3Jv
bGxpbmcgcGFzcyBkaXJlY3RseSB0byB0aGUgY29tcG9zaXRvciwgcmF0aGVyIHRoYW4gcGFzc2lu
ZyB1cAorICAgICAgICB0byB0aGUgY2xpZW50IGFzIHdhcyB0aGUgY2FzZSBpbiB0aGUgc29mdHdh
cmUgcGF0aC4gRm9yCisgICAgICAgIGFjY2VsZXJhdGVkIHJlbmRlcmluZywgdGhlIHByZXZpb3Vz
IHBhaW50KCkgbWV0aG9kIGlzIHJlcGxhY2VkIGJ5CisgICAgICAgIGEgcGFpciBvZiBtZXRob2Rz
OiBwYWludENvbXBvc2l0ZWQgYW5kCisgICAgICAgIGludmFsaWRhdGVDb21wb3NpdGVkUm9vdExh
eWVyUmVjdC4KKworCisgICAgICAgICogcHVibGljL1dlYldpZGdldC5oOgorICAgICAgICAqIHB1
YmxpYy9XZWJXaWRnZXRDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2lkZ2V0Q2xpZW50
OjpzY2hlZHVsZURlZmVycmVkQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVD
b250ZW50c0FuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNj
cm9sbCk6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVw
TWVudUltcGw6OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OnBhaW50Q29tcG9zaXRlZCk6CisgICAgICAgICogc3Jj
L1dlYlBvcHVwTWVudUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RH
cmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1
cGRhdGVSb290TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
ZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2Nyb2xsUm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmludmFsaWRh
dGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpwYWludENvbXBvc2l0ZWQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAg
ICAqIHRlc3RzL1BvcHVwTWVudVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpUZXN0V2ViV2lk
Z2V0OjppbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpUZXN0V2ViV2lkZ2V0OjpwYWludENvbXBvc2l0ZWQpOgorCiAyMDEwLTA5LTA2ICBKb25hdGhh
biBEaXhvbiAgPGpvdGhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVt
eSBPcmxvdy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IDVjOWY1NGU3OTM2NmI4
M2FmZWU3YzBlMWUzYTMyODhjMzQ0MTJjYTkuLmQwMTAyNzA2NWM5ZTkwYzE0NzU2ZTc3ODdjYTI2
NmRmNjdlYWVjM2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNjAsMTMgKzYw
LDI2IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgaXQgbWF5IHJlc3VsdCBpbiBjYWxscyB0byBXZWJX
aWRnZXRDbGllbnQ6OmRpZEludmFsaWRhdGVSZWN0LgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KSA9IDA7CiAKLSAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHNwZWNpZmllZCByZWdpb24gb2Yg
dGhlIFdlYldpZGdldCBvbnRvIHRoZSBnaXZlbgotICAgIC8vIGNhbnZhcy4gIFlvdSBNVVNUIGNh
bGwgTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMKLSAgICAvLyBva2F5
IHRvIGNhbGwgcGFpbnQgbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4gY2FsbGVk
LAotICAgIC8vIGFzc3VtaW5nIG5vIG90aGVyIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIFdlYldp
ZGdldCAoZS5nLiwgb25jZQotICAgIC8vIGV2ZW50cyBhcmUgcHJvY2Vzc2VkLCBpdCBzaG91bGQg
YmUgYXNzdW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0bwotICAgIC8vIGxheW91dCBpcyB3YXJyYW50
ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2Fu
dmFzKiwgY29uc3QgV2ViUmVjdCYpID0gMDsKKyAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHJl
Y3Rhbmd1bGFyIHJlZ2lvbiB3aXRoaW4gdGhlIFdlYldpZGdldCAKKyAgICAvLyBvbnRvIHRoZSBz
cGVjaWZpZWQgY2FudmFzIGF0ICh2aWV3UG9ydC54LHZpZXdQb3J0LnkpLiBZb3UgTVVTVCBjYWxs
CisgICAgLy8gTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMgb2theSB0
byBjYWxsIHBhaW50CisgICAgLy8gbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4g
Y2FsbGVkLCBhc3N1bWluZyBubyBvdGhlcgorICAgIC8vIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhl
IFdlYldpZGdldCAoZS5nLiwgb25jZSBldmVudHMgYXJlCisgICAgLy8gcHJvY2Vzc2VkLCBpdCBz
aG91bGQgYmUgYXNzdW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0byBsYXlvdXQgaXMKKyAgICAvLyB3
YXJyYW50ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
V2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYgdmlld1BvcnQpID0gMDsKKworICAgIC8vIFRyaWdn
ZXJzIGNvbXBvc2l0aW5nIG9mIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBzY3JlZW4uCisg
ICAgLy8gVGhlIGZpbmlzaCBhcmd1bWVudCBjb250cm9scyB3aGV0aGVyIHRoZSBjb21wb3NpdG9y
IHdpbGwgd2FpdCBmb3IgdGhlCisgICAgLy8gR1BVIHRvIGZpbmlzaCByZW5kZXJpbmcgYmVmb3Jl
IHJldHVybmluZy4gWW91IE1VU1QgY2FsbCBMYXlvdXQKKyAgICAvLyBiZWZvcmUgY2FsbGluZyB0
aGlzIG1ldGhvZCwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgZGVzY3JpYmVkIGluCisgICAgLy8gdGhl
IHBhaW50IG1ldGhvZCBhYm92ZS4KKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmlu
aXNoKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBj
aGFuZ2UgaW4gdGhlbWUuCisgICAgLy8gSW1wbGVtZW50b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQg
Y29waWVzIG9mIHdpZGdldHMgbmVlZCB0byByZS1yZW5kZXIKKyAgICAvLyBvbiByZWNlaXZpbmcg
dGhpcyBtZXNzYWdlCisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpID0gMDsKIAogICAg
IC8vIENhbGxlZCB0byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhbiBpbnB1dCBldmVudC4gIFJl
dHVybnMgdHJ1ZSBpZgogICAgIC8vIHRoZSBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQsIGZhbHNl
IG90aGVyd2lzZS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
Q2xpZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCmluZGV4
IGJkN2JkNmE3NGZjYmFmMzcxZGYzZTlhNmU0MTBiZWRiZjM1OTIzMjAuLjliZDU1M2YzZjc5ZGY3
ZDliYWE0NDUwZTQxMTVjMjZmZWQ5MzU4NDEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJX
aWRnZXRDbGllbnQuaApAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgLy8gc2Nyb2xsZWQg
YnkgdGhlIHNwZWNpZmllZCBkeCBhbmQgZHkgYW1vdW50cy4KICAgICB2aXJ0dWFsIHZvaWQgZGlk
U2Nyb2xsUmVjdChpbnQgZHgsIGludCBkeSwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3QpIHsgfQog
CisgICAgLy8gQ2FsbGVkIHdoZW4gYSBjYWxsIHRvIFdlYldpZGdldDo6Y29tcG9zaXRlIGlzIHJl
cXVpcmVkCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9CisKICAgICAv
LyBDYWxsZWQgd2hlbiB0aGUgd2lkZ2V0IGFjcXVpcmVzIG9yIGxvc2VzIGZvY3VzLCByZXNwZWN0
aXZlbHkuCiAgICAgdmlydHVhbCB2b2lkIGRpZEZvY3VzKCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGRpZEJsdXIoKSB7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xp
ZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmlu
ZGV4IDhhM2VkYTY2NjZjYjU1YTJhYzAwM2Q2OTdjNjYxMmVmODk2ZGJhZmMuLmUwZGFlMDJhMzQ0
OTM2ZTIyOGMzMDY3MDIyZGI0NTI5Y2Y2NGI1NjIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJv
bWVDbGllbnRJbXBsLmNwcApAQCAtNDkzLDggKzQ5MywxNiBAQCB2b2lkIENocm9tZUNsaWVudElt
cGw6OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
LCBibwogewogICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgp
LT5kaWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVSZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgaWYgKCFtX3dlYlZpZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZSgpKSB7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAg
ICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVSZWN0
KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV93ZWJWaWV3LT5pbnZhbGlkYXRlUm9vdExheWVyUmVjdCh1cGRhdGVSZWN0KTsKKyAgICB9
CisjZW5kaWYKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNG
b3JTbG93U2Nyb2xsKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQpA
QCAtNTA4LDExICs1MTYsMTkgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGwoCiAgICAg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgbV93ZWJWaWV3LT5oaWRlUG9wdXBzKCk7
Ci0gICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKLSAgICAgICAgaW50IGR4ID0gc2Nyb2xs
RGVsdGEud2lkdGgoKTsKLSAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0g
ICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBjbGlwUmVj
dCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3
LT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlm
IChtX3dlYlZpZXctPmNsaWVudCgpKSB7CisgICAgICAgICAgICBpbnQgZHggPSBzY3JvbGxEZWx0
YS53aWR0aCgpOworICAgICAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Cisg
ICAgICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwgY2xp
cFJlY3QpOworICAgICAgICB9CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IH0gZWxzZSB7CisgICAgICAgIG1fd2ViVmlldy0+c2Nyb2xsUm9vdExheWVyKHNjcm9sbERlbHRh
KTsKICAgICB9CisjZW5kaWYKIH0KIAogSW50UG9pbnQgQ2hyb21lQ2xpZW50SW1wbDo6c2NyZWVu
VG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9w
dXBNZW51SW1wbC5jcHAKaW5kZXggNzVkNmNjMTQzODI0YjdmNTkyOTEwMjliNDI3Y2U5MjBjMjNl
NDUzOS4uMDg1YTE1NzVlNTRiZjBlN2E0YWM4ZTU4NzhhMDM4NjA1ODkyZTVkOSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCkBAIC0xNzQsNiArMTc0LDE2IEBAIHZv
aWQgV2ViUG9wdXBNZW51SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJl
Y3QmIHJlY3QpCiAgICAgfQogfQogCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OnRoZW1lQ2hhbmdl
ZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVJbXBs
Ojpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwog
Ym9vbCBXZWJQb3B1cE1lbnVJbXBsOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZl
bnQmIGlucHV0RXZlbnQpCiB7CiAgICAgaWYgKCFtX3dpZGdldCkKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQb3B1cE1lbnVJbXBsLmgKaW5kZXggZWRiYjRhYjUwZDQxNmIwM2I3YmQxYTVmY2U4MDA1NTYw
OTFlYTIyNy4uMjIxYmEwMzhmMmM0YzczNmQ2NzdmYWJmYTMyMmUwNTFmOTA0MjY0YyAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKQEAgLTYzLDYgKzYzLDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiBjYW52YXMs
IGNvbnN0IFdlYlJlY3QmIHJlY3QpOworICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKICAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAgICAgdmlydHVhbCB2
b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBl
bmFibGUpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBmNjNjOTA4MjU2MjZj
YjA2Y2JjNmYwYTVhMzVmMjI3YmJkNWJlNzgyLi45NTVkNDU0ZmJjMWJjZDliYTA3YjI2ZjI2MzA0
YzdhYTc3ZWI0NWMyIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtOTEyLDcg
KzkxMiwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUoY29uc3QgV2ViU2l6ZSYgbmV3U2l6
ZSkKIAogICAgIGlmIChtX2NsaWVudCkgewogICAgICAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAs
IDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRJ
bnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgICAgIGlmIChpc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoKSkgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAg
ICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsKKyNlbmRpZgor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChk
YW1hZ2VkUmVjdCk7CiAgICAgfQogCiAjaWYgT1MoREFSV0lOKQpAQCAtOTQ2LDMzICs5NTEsNDAg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6bGF5b3V0KCkKIAogdm9pZCBXZWJWaWV3SW1wbDo6cGFpbnQo
V2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiB7Ci0KKyAgICBpZiAoaXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0gICAgaWYgKCFpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewor
ICAgICAgICBkb0NvbXBvc2l0ZShjYW52YXMpOworCisgICAgICAgIC8vIFJlYWRiYWNrIGludG8g
dGhlIGNhbnZhcworICAgICAgICAvLyBGSVhNRSBJbnNlcnQgd2ptYWNsZWFuJ3MgcmVhZGJhY2sg
Y29kZSBoZXJlIGZvciB3ZWJraXQgYnVnIDQ0MTI3CiAjZW5kaWYKKyAgICB9IGVsc2UgewogICAg
ICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwogICAgICAgICBp
ZiAod2ViZnJhbWUpCiAgICAgICAgICAgICB3ZWJmcmFtZS0+cGFpbnQoY2FudmFzLCByZWN0KTsK
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gRHJhdyB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIuCi0gICAgICAgIHVwZGF0ZVJv
b3RMYXllckNvbnRlbnRzKHJlY3QpOworICAgIH0KK30KIAotICAgICAgICBXZWJGcmFtZUltcGwq
IHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwotICAgICAgICBpZiAoIXdlYmZyYW1lKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJh
bWVWaWV3KCk7Ci0gICAgICAgIGlmICghdmlldykKLSAgICAgICAgICAgIHJldHVybjsKK3ZvaWQg
V2ViVmlld0ltcGw6OnRoZW1lQ2hhbmdlZCgpCit7CisgICAgaWYgKCFwYWdlKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCk7CiAKLSAgICAgICAgLy8gVGhlIHZpc2libGVSZWN0IGluY2x1ZGVzIHNjcm9sbGJhcnMgd2hl
cmVhcyB0aGUgY29udGVudFJlY3QgZG9lc24ndC4KLSAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVj
dCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKLSAgICAgICAgSW50UmVjdCBjb250
ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7CisgICAgV2ViUmVjdCBk
YW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAgIHZpZXct
PmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKK30KIAotICAgICAgICAvLyBBc2sgdGhlIGxh
eWVyIGNvbXBvc2l0b3IgdG8gcmVkcmF3IGFsbCB0aGUgbGF5ZXJzLgotICAgICAgICBBU1NFUlQo
bV9sYXllclJlbmRlcmVyLT5oYXJkd2FyZUNvbXBvc2l0aW5nKCkpOwotICAgICAgICBtX2xheWVy
UmVuZGVyZXItPmRyYXdMYXllcnMocmVjdCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBJbnRQ
b2ludCh2aWV3LT5zY3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSkpOwotICAgIH0KK3ZvaWQgV2Vi
Vmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisgICAgZG9Db21wb3NpdGUoMCk7CisKKyAgICAvLyBGaW5pc2ggaWYgcmVx
dWVzdGVkLgorICAgIC8vIEZJWE1FOiBoYW5kbGUgZmluaXNoIGZsYWcuCisKKyAgICAvLyBQdXQg
cmVzdWx0IG9uc2NyZWVuLgorICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOwogI2VuZGlm
CiB9CiAKQEAgLTIxMTQsMTEgKzIxMjYsOTUgQEAgYm9vbCBXZWJWaWV3SW1wbDo6YWxsb3dzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGlj
c0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogeworICAgIGJvb2wgd2FzQWN0
aXZlID0gbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CiAgICAgc2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKGxheWVyID8gdHJ1ZSA6IGZhbHNlKTsKICAgICBpZiAobV9s
YXllclJlbmRlcmVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RMYXllcihsYXll
cik7CisgICAgaWYgKHdhc0FjdGl2ZSAhPSBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSkgeworICAgICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9z
aXplLmhlaWdodCk7CisgICAgICAgIGlmIChtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSkgCisgICAgICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChkYW1hZ2VkUmVjdCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1h
Z2VkUmVjdCk7CisgICAgfQorfQorCit2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVk
c0Rpc3BsYXkoKQoreworICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9z
aXRlKCk7Cit9CisKKwordm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVyKGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAg
IC8vIENvbXB1dGUgdGhlIGRhbWFnZSByZWN0IGluIHZpZXdwb3J0IHNwYWNlLgorICAgIFdlYkZy
YW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAgaWYgKCF3ZWJmcmFtZSkK
KyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZp
ZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgY29u
dGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpOworCisgICAgLy8gV2Ug
c3VwcG9ydCBmYXN0IHNjcm9sbGluZyBpbiBvbmUgZGlyZWN0aW9uIGF0IGEgdGltZS4KKyAgICBp
ZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSAmJiBzY3JvbGxEZWx0YS5oZWlnaHQoKSkgeworICAgICAg
ICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChXZWJSZWN0KGNvbnRlbnRSZWN0KSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDb21wdXRlIHRoZSByZWdpb24gd2Ugd2lsbCBleHBv
c2UgYnkgc2Nyb2xsaW5nIFdlIHVzZSB0aGUKKyAgICAvLyBjb250ZW50IHJlY3QgZm9yIGludmFs
aWRhdGlvbi4gIFVzaW5nIHRoaXMgc3BhY2UgZm9yIGRhbWFnZQorICAgIC8vIHJlY3RzIGFsbG93
cyB1cyB0byBpbnRlcm1peCBpbnZhbGlkYXRlcyB3aXRoIHNjcm9sbHMuCisgICAgSW50UmVjdCBk
YW1hZ2VkQ29udGVudHNSZWN0OworICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCgpKSB7CisgICAg
ICAgIGZsb2F0IGR4ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNjcm9sbERlbHRhLndpZHRoKCkpOwor
ICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFkoY29udGVudFJlY3QueSgpKTsKKyAgICAg
ICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoY29udGVudFJlY3QuaGVpZ2h0KCkpOwor
ICAgICAgICBpZiAoZHggPiAwKSB7CisgICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNl
dFgoY29udGVudFJlY3QueCgpKTsKKyAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0
V2lkdGgoZHgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRz
UmVjdC5zZXRYKGNvbnRlbnRSZWN0LnJpZ2h0KCkgKyBkeCk7CisgICAgICAgICAgICBkYW1hZ2Vk
Q29udGVudHNSZWN0LnNldFdpZHRoKC1keCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBmbG9hdCBkeSA9IHN0YXRpY19jYXN0PGZsb2F0PihzY3JvbGxEZWx0YS5oZWlnaHQoKSk7
CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WChjb250ZW50UmVjdC54KCkpOworICAg
ICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFdpZHRoKGNvbnRlbnRSZWN0LndpZHRoKCkpOwor
ICAgICAgICBpZiAoZHkgPiAwKSB7CisgICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNl
dFkoY29udGVudFJlY3QueSgpKTsKKyAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0
SGVpZ2h0KGR5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhbWFnZWRDb250ZW50
c1JlY3Quc2V0WShjb250ZW50UmVjdC5ib3R0b20oKSArIGR5KTsKKyAgICAgICAgICAgIGRhbWFn
ZWRDb250ZW50c1JlY3Quc2V0SGVpZ2h0KC1keSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBt
X3Njcm9sbERhbWFnZS51bml0ZShkYW1hZ2VkQ29udGVudHNSZWN0KTsKKyAgICBzZXRSb290TGF5
ZXJOZWVkc0Rpc3BsYXkoKTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RM
YXllclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyByZWN0IGlzIGluIHZpZXdw
b3J0IHNwYWNlLiBDb252ZXJ0IHRvIGNvbnRlbnQgc3BhY2UKKyAgICAvLyBzbyB0aGF0IGludmFs
aWRhdGlvbnMgYW5kIHNjcm9sbCBpbnZhbGlkYXRpb25zIHBsYXkgd2VsbCB3aXRoIG9uZS1hbm90
aGVyLgorICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIAorICAgIGlmICghcGFnZSgp
KQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZSgpLT5tYWluRnJh
bWUoKS0+dmlldygpOworCisgICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+d2luZG93
VG9Db250ZW50cyhyZWN0KTsKKyAgICAKKyAgICAvLyBGSVhNRTogYWRkIGEgc21hcnRlciBkYW1h
Z2UgYWdncmVnYXRpb24gbG9naWM/IFJpZ2h0IG5vdywgTGF5ZXJDaHJvbWl1bSBkb2VzIHNpbXBs
ZSB1bmlvbi1pbmcuCisgICAgbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+c2V0TmVlZHNE
aXNwbGF5KGNvbnRlbnRSZWN0KTsKIH0KIAorCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKG1faXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID09IGFjdGl2ZSkKQEAgLTIxMjgsMTAgKzIyMjQsNiBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9v
bCBhY3RpdmUpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlKGdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCkpOwogICAgICAgICBpZiAobV9sYXll
clJlbmRlcmVyKSB7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSA9IHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVkcmF3IHRo
ZSBlbnRpcmUgdmlldyBzbyB0aGF0IHRoZSBjb21wb3NpdG9yIGdldHMgdGhlIGVudGlyZSB2aWV3
LAotICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4ganVzdCB0aGUgY3VycmVudGx5LWRpcnR5IHN1
YnNldC4KLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAs
IDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCkpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKICAgICAg
ICAgICAgIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkID0gdHJ1ZTsKQEAgLTIxNDIsMTcgKzIy
MzQsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKGJvb2wgYWN0aXZlKQogICAgIH0KIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9v
dExheWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVjdCkKK3ZvaWQgV2ViVmlld0ltcGw6OnVw
ZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFp
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gRklYTUU6IFRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBwYXRoIGludmFsaWRhdGVzIGEg
MXgxIHJlY3QgYXQgKDAsIDApCi0gICAgLy8gaW4gb3JkZXIgdG8gZ2V0IHRoZSByZW5kZXJlciB0
byBhc2sgdGhlIGNvbXBvc2l0b3IgdG8gcmVkcmF3LiBUaGlzIGlzIG9ubHkKLSAgICAvLyB0ZW1w
b3JhcnkgdW50aWwgd2UgZ2V0IHRoZSBjb21wb3NpdG9yIHRvIHJlbmRlciBkaXJlY3RseSBmcm9t
IGl0cyBvd24gdGhyZWFkLgotICAgIGlmICghcmVjdC54ICYmICFyZWN0LnkgJiYgcmVjdC53aWR0
aCA9PSAxICYmIHJlY3QuaGVpZ2h0ID09IDEpCi0gICAgICAgIHJldHVybjsKLQogICAgIFdlYkZy
YW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CiAgICAgaWYgKCF3ZWJmcmFtZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjE2NCw3ICsyMjUwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICBpZiAocm9v
dExheWVyKSB7CiAgICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29u
dGVudFJlY3QodHJ1ZSk7CiAKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRSb290TGF5ZXJD
YW52YXNTaXplKEludFNpemUocmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpKTsKKyAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5zZXRSb290TGF5ZXJDYW52YXNTaXplKEludFNpemUocmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKSk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVyQ29u
dGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyR3JhcGhpY3NDb250ZXh0KCk7CiAKICNp
ZiBQTEFURk9STShTS0lBKQpAQCAtMjE3NCw3ICsyMjYwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICAgICAgcGxh
dGZvcm1DYW52YXMtPnNhdmUoKTsKIAogICAgICAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8g
dGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgotICAgICAgICBwbGF0Zm9y
bUNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtcmVjdC54KSwgc3RhdGlj
X2Nhc3Q8U2tTY2FsYXI+KC1yZWN0LnkpKTsKKyAgICAgICAgcGxhdGZvcm1DYW52YXMtPnRyYW5z
bGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2Fs
YXI+KC1yZWN0LnkoKSkpOwogCiAgICAgICAgIHJvb3RMYXllckNvbnRleHQtPnNhdmUoKTsKIApA
QCAtMjE4OCw3ICsyMjc0LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29u
dGVudHMoY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShj
Z0NvbnRleHQpOwogCiAgICAgICAgIC8vIEJyaW5nIHRoZSBDb3JlR3JhcGhpY3MgY29udGV4dCBp
bnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFpbnQgcmVjdC4KLSAgICAgICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgLXJlY3QueCwgLXJlY3QueSk7CisgICAgICAg
IENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQsIC1yZWN0LngoKSwgLXJlY3QueSgpKTsK
IAogICAgICAgICByb290TGF5ZXJDb250ZXh0LT5zYXZlKCk7CiAKQEAgLTIyMDIsMjIgKzIyODgs
NDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2Vi
UmVjdCYgcmVjdCkKICAgICB9CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5l
ZWRzRGlzcGxheSgpCit2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZShXZWJDYW52YXMqIGNh
bnZhcykKIHsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBwb3N0aW5nIGEgcmVwYWludCBl
dmVudCBmb3IgdGhlIGVudGlyZSBwYWdlIHdoaWNoIGlzIGFuIG92ZXJraWxsLgotICAgIGlmIChX
ZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpKSB7Ci0gICAgICAgIGlmIChG
cmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCkpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBUZW1wb3JhcnkgaGFjayB0byBpbnZhbGlkYXRlIHBhcnQgb2YgdGhlIHBhZ2Ugc28g
dGhhdCB3ZSBnZXQgY2FsbGVkIHRvIHJlbmRlcgotICAgICAgICAgICAgLy8gICAgICAgIGFnYWlu
LgotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50
UmVjdCh0cnVlKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChJbnRS
ZWN0KDAsIDAsIDEsIDEpKTsKKyAgICBBU1NFUlQoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKCkpOworICAgIGlmICghcGFnZSgpKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVWaWV3
KiB2aWV3ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOworCisgICAgLy8gVGhlIHZpc2li
bGVSZWN0IGluY2x1ZGVzIHNjcm9sbGJhcnMgd2hlcmVhcyB0aGUgY29udGVudFJlY3QgZG9lc24n
dC4KKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRy
dWUpOworICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3Qo
ZmFsc2UpOworICAgIEludFJlY3Qgdmlld1BvcnQgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0
aCwgbV9zaXplLmhlaWdodCk7CisKKyAgICAvLyBHaXZlIHRoZSBjb21wb3NpdG9yIGEgY2hhbmNl
IHRvIHNldHVwL3Jlc2l6ZSB0aGUgcm9vdCB0ZXh0dXJlIGhhbmRsZSBhbmQgcGVyZm9ybSBzY3Jv
bGxpbmcuCisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVwYXJlVG9EcmF3TGF5ZXJzKHZpc2libGVS
ZWN0LCBjb250ZW50UmVjdCwgSW50UG9pbnQodmlldy0+c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZ
KCkpKTsKKworICAgIC8vIERyYXcgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgorICAg
IFZlY3RvcjxGbG9hdFJlY3Q+IGRhbWFnZVJlY3RzOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZCht
X3Njcm9sbERhbWFnZSk7CisgICAgZGFtYWdlUmVjdHMuYXBwZW5kKG1fbGF5ZXJSZW5kZXJlci0+
cm9vdExheWVyKCktPmRpcnR5UmVjdCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRh
bWFnZVJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIFRoZSBkYW1hZ2UgcmVjdCBmb3Ig
dGhlIHJvb3QgbGF5ZXIgaXMgaW4gY29udGVudCBzcGFjZSBbZS5nLiB1bnNjcm9sbGVkXS4KKyAg
ICAgICAgLy8gQ29udmVydCBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gdmlld1BvcnQgc3BhY2UuCisg
ICAgICAgIGNvbnN0IEZsb2F0UmVjdCBkYW1hZ2VkQ29udGVudFJlY3QgPSBkYW1hZ2VSZWN0c1tp
XTsKKyAgICAgICAgSW50UmVjdCBkYW1hZ2VkUmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3co
SW50UmVjdChkYW1hZ2VkQ29udGVudFJlY3QpKTsKKworICAgICAgICAvLyBJbnRlcnNlY3QgdGhp
cyByZWN0YW5nbGUgd2l0aCB0aGUgdmlld1BvcnQuCisgICAgICAgIGRhbWFnZWRSZWN0LmludGVy
c2VjdCh2aWV3UG9ydCk7CisKKyAgICAgICAgLy8gTm93IHJlbmRlciBpdC4KKyAgICAgICAgaWYg
KGRhbWFnZWRSZWN0LndpZHRoKCkgJiYgZGFtYWdlZFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAg
ICAgIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGRhbWFnZWRSZWN0KTsKKyAgICAgICAgICAgIG1f
bGF5ZXJSZW5kZXJlci0+dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QoZGFtYWdlZFJlY3QpOwog
ICAgICAgICB9CiAgICAgfQorICAgIG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCktPnJlc2V0
TmVlZHNEaXNwbGF5KCk7CisgICAgbV9zY3JvbGxEYW1hZ2UgPSBXZWJSZWN0KCk7CiAKLSAgICBp
ZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzRGlz
cGxheSgpOworICAgIC8vIERyYXcgdGhlIGFjdHVhbCBsYXllcnMuLi4KKyAgICBtX2xheWVyUmVu
ZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKIH0KLSNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYKKwogCiBQYXNzT3duUHRyPEdM
RVMyQ29udGV4dD4gV2ViVmlld0ltcGw6OmdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCkKIHsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBhNDIwOTljOWQ1ZjQ4NDNjMmYzZTQ3ZDc1Mzc3
ZDRkNWEwZjdlOWYxLi44YWJlMDZkNTZlNzY5ZDEyMmE2ZmM5YzZhZjViNDVlMWVmYWY0MTFiIDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
V2ViR0xFUzJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViTmF2aWdhdGlvblBvbGljeS5oIgogI2lu
Y2x1ZGUgIldlYlBvaW50LmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgogI2luY2x1ZGUgIldlYlNp
emUuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCkBAIC05
Miw2ICs5Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNp
emUmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50
KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFu
Z2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CiAgICAgdmly
dHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZp
cnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3Vz
KGJvb2wgZW5hYmxlKTsKQEAgLTMyMiw5ICszMjUsMTEgQEAgcHVibGljOgogICAgIH0KIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2b2lkIHNldFJvb3RMYXllck5lZWRz
RGlzcGxheSgpOwotICAgIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZv
cm1MYXllciopOwogICAgIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOworICAg
IHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciopOworICAg
IHZvaWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzY3JvbGxSb290TGF5
ZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEpOworICAgIHZvaWQgaW52YWxp
ZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogI2VuZGlmCiAgICAg
Ly8gT25zY3JlZW4gY29udGV4dHMgZGlzcGxheSB0byB0aGUgc2NyZWVuIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIHZpZXcuCiAgICAgLy8gT2Zmc2NyZWVuIGNvbnRleHRzIHJlbmRlciBvZmZzY3JlZW4g
YnV0IGNhbiBzaGFyZSByZXNvdXJjZXMgd2l0aCB0aGUKQEAgLTM4Niw3ICszOTEsOCBAQCBwcml2
YXRlOgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wpOwotICAgIHZvaWQgdXBkYXRlUm9vdExh
eWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYpOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29u
dGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZG9Db21wb3NpdGUoV2Vi
Q2FudmFzKik7CiAjZW5kaWYKIAogICAgIFdlYlZpZXdDbGllbnQqIG1fY2xpZW50OwpAQCAtNTEx
LDYgKzUxNyw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbW91c2VD
YXB0dXJlTm9kZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBXZWJD
b3JlOjpJbnRSZWN0IG1fc2Nyb2xsRGFtYWdlOwogICAgIE93blB0cjxXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBib29sIG1faXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlOwogICAgIGJvb2wgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQ7
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKaW5kZXggNTAzMTlhZjIzYjBh
OTJmNDRjOTE1OGVmYjNlNjQ2MTgyMzk4MWQxMC4uYWVmMjljZjJkMDQxMjRiNGM4N2VmMDdhMmU1
ZjM4NTA5Njc4MmI2OCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVu
dVRlc3QuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcApA
QCAtMTI4LDYgKzEyOCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0
IFdlYlNpemUmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdGhlbWVDaGFuZ2VkKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29s
IGZpbmlzaCkgeyB9CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2Vi
SW5wdXRFdmVudCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0
dXJlTG9zdCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKSB7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66951</attachid>
            <date>2010-09-08 15:43:08 -0700</date>
            <delta_ts>2010-09-08 16:34:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100908154304.patch</filename>
            <type>text/plain</type>
            <size>36032</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTA3NDkwMzVmZGMxNmEyNWYxMTVlYTJmNTIyYjg3YTQxODQzMDc1OC4uMzVkYzJlNTc5OWQyNjVl
YTJjMmRhMzQ2M2Y2M2VhM2U0N2UwMzIzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wOCAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDcgIEphbiBFIEhhbnNzZW4gIDxqaGFuc3NlbkBzZW5jaGEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA2NTE5ZjFmZjJiYTE4MjZm
MmUyODU5NjJiMDM4MTcxMmE0NmU5ZGNjLi5kNmVlZjNhY2QxZTQzNzFjYjQxZGZhNTJjZWVlYjJh
NjRlZjkxYWMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5OSwxMCArMjk5LDE1IEBAIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKG1fYm91bmRzID09
IHNpemUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGJvb2wgZmlyc3RSZXNpemUgPSAhbV9ib3Vu
ZHMud2lkdGgoKSAmJiAhbV9ib3VuZHMuaGVpZ2h0KCkgJiYgc2l6ZS53aWR0aCgpICYmIHNpemUu
aGVpZ2h0KCk7CisKICAgICBtX2JvdW5kcyA9IHNpemU7CiAgICAgbV9iYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKIAotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgaWYgKGZpcnN0UmVzaXplKQor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCiBjb25zdCBMYXll
ckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApAQCAtMzUzLDcgKzM1
OCw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAKICAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MzYzLDYgKzM2NywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewog
ICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJhMTUwODg0NGJhMzViMzQ1MWY4
MmNkNTg5YTY1Mzk3NjUyMWEwOGMuLjJkMjI1ZGFmNWEyMDcxYmFiZmViZDZhN2NmM2NjMDVlMjZi
MzkwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnR5UmVjdDsgfQorICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzg5Mjk4YWVkOGNlOTc2MzAyMGNmZTBhZTIyNDhlMzczM2Rm
MmM4Yy4uZDU2NWFiM2U4NGEzMzQyZWY4NjNhZWVhYTA3MmVlNTQwMzgxOWNiMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMTU5LDggKzE1OSw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQogCiAvLyBVcGRhdGVzIHRoZSBj
b250ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0ZXh0dXJlIHRoYXQgZmFsbCBpbnNpZGUgdGhlIHVw
ZGF0ZVJlY3QKIC8vIGFuZCByZS1jb21wb3NpdHMgYWxsIHN1YmxheWVycy4KLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKG1faGFyZHdhcmVDb21w
b3NpdGluZyk7CiAKQEAgLTIwMCwxNCArMjAwLDEyIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3Qm
CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKIAogICAgIEludFBv
aW50IHNjcm9sbERlbHRhID0gdG9Qb2ludChzY3JvbGxQb3NpdGlvbiAtIG1fc2Nyb2xsUG9zaXRp
b24pOwotICAgIC8vIFNjcm9sbCBvbmx5IHdoZW4gdGhlIHVwZGF0ZVJlY3QgY29udGFpbnMgcGl4
ZWxzIGZvciB0aGUgbmV3bHkgdW5jb3ZlcmVkIHJlZ2lvbiB0byBhdm9pZCBmbGFzaGluZy4KLSAg
ICBpZiAoKHNjcm9sbERlbHRhLngoKSAmJiB1cGRhdGVSZWN0LndpZHRoKCkgPj0gYWJzKHNjcm9s
bERlbHRhLngoKSkgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA+PSBjb250ZW50UmVjdC5oZWlnaHQo
KSkKLSAgICAgICAgfHwgKHNjcm9sbERlbHRhLnkoKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID49
IGFicyhzY3JvbGxEZWx0YS55KCkpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA+PSBjb250ZW50UmVj
dC53aWR0aCgpKSkgeworICAgIC8vIFNjcm9sbCB0aGUgYmFja2J1ZmZlcgorICAgIGlmIChzY3Jv
bGxEZWx0YS54KCkgfHwgc2Nyb2xsRGVsdGEueSgpKSB7CiAgICAgICAgIC8vIFNjcm9sbGluZyB3
b3JrcyBhcyBmb2xsb3dzOiBXZSByZW5kZXIgYSBxdWFkIHdpdGggdGhlIGN1cnJlbnQgcm9vdCBs
YXllciBjb250ZW50cwogICAgICAgICAvLyB0cmFuc2xhdGVkIGJ5IHRoZSBhbW91bnQgdGhlIHBh
Z2UgaGFzIHNjcm9sbGVkIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZSBhbmQgdGhlbiByZWFkIHRoZQog
ICAgICAgICAvLyBwaXhlbHMgb2YgdGhlIGNvbnRlbnQgYXJlYSAodmlzaWJsZSBhcmVhIGV4Y2x1
ZGluZyB0aGUgc2Nyb2xsIGJhcnMpIGJhY2sgaW50byB0aGUKLSAgICAgICAgLy8gcm9vdCBsYXll
ciB0ZXh0dXJlLiBUaGUgbmV3bHkgZXhwb3NlZCBhcmVhIGlzIHN1YmVzcXVlbnRseSBmaWxsZWQg
YXMgdXN1YWwgd2l0aAotICAgICAgICAvLyB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZVJlY3Qu
CisgICAgICAgIC8vIHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQgYXJlYSB3
aWxsIGJlIGZpbGxlZCBieSBhIHN1YnNlcXVlbnQgZHJhd0xheWVyc0ludG9SZWN0IGNhbGwKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsZWRMYXllck1hdHJpeDsKICNpZiBQTEFU
Rk9STShTS0lBKQogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGY7CkBAIC0yMzgsNDIg
KzIzNiw2NSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgICAgICBtX3Njcm9sbFBvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb247CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoZSBmb2xsb3dp
bmcgY2hlY2sgc2hvdWxkIGdvIGF3YXkgd2hlbiB0aGUgY29tcG9zaXRvciByZW5kZXJzIGluZGVw
ZW5kZW50bHkgZnJvbSBpdHMgb3duIHRocmVhZC4KLSAgICAvLyBJZ25vcmUgYSAxeDEgdXBkYXRl
IHJlY3QgYXQgKDAsIDApIGFzIHRoYXQncyB1c2VkIGEgd2F5IHRvIGtpY2sgb2ZmIGEgcmVkcmF3
IGZvciB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAoISghdXBkYXRlUmVjdC54KCkgJiYgIXVwZGF0
ZVJlY3QueSgpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA9PSAxICYmIHVwZGF0ZVJlY3QuaGVpZ2h0
KCkgPT0gMSkpIHsKLSAgICAgICAgLy8gVXBkYXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0g
ICAgICAgIEFTU0VSVCgodXBkYXRlUmVjdC54KCkgKyB1cGRhdGVSZWN0LndpZHRoKCkgPD0gbV9y
b290TGF5ZXJUZXh0dXJlV2lkdGgpCi0gICAgICAgICAgICAgICAmJiAodXBkYXRlUmVjdC55KCkg
KyB1cGRhdGVSZWN0LmhlaWdodCgpIDw9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkpOworICAg
IC8vIFRyYW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9z
aXRpb24uCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC50cmFu
c2xhdGUzZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7
CisKKyAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0
cmFuc2Zvcm1zLgorICAgIGZsb2F0IG9wYWNpdHkgPSAxOworICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVy
cygpOworICAgIHNpemVfdCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgp
OyBpKyspCisgICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCks
IG1hdHJpeCwgb3BhY2l0eSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQoreworICAg
IEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOworCisgICAgaWYgKCFtX3Jvb3RMYXllcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0
ZXh0dXJlLgorICAgIEFTU0VSVCgodXBkYXRlUmVjdC5yaWdodCgpICA8PSBtX3Jvb3RMYXllclRl
eHR1cmVXaWR0aCkKKyAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QuYm90dG9tKCkgPD0gbV9yb290
TGF5ZXJUZXh0dXJlSGVpZ2h0KSk7CiAKICNpZiBQTEFURk9STShTS0lBKQotICAgICAgICAvLyBH
ZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIGNvbnN0IFNrQml0
bWFwIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFw
KGZhbHNlKTsKLSAgICAgICAgaW50IHJvb3RMYXllcldpZHRoID0gYml0bWFwLndpZHRoKCk7Ci0g
ICAgICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7Ci0gICAgICAgIEFT
U0VSVChyb290TGF5ZXJXaWR0aCA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgcm9vdExheWVySGVp
Z2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB2b2lkKiBwaXhlbHMgPSBiaXRt
YXAuZ2V0UGl4ZWxzKCk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVw
ZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBHTEMoZ2xUZXhT
dWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0Lnko
KSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVkIHJlY3QuCisgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGludCBiaXRtYXBXaWR0
aCA9IGJpdG1hcC53aWR0aCgpOworICAgIGludCBiaXRtYXBIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0
KCk7CisgICAgQVNTRVJUKGJpdG1hcFdpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBiaXRt
YXBIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCogcGl4ZWxzID0gYml0
bWFwLmdldFBpeGVscygpOworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVk
IHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBHTEMoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRl
UmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBwaXhlbHMpKTsKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICAgICAvLyBHZXQgdGhlIGNv
bnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkg
PT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0
R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWln
aHQoKSk7Ci0gICAgICAgIHZvaWQqIHBpeGVscyA9IG1fcm9vdExheWVyQmFja2luZ1N0b3JlLmRh
dGEoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0
IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQg
dGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5l
ZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgotICAgICAgICBHTEMoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVj
dC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRl
UmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0Lndp
ZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgLy8gR2V0IHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIC8vIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0g
dXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0
SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWlnaHQo
KSk7CisgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwor
CisgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9v
dCBsYXllciB0ZXh0dXJlLgorICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQg
aW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBm
b3IgdGhpcyBoZXJlLgorICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXllclRleHR1
cmVIZWlnaHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhl
bHMpKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3Jt
LiIKICNlbmRpZgotICAgIH0KK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwogCiAgICAgZ2xDbGVh
ckNvbG9yKDAsIDAsIDEsIDEpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdM
X0RFUFRIX0JVRkZFUl9CSVQpOwogCisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKwogICAgIC8vIFJlbmRlciB0aGUgcm9vdCBsYXll
ciB1c2luZyBhIHF1YWQgdGhhdCB0YWtlcyB1cCB0aGUgZW50aXJlIHZpc2libGUgYXJlYSBvZiB0
aGUgd2luZG93LgogICAgIC8vIFdlIHJldXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IENv
bnRlbnRMYXllckNocm9taXVtLgogICAgIGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFy
ZWRWYWx1ZXMqIGNvbnRlbnRMYXllclZhbHVlcyA9IGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygp
OwpAQCAtMjk3LDYgKzMxOCw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgR0xDKGds
RW5hYmxlKEdMX0JMRU5EKSk7CiAgICAgR0xDKGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01J
TlVTX1NSQ19BTFBIQSkpOwogCisgICAgLy8gU2V0IHRoZSByb290VmlzaWJsZVJlY3QgLS0tIHVz
ZWQgYnkgc3Vic2VxdWVudCBkcmF3TGF5ZXJzIGNhbGxzCisgICAgbV9yb290VmlzaWJsZVJlY3Qg
PSB2aXNpYmxlUmVjdDsKKwogICAgIC8vIFRyYW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5
ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Nj
cm9sbFBvc2l0aW9uLnkoKSwgMCk7CkBAIC0zMDgsMTEgKzMzMiwxMCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25z
dCBJbnRSZWN0JgogICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAg
ICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwg
b3BhY2l0eSk7CiAKLSAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwotCiAgICAg
Ly8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5ZXJz
IG92ZXIgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkp
OwogICAgIEZsb2F0UmVjdCBzY2lzc29yUmVjdChjb250ZW50UmVjdCk7CisKICAgICAvLyBUaGUg
c2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgogICAgIHNj
aXNzb3JSZWN0Lm1vdmUoLW1fc2Nyb2xsUG9zaXRpb24ueCgpLCAtbV9zY3JvbGxQb3NpdGlvbi55
KCkpOwogICAgIHNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOwpAQCAtMzIzLDEzICszNDYsMTYg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICBHTEMoZ2xTdGVuY2lsTWFzaygwKSk7CiAK
ICAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBvbmUgbW9yZSB0aW1lIHRvIGRyYXcgdGhl
IGxheWVycy4KLSAgICBmb3IgKGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQogICAgICAgICBk
cmF3TGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgc2Npc3NvclJlY3QpOwogCiAg
ICAgR0xDKGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpKTsKK30KIAordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnByZXNlbnQoKQoreworICAgIC8vIFdlJ3JlIGRvbmUhIFRpbWUgdG8gc3dh
cGJ1ZmZlcnMhCiAgICAgbV9nbGVzMkNvbnRleHQtPnN3YXBCdWZmZXJzKCk7Ci0KICAgICBtX25l
ZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA4ZjQ0YWZl
YmQwYTJjN2I0NzVkMDRiYTQ4NzIzZjFjZGM1NDU1MDkxLi44NGY5ZTY1MTcyOGNkNDkwODQ4Yjcy
YjNjNGEyYjQzZjRlNDYxMGI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTYxLDkgKzYxLDE3
IEBAIHB1YmxpYzoKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc093blB0cjxHTEVTMkNv
bnRleHQ+IGdsZXMyQ29udGV4dCk7CiAgICAgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogCi0g
ICAgLy8gVXBkYXRlcyB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIgdGhhdCBmYWxsIGlu
c2lkZSB0aGUgdXBkYXRlUmVjdCBhbmQgcmVjb21wb3NpdGVzCi0gICAgLy8gYWxsIHRoZSBsYXll
cnMuCi0gICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKKyAgICAvLyB1cGRhdGVzIHNpemUgb2Ygcm9vdCB0
ZXh0dXJlLCBpZiBuZWVkZWQsIGFuZCBzY3JvbGxzIHRoZSBiYWNrYnVmZmVyCisgICAgdm9pZCBw
cmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKKworICAg
IC8vIHVwZGF0ZXMgYSByZWN0YW5nbGUgd2l0aGluIHRoZSByb290IGxheWVyIHRleHR1cmUKKyAg
ICB2b2lkIHVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QpOworCisgICAgLy8gZHJhd3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZm
ZXIKKyAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKworICAgIC8vIHB1dHMgYmFja2J1ZmZlciBvbnNjcmVl
bgorICAgIHZvaWQgcHJlc2VudCgpOwogCiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0
cjxMYXllckNocm9taXVtPiBsYXllcikgeyBtX3Jvb3RMYXllciA9IGxheWVyOyB9CiAgICAgTGF5
ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDkwZGM1MzYyYmRkYTYzZjgxODkxZjQyNDc3MzkzYTM0MzIxZGU3MzIuLmRm
NjNjNzM3NjE4OWIxNzZhNWE4YWI3NGY2ZDAyNjhhYmZkMWY4NTggMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ4IEBACisyMDEwLTA5LTA4IE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1
bV0gQWNjZWxlcmF0ZWQgQ29tcG9zaXRpbmc6IHNjcmVlbiBnYXJiYWdlIHdoZW4gc2Nyb2xsaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTA5Mgor
CisgICAgICAgIEludHJvZHVjZSBhIG5ldyBBUEkgb24gV2ViV2lkZ2V0IGZvciBwYWludGluZyB3
aXRoIGFjY2VsZXJhdGVkCisgICAgICAgIGNvbXBvc2l0aW5nIHRoYXQgYWxsb3dzIHRoZSBjb21w
b3NpdG9yIHRvIHByb3Blcmx5IGRpc3RpbmdpdXNoCisgICAgICAgIHNjcm9sbGluZywgaW52YWxp
ZGF0aW9uIGFuZCByZXBhaW50aW5nIGZyb20gb25lIGFub3RoZXIuIFRoZSBrZXkKKyAgICAgICAg
Y2hhbmdlIGlzIHRoYXQgaW4gYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGNhc2UsIGludmFsaWRhdGVz
IGFuZAorICAgICAgICBzY3JvbGxpbmcgcGFzcyBkaXJlY3RseSB0byB0aGUgY29tcG9zaXRvciwg
cmF0aGVyIHRoYW4gcGFzc2luZyB1cAorICAgICAgICB0byB0aGUgY2xpZW50IGFzIHdhcyB0aGUg
Y2FzZSBpbiB0aGUgc29mdHdhcmUgcGF0aC4gRm9yCisgICAgICAgIGFjY2VsZXJhdGVkIHJlbmRl
cmluZywgdGhlIHByZXZpb3VzIHBhaW50KCkgbWV0aG9kIGlzIHJlcGxhY2VkIGJ5CisgICAgICAg
IGEgcGFpciBvZiBtZXRob2RzOiBwYWludENvbXBvc2l0ZWQgYW5kCisgICAgICAgIGludmFsaWRh
dGVDb21wb3NpdGVkUm9vdExheWVyUmVjdC4KKworCisgICAgICAgICogcHVibGljL1dlYldpZGdl
dC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXRDbGllbnQuaDoKKyAgICAgICAgKFdlYktp
dDo6V2ViV2lkZ2V0Q2xpZW50OjpzY2hlZHVsZURlZmVycmVkQ29tcG9zaXRlKToKKyAgICAgICAg
KiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVu
dEltcGw6OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OkNo
cm9tZUNsaWVudEltcGw6OnNjcm9sbCk6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpwYWludCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVy
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OnBhaW50Q29tcG9zaXRl
ZCk6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludENvbXBvc2l0ZWQpOgorICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL1BvcHVwTWVudVRlc3QuY3BwOgorICAgICAgICAo
V2ViS2l0OjpUZXN0V2ViV2lkZ2V0OjppbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3Qp
OgorICAgICAgICAoV2ViS2l0OjpUZXN0V2ViV2lkZ2V0OjpwYWludENvbXBvc2l0ZWQpOgorCiAy
MDEwLTA5LTA3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJXaWRnZXQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKaW5kZXgg
NWM5ZjU0ZTc5MzY2YjgzYWZlZTdjMGUxZTNhMzI4OGMzNDQxMmNhOS4uZDAxMDI3MDY1YzllOTBj
MTQ3NTZlNzc4N2NhMjY2ZGY2N2VhZWMzYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJXaWRnZXQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5o
CkBAIC02MCwxMyArNjAsMjYgQEAgcHVibGljOgogICAgIC8vIGFuZCBpdCBtYXkgcmVzdWx0IGlu
IGNhbGxzIHRvIFdlYldpZGdldENsaWVudDo6ZGlkSW52YWxpZGF0ZVJlY3QuCiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpID0gMDsKIAotICAgIC8vIENhbGxlZCB0byBwYWludCB0aGUgc3BlY2lm
aWVkIHJlZ2lvbiBvZiB0aGUgV2ViV2lkZ2V0IG9udG8gdGhlIGdpdmVuCi0gICAgLy8gY2FudmFz
LiAgWW91IE1VU1QgY2FsbCBMYXlvdXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuICBJdCBp
cwotICAgIC8vIG9rYXkgdG8gY2FsbCBwYWludCBtdWx0aXBsZSB0aW1lcyBvbmNlIGxheW91dCBo
YXMgYmVlbiBjYWxsZWQsCi0gICAgLy8gYXNzdW1pbmcgbm8gb3RoZXIgY2hhbmdlcyBhcmUgbWFk
ZSB0byB0aGUgV2ViV2lkZ2V0IChlLmcuLCBvbmNlCi0gICAgLy8gZXZlbnRzIGFyZSBwcm9jZXNz
ZWQsIGl0IHNob3VsZCBiZSBhc3N1bWVkIHRoYXQgYW5vdGhlciBjYWxsIHRvCi0gICAgLy8gbGF5
b3V0IGlzIHdhcnJhbnRlZCBiZWZvcmUgcGFpbnRpbmcgYWdhaW4pLgotICAgIHZpcnR1YWwgdm9p
ZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgPSAwOworICAgIC8vIENhbGxlZCB0
byBwYWludCB0aGUgcmVjdGFuZ3VsYXIgcmVnaW9uIHdpdGhpbiB0aGUgV2ViV2lkZ2V0IAorICAg
IC8vIG9udG8gdGhlIHNwZWNpZmllZCBjYW52YXMgYXQgKHZpZXdQb3J0Lngsdmlld1BvcnQueSku
IFlvdSBNVVNUIGNhbGwKKyAgICAvLyBMYXlvdXQgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2Qu
ICBJdCBpcyBva2F5IHRvIGNhbGwgcGFpbnQKKyAgICAvLyBtdWx0aXBsZSB0aW1lcyBvbmNlIGxh
eW91dCBoYXMgYmVlbiBjYWxsZWQsIGFzc3VtaW5nIG5vIG90aGVyCisgICAgLy8gY2hhbmdlcyBh
cmUgbWFkZSB0byB0aGUgV2ViV2lkZ2V0IChlLmcuLCBvbmNlIGV2ZW50cyBhcmUKKyAgICAvLyBw
cm9jZXNzZWQsIGl0IHNob3VsZCBiZSBhc3N1bWVkIHRoYXQgYW5vdGhlciBjYWxsIHRvIGxheW91
dCBpcworICAgIC8vIHdhcnJhbnRlZCBiZWZvcmUgcGFpbnRpbmcgYWdhaW4pLgorICAgIHZpcnR1
YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JiB2aWV3UG9ydCkgPSAwOwor
CisgICAgLy8gVHJpZ2dlcnMgY29tcG9zaXRpbmcgb2YgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8g
dGhlIHNjcmVlbi4KKyAgICAvLyBUaGUgZmluaXNoIGFyZ3VtZW50IGNvbnRyb2xzIHdoZXRoZXIg
dGhlIGNvbXBvc2l0b3Igd2lsbCB3YWl0IGZvciB0aGUKKyAgICAvLyBHUFUgdG8gZmluaXNoIHJl
bmRlcmluZyBiZWZvcmUgcmV0dXJuaW5nLiBZb3UgTVVTVCBjYWxsIExheW91dAorICAgIC8vIGJl
Zm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBmb3IgdGhlIHNhbWUgcmVhc29ucyBkZXNjcmliZWQg
aW4KKyAgICAvLyB0aGUgcGFpbnQgbWV0aG9kIGFib3ZlLgorICAgIHZpcnR1YWwgdm9pZCBjb21w
b3NpdGUoYm9vbCBmaW5pc2gpID0gMDsKKworICAgIC8vIENhbGxlZCB0byBpbmZvcm0gdGhlIFdl
YldpZGdldCBvZiBhIGNoYW5nZSBpbiB0aGVtZS4KKyAgICAvLyBJbXBsZW1lbnRvcnMgdGhhdCBj
YWNoZSByZW5kZXJlZCBjb3BpZXMgb2Ygd2lkZ2V0cyBuZWVkIHRvIHJlLXJlbmRlcgorICAgIC8v
IG9uIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2Vk
KCkgPSAwOwogCiAgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0IG9mIGFuIGlu
cHV0IGV2ZW50LiAgUmV0dXJucyB0cnVlIGlmCiAgICAgLy8gdGhlIGV2ZW50IGhhcyBiZWVuIHBy
b2Nlc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJXaWRnZXRDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
Q2xpZW50LmgKaW5kZXggYmQ3YmQ2YTc0ZmNiYWYzNzFkZjNlOWE2ZTQxMGJlZGJmMzU5MjMyMC4u
OWJkNTUzZjNmNzlkZjdkOWJhYTQ0NTBlNDExNWMyNmZlZDkzNTg0MSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaAorKysgYi9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCkBAIC01MCw2ICs1MCw5IEBAIHB1YmxpYzoKICAg
ICAvLyBzY3JvbGxlZCBieSB0aGUgc3BlY2lmaWVkIGR4IGFuZCBkeSBhbW91bnRzLgogICAgIHZp
cnR1YWwgdm9pZCBkaWRTY3JvbGxSZWN0KGludCBkeCwgaW50IGR5LCBjb25zdCBXZWJSZWN0JiBj
bGlwUmVjdCkgeyB9CiAKKyAgICAvLyBDYWxsZWQgd2hlbiBhIGNhbGwgdG8gV2ViV2lkZ2V0Ojpj
b21wb3NpdGUgaXMgcmVxdWlyZWQKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUo
KSB7IH0KKwogICAgIC8vIENhbGxlZCB3aGVuIHRoZSB3aWRnZXQgYWNxdWlyZXMgb3IgbG9zZXMg
Zm9jdXMsIHJlc3BlY3RpdmVseS4KICAgICB2aXJ0dWFsIHZvaWQgZGlkRm9jdXMoKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQmx1cigpIHsgfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xp
ZW50SW1wbC5jcHAKaW5kZXggOGEzZWRhNjY2NmNiNTVhMmFjMDAzZDY5N2M2NjEyZWY4OTZkYmFm
Yy4uZTBkYWUwMmEzNDQ5MzZlMjI4YzMwNjcwMjJkYjQ1MjljZjY0YjU2MiAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCkBAIC00OTMsOCArNDkzLDE2IEBAIHZvaWQg
Q2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QsIGJvCiB7CiAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCi0gICAgICAgIG1fd2Vi
Vmlldy0+Y2xpZW50KCktPmRpZEludmFsaWRhdGVSZWN0KHVwZGF0ZVJlY3QpOworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoIW1fd2ViVmlldy0+aXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNlbmRpZgorICAgICAgICBpZiAobV93ZWJWaWV3LT5j
bGllbnQoKSkKKyAgICAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZEludmFsaWRhdGVS
ZWN0KHVwZGF0ZVJlY3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB9
IGVsc2UgeworICAgICAgICBtX3dlYlZpZXctPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KHVwZGF0
ZVJlY3QpOworICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIENocm9tZUNsaWVudEltcGw6OmludmFs
aWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9v
bCBpbW1lZGlhdGUpCkBAIC01MDgsMTEgKzUxNiwxOSBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6
OnNjcm9sbCgKICAgICBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBtX3dlYlZpZXct
PmhpZGVQb3B1cHMoKTsKLSAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkgewotICAgICAgICBp
bnQgZHggPSBzY3JvbGxEZWx0YS53aWR0aCgpOwotICAgICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0
YS5oZWlnaHQoKTsKLSAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU2Nyb2xsUmVjdChk
eCwgZHksIGNsaXBSZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
aWYgKCFtX3dlYlZpZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjZW5k
aWYKKyAgICAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAgIGludCBk
eCA9IHNjcm9sbERlbHRhLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgZHkgPSBzY3JvbGxEZWx0
YS5oZWlnaHQoKTsKKyAgICAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZFNjcm9sbFJl
Y3QoZHgsIGR5LCBjbGlwUmVjdCk7CisgICAgICAgIH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV93ZWJWaWV3LT5zY3JvbGxSb290TGF5
ZXIoc2Nyb2xsRGVsdGEpOwogICAgIH0KKyNlbmRpZgogfQogCiBJbnRQb2ludCBDaHJvbWVDbGll
bnRJbXBsOjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAppbmRleCA3NWQ2Y2MxNDM4MjRiN2Y1OTI5MTAy
OWI0MjdjZTkyMGMyM2U0NTM5Li4wODVhMTU3NWU1NGJmMGU3YTRhYzhlNTg3OGEwMzg2MDU4OTJl
NWQ5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3Bw
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTE3NCw2
ICsxNzQsMTYgQEAgdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZh
cywgY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICB9CiB9CiAKK3ZvaWQgV2ViUG9wdXBNZW51SW1w
bDo6dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
YlBvcHVwTWVudUltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCiBib29sIFdlYlBvcHVwTWVudUltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29u
c3QgV2ViSW5wdXRFdmVudCYgaW5wdXRFdmVudCkKIHsKICAgICBpZiAoIW1fd2lkZ2V0KQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmggYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAppbmRleCBlZGJiNGFiNTBkNDE2YjAzYjdi
ZDFhNWZjZTgwMDU1NjA5MWVhMjI3Li4yMjFiYTAzOGYyYzRjNzM2ZDY3N2ZhYmZhMzIyZTA1MWY5
MDQyNjRjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwu
aAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaApAQCAtNjMsNiAr
NjMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJD
YW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHRo
ZW1lQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOwog
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRGb2N1cyhib29sIGVuYWJsZSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4
IGY2M2M5MDgyNTYyNmNiMDZjYmM2ZjBhNWEzNWYyMjdiYmQ1YmU3ODIuLjk1NWQ0NTRmYmMxYmNk
OWJhMDdiMjZmMjYzMDRjN2FhNzdlYjQ1YzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCkBAIC05MTIsNyArOTEyLDEyIEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlc2l6ZShjb25zdCBX
ZWJTaXplJiBuZXdTaXplKQogCiAgICAgaWYgKG1fY2xpZW50KSB7CiAgICAgICAgIFdlYlJlY3Qg
ZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKLSAgICAgICAg
bV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICAgICAgaWYgKGlz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgICAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGFtYWdlZFJl
Y3QpOworI2VuZGlmCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZElu
dmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkBAIC05
NDYsMzMgKzk1MSw0MCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpsYXlvdXQoKQogCiB2b2lkIFdlYlZp
ZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsK
LQorICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSgpKSB7CisgICAgICAgIGRvQ29tcG9zaXRlKGNhbnZhcyk7CisKKyAgICAgICAgLy8g
UmVhZGJhY2sgaW50byB0aGUgY2FudmFzCisgICAgICAgIC8vIEZJWE1FIEluc2VydCB3am1hY2xl
YW4ncyByZWFkYmFjayBjb2RlIGhlcmUgZm9yIHdlYmtpdCBidWcgNDQxMjcKICNlbmRpZgorICAg
IH0gZWxzZSB7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBs
KCk7CiAgICAgICAgIGlmICh3ZWJmcmFtZSkKICAgICAgICAgICAgIHdlYmZyYW1lLT5wYWludChj
YW52YXMsIHJlY3QpOwotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllci4KLSAg
ICAgICAgdXBkYXRlUm9vdExheWVyQ29udGVudHMocmVjdCk7CisgICAgfQorfQogCi0gICAgICAg
IFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7Ci0gICAgICAgIGlmICgh
d2ViZnJhbWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZyYW1lVmlldyogdmlldyA9
IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKLSAgICAgICAgaWYgKCF2aWV3KQotICAgICAgICAgICAg
cmV0dXJuOwordm9pZCBXZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIXBh
Z2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKTsKIAotICAgICAgICAvLyBUaGUgdmlzaWJsZVJlY3QgaW5jbHVkZXMg
c2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250ZW50UmVjdCBkb2Vzbid0LgotICAgICAgICBJbnRS
ZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwotICAgICAg
ICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsK
KyAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdo
dCk7CisgICAgdmlldy0+aW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworfQogCi0gICAgICAg
IC8vIEFzayB0aGUgbGF5ZXIgY29tcG9zaXRvciB0byByZWRyYXcgYWxsIHRoZSBsYXllcnMuCi0g
ICAgICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSk7Ci0g
ICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyhyZWN0LCB2aXNpYmxlUmVjdCwgY29u
dGVudFJlY3QsIEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7Ci0g
ICAgfQordm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQoreworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBkb0NvbXBvc2l0ZSgwKTsKKworICAgIC8v
IEZpbmlzaCBpZiByZXF1ZXN0ZWQuCisgICAgLy8gRklYTUU6IGhhbmRsZSBmaW5pc2ggZmxhZy4K
KworICAgIC8vIFB1dCByZXN1bHQgb25zY3JlZW4uCisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVz
ZW50KCk7CiAjZW5kaWYKIH0KIApAQCAtMjExNCwxMSArMjEyNiw5NSBAQCBib29sIFdlYlZpZXdJ
bXBsOjphbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKIAogdm9pZCBXZWJWaWV3SW1wbDo6
c2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpCiB7Cisg
ICAgYm9vbCB3YXNBY3RpdmUgPSBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsKICAg
ICBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUobGF5ZXIgPyB0cnVlIDogZmFsc2Up
OwogICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0
Um9vdExheWVyKGxheWVyKTsKKyAgICBpZiAod2FzQWN0aXZlICE9IG1faXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlKSB7CisgICAgICAgIEludFJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9z
aXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKKyAgICAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlKSAKKyAgICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRh
bWFnZWRSZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFs
aWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNl
dFJvb3RMYXllck5lZWRzRGlzcGxheSgpCit7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAg
ICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX2NsaWVudC0+
c2NoZWR1bGVDb21wb3NpdGUoKTsKK30KKworCit2b2lkIFdlYlZpZXdJbXBsOjpzY3JvbGxSb290
TGF5ZXIoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgQVNTRVJUKG1fbGF5ZXJS
ZW5kZXJlcik7CisgICAgLy8gQ29tcHV0ZSB0aGUgZGFtYWdlIHJlY3QgaW4gdmlld3BvcnQgc3Bh
Y2UuCisgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKKyAgICBp
ZiAoIXdlYmZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2Vi
ZnJhbWUtPmZyYW1lVmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7
CisKKyAgICAvLyBXZSBzdXBwb3J0IGZhc3Qgc2Nyb2xsaW5nIGluIG9uZSBkaXJlY3Rpb24gYXQg
YSB0aW1lLgorICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCgpICYmIHNjcm9sbERlbHRhLmhlaWdo
dCgpKSB7CisgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KFdlYlJlY3QoY29udGVudFJl
Y3QpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lv
biB3ZSB3aWxsIGV4cG9zZSBieSBzY3JvbGxpbmcgV2UgdXNlIHRoZQorICAgIC8vIGNvbnRlbnQg
cmVjdCBmb3IgaW52YWxpZGF0aW9uLiAgVXNpbmcgdGhpcyBzcGFjZSBmb3IgZGFtYWdlCisgICAg
Ly8gcmVjdHMgYWxsb3dzIHVzIHRvIGludGVybWl4IGludmFsaWRhdGVzIHdpdGggc2Nyb2xscy4K
KyAgICBJbnRSZWN0IGRhbWFnZWRDb250ZW50c1JlY3Q7CisgICAgaWYgKHNjcm9sbERlbHRhLndp
ZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgZHggPSBzdGF0aWNfY2FzdDxmbG9hdD4oc2Nyb2xsRGVs
dGEud2lkdGgoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WShjb250ZW50UmVj
dC55KCkpOworICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdodChjb250ZW50UmVj
dC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChkeCA+IDApIHsKKyAgICAgICAgICAgIGRhbWFnZWRD
b250ZW50c1JlY3Quc2V0WChjb250ZW50UmVjdC54KCkpOworICAgICAgICAgICAgZGFtYWdlZENv
bnRlbnRzUmVjdC5zZXRXaWR0aChkeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBk
YW1hZ2VkQ29udGVudHNSZWN0LnNldFgoY29udGVudFJlY3QucmlnaHQoKSArIGR4KTsKKyAgICAg
ICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoLWR4KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGZsb2F0IGR5ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNjcm9sbERl
bHRhLmhlaWdodCgpKTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRYKGNvbnRlbnRS
ZWN0LngoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoY29udGVudFJl
Y3Qud2lkdGgoKSk7CisgICAgICAgIGlmIChkeSA+IDApIHsKKyAgICAgICAgICAgIGRhbWFnZWRD
b250ZW50c1JlY3Quc2V0WShjb250ZW50UmVjdC55KCkpOworICAgICAgICAgICAgZGFtYWdlZENv
bnRlbnRzUmVjdC5zZXRIZWlnaHQoZHkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKGNvbnRlbnRSZWN0LmJvdHRvbSgpICsgZHkpOworICAg
ICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoLWR5KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1fc2Nyb2xsRGFtYWdlLnVuaXRlKGRhbWFnZWRDb250ZW50c1JlY3QpOwor
ICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpp
bnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIHJl
Y3QgaXMgaW4gdmlld3BvcnQgc3BhY2UuIENvbnZlcnQgdG8gY29udGVudCBzcGFjZQorICAgIC8v
IHNvIHRoYXQgaW52YWxpZGF0aW9ucyBhbmQgc2Nyb2xsIGludmFsaWRhdGlvbnMgcGxheSB3ZWxs
IHdpdGggb25lLWFub3RoZXIuCisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgCisg
ICAgaWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBw
YWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CisKKyAgICBGbG9hdFJlY3QgY29udGVudFJlY3Qg
PSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJlY3QpOworICAgIAorICAgIC8vIEZJWE1FOiBhZGQg
YSBzbWFydGVyIGRhbWFnZSBhZ2dyZWdhdGlvbiBsb2dpYz8gUmlnaHQgbm93LCBMYXllckNocm9t
aXVtIGRvZXMgc2ltcGxlIHVuaW9uLWluZy4KKyAgICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXll
cigpLT5zZXROZWVkc0Rpc3BsYXkoY29udGVudFJlY3QpOwogfQogCisKIHZvaWQgV2ViVmlld0lt
cGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKICAg
ICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPT0gYWN0aXZlKQpAQCAtMjEy
OCwxMCArMjIyNCw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUoZ2V0T25zY3JlZW5HTEVTMkNvbnRleHQoKSk7CiAgICAg
ICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9y
Y2UgYSByZWRyYXcgdGhlIGVudGlyZSB2aWV3IHNvIHRoYXQgdGhlIGNvbXBvc2l0b3IgZ2V0cyB0
aGUgZW50aXJlIHZpZXcsCi0gICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBqdXN0IHRoZSBjdXJy
ZW50bHktZGlydHkgc3Vic2V0LgotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVS
ZWN0KEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9
IGZhbHNlOwogICAgICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSB0cnVlOwpA
QCAtMjE0MiwxNyArMjIzNCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgfQogfQogCi12b2lkIFdlYlZpZXdJ
bXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQordm9pZCBX
ZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyBGSVhNRTogVGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIHBhdGgg
aW52YWxpZGF0ZXMgYSAxeDEgcmVjdCBhdCAoMCwgMCkKLSAgICAvLyBpbiBvcmRlciB0byBnZXQg
dGhlIHJlbmRlcmVyIHRvIGFzayB0aGUgY29tcG9zaXRvciB0byByZWRyYXcuIFRoaXMgaXMgb25s
eQotICAgIC8vIHRlbXBvcmFyeSB1bnRpbCB3ZSBnZXQgdGhlIGNvbXBvc2l0b3IgdG8gcmVuZGVy
IGRpcmVjdGx5IGZyb20gaXRzIG93biB0aHJlYWQuCi0gICAgaWYgKCFyZWN0LnggJiYgIXJlY3Qu
eSAmJiByZWN0LndpZHRoID09IDEgJiYgcmVjdC5oZWlnaHQgPT0gMSkKLSAgICAgICAgcmV0dXJu
OwotCiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICBp
ZiAoIXdlYmZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC0yMTY0LDcgKzIyNTAsNyBAQCB2b2lk
IFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0
KQogICAgIGlmIChyb290TGF5ZXIpIHsKICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZp
ZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKIAotICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnNldFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6ZShyZWN0LndpZHRoLCByZWN0LmhlaWdodCkp
OworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6
ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
KiByb290TGF5ZXJDb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXJHcmFwaGljc0Nv
bnRleHQoKTsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCkBAIC0yMTc0LDcgKzIyNjAsNyBAQCB2b2lk
IFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0
KQogICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+c2F2ZSgpOwogCiAgICAgICAgIC8vIEJyaW5nIHRo
ZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0g
ICAgICAgIHBsYXRmb3JtQ2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1y
ZWN0LngpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueSkpOworICAgICAgICBwbGF0Zm9y
bUNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtcmVjdC54KCkpLCBzdGF0
aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueSgpKSk7CiAKICAgICAgICAgcm9vdExheWVyQ29udGV4
dC0+c2F2ZSgpOwogCkBAIC0yMTg4LDcgKzIyNzQsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRh
dGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNnQ29udGV4dCk7CiAKICAgICAgICAgLy8gQnJpbmcgdGhlIENvcmVHcmFw
aGljcyBjb250ZXh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0
LgotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCAtcmVjdC54LCAtcmVj
dC55KTsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgLXJlY3QueCgp
LCAtcmVjdC55KCkpOwogCiAgICAgICAgIHJvb3RMYXllckNvbnRleHQtPnNhdmUoKTsKIApAQCAt
MjIwMiwyMiArMjI4OCw0OCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250
ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIH0KIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6
c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKK3ZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRl
KFdlYkNhbnZhcyogY2FudmFzKQogewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlJ3JlIHBvc3Rp
bmcgYSByZXBhaW50IGV2ZW50IGZvciB0aGUgZW50aXJlIHBhZ2Ugd2hpY2ggaXMgYW4gb3Zlcmtp
bGwuCi0gICAgaWYgKFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCkpIHsK
LSAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKSkgewot
ICAgICAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFyeSBoYWNrIHRvIGludmFsaWRhdGUgcGFydCBv
ZiB0aGUgcGFnZSBzbyB0aGF0IHdlIGdldCBjYWxsZWQgdG8gcmVuZGVyCi0gICAgICAgICAgICAv
LyAgICAgICAgYWdhaW4uCi0gICAgICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+
dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFs
aWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMSwgMSkpOworICAgIEFTU0VSVChpc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoKSk7CisgICAgaWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CisKKyAg
ICAvLyBUaGUgdmlzaWJsZVJlY3QgaW5jbHVkZXMgc2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250
ZW50UmVjdCBkb2Vzbid0LgorICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxl
Q29udGVudFJlY3QodHJ1ZSk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2li
bGVDb250ZW50UmVjdChmYWxzZSk7CisgICAgSW50UmVjdCB2aWV3UG9ydCA9IEludFJlY3QoMCwg
MCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKKworICAgIC8vIEdpdmUgdGhlIGNvbXBv
c2l0b3IgYSBjaGFuY2UgdG8gc2V0dXAvcmVzaXplIHRoZSByb290IHRleHR1cmUgaGFuZGxlIGFu
ZCBwZXJmb3JtIHNjcm9sbGluZy4KKyAgICBtX2xheWVyUmVuZGVyZXItPnByZXBhcmVUb0RyYXdM
YXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBJbnRQb2ludCh2aWV3LT5zY3JvbGxYKCks
IHZpZXctPnNjcm9sbFkoKSkpOworCisgICAgLy8gRHJhdyB0aGUgY29udGVudHMgb2YgdGhlIHJv
b3QgbGF5ZXIuCisgICAgVmVjdG9yPEZsb2F0UmVjdD4gZGFtYWdlUmVjdHM7CisgICAgZGFtYWdl
UmVjdHMuYXBwZW5kKG1fc2Nyb2xsRGFtYWdlKTsKKyAgICBkYW1hZ2VSZWN0cy5hcHBlbmQobV9s
YXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+ZGlydHlSZWN0KCkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZGFtYWdlUmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gVGhlIGRh
bWFnZSByZWN0IGZvciB0aGUgcm9vdCBsYXllciBpcyBpbiBjb250ZW50IHNwYWNlIFtlLmcuIHVu
c2Nyb2xsZWRdLgorICAgICAgICAvLyBDb252ZXJ0IGZyb20gY29udGVudCBzcGFjZSB0byB2aWV3
UG9ydCBzcGFjZS4KKyAgICAgICAgY29uc3QgRmxvYXRSZWN0IGRhbWFnZWRDb250ZW50UmVjdCA9
IGRhbWFnZVJlY3RzW2ldOworICAgICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0ID0gdmlldy0+Y29u
dGVudHNUb1dpbmRvdyhJbnRSZWN0KGRhbWFnZWRDb250ZW50UmVjdCkpOworCisgICAgICAgIC8v
IEludGVyc2VjdCB0aGlzIHJlY3RhbmdsZSB3aXRoIHRoZSB2aWV3UG9ydC4KKyAgICAgICAgZGFt
YWdlZFJlY3QuaW50ZXJzZWN0KHZpZXdQb3J0KTsKKworICAgICAgICAvLyBOb3cgcmVuZGVyIGl0
LgorICAgICAgICBpZiAoZGFtYWdlZFJlY3Qud2lkdGgoKSAmJiBkYW1hZ2VkUmVjdC5oZWlnaHQo
KSkgeworICAgICAgICAgICAgdXBkYXRlUm9vdExheWVyQ29udGVudHMoZGFtYWdlZFJlY3QpOwor
ICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChk
YW1hZ2VkUmVjdCk7CiAgICAgICAgIH0KICAgICB9CisgICAgbV9sYXllclJlbmRlcmVyLT5yb290
TGF5ZXIoKS0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX3Njcm9sbERhbWFnZSA9IFdlYlJl
Y3QoKTsKIAotICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJl
ci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgLy8gRHJhdyB0aGUgYWN0dWFsIGxheWVycy4uLgor
ICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3Qp
OwogfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNlbmRpZgorCiAK
IFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBXZWJWaWV3SW1wbDo6Z2V0T25zY3JlZW5HTEVTMkNv
bnRleHQoKQogewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGE0MjA5OWM5ZDVmNDg0
M2MyZjNlNDdkNzUzNzdkNGQ1YTBmN2U5ZjEuLjhhYmUwNmQ1NmU3NjlkMTIyYTZmYzljNmFmNWI0
NWUxZWZhZjQxMWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJXZWJHTEVTMkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9u
UG9saWN5LmgiCiAjaW5jbHVkZSAiV2ViUG9pbnQuaCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCiAj
aW5jbHVkZSAiV2ViU2l6ZS5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldl
YlZpZXcuaCIKQEAgLTkyLDYgKzkzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNp
emUoY29uc3QgV2ViU2l6ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCB0aGVtZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmlu
aXNoKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2
ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpAQCAtMzIyLDkgKzMyNSwxMSBAQCBwdWJsaWM6
CiAgICAgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZvaWQgc2V0
Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihX
ZWJDb3JlOjpQbGF0Zm9ybUxheWVyKik7CiAgICAgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCk7CisgICAgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9y
bUxheWVyKik7CisgICAgdm9pZCBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKKyAgICB2b2lk
IHNjcm9sbFJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSk7Cisg
ICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CiAjZW5kaWYKICAgICAvLyBPbnNjcmVlbiBjb250ZXh0cyBkaXNwbGF5IHRvIHRoZSBzY3JlZW4g
YXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlldy4KICAgICAvLyBPZmZzY3JlZW4gY29udGV4dHMgcmVu
ZGVyIG9mZnNjcmVlbiBidXQgY2FuIHNoYXJlIHJlc291cmNlcyB3aXRoIHRoZQpAQCAtMzg2LDcg
KzM5MSw4IEBAIHByaXZhdGU6CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCk7Ci0gICAgdm9p
ZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0Jik7CisgICAgdm9pZCB1cGRh
dGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBk
b0NvbXBvc2l0ZShXZWJDYW52YXMqKTsKICNlbmRpZgogCiAgICAgV2ViVmlld0NsaWVudCogbV9j
bGllbnQ7CkBAIC01MTEsNiArNTE3LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6
Tm9kZT4gbV9tb3VzZUNhcHR1cmVOb2RlOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorICAgIFdlYkNvcmU6OkludFJlY3QgbV9zY3JvbGxEYW1hZ2U7CiAgICAgT3duUHRyPFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIGJvb2wg
bV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CiAgICAgYm9vbCBtX2NvbXBvc2l0b3JD
cmVhdGlvbkZhaWxlZDsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1l
bnVUZXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAppbmRl
eCA1MDMxOWFmMjNiMGE5MmY0NGM5MTU4ZWZiM2U2NDYxODIzOTgxZDEwLi5hZWYyOWNmMmQwNDEy
NGI0Yzg3ZWYwN2EyZTVmMzg1MDk2NzgyYjY4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVw
TWVudVRlc3QuY3BwCkBAIC0xMjgsNiArMTI4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Y29tcG9zaXRlKGJvb2wgZmluaXNoKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRF
dmVudChjb25zdCBXZWJJbnB1dEV2ZW50JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
dm9pZCBtb3VzZUNhcHR1cmVMb3N0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJv
b2wpIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66956</attachid>
            <date>2010-09-08 16:34:46 -0700</date>
            <delta_ts>2010-09-08 16:48:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100908163445.patch</filename>
            <type>text/plain</type>
            <size>38638</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTA3NDkwMzVmZGMxNmEyNWYxMTVlYTJmNTIyYjg3YTQxODQzMDc1OC4uYTRkZmRmNTIyNDkyYTQ1
YTUzNzM3OTJmOWY2N2Q3MjcyMzc4NDQyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wNiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDcgIEphbiBFIEhhbnNzZW4gIDxqaGFuc3NlbkBzZW5jaGEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA2NTE5ZjFmZjJiYTE4MjZm
MmUyODU5NjJiMDM4MTcxMmE0NmU5ZGNjLi5kNmVlZjNhY2QxZTQzNzFjYjQxZGZhNTJjZWVlYjJh
NjRlZjkxYWMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5OSwxMCArMjk5LDE1IEBAIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKG1fYm91bmRzID09
IHNpemUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGJvb2wgZmlyc3RSZXNpemUgPSAhbV9ib3Vu
ZHMud2lkdGgoKSAmJiAhbV9ib3VuZHMuaGVpZ2h0KCkgJiYgc2l6ZS53aWR0aCgpICYmIHNpemUu
aGVpZ2h0KCk7CisKICAgICBtX2JvdW5kcyA9IHNpemU7CiAgICAgbV9iYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKIAotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgaWYgKGZpcnN0UmVzaXplKQor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCiBjb25zdCBMYXll
ckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApAQCAtMzUzLDcgKzM1
OCw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAKICAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MzYzLDYgKzM2NywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewog
ICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJhMTUwODg0NGJhMzViMzQ1MWY4
MmNkNTg5YTY1Mzk3NjUyMWEwOGMuLjJkMjI1ZGFmNWEyMDcxYmFiZmViZDZhN2NmM2NjMDVlMjZi
MzkwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnR5UmVjdDsgfQorICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzg5Mjk4YWVkOGNlOTc2MzAyMGNmZTBhZTIyNDhlMzczM2Rm
MmM4Yy4uZDU2NWFiM2U4NGEzMzQyZWY4NjNhZWVhYTA3MmVlNTQwMzgxOWNiMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMTU5LDggKzE1OSw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQogCiAvLyBVcGRhdGVzIHRoZSBj
b250ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0ZXh0dXJlIHRoYXQgZmFsbCBpbnNpZGUgdGhlIHVw
ZGF0ZVJlY3QKIC8vIGFuZCByZS1jb21wb3NpdHMgYWxsIHN1YmxheWVycy4KLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKG1faGFyZHdhcmVDb21w
b3NpdGluZyk7CiAKQEAgLTIwMCwxNCArMjAwLDEyIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3Qm
CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKIAogICAgIEludFBv
aW50IHNjcm9sbERlbHRhID0gdG9Qb2ludChzY3JvbGxQb3NpdGlvbiAtIG1fc2Nyb2xsUG9zaXRp
b24pOwotICAgIC8vIFNjcm9sbCBvbmx5IHdoZW4gdGhlIHVwZGF0ZVJlY3QgY29udGFpbnMgcGl4
ZWxzIGZvciB0aGUgbmV3bHkgdW5jb3ZlcmVkIHJlZ2lvbiB0byBhdm9pZCBmbGFzaGluZy4KLSAg
ICBpZiAoKHNjcm9sbERlbHRhLngoKSAmJiB1cGRhdGVSZWN0LndpZHRoKCkgPj0gYWJzKHNjcm9s
bERlbHRhLngoKSkgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA+PSBjb250ZW50UmVjdC5oZWlnaHQo
KSkKLSAgICAgICAgfHwgKHNjcm9sbERlbHRhLnkoKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID49
IGFicyhzY3JvbGxEZWx0YS55KCkpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA+PSBjb250ZW50UmVj
dC53aWR0aCgpKSkgeworICAgIC8vIFNjcm9sbCB0aGUgYmFja2J1ZmZlcgorICAgIGlmIChzY3Jv
bGxEZWx0YS54KCkgfHwgc2Nyb2xsRGVsdGEueSgpKSB7CiAgICAgICAgIC8vIFNjcm9sbGluZyB3
b3JrcyBhcyBmb2xsb3dzOiBXZSByZW5kZXIgYSBxdWFkIHdpdGggdGhlIGN1cnJlbnQgcm9vdCBs
YXllciBjb250ZW50cwogICAgICAgICAvLyB0cmFuc2xhdGVkIGJ5IHRoZSBhbW91bnQgdGhlIHBh
Z2UgaGFzIHNjcm9sbGVkIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZSBhbmQgdGhlbiByZWFkIHRoZQog
ICAgICAgICAvLyBwaXhlbHMgb2YgdGhlIGNvbnRlbnQgYXJlYSAodmlzaWJsZSBhcmVhIGV4Y2x1
ZGluZyB0aGUgc2Nyb2xsIGJhcnMpIGJhY2sgaW50byB0aGUKLSAgICAgICAgLy8gcm9vdCBsYXll
ciB0ZXh0dXJlLiBUaGUgbmV3bHkgZXhwb3NlZCBhcmVhIGlzIHN1YmVzcXVlbnRseSBmaWxsZWQg
YXMgdXN1YWwgd2l0aAotICAgICAgICAvLyB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZVJlY3Qu
CisgICAgICAgIC8vIHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQgYXJlYSB3
aWxsIGJlIGZpbGxlZCBieSBhIHN1YnNlcXVlbnQgZHJhd0xheWVyc0ludG9SZWN0IGNhbGwKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsZWRMYXllck1hdHJpeDsKICNpZiBQTEFU
Rk9STShTS0lBKQogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGY7CkBAIC0yMzgsNDIg
KzIzNiw2NSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgICAgICBtX3Njcm9sbFBvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb247CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoZSBmb2xsb3dp
bmcgY2hlY2sgc2hvdWxkIGdvIGF3YXkgd2hlbiB0aGUgY29tcG9zaXRvciByZW5kZXJzIGluZGVw
ZW5kZW50bHkgZnJvbSBpdHMgb3duIHRocmVhZC4KLSAgICAvLyBJZ25vcmUgYSAxeDEgdXBkYXRl
IHJlY3QgYXQgKDAsIDApIGFzIHRoYXQncyB1c2VkIGEgd2F5IHRvIGtpY2sgb2ZmIGEgcmVkcmF3
IGZvciB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAoISghdXBkYXRlUmVjdC54KCkgJiYgIXVwZGF0
ZVJlY3QueSgpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA9PSAxICYmIHVwZGF0ZVJlY3QuaGVpZ2h0
KCkgPT0gMSkpIHsKLSAgICAgICAgLy8gVXBkYXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0g
ICAgICAgIEFTU0VSVCgodXBkYXRlUmVjdC54KCkgKyB1cGRhdGVSZWN0LndpZHRoKCkgPD0gbV9y
b290TGF5ZXJUZXh0dXJlV2lkdGgpCi0gICAgICAgICAgICAgICAmJiAodXBkYXRlUmVjdC55KCkg
KyB1cGRhdGVSZWN0LmhlaWdodCgpIDw9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkpOworICAg
IC8vIFRyYW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9z
aXRpb24uCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC50cmFu
c2xhdGUzZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7
CisKKyAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0
cmFuc2Zvcm1zLgorICAgIGZsb2F0IG9wYWNpdHkgPSAxOworICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVy
cygpOworICAgIHNpemVfdCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgp
OyBpKyspCisgICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCks
IG1hdHJpeCwgb3BhY2l0eSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQoreworICAg
IEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOworCisgICAgaWYgKCFtX3Jvb3RMYXllcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0
ZXh0dXJlLgorICAgIEFTU0VSVCgodXBkYXRlUmVjdC5yaWdodCgpICA8PSBtX3Jvb3RMYXllclRl
eHR1cmVXaWR0aCkKKyAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QuYm90dG9tKCkgPD0gbV9yb290
TGF5ZXJUZXh0dXJlSGVpZ2h0KSk7CiAKICNpZiBQTEFURk9STShTS0lBKQotICAgICAgICAvLyBH
ZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIGNvbnN0IFNrQml0
bWFwIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFw
KGZhbHNlKTsKLSAgICAgICAgaW50IHJvb3RMYXllcldpZHRoID0gYml0bWFwLndpZHRoKCk7Ci0g
ICAgICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7Ci0gICAgICAgIEFT
U0VSVChyb290TGF5ZXJXaWR0aCA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgcm9vdExheWVySGVp
Z2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB2b2lkKiBwaXhlbHMgPSBiaXRt
YXAuZ2V0UGl4ZWxzKCk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVw
ZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBHTEMoZ2xUZXhT
dWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0Lnko
KSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVkIHJlY3QuCisgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGludCBiaXRtYXBXaWR0
aCA9IGJpdG1hcC53aWR0aCgpOworICAgIGludCBiaXRtYXBIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0
KCk7CisgICAgQVNTRVJUKGJpdG1hcFdpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBiaXRt
YXBIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCogcGl4ZWxzID0gYml0
bWFwLmdldFBpeGVscygpOworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVk
IHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBHTEMoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRl
UmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBwaXhlbHMpKTsKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICAgICAvLyBHZXQgdGhlIGNv
bnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkg
PT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0
R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWln
aHQoKSk7Ci0gICAgICAgIHZvaWQqIHBpeGVscyA9IG1fcm9vdExheWVyQmFja2luZ1N0b3JlLmRh
dGEoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0
IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQg
dGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5l
ZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgotICAgICAgICBHTEMoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVj
dC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRl
UmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0Lndp
ZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgLy8gR2V0IHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIC8vIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0g
dXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0
SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWlnaHQo
KSk7CisgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwor
CisgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9v
dCBsYXllciB0ZXh0dXJlLgorICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQg
aW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBm
b3IgdGhpcyBoZXJlLgorICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXllclRleHR1
cmVIZWlnaHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhl
bHMpKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3Jt
LiIKICNlbmRpZgotICAgIH0KK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwogCiAgICAgZ2xDbGVh
ckNvbG9yKDAsIDAsIDEsIDEpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdM
X0RFUFRIX0JVRkZFUl9CSVQpOwogCisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKwogICAgIC8vIFJlbmRlciB0aGUgcm9vdCBsYXll
ciB1c2luZyBhIHF1YWQgdGhhdCB0YWtlcyB1cCB0aGUgZW50aXJlIHZpc2libGUgYXJlYSBvZiB0
aGUgd2luZG93LgogICAgIC8vIFdlIHJldXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IENv
bnRlbnRMYXllckNocm9taXVtLgogICAgIGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFy
ZWRWYWx1ZXMqIGNvbnRlbnRMYXllclZhbHVlcyA9IGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygp
OwpAQCAtMjk3LDYgKzMxOCw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgR0xDKGds
RW5hYmxlKEdMX0JMRU5EKSk7CiAgICAgR0xDKGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01J
TlVTX1NSQ19BTFBIQSkpOwogCisgICAgLy8gU2V0IHRoZSByb290VmlzaWJsZVJlY3QgLS0tIHVz
ZWQgYnkgc3Vic2VxdWVudCBkcmF3TGF5ZXJzIGNhbGxzCisgICAgbV9yb290VmlzaWJsZVJlY3Qg
PSB2aXNpYmxlUmVjdDsKKwogICAgIC8vIFRyYW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5
ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Nj
cm9sbFBvc2l0aW9uLnkoKSwgMCk7CkBAIC0zMDgsMTEgKzMzMiwxMCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25z
dCBJbnRSZWN0JgogICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAg
ICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwg
b3BhY2l0eSk7CiAKLSAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwotCiAgICAg
Ly8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5ZXJz
IG92ZXIgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkp
OwogICAgIEZsb2F0UmVjdCBzY2lzc29yUmVjdChjb250ZW50UmVjdCk7CisKICAgICAvLyBUaGUg
c2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgogICAgIHNj
aXNzb3JSZWN0Lm1vdmUoLW1fc2Nyb2xsUG9zaXRpb24ueCgpLCAtbV9zY3JvbGxQb3NpdGlvbi55
KCkpOwogICAgIHNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOwpAQCAtMzIzLDEzICszNDYsMTYg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICBHTEMoZ2xTdGVuY2lsTWFzaygwKSk7CiAK
ICAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBvbmUgbW9yZSB0aW1lIHRvIGRyYXcgdGhl
IGxheWVycy4KLSAgICBmb3IgKGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQogICAgICAgICBk
cmF3TGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgc2Npc3NvclJlY3QpOwogCiAg
ICAgR0xDKGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpKTsKK30KIAordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnByZXNlbnQoKQoreworICAgIC8vIFdlJ3JlIGRvbmUhIFRpbWUgdG8gc3dh
cGJ1ZmZlcnMhCiAgICAgbV9nbGVzMkNvbnRleHQtPnN3YXBCdWZmZXJzKCk7Ci0KICAgICBtX25l
ZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA4ZjQ0YWZl
YmQwYTJjN2I0NzVkMDRiYTQ4NzIzZjFjZGM1NDU1MDkxLi44NGY5ZTY1MTcyOGNkNDkwODQ4Yjcy
YjNjNGEyYjQzZjRlNDYxMGI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTYxLDkgKzYxLDE3
IEBAIHB1YmxpYzoKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc093blB0cjxHTEVTMkNv
bnRleHQ+IGdsZXMyQ29udGV4dCk7CiAgICAgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogCi0g
ICAgLy8gVXBkYXRlcyB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIgdGhhdCBmYWxsIGlu
c2lkZSB0aGUgdXBkYXRlUmVjdCBhbmQgcmVjb21wb3NpdGVzCi0gICAgLy8gYWxsIHRoZSBsYXll
cnMuCi0gICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKKyAgICAvLyB1cGRhdGVzIHNpemUgb2Ygcm9vdCB0
ZXh0dXJlLCBpZiBuZWVkZWQsIGFuZCBzY3JvbGxzIHRoZSBiYWNrYnVmZmVyCisgICAgdm9pZCBw
cmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKKworICAg
IC8vIHVwZGF0ZXMgYSByZWN0YW5nbGUgd2l0aGluIHRoZSByb290IGxheWVyIHRleHR1cmUKKyAg
ICB2b2lkIHVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QpOworCisgICAgLy8gZHJhd3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9udG8gdGhlIGJhY2tidWZm
ZXIKKyAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKworICAgIC8vIHB1dHMgYmFja2J1ZmZlciBvbnNjcmVl
bgorICAgIHZvaWQgcHJlc2VudCgpOwogCiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0
cjxMYXllckNocm9taXVtPiBsYXllcikgeyBtX3Jvb3RMYXllciA9IGxheWVyOyB9CiAgICAgTGF5
ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDkwZGM1MzYyYmRkYTYzZjgxODkxZjQyNDc3MzkzYTM0MzIxZGU3MzIuLjkx
MmIwYmIwMDlmMzQzN2IwYjEzNjNiYzA4NjRiODhhMDY2ODUwZGQgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDgyIEBACisyMDEwLTA5LTA4ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21p
dW1dIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nOiBzY3JlZW4gZ2FyYmFnZSB3aGVuIHNjcm9sbGlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUwOTIK
KworICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lk
Z2V0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldENsaWVudDo6c2NoZWR1bGVD
b21wb3NpdGUpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KToK
KyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKiBz
cmMvV2ViUG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUlt
cGw6OnRoZW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OmNv
bXBvc2l0ZSk6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuaDoKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXpl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnRoZW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpjb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdEdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVy
TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJvb3RM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnZhbGlkYXRlUm9vdExheWVy
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlUm9v
dExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9Db21wb3Np
dGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorICAgICAgICAqIHRlc3RzL1BvcHVw
TWVudVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpUZXN0V2ViV2lkZ2V0Ojp0aGVtZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXN0V2ViV2lkZ2V0Ojpjb21wb3NpdGUpOgorCisyMDEw
LTA5LTAyICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEFjY2VsZXJhdGVkIENv
bXBvc2l0aW5nOiBzY3JlZW4gZ2FyYmFnZSB3aGVuIHNjcm9sbGluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUwOTIKKworICAgICAgICBJbnRyb2R1
Y2UgYSBuZXcgQVBJIG9uIFdlYldpZGdldCBmb3IgcGFpbnRpbmcgd2l0aCBhY2NlbGVyYXRlZAor
ICAgICAgICBjb21wb3NpdGluZyB0aGF0IGFsbG93cyB0aGUgY29tcG9zaXRvciB0byBwcm9wZXJs
eSBkaXN0aW5naXVzaAorICAgICAgICBzY3JvbGxpbmcsIGludmFsaWRhdGlvbiBhbmQgcmVwYWlu
dGluZyBmcm9tIG9uZSBhbm90aGVyLiBUaGUga2V5CisgICAgICAgIGNoYW5nZSBpcyB0aGF0IGlu
IGFjY2VsZXJhdGVkIHJlbmRlcmluZyBjYXNlLCBpbnZhbGlkYXRlcyBhbmQKKyAgICAgICAgc2Ny
b2xsaW5nIHBhc3MgZGlyZWN0bHkgdG8gdGhlIGNvbXBvc2l0b3IsIHJhdGhlciB0aGFuIHBhc3Np
bmcgdXAKKyAgICAgICAgdG8gdGhlIGNsaWVudCBhcyB3YXMgdGhlIGNhc2UgaW4gdGhlIHNvZnR3
YXJlIHBhdGguIEZvcgorICAgICAgICBhY2NlbGVyYXRlZCByZW5kZXJpbmcsIHRoZSBwcmV2aW91
cyBwYWludCgpIG1ldGhvZCBpcyByZXBsYWNlZCBieQorICAgICAgICBhIHBhaXIgb2YgbWV0aG9k
czogcGFpbnRDb21wb3NpdGVkIGFuZAorICAgICAgICBpbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RM
YXllclJlY3QuCisKKworICAgICAgICAqIHB1YmxpYy9XZWJXaWRnZXQuaDoKKyAgICAgICAgKiBw
dWJsaWMvV2ViV2lkZ2V0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldENsaWVu
dDo6c2NoZWR1bGVEZWZlcnJlZENvbXBvc2l0ZSk6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVu
dEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRl
Q29udGVudHNBbmRXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpz
Y3JvbGwpOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBNZW51SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1
cE1lbnVJbXBsOjppbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpwYWludENvbXBvc2l0ZWQpOgorICAgICAgICAqIHNy
Yy9XZWJQb3B1cE1lbnVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlc2l6ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290
R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
dXBkYXRlUm9vdExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnNjcm9sbFJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjppbnZhbGlk
YXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6cGFpbnRDb21wb3NpdGVkKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAg
ICAgKiB0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGVzdFdlYldp
ZGdldDo6aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6VGVzdFdlYldpZGdldDo6cGFpbnRDb21wb3NpdGVkKToKKwogMjAxMC0wOS0wNyAgVG9ueSBD
aGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZp
c2hlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmggYi9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IDVjOWY1NGU3OTM2NmI4M2Fm
ZWU3YzBlMWUzYTMyODhjMzQ0MTJjYTkuLmQwMTAyNzA2NWM5ZTkwYzE0NzU2ZTc3ODdjYTI2NmRm
NjdlYWVjM2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNjAsMTMgKzYwLDI2
IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgaXQgbWF5IHJlc3VsdCBpbiBjYWxscyB0byBXZWJXaWRn
ZXRDbGllbnQ6OmRpZEludmFsaWRhdGVSZWN0LgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSA9
IDA7CiAKLSAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHNwZWNpZmllZCByZWdpb24gb2YgdGhl
IFdlYldpZGdldCBvbnRvIHRoZSBnaXZlbgotICAgIC8vIGNhbnZhcy4gIFlvdSBNVVNUIGNhbGwg
TGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMKLSAgICAvLyBva2F5IHRv
IGNhbGwgcGFpbnQgbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4gY2FsbGVkLAot
ICAgIC8vIGFzc3VtaW5nIG5vIG90aGVyIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIFdlYldpZGdl
dCAoZS5nLiwgb25jZQotICAgIC8vIGV2ZW50cyBhcmUgcHJvY2Vzc2VkLCBpdCBzaG91bGQgYmUg
YXNzdW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0bwotICAgIC8vIGxheW91dCBpcyB3YXJyYW50ZWQg
YmVmb3JlIHBhaW50aW5nIGFnYWluKS4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFz
KiwgY29uc3QgV2ViUmVjdCYpID0gMDsKKyAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHJlY3Rh
bmd1bGFyIHJlZ2lvbiB3aXRoaW4gdGhlIFdlYldpZGdldCAKKyAgICAvLyBvbnRvIHRoZSBzcGVj
aWZpZWQgY2FudmFzIGF0ICh2aWV3UG9ydC54LHZpZXdQb3J0LnkpLiBZb3UgTVVTVCBjYWxsCisg
ICAgLy8gTGF5b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMgb2theSB0byBj
YWxsIHBhaW50CisgICAgLy8gbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4gY2Fs
bGVkLCBhc3N1bWluZyBubyBvdGhlcgorICAgIC8vIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIFdl
YldpZGdldCAoZS5nLiwgb25jZSBldmVudHMgYXJlCisgICAgLy8gcHJvY2Vzc2VkLCBpdCBzaG91
bGQgYmUgYXNzdW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0byBsYXlvdXQgaXMKKyAgICAvLyB3YXJy
YW50ZWQgYmVmb3JlIHBhaW50aW5nIGFnYWluKS4KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2Vi
Q2FudmFzKiwgY29uc3QgV2ViUmVjdCYgdmlld1BvcnQpID0gMDsKKworICAgIC8vIFRyaWdnZXJz
IGNvbXBvc2l0aW5nIG9mIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBzY3JlZW4uCisgICAg
Ly8gVGhlIGZpbmlzaCBhcmd1bWVudCBjb250cm9scyB3aGV0aGVyIHRoZSBjb21wb3NpdG9yIHdp
bGwgd2FpdCBmb3IgdGhlCisgICAgLy8gR1BVIHRvIGZpbmlzaCByZW5kZXJpbmcgYmVmb3JlIHJl
dHVybmluZy4gWW91IE1VU1QgY2FsbCBMYXlvdXQKKyAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGlz
IG1ldGhvZCwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgZGVzY3JpYmVkIGluCisgICAgLy8gdGhlIHBh
aW50IG1ldGhvZCBhYm92ZS4KKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNo
KSA9IDA7CisKKyAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFu
Z2UgaW4gdGhlbWUuCisgICAgLy8gSW1wbGVtZW50b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQgY29w
aWVzIG9mIHdpZGdldHMgbmVlZCB0byByZS1yZW5kZXIKKyAgICAvLyBvbiByZWNlaXZpbmcgdGhp
cyBtZXNzYWdlCisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpID0gMDsKIAogICAgIC8v
IENhbGxlZCB0byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhbiBpbnB1dCBldmVudC4gIFJldHVy
bnMgdHJ1ZSBpZgogICAgIC8vIHRoZSBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQsIGZhbHNlIG90
aGVyd2lzZS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xp
ZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCmluZGV4IGJk
N2JkNmE3NGZjYmFmMzcxZGYzZTlhNmU0MTBiZWRiZjM1OTIzMjAuLjliZDU1M2YzZjc5ZGY3ZDli
YWE0NDUwZTQxMTVjMjZmZWQ5MzU4NDEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViV2lkZ2V0Q2xpZW50LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRn
ZXRDbGllbnQuaApAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgLy8gc2Nyb2xsZWQgYnkg
dGhlIHNwZWNpZmllZCBkeCBhbmQgZHkgYW1vdW50cy4KICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Ny
b2xsUmVjdChpbnQgZHgsIGludCBkeSwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3QpIHsgfQogCisg
ICAgLy8gQ2FsbGVkIHdoZW4gYSBjYWxsIHRvIFdlYldpZGdldDo6Y29tcG9zaXRlIGlzIHJlcXVp
cmVkCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9CisKICAgICAvLyBD
YWxsZWQgd2hlbiB0aGUgd2lkZ2V0IGFjcXVpcmVzIG9yIGxvc2VzIGZvY3VzLCByZXNwZWN0aXZl
bHkuCiAgICAgdmlydHVhbCB2b2lkIGRpZEZvY3VzKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRp
ZEJsdXIoKSB7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50
SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4
IDhhM2VkYTY2NjZjYjU1YTJhYzAwM2Q2OTdjNjYxMmVmODk2ZGJhZmMuLjgxODRhNDBkMTJkMDI4
MzUyYzc1ZjAyZDA1M2JhODQ0NjUyYTc2MzcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmNwcApAQCAtNDkzLDggKzQ5MywxNiBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6
OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBi
bwogewogICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5k
aWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVSZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgaWYgKCFtX3dlYlZpZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSgpKSB7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAg
ICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVSZWN0KTsK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV93ZWJWaWV3LT5pbnZhbGlkYXRlUm9vdExheWVyUmVjdCh1cGRhdGVSZWN0KTsKKyAgICB9Cisj
ZW5kaWYKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNGb3JT
bG93U2Nyb2xsKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQpAQCAt
NTA4LDExICs1MTYsMTkgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGwoCiAgICAgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgbV93ZWJWaWV3LT5oaWRlUG9wdXBzKCk7Ci0g
ICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpIHsKLSAgICAgICAgaW50IGR4ID0gc2Nyb2xsRGVs
dGEud2lkdGgoKTsKLSAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0gICAg
ICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBjbGlwUmVjdCk7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5p
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmICht
X3dlYlZpZXctPmNsaWVudCgpKSB7CisgICAgICAgICAgICBpbnQgZHggPSBzY3JvbGxEZWx0YS53
aWR0aCgpOworICAgICAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CisgICAg
ICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJl
Y3QpOworICAgICAgICB9CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0g
ZWxzZSB7CisgICAgICAgIG1fd2ViVmlldy0+c2Nyb2xsUm9vdExheWVyKHNjcm9sbERlbHRhLCBj
bGlwUmVjdCk7CiAgICAgfQorI2VuZGlmCiB9CiAKIEludFBvaW50IENocm9tZUNsaWVudEltcGw6
OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3QKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBvcHVwTWVudUltcGwuY3BwCmluZGV4IDc1ZDZjYzE0MzgyNGI3ZjU5MjkxMDI5YjQyN2Nl
OTIwYzIzZTQ1MzkuLjA4NWExNTc1ZTU0YmYwZTdhNGFjOGU1ODc4YTAzODYwNTg5MmU1ZDkgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcApAQCAtMTc0LDYgKzE3NCwx
NiBAQCB2b2lkIFdlYlBvcHVwTWVudUltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25z
dCBXZWJSZWN0JiByZWN0KQogICAgIH0KIH0KIAordm9pZCBXZWJQb3B1cE1lbnVJbXBsOjp0aGVt
ZUNoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViUG9wdXBN
ZW51SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKIGJvb2wgV2ViUG9wdXBNZW51SW1wbDo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJ
bnB1dEV2ZW50JiBpbnB1dEV2ZW50KQogewogICAgIGlmICghbV93aWRnZXQpCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCmluZGV4IGVkYmI0YWI1MGQ0MTZiMDNiN2JkMWE1ZmNl
ODAwNTU2MDkxZWEyMjcuLjIyMWJhMDM4ZjJjNGM3MzZkNjc3ZmFiZmEzMjJlMDUxZjkwNDI2NGMg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oCkBAIC02Myw2ICs2Myw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyog
Y2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFu
Z2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CiAgICAgdmly
dHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZp
cnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3Vz
KGJvb2wgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggZjYzYzkw
ODI1NjI2Y2IwNmNiYzZmMGE1YTM1ZjIyN2JiZDViZTc4Mi4uYmFjNDk1NzI1YjBhN2E2YzMwYTdj
YzU1NWU2MWQ1MWQwNjBkZmM1ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAg
LTkxMiw3ICs5MTIsMTIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUm
IG5ld1NpemUpCiAKICAgICBpZiAobV9jbGllbnQpIHsKICAgICAgICAgV2ViUmVjdCBkYW1hZ2Vk
UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwotICAgICAgICBtX2NsaWVu
dC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworICAgICAgICBpZiAoaXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChkYW1hZ2VkUmVjdCk7Cisj
ZW5kaWYKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0
ZVJlY3QoZGFtYWdlZFJlY3QpOwogICAgIH0KIAogI2lmIE9TKERBUldJTikKQEAgLTk0NiwzMyAr
OTUxLDQ0IEBAIHZvaWQgV2ViVmlld0ltcGw6OmxheW91dCgpCiAKIHZvaWQgV2ViVmlld0ltcGw6
OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQogewotCisgICAg
aWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotICAgIGlmICghaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpIHsKKyAgICAgICAgZG9Db21wb3NpdGUoY2FudmFzKTsKKworICAgICAgICAvLyBSZWFkYmFj
ayBpbnRvIHRoZSBjYW52YXMKKyAgICAgICAgLy8gRklYTUUgSW5zZXJ0IHdqbWFjbGVhbidzIHJl
YWRiYWNrIGNvZGUgaGVyZSBmb3Igd2Via2l0IGJ1ZyA0NDEyNworCisgICAgICAgIC8vIFRlbXBv
cmFyaWx5IHByZXNlbnQgc28gdGhlIGRvd25zdHJlYW0gQ2hyb21pdW0gcmVuZGVyd2lkZ2V0IHN0
aWxsIHJlbmRlcnMuCisgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBjYWxsIG9uY2UgdGhl
IGNoYW5nZXMgdG8gQ2hyb21pdW0ncyByZW5kZXJ3aWRnZXQgaGF2ZSBsYW5kZWQuCisgICAgICAg
IG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOwogI2VuZGlmCisgICAgfSBlbHNlIHsKICAgICAg
ICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICAgICAgaWYg
KHdlYmZyYW1lKQogICAgICAgICAgICAgd2ViZnJhbWUtPnBhaW50KGNhbnZhcywgcmVjdCk7Ci0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IERyYXcgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgotICAgICAgICB1cGRhdGVSb290
TGF5ZXJDb250ZW50cyhyZWN0KTsKKyAgICB9Cit9CiAKLSAgICAgICAgV2ViRnJhbWVJbXBsKiB3
ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKLSAgICAgICAgaWYgKCF3ZWJmcmFtZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1l
VmlldygpOwotICAgICAgICBpZiAoIXZpZXcpCi0gICAgICAgICAgICByZXR1cm47Cit2b2lkIFdl
YlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQoreworICAgIGlmICghcGFnZSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
OwogCi0gICAgICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBpbmNsdWRlcyBzY3JvbGxiYXJzIHdoZXJl
YXMgdGhlIGNvbnRlbnRSZWN0IGRvZXNuJ3QuCi0gICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3Qg
PSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0gICAgICAgIEludFJlY3QgY29udGVu
dFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpOworICAgIFdlYlJlY3QgZGFt
YWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKKyAgICB2aWV3LT5p
bnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7Cit9CiAKLSAgICAgICAgLy8gQXNrIHRoZSBsYXll
ciBjb21wb3NpdG9yIHRvIHJlZHJhdyBhbGwgdGhlIGxheWVycy4KLSAgICAgICAgQVNTRVJUKG1f
bGF5ZXJSZW5kZXJlci0+aGFyZHdhcmVDb21wb3NpdGluZygpKTsKLSAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3TGF5ZXJzKHJlY3QsIHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwgSW50UG9p
bnQodmlldy0+c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkpKTsKLSAgICB9Cit2b2lkIFdlYlZp
ZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIGRvQ29tcG9zaXRlKDApOworCisgICAgLy8gRmluaXNoIGlmIHJlcXVl
c3RlZC4KKyAgICAvLyBGSVhNRTogaGFuZGxlIGZpbmlzaCBmbGFnLgorCisgICAgLy8gUHV0IHJl
c3VsdCBvbnNjcmVlbi4KKyAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKICNlbmRpZgog
fQogCkBAIC0yMTE0LDExICsyMTMwLDExMSBAQCBib29sIFdlYlZpZXdJbXBsOjphbGxvd3NBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKCkKIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpCiB7CisgICAgYm9vbCB3YXNBY3Rp
dmUgPSBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsKICAgICBzZXRJc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUobGF5ZXIgPyB0cnVlIDogZmFsc2UpOwogICAgIGlmIChtX2xh
eWVyUmVuZGVyZXIpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Um9vdExheWVyKGxheWVy
KTsKKyAgICBpZiAod2FzQWN0aXZlICE9IG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KSB7CisgICAgICAgIEludFJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3Np
emUuaGVpZ2h0KTsKKyAgICAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KQorICAgICAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGFtYWdlZFJlY3QpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdl
ZFJlY3QpOworICAgIH0KK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNE
aXNwbGF5KCkKK3sKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0
ZSgpOworICAgIC8vIEZJWE1FOiBUbyBhdm9pZCBicmVha2luZyB0aGUgZG93bnN0cmVhbSBDaHJv
bWUgcmVuZGVyX3dpZGdldCB3aGlsZSBkb3duc3RyZWFtCisgICAgLy8gY2hhbmdlcyBsYW5kLCB3
ZSBhbHNvIGhhdmUgdG8gcGFzcyBhIDF4MSBpbnZhbGlkYXRlIHVwIHRvIHRoZSBjbGllbnQKKyAg
ICB7CisgICAgICAgIFdlYlJlY3QgZGFtYWdlUmVjdCgwLCAwLCAxLCAxKTsKKyAgICAgICAgbV9j
bGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZVJlY3QpOworICAgIH0KK30KKworCit2b2lk
IFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXIoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQoreworICAgIC8vIEZJWE1FOiBUbyBhdm9pZCBicmVh
a2luZyB0aGUgQ2hyb21lIHJlbmRlcl93aWRnZXQgd2hlbiB0aGUgbmV3IGNvbXBvc2l0b3IgcmVu
ZGVyCisgICAgLy8gcGF0aCBpcyBub3QgY2hlY2tlZCBpbiwgd2UgbXVzdCBzdGlsbCBwYXNzIHNj
cm9sbCBkYW1hZ2UgdXAgdG8gdGhlIGNsaWVudC4gVGhpcworICAgIC8vIGNvZGUgd2lsbCBiZSBi
YWNrZWQgb3V0IGluIGEgZm9sbG93dXAgQ0wgb25jZSB0aGUgQ2hyb21pdW0gY2hhbmdlcyBoYXZl
IGxhbmRlZC4KKyAgICBtX2NsaWVudC0+ZGlkU2Nyb2xsUmVjdChzY3JvbGxEZWx0YS53aWR0aCgp
LCBzY3JvbGxEZWx0YS5oZWlnaHQoKSwgY2xpcFJlY3QpOworCisgICAgQVNTRVJUKG1fbGF5ZXJS
ZW5kZXJlcik7CisgICAgLy8gQ29tcHV0ZSB0aGUgZGFtYWdlIHJlY3QgaW4gdmlld3BvcnQgc3Bh
Y2UuCisgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKKyAgICBp
ZiAoIXdlYmZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2Vi
ZnJhbWUtPmZyYW1lVmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7
CisKKyAgICAvLyBXZSBzdXBwb3J0IGZhc3Qgc2Nyb2xsaW5nIGluIG9uZSBkaXJlY3Rpb24gYXQg
YSB0aW1lLgorICAgIGlmIChzY3JvbGxEZWx0YS53aWR0aCgpICYmIHNjcm9sbERlbHRhLmhlaWdo
dCgpKSB7CisgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KFdlYlJlY3QoY29udGVudFJl
Y3QpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lv
biB3ZSB3aWxsIGV4cG9zZSBieSBzY3JvbGxpbmcgV2UgdXNlIHRoZQorICAgIC8vIGNvbnRlbnQg
cmVjdCBmb3IgaW52YWxpZGF0aW9uLiAgVXNpbmcgdGhpcyBzcGFjZSBmb3IgZGFtYWdlCisgICAg
Ly8gcmVjdHMgYWxsb3dzIHVzIHRvIGludGVybWl4IGludmFsaWRhdGVzIHdpdGggc2Nyb2xscy4K
KyAgICBJbnRSZWN0IGRhbWFnZWRDb250ZW50c1JlY3Q7CisgICAgaWYgKHNjcm9sbERlbHRhLndp
ZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgZHggPSBzdGF0aWNfY2FzdDxmbG9hdD4oc2Nyb2xsRGVs
dGEud2lkdGgoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WShjb250ZW50UmVj
dC55KCkpOworICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdodChjb250ZW50UmVj
dC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChkeCA+IDApIHsKKyAgICAgICAgICAgIGRhbWFnZWRD
b250ZW50c1JlY3Quc2V0WChjb250ZW50UmVjdC54KCkpOworICAgICAgICAgICAgZGFtYWdlZENv
bnRlbnRzUmVjdC5zZXRXaWR0aChkeCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBk
YW1hZ2VkQ29udGVudHNSZWN0LnNldFgoY29udGVudFJlY3QucmlnaHQoKSArIGR4KTsKKyAgICAg
ICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoLWR4KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGZsb2F0IGR5ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNjcm9sbERl
bHRhLmhlaWdodCgpKTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRYKGNvbnRlbnRS
ZWN0LngoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoY29udGVudFJl
Y3Qud2lkdGgoKSk7CisgICAgICAgIGlmIChkeSA+IDApIHsKKyAgICAgICAgICAgIGRhbWFnZWRD
b250ZW50c1JlY3Quc2V0WShjb250ZW50UmVjdC55KCkpOworICAgICAgICAgICAgZGFtYWdlZENv
bnRlbnRzUmVjdC5zZXRIZWlnaHQoZHkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKGNvbnRlbnRSZWN0LmJvdHRvbSgpICsgZHkpOworICAg
ICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoLWR5KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1fc2Nyb2xsRGFtYWdlLnVuaXRlKGRhbWFnZWRDb250ZW50c1JlY3QpOwor
ICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpp
bnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIEZJ
WE1FOiBUbyBhdm9pZCBicmVha2luZyB0aGUgQ2hyb21lIHJlbmRlcl93aWRnZXQgd2hlbiB0aGUg
bmV3IGNvbXBvc2l0b3IgcmVuZGVyCisgICAgLy8gcGF0aCBpcyBub3QgY2hlY2tlZCBpbiwgd2Ug
bXVzdCBzdGlsbCBwYXNzIGRhbWFnZSB1cCB0byB0aGUgY2xpZW50LiBUaGlzCisgICAgLy8gY29k
ZSB3aWxsIGJlIGJhY2tlZCBvdXQgaW4gYSBmb2xsb3d1cCBDTCBvbmNlIHRoZSBDaHJvbWl1bSBj
aGFuZ2VzIGhhdmUgbGFuZGVkLgorICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChyZWN0
KTsKKworICAgIC8vIHJlY3QgaXMgaW4gdmlld3BvcnQgc3BhY2UuIENvbnZlcnQgdG8gY29udGVu
dCBzcGFjZQorICAgIC8vIHNvIHRoYXQgaW52YWxpZGF0aW9ucyBhbmQgc2Nyb2xsIGludmFsaWRh
dGlvbnMgcGxheSB3ZWxsIHdpdGggb25lLWFub3RoZXIuCisgICAgQVNTRVJUKG1fbGF5ZXJSZW5k
ZXJlcik7CisKKyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmll
dyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKworICAgIEZsb2F0UmVjdCBj
b250ZW50UmVjdCA9IHZpZXctPndpbmRvd1RvQ29udGVudHMocmVjdCk7CisKKyAgICAvLyBGSVhN
RTogYWRkIGEgc21hcnRlciBkYW1hZ2UgYWdncmVnYXRpb24gbG9naWM/IFJpZ2h0IG5vdywgTGF5
ZXJDaHJvbWl1bSBkb2VzIHNpbXBsZSB1bmlvbi1pbmcuCisgICAgbV9sYXllclJlbmRlcmVyLT5y
b290TGF5ZXIoKS0+c2V0TmVlZHNEaXNwbGF5KGNvbnRlbnRSZWN0KTsKIH0KIAorCiB2b2lkIFdl
YlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUp
CiB7CiAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID09IGFjdGl2ZSkK
QEAgLTIxMjgsMTAgKzIyNDQsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCkp
OwogICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKSB7CiAgICAgICAgICAgICBtX2lzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIEZvcmNlIGEgcmVkcmF3IHRoZSBlbnRpcmUgdmlldyBzbyB0aGF0IHRoZSBjb21wb3NpdG9y
IGdldHMgdGhlIGVudGlyZSB2aWV3LAotICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4ganVzdCB0
aGUgY3VycmVudGx5LWRpcnR5IHN1YnNldC4KLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZh
bGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkID0g
dHJ1ZTsKQEAgLTIxNDIsMTcgKzIyNTQsMTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgIH0KIH0KIAotdm9pZCBX
ZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVjdCkK
K3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgaWYgKCFpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGlu
ZyBwYXRoIGludmFsaWRhdGVzIGEgMXgxIHJlY3QgYXQgKDAsIDApCi0gICAgLy8gaW4gb3JkZXIg
dG8gZ2V0IHRoZSByZW5kZXJlciB0byBhc2sgdGhlIGNvbXBvc2l0b3IgdG8gcmVkcmF3LiBUaGlz
IGlzIG9ubHkKLSAgICAvLyB0ZW1wb3JhcnkgdW50aWwgd2UgZ2V0IHRoZSBjb21wb3NpdG9yIHRv
IHJlbmRlciBkaXJlY3RseSBmcm9tIGl0cyBvd24gdGhyZWFkLgotICAgIGlmICghcmVjdC54ICYm
ICFyZWN0LnkgJiYgcmVjdC53aWR0aCA9PSAxICYmIHJlY3QuaGVpZ2h0ID09IDEpCi0gICAgICAg
IHJldHVybjsKLQogICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7
CiAgICAgaWYgKCF3ZWJmcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2NCw3ICsyMjcwLDcg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVj
dCYgcmVjdCkKICAgICBpZiAocm9vdExheWVyKSB7CiAgICAgICAgIEludFJlY3QgdmlzaWJsZVJl
Y3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7CiAKLSAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5zZXRSb290TGF5ZXJDYW52YXNTaXplKEludFNpemUocmVjdC53aWR0aCwgcmVjdC5o
ZWlnaHQpKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRSb290TGF5ZXJDYW52YXNTaXpl
KEludFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAgICAgICAgIEdyYXBoaWNz
Q29udGV4dCogcm9vdExheWVyQ29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyR3Jh
cGhpY3NDb250ZXh0KCk7CiAKICNpZiBQTEFURk9STShTS0lBKQpAQCAtMjE3NCw3ICsyMjgwLDcg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVj
dCYgcmVjdCkKICAgICAgICAgcGxhdGZvcm1DYW52YXMtPnNhdmUoKTsKIAogICAgICAgICAvLyBC
cmluZyB0aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCBy
ZWN0LgotICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2Nh
bGFyPigtcmVjdC54KSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1yZWN0LnkpKTsKKyAgICAgICAg
cGxhdGZvcm1DYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueCgp
KSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1yZWN0LnkoKSkpOwogCiAgICAgICAgIHJvb3RMYXll
ckNvbnRleHQtPnNhdmUoKTsKIApAQCAtMjE4OCw3ICsyMjk0LDcgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICAgICAg
Q0dDb250ZXh0U2F2ZUdTdGF0ZShjZ0NvbnRleHQpOwogCiAgICAgICAgIC8vIEJyaW5nIHRoZSBD
b3JlR3JhcGhpY3MgY29udGV4dCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFp
bnQgcmVjdC4KLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgLXJlY3Qu
eCwgLXJlY3QueSk7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQsIC1y
ZWN0LngoKSwgLXJlY3QueSgpKTsKIAogICAgICAgICByb290TGF5ZXJDb250ZXh0LT5zYXZlKCk7
CiAKQEAgLTIyMDIsMjIgKzIzMDgsNDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExh
eWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICB9CiB9CiAKLXZvaWQgV2ViVmll
d0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCit2b2lkIFdlYlZpZXdJbXBsOjpkb0Nv
bXBvc2l0ZShXZWJDYW52YXMqIGNhbnZhcykKIHsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdy
ZSBwb3N0aW5nIGEgcmVwYWludCBldmVudCBmb3IgdGhlIGVudGlyZSBwYWdlIHdoaWNoIGlzIGFu
IG92ZXJraWxsLgotICAgIGlmIChXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1w
bCgpKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3
KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkgaGFjayB0byBpbnZhbGlkYXRl
IHBhcnQgb2YgdGhlIHBhZ2Ugc28gdGhhdCB3ZSBnZXQgY2FsbGVkIHRvIHJlbmRlcgotICAgICAg
ICAgICAgLy8gICAgICAgIGFnYWluLgotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9
IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5k
aWRJbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIDEsIDEpKTsKKyAgICBBU1NFUlQoaXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpOworICAgIGlmICghcGFnZSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
OworCisgICAgLy8gVGhlIHZpc2libGVSZWN0IGluY2x1ZGVzIHNjcm9sbGJhcnMgd2hlcmVhcyB0
aGUgY29udGVudFJlY3QgZG9lc24ndC4KKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+
dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOworICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3
LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpOworICAgIEludFJlY3Qgdmlld1BvcnQgPSBJbnRS
ZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CisKKyAgICAvLyBHaXZlIHRo
ZSBjb21wb3NpdG9yIGEgY2hhbmNlIHRvIHNldHVwL3Jlc2l6ZSB0aGUgcm9vdCB0ZXh0dXJlIGhh
bmRsZSBhbmQgcGVyZm9ybSBzY3JvbGxpbmcuCisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVwYXJl
VG9EcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwgSW50UG9pbnQodmlldy0+c2Ny
b2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkpKTsKKworICAgIC8vIERyYXcgdGhlIGNvbnRlbnRzIG9m
IHRoZSByb290IGxheWVyLgorICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRhbWFnZVJlY3RzOworICAg
IGRhbWFnZVJlY3RzLmFwcGVuZChtX3Njcm9sbERhbWFnZSk7CisgICAgZGFtYWdlUmVjdHMuYXBw
ZW5kKG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCktPmRpcnR5UmVjdCgpKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGRhbWFnZVJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8v
IFRoZSBkYW1hZ2UgcmVjdCBmb3IgdGhlIHJvb3QgbGF5ZXIgaXMgaW4gY29udGVudCBzcGFjZSBb
ZS5nLiB1bnNjcm9sbGVkXS4KKyAgICAgICAgLy8gQ29udmVydCBmcm9tIGNvbnRlbnQgc3BhY2Ug
dG8gdmlld1BvcnQgc3BhY2UuCisgICAgICAgIGNvbnN0IEZsb2F0UmVjdCBkYW1hZ2VkQ29udGVu
dFJlY3QgPSBkYW1hZ2VSZWN0c1tpXTsKKyAgICAgICAgSW50UmVjdCBkYW1hZ2VkUmVjdCA9IHZp
ZXctPmNvbnRlbnRzVG9XaW5kb3coSW50UmVjdChkYW1hZ2VkQ29udGVudFJlY3QpKTsKKworICAg
ICAgICAvLyBJbnRlcnNlY3QgdGhpcyByZWN0YW5nbGUgd2l0aCB0aGUgdmlld1BvcnQuCisgICAg
ICAgIGRhbWFnZWRSZWN0LmludGVyc2VjdCh2aWV3UG9ydCk7CisKKyAgICAgICAgLy8gTm93IHJl
bmRlciBpdC4KKyAgICAgICAgaWYgKGRhbWFnZWRSZWN0LndpZHRoKCkgJiYgZGFtYWdlZFJlY3Qu
aGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGRhbWFnZWRS
ZWN0KTsKKyAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlUm9vdExheWVyVGV4dHVy
ZVJlY3QoZGFtYWdlZFJlY3QpOwogICAgICAgICB9CiAgICAgfQorICAgIG1fbGF5ZXJSZW5kZXJl
ci0+cm9vdExheWVyKCktPnJlc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9zY3JvbGxEYW1hZ2Ug
PSBXZWJSZWN0KCk7CiAKLSAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICBtX2xheWVy
UmVuZGVyZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgIC8vIERyYXcgdGhlIGFjdHVhbCBsYXll
cnMuLi4KKyAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRl
bnRSZWN0KTsKIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5k
aWYKKwogCiBQYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gV2ViVmlld0ltcGw6OmdldE9uc2NyZWVu
R0xFUzJDb250ZXh0KCkKIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBhNDIwOTlj
OWQ1ZjQ4NDNjMmYzZTQ3ZDc1Mzc3ZDRkNWEwZjdlOWYxLi41ZWM3ZDM4MzBmM2RlNDgwYjNiMGY0
NjQ1ODZiZDE2ZmQ1ZGRjMTNiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViR0xFUzJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViTmF2
aWdhdGlvblBvbGljeS5oIgogI2luY2x1ZGUgIldlYlBvaW50LmgiCisjaW5jbHVkZSAiV2ViUmVj
dC5oIgogI2luY2x1ZGUgIldlYlNpemUuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWJWaWV3LmgiCkBAIC05Miw2ICs5Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShi
b29sIGZpbmlzaCk7CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2Vi
SW5wdXRFdmVudCYpOwogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wgZW5hYmxlKTsKQEAgLTMyMiw5ICszMjUsMTEgQEAg
cHVibGljOgogICAgIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2
b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwotICAgIHZvaWQgc2V0Um9vdEdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciopOwogICAgIGJvb2wgYWxsb3dzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZygpOworICAgIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6
UGxhdGZvcm1MYXllciopOworICAgIHZvaWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Cisg
ICAgdm9pZCBzY3JvbGxSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVs
dGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2b2lkIGludmFsaWRh
dGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICNlbmRpZgogICAgIC8v
IE9uc2NyZWVuIGNvbnRleHRzIGRpc3BsYXkgdG8gdGhlIHNjcmVlbiBhc3NvY2lhdGVkIHdpdGgg
dGhpcyB2aWV3LgogICAgIC8vIE9mZnNjcmVlbiBjb250ZXh0cyByZW5kZXIgb2Zmc2NyZWVuIGJ1
dCBjYW4gc2hhcmUgcmVzb3VyY2VzIHdpdGggdGhlCkBAIC0zODYsNyArMzkxLDggQEAgcHJpdmF0
ZToKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2b2lkIHNldElzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sKTsKLSAgICB2b2lkIHVwZGF0ZVJvb3RMYXll
ckNvbnRlbnRzKGNvbnN0IFdlYlJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGRvQ29tcG9zaXRlKFdlYkNh
bnZhcyopOwogI2VuZGlmCiAKICAgICBXZWJWaWV3Q2xpZW50KiBtX2NsaWVudDsKQEAgLTUxMSw2
ICs1MTcsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX21vdXNlQ2Fw
dHVyZU5vZGU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgV2ViQ29y
ZTo6SW50UmVjdCBtX3Njcm9sbERhbWFnZTsKICAgICBPd25QdHI8V2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZTsKICAgICBib29sIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCmluZGV4IDUwMzE5YWYyM2IwYTky
ZjQ0YzkxNThlZmIzZTY0NjE4MjM5ODFkMTAuLmFlZjI5Y2YyZDA0MTI0YjRjODdlZjA3YTJlNWYz
ODUwOTY3ODJiNjggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVU
ZXN0LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKQEAg
LTEyOCw2ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBX
ZWJTaXplJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0JikgeyB9CisgICAgdmlydHVhbCB2
b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBm
aW5pc2gpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklu
cHV0RXZlbnQmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVy
ZUxvc3QoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCkgeyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66958</attachid>
            <date>2010-09-08 16:38:17 -0700</date>
            <delta_ts>2010-09-08 16:48:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100908163810.patch</filename>
            <type>text/plain</type>
            <size>38640</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTA3NDkwMzVmZGMxNmEyNWYxMTVlYTJmNTIyYjg3YTQxODQzMDc1OC4uYTRkZmRmNTIyNDkyYTQ1
YTUzNzM3OTJmOWY2N2Q3MjcyMzc4NDQyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wNiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDcgIEphbiBFIEhhbnNzZW4gIDxqaGFuc3NlbkBzZW5jaGEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA2NTE5ZjFmZjJiYTE4MjZm
MmUyODU5NjJiMDM4MTcxMmE0NmU5ZGNjLi5kNmVlZjNhY2QxZTQzNzFjYjQxZGZhNTJjZWVlYjJh
NjRlZjkxYWMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5OSwxMCArMjk5LDE1IEBAIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKG1fYm91bmRzID09
IHNpemUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGJvb2wgZmlyc3RSZXNpemUgPSAhbV9ib3Vu
ZHMud2lkdGgoKSAmJiAhbV9ib3VuZHMuaGVpZ2h0KCkgJiYgc2l6ZS53aWR0aCgpICYmIHNpemUu
aGVpZ2h0KCk7CisKICAgICBtX2JvdW5kcyA9IHNpemU7CiAgICAgbV9iYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKIAotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgaWYgKGZpcnN0UmVzaXplKQor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCiBjb25zdCBMYXll
ckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApAQCAtMzUzLDcgKzM1
OCw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAKICAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MzYzLDYgKzM2NywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewog
ICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJhMTUwODg0NGJhMzViMzQ1MWY4
MmNkNTg5YTY1Mzk3NjUyMWEwOGMuLjJkMjI1ZGFmNWEyMDcxYmFiZmViZDZhN2NmM2NjMDVlMjZi
MzkwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnR5UmVjdDsgfQorICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzg5Mjk4YWVkOGNlOTc2MzAyMGNmZTBhZTIyNDhlMzczM2Rm
MmM4Yy4uZDU2NWFiM2U4NGEzMzQyZWY4NjNhZWVhYTA3MmVlNTQwMzgxOWNiMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMTU5LDggKzE1OSw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQogCiAvLyBVcGRhdGVzIHRoZSBj
b250ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0ZXh0dXJlIHRoYXQgZmFsbCBpbnNpZGUgdGhlIHVw
ZGF0ZVJlY3QKIC8vIGFuZCByZS1jb21wb3NpdHMgYWxsIHN1YmxheWVycy4KLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKG1faGFyZHdhcmVDb21w
b3NpdGluZyk7CiAKQEAgLTIwMCwxNCArMjAwLDEyIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3Qm
CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKIAogICAgIEludFBv
aW50IHNjcm9sbERlbHRhID0gdG9Qb2ludChzY3JvbGxQb3NpdGlvbiAtIG1fc2Nyb2xsUG9zaXRp
b24pOwotICAgIC8vIFNjcm9sbCBvbmx5IHdoZW4gdGhlIHVwZGF0ZVJlY3QgY29udGFpbnMgcGl4
ZWxzIGZvciB0aGUgbmV3bHkgdW5jb3ZlcmVkIHJlZ2lvbiB0byBhdm9pZCBmbGFzaGluZy4KLSAg
ICBpZiAoKHNjcm9sbERlbHRhLngoKSAmJiB1cGRhdGVSZWN0LndpZHRoKCkgPj0gYWJzKHNjcm9s
bERlbHRhLngoKSkgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA+PSBjb250ZW50UmVjdC5oZWlnaHQo
KSkKLSAgICAgICAgfHwgKHNjcm9sbERlbHRhLnkoKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID49
IGFicyhzY3JvbGxEZWx0YS55KCkpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA+PSBjb250ZW50UmVj
dC53aWR0aCgpKSkgeworICAgIC8vIFNjcm9sbCB0aGUgYmFja2J1ZmZlcgorICAgIGlmIChzY3Jv
bGxEZWx0YS54KCkgfHwgc2Nyb2xsRGVsdGEueSgpKSB7CiAgICAgICAgIC8vIFNjcm9sbGluZyB3
b3JrcyBhcyBmb2xsb3dzOiBXZSByZW5kZXIgYSBxdWFkIHdpdGggdGhlIGN1cnJlbnQgcm9vdCBs
YXllciBjb250ZW50cwogICAgICAgICAvLyB0cmFuc2xhdGVkIGJ5IHRoZSBhbW91bnQgdGhlIHBh
Z2UgaGFzIHNjcm9sbGVkIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZSBhbmQgdGhlbiByZWFkIHRoZQog
ICAgICAgICAvLyBwaXhlbHMgb2YgdGhlIGNvbnRlbnQgYXJlYSAodmlzaWJsZSBhcmVhIGV4Y2x1
ZGluZyB0aGUgc2Nyb2xsIGJhcnMpIGJhY2sgaW50byB0aGUKLSAgICAgICAgLy8gcm9vdCBsYXll
ciB0ZXh0dXJlLiBUaGUgbmV3bHkgZXhwb3NlZCBhcmVhIGlzIHN1YmVzcXVlbnRseSBmaWxsZWQg
YXMgdXN1YWwgd2l0aAotICAgICAgICAvLyB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZVJlY3Qu
CisgICAgICAgIC8vIHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQgYXJlYSB3
aWxsIGJlIGZpbGxlZCBieSBhIHN1YnNlcXVlbnQgZHJhd0xheWVyc0ludG9SZWN0IGNhbGwKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsZWRMYXllck1hdHJpeDsKICNpZiBQTEFU
Rk9STShTS0lBKQogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGY7CkBAIC0yMzgsNDIg
KzIzNiw2NSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgICAgICBtX3Njcm9sbFBvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb247CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoZSBmb2xsb3dp
bmcgY2hlY2sgc2hvdWxkIGdvIGF3YXkgd2hlbiB0aGUgY29tcG9zaXRvciByZW5kZXJzIGluZGVw
ZW5kZW50bHkgZnJvbSBpdHMgb3duIHRocmVhZC4KLSAgICAvLyBJZ25vcmUgYSAxeDEgdXBkYXRl
IHJlY3QgYXQgKDAsIDApIGFzIHRoYXQncyB1c2VkIGEgd2F5IHRvIGtpY2sgb2ZmIGEgcmVkcmF3
IGZvciB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAoISghdXBkYXRlUmVjdC54KCkgJiYgIXVwZGF0
ZVJlY3QueSgpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA9PSAxICYmIHVwZGF0ZVJlY3QuaGVpZ2h0
KCkgPT0gMSkpIHsKLSAgICAgICAgLy8gVXBkYXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0g
ICAgICAgIEFTU0VSVCgodXBkYXRlUmVjdC54KCkgKyB1cGRhdGVSZWN0LndpZHRoKCkgPD0gbV9y
b290TGF5ZXJUZXh0dXJlV2lkdGgpCi0gICAgICAgICAgICAgICAmJiAodXBkYXRlUmVjdC55KCkg
KyB1cGRhdGVSZWN0LmhlaWdodCgpIDw9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkpOworICAg
IC8vIFRyYW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9z
aXRpb24uCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC50cmFu
c2xhdGUzZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7
CisKKyAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0
cmFuc2Zvcm1zLgorICAgIGZsb2F0IG9wYWNpdHkgPSAxOworICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVy
cygpOworICAgIHNpemVfdCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgp
OyBpKyspCisgICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCks
IG1hdHJpeCwgb3BhY2l0eSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQoreworICAg
IEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOworCisgICAgaWYgKCFtX3Jvb3RMYXllcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0
ZXh0dXJlLgorICAgIEFTU0VSVCgodXBkYXRlUmVjdC5yaWdodCgpICA8PSBtX3Jvb3RMYXllclRl
eHR1cmVXaWR0aCkKKyAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QuYm90dG9tKCkgPD0gbV9yb290
TGF5ZXJUZXh0dXJlSGVpZ2h0KSk7CiAKICNpZiBQTEFURk9STShTS0lBKQotICAgICAgICAvLyBH
ZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIGNvbnN0IFNrQml0
bWFwIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFw
KGZhbHNlKTsKLSAgICAgICAgaW50IHJvb3RMYXllcldpZHRoID0gYml0bWFwLndpZHRoKCk7Ci0g
ICAgICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7Ci0gICAgICAgIEFT
U0VSVChyb290TGF5ZXJXaWR0aCA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgcm9vdExheWVySGVp
Z2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB2b2lkKiBwaXhlbHMgPSBiaXRt
YXAuZ2V0UGl4ZWxzKCk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVw
ZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBHTEMoZ2xUZXhT
dWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0Lnko
KSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVkIHJlY3QuCisgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGludCBiaXRtYXBXaWR0
aCA9IGJpdG1hcC53aWR0aCgpOworICAgIGludCBiaXRtYXBIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0
KCk7CisgICAgQVNTRVJUKGJpdG1hcFdpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBiaXRt
YXBIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCogcGl4ZWxzID0gYml0
bWFwLmdldFBpeGVscygpOworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVk
IHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBHTEMoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRl
UmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBwaXhlbHMpKTsKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICAgICAvLyBHZXQgdGhlIGNv
bnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkg
PT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0
R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWln
aHQoKSk7Ci0gICAgICAgIHZvaWQqIHBpeGVscyA9IG1fcm9vdExheWVyQmFja2luZ1N0b3JlLmRh
dGEoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0
IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQg
dGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5l
ZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgotICAgICAgICBHTEMoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVj
dC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRl
UmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0Lndp
ZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgLy8gR2V0IHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIC8vIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0g
dXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0
SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWlnaHQo
KSk7CisgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwor
CisgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9v
dCBsYXllciB0ZXh0dXJlLgorICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQg
aW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBm
b3IgdGhpcyBoZXJlLgorICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXllclRleHR1
cmVIZWlnaHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhl
bHMpKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3Jt
LiIKICNlbmRpZgotICAgIH0KK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwogCiAgICAgZ2xDbGVh
ckNvbG9yKDAsIDAsIDEsIDEpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdM
X0RFUFRIX0JVRkZFUl9CSVQpOwogCisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKwogICAgIC8vIFJlbmRlciB0aGUgcm9vdCBsYXll
ciB1c2luZyBhIHF1YWQgdGhhdCB0YWtlcyB1cCB0aGUgZW50aXJlIHZpc2libGUgYXJlYSBvZiB0
aGUgd2luZG93LgogICAgIC8vIFdlIHJldXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IENv
bnRlbnRMYXllckNocm9taXVtLgogICAgIGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFy
ZWRWYWx1ZXMqIGNvbnRlbnRMYXllclZhbHVlcyA9IGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygp
OwpAQCAtMjk3LDYgKzMxOCw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgR0xDKGds
RW5hYmxlKEdMX0JMRU5EKSk7CiAgICAgR0xDKGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01J
TlVTX1NSQ19BTFBIQSkpOwogCisgICAgLy8gU2V0IHRoZSByb290VmlzaWJsZVJlY3QgLS0tIHVz
ZWQgYnkgc3Vic2VxdWVudCBkcmF3TGF5ZXJzIGNhbGxzCisgICAgbV9yb290VmlzaWJsZVJlY3Qg
PSB2aXNpYmxlUmVjdDsKKwogICAgIC8vIFRyYW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5
ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Nj
cm9sbFBvc2l0aW9uLnkoKSwgMCk7CkBAIC0zMDgsMTEgKzMzMiwxMCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25z
dCBJbnRSZWN0JgogICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAg
ICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwg
b3BhY2l0eSk7CiAKLSAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwotCiAgICAg
Ly8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5ZXJz
IG92ZXIgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkp
OwogICAgIEZsb2F0UmVjdCBzY2lzc29yUmVjdChjb250ZW50UmVjdCk7CisKICAgICAvLyBUaGUg
c2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgogICAgIHNj
aXNzb3JSZWN0Lm1vdmUoLW1fc2Nyb2xsUG9zaXRpb24ueCgpLCAtbV9zY3JvbGxQb3NpdGlvbi55
KCkpOwogICAgIHNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOwpAQCAtMzIzLDEzICszNDYsMTYg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICBHTEMoZ2xTdGVuY2lsTWFzaygwKSk7CiAK
ICAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBvbmUgbW9yZSB0aW1lIHRvIGRyYXcgdGhl
IGxheWVycy4KLSAgICBmb3IgKGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQogICAgICAgICBk
cmF3TGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgc2Npc3NvclJlY3QpOwogCiAg
ICAgR0xDKGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpKTsKK30KIAordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnByZXNlbnQoKQoreworICAgIC8vIFdlJ3JlIGRvbmUhIFRpbWUgdG8gc3dh
cGJ1ZmZlcnMhCiAgICAgbV9nbGVzMkNvbnRleHQtPnN3YXBCdWZmZXJzKCk7Ci0KICAgICBtX25l
ZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA4ZjQ0YWZl
YmQwYTJjN2I0NzVkMDRiYTQ4NzIzZjFjZGM1NDU1MDkxLi4yNzQ4MTVmM2ZlMjNjM2IwNzhjNDcw
M2U4NDViM2JiYzhjMzNlY2JkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTYxLDkgKzYxLDE3
IEBAIHB1YmxpYzoKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc093blB0cjxHTEVTMkNv
bnRleHQ+IGdsZXMyQ29udGV4dCk7CiAgICAgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogCi0g
ICAgLy8gVXBkYXRlcyB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIgdGhhdCBmYWxsIGlu
c2lkZSB0aGUgdXBkYXRlUmVjdCBhbmQgcmVjb21wb3NpdGVzCi0gICAgLy8gYWxsIHRoZSBsYXll
cnMuCi0gICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKKyAgICAvLyB1cGRhdGVzIHNpemUgb2Ygcm9vdCB0
ZXh0dXJlLCBpZiBuZWVkZWQsIGFuZCBzY3JvbGxzIHRoZSBiYWNrYnVmZmVyLgorICAgIHZvaWQg
cHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CisKKyAg
ICAvLyB1cGRhdGVzIGEgcmVjdGFuZ2xlIHdpdGhpbiB0aGUgcm9vdCBsYXllciB0ZXh0dXJlCisg
ICAgdm9pZCB1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRhdGVS
ZWN0KTsKKworICAgIC8vIGRyYXdzIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBiYWNrYnVm
ZmVyCisgICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICAvLyBwdXRzIGJhY2tidWZmZXIgb25zY3Jl
ZW4KKyAgICB2b2lkIHByZXNlbnQoKTsKIAogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIpIHsgbV9yb290TGF5ZXIgPSBsYXllcjsgfQogICAgIExh
eWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA5MGRjNTM2MmJkZGE2M2Y4MTg5MWY0MjQ3NzM5M2EzNDMyMWRlNzMyLi45
MTJiMGJiMDA5ZjM0MzdiMGIxMzYzYmMwODY0Yjg4YTA2Njg1MGRkIDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw4MiBAQAorMjAxMC0wOS0wOCAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9t
aXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzogc2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDky
CisKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgICogcHVibGljL1dlYldp
ZGdldENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXRDbGllbnQ6OnNjaGVkdWxl
Q29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyk6
CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNjcm9sbCk6CisgICAgICAgICog
c3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJ
bXBsOjp0aGVtZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpj
b21wb3NpdGUpOgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmg6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlc2l6
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6Y29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RH
cmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXll
ck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3JvbGxSb290
TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXll
clJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVJv
b3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRvQ29tcG9z
aXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKiB0ZXN0cy9Qb3B1
cE1lbnVUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGVzdFdlYldpZGdldDo6dGhlbWVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6VGVzdFdlYldpZGdldDo6Y29tcG9zaXRlKToKKworMjAx
MC0wOS0wMiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBD
b21wb3NpdGluZzogc2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgSW50cm9k
dWNlIGEgbmV3IEFQSSBvbiBXZWJXaWRnZXQgZm9yIHBhaW50aW5nIHdpdGggYWNjZWxlcmF0ZWQK
KyAgICAgICAgY29tcG9zaXRpbmcgdGhhdCBhbGxvd3MgdGhlIGNvbXBvc2l0b3IgdG8gcHJvcGVy
bHkgZGlzdGluZ2l1c2gKKyAgICAgICAgc2Nyb2xsaW5nLCBpbnZhbGlkYXRpb24gYW5kIHJlcGFp
bnRpbmcgZnJvbSBvbmUgYW5vdGhlci4gVGhlIGtleQorICAgICAgICBjaGFuZ2UgaXMgdGhhdCBp
biBhY2NlbGVyYXRlZCByZW5kZXJpbmcgY2FzZSwgaW52YWxpZGF0ZXMgYW5kCisgICAgICAgIHNj
cm9sbGluZyBwYXNzIGRpcmVjdGx5IHRvIHRoZSBjb21wb3NpdG9yLCByYXRoZXIgdGhhbiBwYXNz
aW5nIHVwCisgICAgICAgIHRvIHRoZSBjbGllbnQgYXMgd2FzIHRoZSBjYXNlIGluIHRoZSBzb2Z0
d2FyZSBwYXRoLiBGb3IKKyAgICAgICAgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nLCB0aGUgcHJldmlv
dXMgcGFpbnQoKSBtZXRob2QgaXMgcmVwbGFjZWQgYnkKKyAgICAgICAgYSBwYWlyIG9mIG1ldGhv
ZHM6IHBhaW50Q29tcG9zaXRlZCBhbmQKKyAgICAgICAgaW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290
TGF5ZXJSZWN0LgorCisKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgICog
cHVibGljL1dlYldpZGdldENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXRDbGll
bnQ6OnNjaGVkdWxlRGVmZXJyZWRDb21wb3NpdGUpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGll
bnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0
ZUNvbnRlbnRzQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6
c2Nyb2xsKToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9w
dXBNZW51SW1wbDo6aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6cGFpbnRDb21wb3NpdGVkKToKKyAgICAgICAgKiBz
cmMvV2ViUG9wdXBNZW51SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpemUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjppbnZhbGlkYXRlUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpzY3JvbGxSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxp
ZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnBhaW50Q29tcG9zaXRlZCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAg
ICAgICogdGVzdHMvUG9wdXBNZW51VGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJX
aWRnZXQ6OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OlRlc3RXZWJXaWRnZXQ6OnBhaW50Q29tcG9zaXRlZCk6CisKIDIwMTAtMDktMDcgIFRvbnkg
Q2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBG
aXNoZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5oIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCA1YzlmNTRlNzkzNjZiODNh
ZmVlN2MwZTFlM2EzMjg4YzM0NDEyY2E5Li5kMDEwMjcwNjVjOWU5MGMxNDc1NmU3Nzg3Y2EyNjZk
ZjY3ZWFlYzNiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldC5o
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTYwLDEzICs2MCwy
NiBAQCBwdWJsaWM6CiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQgaW4gY2FsbHMgdG8gV2ViV2lk
Z2V0Q2xpZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkg
PSAwOwogCi0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSBzcGVjaWZpZWQgcmVnaW9uIG9mIHRo
ZSBXZWJXaWRnZXQgb250byB0aGUgZ2l2ZW4KLSAgICAvLyBjYW52YXMuICBZb3UgTVVTVCBjYWxs
IExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlzCi0gICAgLy8gb2theSB0
byBjYWxsIHBhaW50IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhhcyBiZWVuIGNhbGxlZCwK
LSAgICAvLyBhc3N1bWluZyBubyBvdGhlciBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBXZWJXaWRn
ZXQgKGUuZy4sIG9uY2UKLSAgICAvLyBldmVudHMgYXJlIHByb2Nlc3NlZCwgaXQgc2hvdWxkIGJl
IGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8KLSAgICAvLyBsYXlvdXQgaXMgd2FycmFudGVk
IGJlZm9yZSBwYWludGluZyBhZ2FpbikuCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZh
cyosIGNvbnN0IFdlYlJlY3QmKSA9IDA7CisgICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSByZWN0
YW5ndWxhciByZWdpb24gd2l0aGluIHRoZSBXZWJXaWRnZXQgCisgICAgLy8gb250byB0aGUgc3Bl
Y2lmaWVkIGNhbnZhcyBhdCAodmlld1BvcnQueCx2aWV3UG9ydC55KS4gWW91IE1VU1QgY2FsbAor
ICAgIC8vIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlzIG9rYXkgdG8g
Y2FsbCBwYWludAorICAgIC8vIG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhhcyBiZWVuIGNh
bGxlZCwgYXNzdW1pbmcgbm8gb3RoZXIKKyAgICAvLyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBX
ZWJXaWRnZXQgKGUuZy4sIG9uY2UgZXZlbnRzIGFyZQorICAgIC8vIHByb2Nlc3NlZCwgaXQgc2hv
dWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8gbGF5b3V0IGlzCisgICAgLy8gd2Fy
cmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdl
YkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmIHZpZXdQb3J0KSA9IDA7CisKKyAgICAvLyBUcmlnZ2Vy
cyBjb21wb3NpdGluZyBvZiB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgc2NyZWVuLgorICAg
IC8vIFRoZSBmaW5pc2ggYXJndW1lbnQgY29udHJvbHMgd2hldGhlciB0aGUgY29tcG9zaXRvciB3
aWxsIHdhaXQgZm9yIHRoZQorICAgIC8vIEdQVSB0byBmaW5pc2ggcmVuZGVyaW5nIGJlZm9yZSBy
ZXR1cm5pbmcuIFlvdSBNVVNUIGNhbGwgTGF5b3V0CisgICAgLy8gYmVmb3JlIGNhbGxpbmcgdGhp
cyBtZXRob2QsIGZvciB0aGUgc2FtZSByZWFzb25zIGRlc2NyaWJlZCBpbgorICAgIC8vIHRoZSBw
YWludCBtZXRob2QgYWJvdmUuCisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlz
aCkgPSAwOworCisgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0IG9mIGEgY2hh
bmdlIGluIHRoZW1lLgorICAgIC8vIEltcGxlbWVudG9ycyB0aGF0IGNhY2hlIHJlbmRlcmVkIGNv
cGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCisgICAgLy8gb24gcmVjZWl2aW5nIHRo
aXMgbWVzc2FnZQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKSA9IDA7CiAKICAgICAv
LyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYW4gaW5wdXQgZXZlbnQuICBSZXR1
cm5zIHRydWUgaWYKICAgICAvLyB0aGUgZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkLCBmYWxzZSBv
dGhlcndpc2UuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENs
aWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaAppbmRleCBi
ZDdiZDZhNzRmY2JhZjM3MWRmM2U5YTZlNDEwYmVkYmYzNTkyMzIwLi45YmQ1NTNmM2Y3OWRmN2Q5
YmFhNDQ1MGU0MTE1YzI2ZmVkOTM1ODQxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lk
Z2V0Q2xpZW50LmgKQEAgLTUwLDYgKzUwLDkgQEAgcHVibGljOgogICAgIC8vIHNjcm9sbGVkIGJ5
IHRoZSBzcGVjaWZpZWQgZHggYW5kIGR5IGFtb3VudHMuCiAgICAgdmlydHVhbCB2b2lkIGRpZFNj
cm9sbFJlY3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0KSB7IH0KIAor
ICAgIC8vIENhbGxlZCB3aGVuIGEgY2FsbCB0byBXZWJXaWRnZXQ6OmNvbXBvc2l0ZSBpcyByZXF1
aXJlZAorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQorCiAgICAgLy8g
Q2FsbGVkIHdoZW4gdGhlIHdpZGdldCBhY3F1aXJlcyBvciBsb3NlcyBmb2N1cywgcmVzcGVjdGl2
ZWx5LgogICAgIHZpcnR1YWwgdm9pZCBkaWRGb2N1cygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBk
aWRCbHVyKCkgeyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAppbmRl
eCA4YTNlZGE2NjY2Y2I1NWEyYWMwMDNkNjk3YzY2MTJlZjg5NmRiYWZjLi44MTg0YTQwZDEyZDAy
ODM1MmM3NWYwMmQwNTNiYTg0NDY1MmE3NjM3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5jcHAKQEAgLTQ5Myw4ICs0OTMsMTYgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBs
OjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwg
Ym8KIHsKICAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKLSAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+
ZGlkSW52YWxpZGF0ZVJlY3QodXBkYXRlUmVjdCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQorICAgICAg
ICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkSW52YWxpZGF0ZVJlY3QodXBkYXRlUmVjdCk7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0gZWxzZSB7CisgICAgICAg
IG1fd2ViVmlldy0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QodXBkYXRlUmVjdCk7CisgICAgfQor
I2VuZGlmCiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0ZUNvbnRlbnRzRm9y
U2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0ZSkKQEAg
LTUwOCwxMSArNTE2LDE5IEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xsKAogICAgIGNv
bnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIG1fd2ViVmlldy0+aGlkZVBvcHVwcygpOwot
ICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7Ci0gICAgICAgIGludCBkeCA9IHNjcm9sbERl
bHRhLndpZHRoKCk7Ci0gICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRhLmhlaWdodCgpOwotICAg
ICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJlY3Qp
OworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoIW1fd2ViVmlldy0+
aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNlbmRpZgorICAgICAgICBpZiAo
bV93ZWJWaWV3LT5jbGllbnQoKSkgeworICAgICAgICAgICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEu
d2lkdGgoKTsKKyAgICAgICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRhLmhlaWdodCgpOworICAg
ICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU2Nyb2xsUmVjdChkeCwgZHksIGNsaXBS
ZWN0KTsKKyAgICAgICAgfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB9
IGVsc2UgeworICAgICAgICBtX3dlYlZpZXctPnNjcm9sbFJvb3RMYXllcihzY3JvbGxEZWx0YSwg
Y2xpcFJlY3QpOwogICAgIH0KKyNlbmRpZgogfQogCiBJbnRQb2ludCBDaHJvbWVDbGllbnRJbXBs
OjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQb3B1cE1lbnVJbXBsLmNwcAppbmRleCA3NWQ2Y2MxNDM4MjRiN2Y1OTI5MTAyOWI0Mjdj
ZTkyMGMyM2U0NTM5Li4wODVhMTU3NWU1NGJmMGU3YTRhYzhlNTg3OGEwMzg2MDU4OTJlNWQ5IDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTE3NCw2ICsxNzQs
MTYgQEAgdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29u
c3QgV2ViUmVjdCYgcmVjdCkKICAgICB9CiB9CiAKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6dGhl
bWVDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBvcHVw
TWVudUltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCiBib29sIFdlYlBvcHVwTWVudUltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2Vi
SW5wdXRFdmVudCYgaW5wdXRFdmVudCkKIHsKICAgICBpZiAoIW1fd2lkZ2V0KQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAppbmRleCBlZGJiNGFiNTBkNDE2YjAzYjdiZDFhNWZj
ZTgwMDU1NjA5MWVhMjI3Li4yMjFiYTAzOGYyYzRjNzM2ZDY3N2ZhYmZhMzIyZTA1MWY5MDQyNjRj
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaApAQCAtNjMsNiArNjMsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7CiAgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMq
IGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hh
bmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOwogICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICAgICB2
aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1
cyhib29sIGVuYWJsZSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGY2M2M5
MDgyNTYyNmNiMDZjYmM2ZjBhNWEzNWYyMjdiYmQ1YmU3ODIuLjRiYjcwOTcwYmZmNTcwOTc3ZjYy
YjFhZTM2OWZiMTRiYzE0YjJlZWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBA
IC05MTIsNyArOTEyLDEyIEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXpl
JiBuZXdTaXplKQogCiAgICAgaWYgKG1fY2xpZW50KSB7CiAgICAgICAgIFdlYlJlY3QgZGFtYWdl
ZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKLSAgICAgICAgbV9jbGll
bnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICAgICAgaWYgKGlzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorICAgICAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGFtYWdlZFJlY3QpOwor
I2VuZGlmCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRh
dGVSZWN0KGRhbWFnZWRSZWN0KTsKICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkBAIC05NDYsMzMg
Kzk1MSw0NCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpsYXlvdXQoKQogCiB2b2lkIFdlYlZpZXdJbXBs
OjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKLQorICAg
IGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSgpKSB7CisgICAgICAgIGRvQ29tcG9zaXRlKGNhbnZhcyk7CisKKyAgICAgICAgLy8gUmVhZGJh
Y2sgaW50byB0aGUgY2FudmFzCisgICAgICAgIC8vIEZJWE1FIEluc2VydCB3am1hY2xlYW4ncyBy
ZWFkYmFjayBjb2RlIGhlcmUgZm9yIHdlYmtpdCBidWcgNDQxMjcKKworICAgICAgICAvLyBUZW1w
b3JhcmlseSBwcmVzZW50IHNvIHRoZSBkb3duc3RyZWFtIENocm9taXVtIHJlbmRlcndpZGdldCBz
dGlsbCByZW5kZXJzLgorICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgY2FsbCBvbmNlIHRo
ZSBjaGFuZ2VzIHRvIENocm9taXVtJ3MgcmVuZGVyd2lkZ2V0IGhhdmUgbGFuZGVkLgorICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKICNlbmRpZgorICAgIH0gZWxzZSB7CiAgICAg
ICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CiAgICAgICAgIGlm
ICh3ZWJmcmFtZSkKICAgICAgICAgICAgIHdlYmZyYW1lLT5wYWludChjYW52YXMsIHJlY3QpOwot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllci4KLSAgICAgICAgdXBkYXRlUm9v
dExheWVyQ29udGVudHMocmVjdCk7CisgICAgfQorfQogCi0gICAgICAgIFdlYkZyYW1lSW1wbCog
d2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7Ci0gICAgICAgIGlmICghd2ViZnJhbWUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFt
ZVZpZXcoKTsKLSAgICAgICAgaWYgKCF2aWV3KQotICAgICAgICAgICAgcmV0dXJuOwordm9pZCBX
ZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXco
KTsKIAotICAgICAgICAvLyBUaGUgdmlzaWJsZVJlY3QgaW5jbHVkZXMgc2Nyb2xsYmFycyB3aGVy
ZWFzIHRoZSBjb250ZW50UmVjdCBkb2Vzbid0LgotICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0
ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwotICAgICAgICBJbnRSZWN0IGNvbnRl
bnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKKyAgICBXZWJSZWN0IGRh
bWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CisgICAgdmlldy0+
aW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworfQogCi0gICAgICAgIC8vIEFzayB0aGUgbGF5
ZXIgY29tcG9zaXRvciB0byByZWRyYXcgYWxsIHRoZSBsYXllcnMuCi0gICAgICAgIEFTU0VSVCht
X2xheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSk7Ci0gICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+ZHJhd0xheWVycyhyZWN0LCB2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIEludFBv
aW50KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7Ci0gICAgfQordm9pZCBXZWJW
aWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBkb0NvbXBvc2l0ZSgwKTsKKworICAgIC8vIEZpbmlzaCBpZiByZXF1
ZXN0ZWQuCisgICAgLy8gRklYTUU6IGhhbmRsZSBmaW5pc2ggZmxhZy4KKworICAgIC8vIFB1dCBy
ZXN1bHQgb25zY3JlZW4uCisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CiAjZW5kaWYK
IH0KIApAQCAtMjExNCwxMSArMjEzMCwxMTEgQEAgYm9vbCBXZWJWaWV3SW1wbDo6YWxsb3dzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGlj
c0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogeworICAgIGJvb2wgd2FzQWN0
aXZlID0gbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CiAgICAgc2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKGxheWVyID8gdHJ1ZSA6IGZhbHNlKTsKICAgICBpZiAobV9s
YXllclJlbmRlcmVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RMYXllcihsYXll
cik7CisgICAgaWYgKHdhc0FjdGl2ZSAhPSBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSkgeworICAgICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9z
aXplLmhlaWdodCk7CisgICAgICAgIGlmIChtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSkKKyAgICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFn
ZWRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRz
RGlzcGxheSgpCit7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3Np
dGUoKTsKKyAgICAvLyBGSVhNRTogVG8gYXZvaWQgYnJlYWtpbmcgdGhlIGRvd25zdHJlYW0gQ2hy
b21lIHJlbmRlcl93aWRnZXQgd2hpbGUgZG93bnN0cmVhbQorICAgIC8vIGNoYW5nZXMgbGFuZCwg
d2UgYWxzbyBoYXZlIHRvIHBhc3MgYSAxeDEgaW52YWxpZGF0ZSB1cCB0byB0aGUgY2xpZW50Cisg
ICAgeworICAgICAgICBXZWJSZWN0IGRhbWFnZVJlY3QoMCwgMCwgMSwgMSk7CisgICAgICAgIG1f
Y2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VSZWN0KTsKKyAgICB9Cit9CisKKwordm9p
ZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVyKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRh
LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICAvLyBGSVhNRTogVG8gYXZvaWQgYnJl
YWtpbmcgdGhlIENocm9tZSByZW5kZXJfd2lkZ2V0IHdoZW4gdGhlIG5ldyBjb21wb3NpdG9yIHJl
bmRlcgorICAgIC8vIHBhdGggaXMgbm90IGNoZWNrZWQgaW4sIHdlIG11c3Qgc3RpbGwgcGFzcyBz
Y3JvbGwgZGFtYWdlIHVwIHRvIHRoZSBjbGllbnQuIFRoaXMKKyAgICAvLyBjb2RlIHdpbGwgYmUg
YmFja2VkIG91dCBpbiBhIGZvbGxvd3VwIENMIG9uY2UgdGhlIENocm9taXVtIGNoYW5nZXMgaGF2
ZSBsYW5kZWQuCisgICAgbV9jbGllbnQtPmRpZFNjcm9sbFJlY3Qoc2Nyb2xsRGVsdGEud2lkdGgo
KSwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCksIGNsaXBSZWN0KTsKKworICAgIEFTU0VSVChtX2xheWVy
UmVuZGVyZXIpOworICAgIC8vIENvbXB1dGUgdGhlIGRhbWFnZSByZWN0IGluIHZpZXdwb3J0IHNw
YWNlLgorICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAg
aWYgKCF3ZWJmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHdl
YmZyYW1lLT5mcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2Up
OworCisgICAgLy8gV2Ugc3VwcG9ydCBmYXN0IHNjcm9sbGluZyBpbiBvbmUgZGlyZWN0aW9uIGF0
IGEgdGltZS4KKyAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSAmJiBzY3JvbGxEZWx0YS5oZWln
aHQoKSkgeworICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChXZWJSZWN0KGNvbnRlbnRS
ZWN0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDb21wdXRlIHRoZSByZWdp
b24gd2Ugd2lsbCBleHBvc2UgYnkgc2Nyb2xsaW5nLiBXZSB1c2UgdGhlCisgICAgLy8gY29udGVu
dCByZWN0IGZvciBpbnZhbGlkYXRpb24uICBVc2luZyB0aGlzIHNwYWNlIGZvciBkYW1hZ2UKKyAg
ICAvLyByZWN0cyBhbGxvd3MgdXMgdG8gaW50ZXJtaXggaW52YWxpZGF0ZXMgd2l0aCBzY3JvbGxz
LgorICAgIEludFJlY3QgZGFtYWdlZENvbnRlbnRzUmVjdDsKKyAgICBpZiAoc2Nyb2xsRGVsdGEu
d2lkdGgoKSkgeworICAgICAgICBmbG9hdCBkeCA9IHN0YXRpY19jYXN0PGZsb2F0PihzY3JvbGxE
ZWx0YS53aWR0aCgpKTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKGNvbnRlbnRS
ZWN0LnkoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0SGVpZ2h0KGNvbnRlbnRS
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgaWYgKGR4ID4gMCkgeworICAgICAgICAgICAgZGFtYWdl
ZENvbnRlbnRzUmVjdC5zZXRYKGNvbnRlbnRSZWN0LngoKSk7CisgICAgICAgICAgICBkYW1hZ2Vk
Q29udGVudHNSZWN0LnNldFdpZHRoKGR4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WChjb250ZW50UmVjdC5yaWdodCgpICsgZHgpOworICAg
ICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aCgtZHgpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZmxvYXQgZHkgPSBzdGF0aWNfY2FzdDxmbG9hdD4oc2Nyb2xs
RGVsdGEuaGVpZ2h0KCkpOworICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFgoY29udGVu
dFJlY3QueCgpKTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aChjb250ZW50
UmVjdC53aWR0aCgpKTsKKyAgICAgICAgaWYgKGR5ID4gMCkgeworICAgICAgICAgICAgZGFtYWdl
ZENvbnRlbnRzUmVjdC5zZXRZKGNvbnRlbnRSZWN0LnkoKSk7CisgICAgICAgICAgICBkYW1hZ2Vk
Q29udGVudHNSZWN0LnNldEhlaWdodChkeSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFkoY29udGVudFJlY3QuYm90dG9tKCkgKyBkeSk7Cisg
ICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdodCgtZHkpOworICAgICAgICB9
CisgICAgfQorCisgICAgbV9zY3JvbGxEYW1hZ2UudW5pdGUoZGFtYWdlZENvbnRlbnRzUmVjdCk7
CisgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6
OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8g
RklYTUU6IFRvIGF2b2lkIGJyZWFraW5nIHRoZSBDaHJvbWUgcmVuZGVyX3dpZGdldCB3aGVuIHRo
ZSBuZXcgY29tcG9zaXRvciByZW5kZXIKKyAgICAvLyBwYXRoIGlzIG5vdCBjaGVja2VkIGluLCB3
ZSBtdXN0IHN0aWxsIHBhc3MgZGFtYWdlIHVwIHRvIHRoZSBjbGllbnQuIFRoaXMKKyAgICAvLyBj
b2RlIHdpbGwgYmUgYmFja2VkIG91dCBpbiBhIGZvbGxvd3VwIENMIG9uY2UgdGhlIENocm9taXVt
IGNoYW5nZXMgaGF2ZSBsYW5kZWQuCisgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KHJl
Y3QpOworCisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisKKyAgICBpZiAoIXBhZ2UoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1l
KCktPnZpZXcoKTsKKworICAgIC8vIHJlY3QgaXMgaW4gdmlld3BvcnQgc3BhY2UuIENvbnZlcnQg
dG8gY29udGVudCBzcGFjZQorICAgIC8vIHNvIHRoYXQgaW52YWxpZGF0aW9ucyBhbmQgc2Nyb2xs
IGludmFsaWRhdGlvbnMgcGxheSB3ZWxsIHdpdGggb25lLWFub3RoZXIuCisgICAgRmxvYXRSZWN0
IGNvbnRlbnRSZWN0ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhyZWN0KTsKKworICAgIC8vIEZJ
WE1FOiBhZGQgYSBzbWFydGVyIGRhbWFnZSBhZ2dyZWdhdGlvbiBsb2dpYz8gUmlnaHQgbm93LCBM
YXllckNocm9taXVtIGRvZXMgc2ltcGxlIHVuaW9uLWluZy4KKyAgICBtX2xheWVyUmVuZGVyZXIt
PnJvb3RMYXllcigpLT5zZXROZWVkc0Rpc3BsYXkoY29udGVudFJlY3QpOwogfQogCisKIHZvaWQg
V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2
ZSkKIHsKICAgICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPT0gYWN0aXZl
KQpAQCAtMjEyOCwxMCArMjI0NCw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVy
ID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoZ2V0T25zY3JlZW5HTEVTMkNvbnRleHQo
KSk7CiAgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKICAgICAgICAgICAgIG1faXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRm9yY2UgYSByZWRyYXcgdGhlIGVudGlyZSB2aWV3IHNvIHRoYXQgdGhlIGNvbXBvc2l0
b3IgZ2V0cyB0aGUgZW50aXJlIHZpZXcsCi0gICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBqdXN0
IHRoZSBjdXJyZW50bHktZGlydHkgc3Vic2V0LgotICAgICAgICAgICAgbV9jbGllbnQtPmRpZElu
dmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQg
PSB0cnVlOwpAQCAtMjE0MiwxNyArMjI1NCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgfQogfQogCi12b2lk
IFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0
KQordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKICAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogVGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0
aW5nIHBhdGggaW52YWxpZGF0ZXMgYSAxeDEgcmVjdCBhdCAoMCwgMCkKLSAgICAvLyBpbiBvcmRl
ciB0byBnZXQgdGhlIHJlbmRlcmVyIHRvIGFzayB0aGUgY29tcG9zaXRvciB0byByZWRyYXcuIFRo
aXMgaXMgb25seQotICAgIC8vIHRlbXBvcmFyeSB1bnRpbCB3ZSBnZXQgdGhlIGNvbXBvc2l0b3Ig
dG8gcmVuZGVyIGRpcmVjdGx5IGZyb20gaXRzIG93biB0aHJlYWQuCi0gICAgaWYgKCFyZWN0Lngg
JiYgIXJlY3QueSAmJiByZWN0LndpZHRoID09IDEgJiYgcmVjdC5oZWlnaHQgPT0gMSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwo
KTsKICAgICBpZiAoIXdlYmZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC0yMTY0LDcgKzIyNzAs
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJS
ZWN0JiByZWN0KQogICAgIGlmIChyb290TGF5ZXIpIHsKICAgICAgICAgSW50UmVjdCB2aXNpYmxl
UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKIAotICAgICAgICBtX2xheWVy
UmVuZGVyZXItPnNldFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6ZShyZWN0LndpZHRoLCByZWN0
LmhlaWdodCkpOworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RMYXllckNhbnZhc1Np
emUoSW50U2l6ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KiByb290TGF5ZXJDb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXJH
cmFwaGljc0NvbnRleHQoKTsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCkBAIC0yMTc0LDcgKzIyODAs
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJS
ZWN0JiByZWN0KQogICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+c2F2ZSgpOwogCiAgICAgICAgIC8v
IEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50
IHJlY3QuCi0gICAgICAgIHBsYXRmb3JtQ2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tT
Y2FsYXI+KC1yZWN0LngpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueSkpOworICAgICAg
ICBwbGF0Zm9ybUNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtcmVjdC54
KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueSgpKSk7CiAKICAgICAgICAgcm9vdExh
eWVyQ29udGV4dC0+c2F2ZSgpOwogCkBAIC0yMTg4LDcgKzIyOTQsNyBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgICAg
ICBDR0NvbnRleHRTYXZlR1N0YXRlKGNnQ29udGV4dCk7CiAKICAgICAgICAgLy8gQnJpbmcgdGhl
IENvcmVHcmFwaGljcyBjb250ZXh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBw
YWludCByZWN0LgotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCAtcmVj
dC54LCAtcmVjdC55KTsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwg
LXJlY3QueCgpLCAtcmVjdC55KCkpOwogCiAgICAgICAgIHJvb3RMYXllckNvbnRleHQtPnNhdmUo
KTsKIApAQCAtMjIwMiwyMiArMjMwOCw0OCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290
TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIH0KIH0KIAotdm9pZCBXZWJW
aWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKK3ZvaWQgV2ViVmlld0ltcGw6OmRv
Q29tcG9zaXRlKFdlYkNhbnZhcyogY2FudmFzKQogewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdl
J3JlIHBvc3RpbmcgYSByZXBhaW50IGV2ZW50IGZvciB0aGUgZW50aXJlIHBhZ2Ugd2hpY2ggaXMg
YW4gb3ZlcmtpbGwuCi0gICAgaWYgKFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJ
bXBsKCkpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZp
ZXcoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFyeSBoYWNrIHRvIGludmFsaWRh
dGUgcGFydCBvZiB0aGUgcGFnZSBzbyB0aGF0IHdlIGdldCBjYWxsZWQgdG8gcmVuZGVyCi0gICAg
ICAgICAgICAvLyAgICAgICAgYWdhaW4uCi0gICAgICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0
ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwotICAgICAgICAgICAgbV9jbGllbnQt
PmRpZEludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMSwgMSkpOworICAgIEFTU0VSVChpc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSk7CisgICAgaWYgKCFwYWdlKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCk7CisKKyAgICAvLyBUaGUgdmlzaWJsZVJlY3QgaW5jbHVkZXMgc2Nyb2xsYmFycyB3aGVyZWFz
IHRoZSBjb250ZW50UmVjdCBkb2Vzbid0LgorICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3
LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IHZp
ZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7CisgICAgSW50UmVjdCB2aWV3UG9ydCA9IElu
dFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKKworICAgIC8vIEdpdmUg
dGhlIGNvbXBvc2l0b3IgYSBjaGFuY2UgdG8gc2V0dXAvcmVzaXplIHRoZSByb290IHRleHR1cmUg
aGFuZGxlIGFuZCBwZXJmb3JtIHNjcm9sbGluZy4KKyAgICBtX2xheWVyUmVuZGVyZXItPnByZXBh
cmVUb0RyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBJbnRQb2ludCh2aWV3LT5z
Y3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSkpOworCisgICAgLy8gRHJhdyB0aGUgY29udGVudHMg
b2YgdGhlIHJvb3QgbGF5ZXIuCisgICAgVmVjdG9yPEZsb2F0UmVjdD4gZGFtYWdlUmVjdHM7Cisg
ICAgZGFtYWdlUmVjdHMuYXBwZW5kKG1fc2Nyb2xsRGFtYWdlKTsKKyAgICBkYW1hZ2VSZWN0cy5h
cHBlbmQobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+ZGlydHlSZWN0KCkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFtYWdlUmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Ly8gVGhlIGRhbWFnZSByZWN0IGZvciB0aGUgcm9vdCBsYXllciBpcyBpbiBjb250ZW50IHNwYWNl
IFtlLmcuIHVuc2Nyb2xsZWRdLgorICAgICAgICAvLyBDb252ZXJ0IGZyb20gY29udGVudCBzcGFj
ZSB0byB2aWV3UG9ydCBzcGFjZS4KKyAgICAgICAgY29uc3QgRmxvYXRSZWN0IGRhbWFnZWRDb250
ZW50UmVjdCA9IGRhbWFnZVJlY3RzW2ldOworICAgICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0ID0g
dmlldy0+Y29udGVudHNUb1dpbmRvdyhJbnRSZWN0KGRhbWFnZWRDb250ZW50UmVjdCkpOworCisg
ICAgICAgIC8vIEludGVyc2VjdCB0aGlzIHJlY3RhbmdsZSB3aXRoIHRoZSB2aWV3UG9ydC4KKyAg
ICAgICAgZGFtYWdlZFJlY3QuaW50ZXJzZWN0KHZpZXdQb3J0KTsKKworICAgICAgICAvLyBOb3cg
cmVuZGVyIGl0LgorICAgICAgICBpZiAoZGFtYWdlZFJlY3Qud2lkdGgoKSAmJiBkYW1hZ2VkUmVj
dC5oZWlnaHQoKSkgeworICAgICAgICAgICAgdXBkYXRlUm9vdExheWVyQ29udGVudHMoZGFtYWdl
ZFJlY3QpOworICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVSb290TGF5ZXJUZXh0
dXJlUmVjdChkYW1hZ2VkUmVjdCk7CiAgICAgICAgIH0KICAgICB9CisgICAgbV9sYXllclJlbmRl
cmVyLT5yb290TGF5ZXIoKS0+cmVzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX3Njcm9sbERhbWFn
ZSA9IFdlYlJlY3QoKTsKIAotICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIG1fbGF5
ZXJSZW5kZXJlci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgLy8gRHJhdyB0aGUgYWN0dWFsIGxh
eWVycy4uLgorICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29u
dGVudFJlY3QpOwogfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNl
bmRpZgorCiAKIFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBXZWJWaWV3SW1wbDo6Z2V0T25zY3Jl
ZW5HTEVTMkNvbnRleHQoKQogewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGE0MjA5
OWM5ZDVmNDg0M2MyZjNlNDdkNzUzNzdkNGQ1YTBmN2U5ZjEuLjVlYzdkMzgzMGYzZGU0ODBiM2Iw
ZjQ2NDU4NmJkMTZmZDVkZGMxM2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJHTEVTMkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJO
YXZpZ2F0aW9uUG9saWN5LmgiCiAjaW5jbHVkZSAiV2ViUG9pbnQuaCIKKyNpbmNsdWRlICJXZWJS
ZWN0LmgiCiAjaW5jbHVkZSAiV2ViU2l6ZS5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2lu
Y2x1ZGUgIldlYlZpZXcuaCIKQEAgLTkyLDYgKzkzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRl
KGJvb2wgZmluaXNoKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBX
ZWJJbnB1dEV2ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpAQCAtMzIyLDkgKzMyNSwxMSBA
QCBwdWJsaWM6CiAgICAgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IHZvaWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXRSb290R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKik7CiAgICAgYm9vbCBhbGxvd3NBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCk7CisgICAgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3Jl
OjpQbGF0Zm9ybUxheWVyKik7CisgICAgdm9pZCBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsK
KyAgICB2b2lkIHNjcm9sbFJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxE
ZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworICAgIHZvaWQgaW52YWxp
ZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogI2VuZGlmCiAgICAg
Ly8gT25zY3JlZW4gY29udGV4dHMgZGlzcGxheSB0byB0aGUgc2NyZWVuIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIHZpZXcuCiAgICAgLy8gT2Zmc2NyZWVuIGNvbnRleHRzIHJlbmRlciBvZmZzY3JlZW4g
YnV0IGNhbiBzaGFyZSByZXNvdXJjZXMgd2l0aCB0aGUKQEAgLTM4Niw3ICszOTEsOCBAQCBwcml2
YXRlOgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wpOwotICAgIHZvaWQgdXBkYXRlUm9vdExh
eWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYpOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29u
dGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZG9Db21wb3NpdGUoV2Vi
Q2FudmFzKik7CiAjZW5kaWYKIAogICAgIFdlYlZpZXdDbGllbnQqIG1fY2xpZW50OwpAQCAtNTEx
LDYgKzUxNyw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbW91c2VD
YXB0dXJlTm9kZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBXZWJD
b3JlOjpJbnRSZWN0IG1fc2Nyb2xsRGFtYWdlOwogICAgIE93blB0cjxXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBib29sIG1faXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlOwogICAgIGJvb2wgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQ7
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKaW5kZXggNTAzMTlhZjIzYjBh
OTJmNDRjOTE1OGVmYjNlNjQ2MTgyMzk4MWQxMC4uYWVmMjljZjJkMDQxMjRiNGM4N2VmMDdhMmU1
ZjM4NTA5Njc4MmI2OCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVu
dVRlc3QuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcApA
QCAtMTI4LDYgKzEyOCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0
IFdlYlNpemUmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdGhlbWVDaGFuZ2VkKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29s
IGZpbmlzaCkgeyB9CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2Vi
SW5wdXRFdmVudCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0
dXJlTG9zdCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKSB7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66961</attachid>
            <date>2010-09-08 16:48:55 -0700</date>
            <delta_ts>2010-09-09 13:48:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100908164854.patch</filename>
            <type>text/plain</type>
            <size>37233</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTA3NDkwMzVmZGMxNmEyNWYxMTVlYTJmNTIyYjg3YTQxODQzMDc1OC4uYTRkZmRmNTIyNDkyYTQ1
YTUzNzM3OTJmOWY2N2Q3MjcyMzc4NDQyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOS0wNiAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldFJvb3RMYXllckNhbnZhc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisKIDIw
MTAtMDktMDcgIEphbiBFIEhhbnNzZW4gIDxqaGFuc3NlbkBzZW5jaGEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA2NTE5ZjFmZjJiYTE4MjZm
MmUyODU5NjJiMDM4MTcxMmE0NmU5ZGNjLi5kNmVlZjNhY2QxZTQzNzFjYjQxZGZhNTJjZWVlYjJh
NjRlZjkxYWMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5OSwxMCArMjk5LDE1IEBAIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKG1fYm91bmRzID09
IHNpemUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGJvb2wgZmlyc3RSZXNpemUgPSAhbV9ib3Vu
ZHMud2lkdGgoKSAmJiAhbV9ib3VuZHMuaGVpZ2h0KCkgJiYgc2l6ZS53aWR0aCgpICYmIHNpemUu
aGVpZ2h0KCk7CisKICAgICBtX2JvdW5kcyA9IHNpemU7CiAgICAgbV9iYWNraW5nU3RvcmVTaXpl
ID0gc2l6ZTsKIAotICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgaWYgKGZpcnN0UmVzaXplKQor
ICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCks
IG1fYm91bmRzLmhlaWdodCgpKSk7CisgICAgZWxzZQorICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTMxMSw3ICszMTYsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0Owot
ICAgIHNldE5lZWRzQ29tbWl0KCk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCiBjb25zdCBMYXll
ckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApAQCAtMzUzLDcgKzM1
OCw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVj
dCYgZGlydHlSZWN0KQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAKICAgICBtX2RpcnR5
UmVjdC51bml0ZShkaXJ0eVJlY3QpOwotCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIApAQCAt
MzYzLDYgKzM2NywxMiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpyZXNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBt
X2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKK30KKwogdm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0
cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewog
ICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGJhMTUwODg0NGJhMzViMzQ1MWY4
MmNkNTg5YTY1Mzk3NjUyMWEwOGMuLjJkMjI1ZGFmNWEyMDcxYmFiZmViZDZhN2NmM2NjMDVlMjZi
MzkwODYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2RpcnR5UmVjdDsgfQorICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzg5Mjk4YWVkOGNlOTc2MzAyMGNmZTBhZTIyNDhlMzczM2Rm
MmM4Yy4uZDU2NWFiM2U4NGEzMzQyZWY4NjNhZWVhYTA3MmVlNTQwMzgxOWNiMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMTU5LDggKzE1OSw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQogCiAvLyBVcGRhdGVzIHRoZSBj
b250ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0ZXh0dXJlIHRoYXQgZmFsbCBpbnNpZGUgdGhlIHVw
ZGF0ZVJlY3QKIC8vIGFuZCByZS1jb21wb3NpdHMgYWxsIHN1YmxheWVycy4KLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKG1faGFyZHdhcmVDb21w
b3NpdGluZyk7CiAKQEAgLTIwMCwxNCArMjAwLDEyIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3Qm
CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKIAogICAgIEludFBv
aW50IHNjcm9sbERlbHRhID0gdG9Qb2ludChzY3JvbGxQb3NpdGlvbiAtIG1fc2Nyb2xsUG9zaXRp
b24pOwotICAgIC8vIFNjcm9sbCBvbmx5IHdoZW4gdGhlIHVwZGF0ZVJlY3QgY29udGFpbnMgcGl4
ZWxzIGZvciB0aGUgbmV3bHkgdW5jb3ZlcmVkIHJlZ2lvbiB0byBhdm9pZCBmbGFzaGluZy4KLSAg
ICBpZiAoKHNjcm9sbERlbHRhLngoKSAmJiB1cGRhdGVSZWN0LndpZHRoKCkgPj0gYWJzKHNjcm9s
bERlbHRhLngoKSkgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA+PSBjb250ZW50UmVjdC5oZWlnaHQo
KSkKLSAgICAgICAgfHwgKHNjcm9sbERlbHRhLnkoKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID49
IGFicyhzY3JvbGxEZWx0YS55KCkpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA+PSBjb250ZW50UmVj
dC53aWR0aCgpKSkgeworICAgIC8vIFNjcm9sbCB0aGUgYmFja2J1ZmZlcgorICAgIGlmIChzY3Jv
bGxEZWx0YS54KCkgfHwgc2Nyb2xsRGVsdGEueSgpKSB7CiAgICAgICAgIC8vIFNjcm9sbGluZyB3
b3JrcyBhcyBmb2xsb3dzOiBXZSByZW5kZXIgYSBxdWFkIHdpdGggdGhlIGN1cnJlbnQgcm9vdCBs
YXllciBjb250ZW50cwogICAgICAgICAvLyB0cmFuc2xhdGVkIGJ5IHRoZSBhbW91bnQgdGhlIHBh
Z2UgaGFzIHNjcm9sbGVkIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZSBhbmQgdGhlbiByZWFkIHRoZQog
ICAgICAgICAvLyBwaXhlbHMgb2YgdGhlIGNvbnRlbnQgYXJlYSAodmlzaWJsZSBhcmVhIGV4Y2x1
ZGluZyB0aGUgc2Nyb2xsIGJhcnMpIGJhY2sgaW50byB0aGUKLSAgICAgICAgLy8gcm9vdCBsYXll
ciB0ZXh0dXJlLiBUaGUgbmV3bHkgZXhwb3NlZCBhcmVhIGlzIHN1YmVzcXVlbnRseSBmaWxsZWQg
YXMgdXN1YWwgd2l0aAotICAgICAgICAvLyB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZVJlY3Qu
CisgICAgICAgIC8vIHJvb3QgbGF5ZXIgdGV4dHVyZS4gVGhlIG5ld2x5IGV4cG9zZWQgYXJlYSB3
aWxsIGJlIGZpbGxlZCBieSBhIHN1YnNlcXVlbnQgZHJhd0xheWVyc0ludG9SZWN0IGNhbGwKICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsZWRMYXllck1hdHJpeDsKICNpZiBQTEFU
Rk9STShTS0lBKQogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGY7CkBAIC0yMzgsNDIg
KzIzNiw2NSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgICAgICBtX3Njcm9sbFBvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb247CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoZSBmb2xsb3dp
bmcgY2hlY2sgc2hvdWxkIGdvIGF3YXkgd2hlbiB0aGUgY29tcG9zaXRvciByZW5kZXJzIGluZGVw
ZW5kZW50bHkgZnJvbSBpdHMgb3duIHRocmVhZC4KLSAgICAvLyBJZ25vcmUgYSAxeDEgdXBkYXRl
IHJlY3QgYXQgKDAsIDApIGFzIHRoYXQncyB1c2VkIGEgd2F5IHRvIGtpY2sgb2ZmIGEgcmVkcmF3
IGZvciB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAoISghdXBkYXRlUmVjdC54KCkgJiYgIXVwZGF0
ZVJlY3QueSgpICYmIHVwZGF0ZVJlY3Qud2lkdGgoKSA9PSAxICYmIHVwZGF0ZVJlY3QuaGVpZ2h0
KCkgPT0gMSkpIHsKLSAgICAgICAgLy8gVXBkYXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0g
ICAgICAgIEFTU0VSVCgodXBkYXRlUmVjdC54KCkgKyB1cGRhdGVSZWN0LndpZHRoKCkgPD0gbV9y
b290TGF5ZXJUZXh0dXJlV2lkdGgpCi0gICAgICAgICAgICAgICAmJiAodXBkYXRlUmVjdC55KCkg
KyB1cGRhdGVSZWN0LmhlaWdodCgpIDw9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkpOworICAg
IC8vIFRyYW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9z
aXRpb24uCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIG1hdHJpeC50cmFu
c2xhdGUzZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7
CisKKyAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0
cmFuc2Zvcm1zLgorICAgIGZsb2F0IG9wYWNpdHkgPSAxOworICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbV9yb290TGF5ZXItPmdldFN1YmxheWVy
cygpOworICAgIHNpemVfdCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgp
OyBpKyspCisgICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCks
IG1hdHJpeCwgb3BhY2l0eSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQoreworICAg
IEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOworCisgICAgaWYgKCFtX3Jvb3RMYXllcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcm9vdCBsYXllciB0
ZXh0dXJlLgorICAgIEFTU0VSVCgodXBkYXRlUmVjdC5yaWdodCgpICA8PSBtX3Jvb3RMYXllclRl
eHR1cmVXaWR0aCkKKyAgICAgICAgICAgJiYgKHVwZGF0ZVJlY3QuYm90dG9tKCkgPD0gbV9yb290
TGF5ZXJUZXh0dXJlSGVpZ2h0KSk7CiAKICNpZiBQTEFURk9STShTS0lBKQotICAgICAgICAvLyBH
ZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIGNvbnN0IFNrQml0
bWFwIGJpdG1hcCA9IG1fcm9vdExheWVyQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFw
KGZhbHNlKTsKLSAgICAgICAgaW50IHJvb3RMYXllcldpZHRoID0gYml0bWFwLndpZHRoKCk7Ci0g
ICAgICAgIGludCByb290TGF5ZXJIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7Ci0gICAgICAgIEFT
U0VSVChyb290TGF5ZXJXaWR0aCA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgcm9vdExheWVySGVp
Z2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB2b2lkKiBwaXhlbHMgPSBiaXRt
YXAuZ2V0UGl4ZWxzKCk7Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVw
ZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgotICAgICAgICBHTEMoZ2xUZXhT
dWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0Lnko
KSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1
cGRhdGVkIHJlY3QuCisgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGludCBiaXRtYXBXaWR0
aCA9IGJpdG1hcC53aWR0aCgpOworICAgIGludCBiaXRtYXBIZWlnaHQgPSBiaXRtYXAuaGVpZ2h0
KCk7CisgICAgQVNTRVJUKGJpdG1hcFdpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgoKSAmJiBiaXRt
YXBIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7CisgICAgdm9pZCogcGl4ZWxzID0gYml0
bWFwLmdldFBpeGVscygpOworICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVk
IHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KKyAgICBHTEMoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRl
UmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBwaXhlbHMpKTsKICNlbGlmIFBMQVRGT1JNKENHKQotICAgICAgICAvLyBHZXQgdGhlIGNv
bnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCi0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkg
PT0gdXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0
R2V0SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWln
aHQoKSk7Ci0gICAgICAgIHZvaWQqIHBpeGVscyA9IG1fcm9vdExheWVyQmFja2luZ1N0b3JlLmRh
dGEoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0
IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQg
dGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5l
ZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgotICAgICAgICBHTEMoZ2xUZXhTdWJJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVj
dC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRl
UmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0Lndp
ZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisgICAgLy8gR2V0IHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0LgorICAgIC8vIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KENHQml0bWFwQ29udGV4dEdldFdpZHRoKG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0g
dXBkYXRlUmVjdC53aWR0aCgpICYmIHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0
SGVpZ2h0KG1fcm9vdExheWVyQ0dDb250ZXh0LmdldCgpKSkgPT0gdXBkYXRlUmVjdC5oZWlnaHQo
KSk7CisgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwor
CisgICAgLy8gQ29weSB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9v
dCBsYXllciB0ZXh0dXJlLgorICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQg
aW4gQ29yZSBHcmFwaGljcycgY29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBm
b3IgdGhpcyBoZXJlLgorICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXllclRleHR1
cmVIZWlnaHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhl
bHMpKTsKICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3Jt
LiIKICNlbmRpZgotICAgIH0KK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQoreworICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwogCiAgICAgZ2xDbGVh
ckNvbG9yKDAsIDAsIDEsIDEpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdM
X0RFUFRIX0JVRkZFUl9CSVQpOwogCisgICAgR0xDKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKwogICAgIC8vIFJlbmRlciB0aGUgcm9vdCBsYXll
ciB1c2luZyBhIHF1YWQgdGhhdCB0YWtlcyB1cCB0aGUgZW50aXJlIHZpc2libGUgYXJlYSBvZiB0
aGUgd2luZG93LgogICAgIC8vIFdlIHJldXNlIHRoZSBzaGFkZXIgcHJvZ3JhbSB1c2VkIGJ5IENv
bnRlbnRMYXllckNocm9taXVtLgogICAgIGNvbnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFy
ZWRWYWx1ZXMqIGNvbnRlbnRMYXllclZhbHVlcyA9IGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygp
OwpAQCAtMjk3LDYgKzMxOCw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgR0xDKGds
RW5hYmxlKEdMX0JMRU5EKSk7CiAgICAgR0xDKGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01J
TlVTX1NSQ19BTFBIQSkpOwogCisgICAgLy8gU2V0IHRoZSByb290VmlzaWJsZVJlY3QgLS0tIHVz
ZWQgYnkgc3Vic2VxdWVudCBkcmF3TGF5ZXJzIGNhbGxzCisgICAgbV9yb290VmlzaWJsZVJlY3Qg
PSB2aXNpYmxlUmVjdDsKKwogICAgIC8vIFRyYW5zbGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5
ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Nj
cm9sbFBvc2l0aW9uLnkoKSwgMCk7CkBAIC0zMDgsMTEgKzMzMiwxMCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25z
dCBJbnRSZWN0JgogICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAg
ICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwg
b3BhY2l0eSk7CiAKLSAgICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwotCiAgICAg
Ly8gRW5hYmxlIHNjaXNzb3JpbmcgdG8gYXZvaWQgcmVuZGVyaW5nIGNvbXBvc2l0ZWQgbGF5ZXJz
IG92ZXIgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkp
OwogICAgIEZsb2F0UmVjdCBzY2lzc29yUmVjdChjb250ZW50UmVjdCk7CisKICAgICAvLyBUaGUg
c2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgogICAgIHNj
aXNzb3JSZWN0Lm1vdmUoLW1fc2Nyb2xsUG9zaXRpb24ueCgpLCAtbV9zY3JvbGxQb3NpdGlvbi55
KCkpOwogICAgIHNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOwpAQCAtMzIzLDEzICszNDYsMTYg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICBHTEMoZ2xTdGVuY2lsTWFzaygwKSk7CiAK
ICAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBvbmUgbW9yZSB0aW1lIHRvIGRyYXcgdGhl
IGxheWVycy4KLSAgICBmb3IgKGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgaSsrKQogICAgICAgICBk
cmF3TGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgc2Npc3NvclJlY3QpOwogCiAg
ICAgR0xDKGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpKTsKK30KIAordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnByZXNlbnQoKQoreworICAgIC8vIFdlJ3JlIGRvbmUhIFRpbWUgdG8gc3dh
cGJ1ZmZlcnMhCiAgICAgbV9nbGVzMkNvbnRleHQtPnN3YXBCdWZmZXJzKCk7Ci0KICAgICBtX25l
ZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA4ZjQ0YWZl
YmQwYTJjN2I0NzVkMDRiYTQ4NzIzZjFjZGM1NDU1MDkxLi4yNzQ4MTVmM2ZlMjNjM2IwNzhjNDcw
M2U4NDViM2JiYzhjMzNlY2JkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTYxLDkgKzYxLDE3
IEBAIHB1YmxpYzoKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc093blB0cjxHTEVTMkNv
bnRleHQ+IGdsZXMyQ29udGV4dCk7CiAgICAgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogCi0g
ICAgLy8gVXBkYXRlcyB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIgdGhhdCBmYWxsIGlu
c2lkZSB0aGUgdXBkYXRlUmVjdCBhbmQgcmVjb21wb3NpdGVzCi0gICAgLy8gYWxsIHRoZSBsYXll
cnMuCi0gICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKKyAgICAvLyB1cGRhdGVzIHNpemUgb2Ygcm9vdCB0
ZXh0dXJlLCBpZiBuZWVkZWQsIGFuZCBzY3JvbGxzIHRoZSBiYWNrYnVmZmVyLgorICAgIHZvaWQg
cHJlcGFyZVRvRHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CisKKyAg
ICAvLyB1cGRhdGVzIGEgcmVjdGFuZ2xlIHdpdGhpbiB0aGUgcm9vdCBsYXllciB0ZXh0dXJlCisg
ICAgdm9pZCB1cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChjb25zdCBJbnRSZWN0JiB1cGRhdGVS
ZWN0KTsKKworICAgIC8vIGRyYXdzIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBiYWNrYnVm
ZmVyCisgICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisKKyAgICAvLyBwdXRzIGJhY2tidWZmZXIgb25zY3Jl
ZW4KKyAgICB2b2lkIHByZXNlbnQoKTsKIAogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIpIHsgbV9yb290TGF5ZXIgPSBsYXllcjsgfQogICAgIExh
eWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA5MGRjNTM2MmJkZGE2M2Y4MTg5MWY0MjQ3NzM5M2EzNDMyMWRlNzMyLi42
YmZmZmQ2MzBmZDI4Njg2MzEyODE4NDNiMmFkMjFkZGIwMjAyOWM5IDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw0OCBAQAorMjAxMC0wOS0wMiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9t
aXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzogc2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDky
CisKKyAgICAgICAgSW50cm9kdWNlIGEgbmV3IEFQSSBvbiBXZWJXaWRnZXQgZm9yIHBhaW50aW5n
IHdpdGggYWNjZWxlcmF0ZWQKKyAgICAgICAgY29tcG9zaXRpbmcgdGhhdCBhbGxvd3MgdGhlIGNv
bXBvc2l0b3IgdG8gcHJvcGVybHkgZGlzdGluZ2l1c2gKKyAgICAgICAgc2Nyb2xsaW5nLCBpbnZh
bGlkYXRpb24gYW5kIHJlcGFpbnRpbmcgZnJvbSBvbmUgYW5vdGhlci4gVGhlIGtleQorICAgICAg
ICBjaGFuZ2UgaXMgdGhhdCBpbiBhY2NlbGVyYXRlZCByZW5kZXJpbmcgY2FzZSwgaW52YWxpZGF0
ZXMgYW5kCisgICAgICAgIHNjcm9sbGluZyBwYXNzIGRpcmVjdGx5IHRvIHRoZSBjb21wb3NpdG9y
LCByYXRoZXIgdGhhbiBwYXNzaW5nIHVwCisgICAgICAgIHRvIHRoZSBjbGllbnQgYXMgd2FzIHRo
ZSBjYXNlIGluIHRoZSBzb2Z0d2FyZSBwYXRoLiBGb3IKKyAgICAgICAgYWNjZWxlcmF0ZWQgcmVu
ZGVyaW5nLCB0aGUgcHJldmlvdXMgcGFpbnQoKSBtZXRob2QgaXMgcmVwbGFjZWQgYnkKKyAgICAg
ICAgYSBwYWlyIG9mIG1ldGhvZHM6IHBhaW50Q29tcG9zaXRlZCBhbmQKKyAgICAgICAgaW52YWxp
ZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0LgorCisKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lk
Z2V0Lmg6CisgICAgICAgICogcHVibGljL1dlYldpZGdldENsaWVudC5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXaWRnZXRDbGllbnQ6OnNjaGVkdWxlRGVmZXJyZWRDb21wb3NpdGUpOgorICAgICAg
ICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50SW1wbDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OnBhaW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5
ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51SW1wbDo6cGFpbnRDb21wb3Np
dGVkKToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5oOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpemUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjppbnZhbGlkYXRlUm9vdExheWVyUmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6aW52YWxpZGF0ZUNvbXBvc2l0ZWRSb290TGF5ZXJSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnBhaW50Q29tcG9zaXRlZCk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvUG9wdXBNZW51VGVzdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlRlc3RXZWJXaWRnZXQ6OmludmFsaWRhdGVDb21wb3NpdGVkUm9vdExheWVyUmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJXaWRnZXQ6OnBhaW50Q29tcG9zaXRlZCk6CisK
IDIwMTAtMDktMDcgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYldpZGdldC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRl
eCA1YzlmNTRlNzkzNjZiODNhZmVlN2MwZTFlM2EzMjg4YzM0NDEyY2E5Li5kMDEwMjcwNjVjOWU5
MGMxNDc1NmU3Nzg3Y2EyNjZkZjY3ZWFlYzNiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYldpZGdldC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0
LmgKQEAgLTYwLDEzICs2MCwyNiBAQCBwdWJsaWM6CiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQg
aW4gY2FsbHMgdG8gV2ViV2lkZ2V0Q2xpZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCkgPSAwOwogCi0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSBzcGVj
aWZpZWQgcmVnaW9uIG9mIHRoZSBXZWJXaWRnZXQgb250byB0aGUgZ2l2ZW4KLSAgICAvLyBjYW52
YXMuICBZb3UgTVVTVCBjYWxsIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0
IGlzCi0gICAgLy8gb2theSB0byBjYWxsIHBhaW50IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0
IGhhcyBiZWVuIGNhbGxlZCwKLSAgICAvLyBhc3N1bWluZyBubyBvdGhlciBjaGFuZ2VzIGFyZSBt
YWRlIHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9uY2UKLSAgICAvLyBldmVudHMgYXJlIHByb2Nl
c3NlZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8KLSAgICAvLyBs
YXlvdXQgaXMgd2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCi0gICAgdmlydHVhbCB2
b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSA9IDA7CisgICAgLy8gQ2FsbGVk
IHRvIHBhaW50IHRoZSByZWN0YW5ndWxhciByZWdpb24gd2l0aGluIHRoZSBXZWJXaWRnZXQgCisg
ICAgLy8gb250byB0aGUgc3BlY2lmaWVkIGNhbnZhcyBhdCAodmlld1BvcnQueCx2aWV3UG9ydC55
KS4gWW91IE1VU1QgY2FsbAorICAgIC8vIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhv
ZC4gIEl0IGlzIG9rYXkgdG8gY2FsbCBwYWludAorICAgIC8vIG11bHRpcGxlIHRpbWVzIG9uY2Ug
bGF5b3V0IGhhcyBiZWVuIGNhbGxlZCwgYXNzdW1pbmcgbm8gb3RoZXIKKyAgICAvLyBjaGFuZ2Vz
IGFyZSBtYWRlIHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9uY2UgZXZlbnRzIGFyZQorICAgIC8v
IHByb2Nlc3NlZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8gbGF5
b3V0IGlzCisgICAgLy8gd2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCisgICAgdmly
dHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmIHZpZXdQb3J0KSA9IDA7
CisKKyAgICAvLyBUcmlnZ2VycyBjb21wb3NpdGluZyBvZiB0aGUgY3VycmVudCBsYXllcnMgb250
byB0aGUgc2NyZWVuLgorICAgIC8vIFRoZSBmaW5pc2ggYXJndW1lbnQgY29udHJvbHMgd2hldGhl
ciB0aGUgY29tcG9zaXRvciB3aWxsIHdhaXQgZm9yIHRoZQorICAgIC8vIEdQVSB0byBmaW5pc2gg
cmVuZGVyaW5nIGJlZm9yZSByZXR1cm5pbmcuIFlvdSBNVVNUIGNhbGwgTGF5b3V0CisgICAgLy8g
YmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIGZvciB0aGUgc2FtZSByZWFzb25zIGRlc2NyaWJl
ZCBpbgorICAgIC8vIHRoZSBwYWludCBtZXRob2QgYWJvdmUuCisgICAgdmlydHVhbCB2b2lkIGNv
bXBvc2l0ZShib29sIGZpbmlzaCkgPSAwOworCisgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUg
V2ViV2lkZ2V0IG9mIGEgY2hhbmdlIGluIHRoZW1lLgorICAgIC8vIEltcGxlbWVudG9ycyB0aGF0
IGNhY2hlIHJlbmRlcmVkIGNvcGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCisgICAg
Ly8gb24gcmVjZWl2aW5nIHRoaXMgbWVzc2FnZQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5n
ZWQoKSA9IDA7CiAKICAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYW4g
aW5wdXQgZXZlbnQuICBSZXR1cm5zIHRydWUgaWYKICAgICAvLyB0aGUgZXZlbnQgaGFzIGJlZW4g
cHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2UuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYldpZGdldENsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRn
ZXRDbGllbnQuaAppbmRleCBiZDdiZDZhNzRmY2JhZjM3MWRmM2U5YTZlNDEwYmVkYmYzNTkyMzIw
Li45YmQ1NTNmM2Y3OWRmN2Q5YmFhNDQ1MGU0MTE1YzI2ZmVkOTM1ODQxIDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmgKQEAgLTUwLDYgKzUwLDkgQEAgcHVibGljOgog
ICAgIC8vIHNjcm9sbGVkIGJ5IHRoZSBzcGVjaWZpZWQgZHggYW5kIGR5IGFtb3VudHMuCiAgICAg
dmlydHVhbCB2b2lkIGRpZFNjcm9sbFJlY3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYlJlY3Qm
IGNsaXBSZWN0KSB7IH0KIAorICAgIC8vIENhbGxlZCB3aGVuIGEgY2FsbCB0byBXZWJXaWRnZXQ6
OmNvbXBvc2l0ZSBpcyByZXF1aXJlZAorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0
ZSgpIHsgfQorCiAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIHdpZGdldCBhY3F1aXJlcyBvciBsb3Nl
cyBmb2N1cywgcmVzcGVjdGl2ZWx5LgogICAgIHZpcnR1YWwgdm9pZCBkaWRGb2N1cygpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkaWRCbHVyKCkgeyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmNwcAppbmRleCA4YTNlZGE2NjY2Y2I1NWEyYWMwMDNkNjk3YzY2MTJlZjg5NmRi
YWZjLi44MTg0YTQwZDEyZDAyODM1MmM3NWYwMmQwNTNiYTg0NDY1MmE3NjM3IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTQ5Myw4ICs0OTMsMTYgQEAgdm9p
ZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50
UmVjdCYgdXBkYXRlUmVjdCwgYm8KIHsKICAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKLSAgICAgICAgbV93
ZWJWaWV3LT5jbGllbnQoKS0+ZGlkSW52YWxpZGF0ZVJlY3QodXBkYXRlUmVjdCk7CisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmIChtX3dlYlZpZXct
PmNsaWVudCgpKQorICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkSW52YWxpZGF0
ZVJlY3QodXBkYXRlUmVjdCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IH0gZWxzZSB7CisgICAgICAgIG1fd2ViVmlldy0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QodXBk
YXRlUmVjdCk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6aW52
YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBi
b29sIGltbWVkaWF0ZSkKQEAgLTUwOCwxMSArNTE2LDE5IEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1w
bDo6c2Nyb2xsKAogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIG1fd2ViVmll
dy0+aGlkZVBvcHVwcygpOwotICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7Ci0gICAgICAg
IGludCBkeCA9IHNjcm9sbERlbHRhLndpZHRoKCk7Ci0gICAgICAgIGludCBkeSA9IHNjcm9sbERl
bHRhLmhlaWdodCgpOwotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0
KGR4LCBkeSwgY2xpcFJlY3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAg
ICBpZiAoIW1fd2ViVmlldy0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNl
bmRpZgorICAgICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkgeworICAgICAgICAgICAgaW50
IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKKyAgICAgICAgICAgIGludCBkeSA9IHNjcm9sbERl
bHRhLmhlaWdodCgpOworICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU2Nyb2xs
UmVjdChkeCwgZHksIGNsaXBSZWN0KTsKKyAgICAgICAgfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICB9IGVsc2UgeworICAgICAgICBtX3dlYlZpZXctPnNjcm9sbFJvb3RM
YXllcihzY3JvbGxEZWx0YSwgY2xpcFJlY3QpOwogICAgIH0KKyNlbmRpZgogfQogCiBJbnRQb2lu
dCBDaHJvbWVDbGllbnRJbXBsOjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcAppbmRleCA3NWQ2Y2MxNDM4
MjRiN2Y1OTI5MTAyOWI0MjdjZTkyMGMyM2U0NTM5Li4wODVhMTU3NWU1NGJmMGU3YTRhYzhlNTg3
OGEwMzg2MDU4OTJlNWQ5IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVw
TWVudUltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5j
cHAKQEAgLTE3NCw2ICsxNzQsMTYgQEAgdm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpwYWludChXZWJD
YW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICB9CiB9CiAKK3ZvaWQgV2Vi
UG9wdXBNZW51SW1wbDo6dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFdlYlBvcHVwTWVudUltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBib29sIFdlYlBvcHVwTWVudUltcGw6OmhhbmRsZUlu
cHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYgaW5wdXRFdmVudCkKIHsKICAgICBpZiAoIW1f
d2lkZ2V0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBs
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAppbmRleCBlZGJiNGFi
NTBkNDE2YjAzYjdiZDFhNWZjZTgwMDU1NjA5MWVhMjI3Li4yMjFiYTAzOGYyYzRjNzM2ZDY3N2Zh
YmZhMzIyZTA1MWY5MDQyNjRjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBv
cHVwTWVudUltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwu
aApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25z
dCBXZWJTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCk7CisgICAgdmly
dHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9v
bCBmaW5pc2gpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklu
cHV0RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCmluZGV4IGY2M2M5MDgyNTYyNmNiMDZjYmM2ZjBhNWEzNWYyMjdiYmQ1YmU3ODIuLjRi
YjcwOTcwYmZmNTcwOTc3ZjYyYjFhZTM2OWZiMTRiYzE0YjJlZWYgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwCkBAIC05MTIsNyArOTEyLDEyIEBAIHZvaWQgV2ViVmlld0ltcGw6OnJl
c2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXplKQogCiAgICAgaWYgKG1fY2xpZW50KSB7CiAgICAg
ICAgIFdlYlJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0
KTsKLSAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAg
ICAgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJl
Y3QoZGFtYWdlZFJlY3QpOworI2VuZGlmCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9j
bGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKICAgICB9CiAKICNpZiBPUyhE
QVJXSU4pCkBAIC05NDYsMzMgKzk1MSw0NCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpsYXlvdXQoKQog
CiB2b2lkIFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVj
dCYgcmVjdCkKIHsKLQorICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkg
ewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoIWlzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CisgICAgICAgIGRvQ29tcG9zaXRlKGNhbnZhcyk7CisK
KyAgICAgICAgLy8gUmVhZGJhY2sgaW50byB0aGUgY2FudmFzCisgICAgICAgIC8vIEZJWE1FIElu
c2VydCB3am1hY2xlYW4ncyByZWFkYmFjayBjb2RlIGhlcmUgZm9yIHdlYmtpdCBidWcgNDQxMjcK
KworICAgICAgICAvLyBUZW1wb3JhcmlseSBwcmVzZW50IHNvIHRoZSBkb3duc3RyZWFtIENocm9t
aXVtIHJlbmRlcndpZGdldCBzdGlsbCByZW5kZXJzLgorICAgICAgICAvLyBGSVhNRTogcmVtb3Zl
IHRoaXMgY2FsbCBvbmNlIHRoZSBjaGFuZ2VzIHRvIENocm9taXVtJ3MgcmVuZGVyd2lkZ2V0IGhh
dmUgbGFuZGVkLgorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKICNlbmRpZgor
ICAgIH0gZWxzZSB7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJ
bXBsKCk7CiAgICAgICAgIGlmICh3ZWJmcmFtZSkKICAgICAgICAgICAgIHdlYmZyYW1lLT5wYWlu
dChjYW52YXMsIHJlY3QpOwotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllci4K
LSAgICAgICAgdXBkYXRlUm9vdExheWVyQ29udGVudHMocmVjdCk7CisgICAgfQorfQogCi0gICAg
ICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7Ci0gICAgICAgIGlm
ICghd2ViZnJhbWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZyYW1lVmlldyogdmll
dyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKLSAgICAgICAgaWYgKCF2aWV3KQotICAgICAgICAg
ICAgcmV0dXJuOwordm9pZCBXZWJWaWV3SW1wbDo6dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
IXBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+
bWFpbkZyYW1lKCktPnZpZXcoKTsKIAotICAgICAgICAvLyBUaGUgdmlzaWJsZVJlY3QgaW5jbHVk
ZXMgc2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250ZW50UmVjdCBkb2Vzbid0LgotICAgICAgICBJ
bnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwotICAg
ICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNl
KTsKKyAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhl
aWdodCk7CisgICAgdmlldy0+aW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworfQogCi0gICAg
ICAgIC8vIEFzayB0aGUgbGF5ZXIgY29tcG9zaXRvciB0byByZWRyYXcgYWxsIHRoZSBsYXllcnMu
Ci0gICAgICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSk7
Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyhyZWN0LCB2aXNpYmxlUmVjdCwg
Y29udGVudFJlY3QsIEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7
Ci0gICAgfQordm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQoreworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBkb0NvbXBvc2l0ZSgwKTsKKworICAg
IC8vIEZpbmlzaCBpZiByZXF1ZXN0ZWQuCisgICAgLy8gRklYTUU6IGhhbmRsZSBmaW5pc2ggZmxh
Zy4KKworICAgIC8vIFB1dCByZXN1bHQgb25zY3JlZW4uCisgICAgbV9sYXllclJlbmRlcmVyLT5w
cmVzZW50KCk7CiAjZW5kaWYKIH0KIApAQCAtMjExNCwxMSArMjEzMCwxMTEgQEAgYm9vbCBXZWJW
aWV3SW1wbDo6YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiAKIHZvaWQgV2ViVmlld0lt
cGw6OnNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQog
eworICAgIGJvb2wgd2FzQWN0aXZlID0gbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7
CiAgICAgc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGxheWVyID8gdHJ1ZSA6IGZh
bHNlKTsKICAgICBpZiAobV9sYXllclJlbmRlcmVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnNldFJvb3RMYXllcihsYXllcik7CisgICAgaWYgKHdhc0FjdGl2ZSAhPSBtX2lzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSkgeworICAgICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0KDAsIDAs
IG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CisgICAgICAgIGlmIChtX2lzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSkKKyAgICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0
KGRhbWFnZWRSZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZElu
dmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6
OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCit7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikK
KyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX2NsaWVu
dC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKKyAgICAvLyBGSVhNRTogVG8gYXZvaWQgYnJlYWtpbmcg
dGhlIGRvd25zdHJlYW0gQ2hyb21lIHJlbmRlcl93aWRnZXQgd2hpbGUgZG93bnN0cmVhbQorICAg
IC8vIGNoYW5nZXMgbGFuZCwgd2UgYWxzbyBoYXZlIHRvIHBhc3MgYSAxeDEgaW52YWxpZGF0ZSB1
cCB0byB0aGUgY2xpZW50CisgICAgeworICAgICAgICBXZWJSZWN0IGRhbWFnZVJlY3QoMCwgMCwg
MSwgMSk7CisgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VSZWN0KTsK
KyAgICB9Cit9CisKKwordm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVyKGNvbnN0IElu
dFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICAvLyBG
SVhNRTogVG8gYXZvaWQgYnJlYWtpbmcgdGhlIENocm9tZSByZW5kZXJfd2lkZ2V0IHdoZW4gdGhl
IG5ldyBjb21wb3NpdG9yIHJlbmRlcgorICAgIC8vIHBhdGggaXMgbm90IGNoZWNrZWQgaW4sIHdl
IG11c3Qgc3RpbGwgcGFzcyBzY3JvbGwgZGFtYWdlIHVwIHRvIHRoZSBjbGllbnQuIFRoaXMKKyAg
ICAvLyBjb2RlIHdpbGwgYmUgYmFja2VkIG91dCBpbiBhIGZvbGxvd3VwIENMIG9uY2UgdGhlIENo
cm9taXVtIGNoYW5nZXMgaGF2ZSBsYW5kZWQuCisgICAgbV9jbGllbnQtPmRpZFNjcm9sbFJlY3Qo
c2Nyb2xsRGVsdGEud2lkdGgoKSwgc2Nyb2xsRGVsdGEuaGVpZ2h0KCksIGNsaXBSZWN0KTsKKwor
ICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIC8vIENvbXB1dGUgdGhlIGRhbWFnZSBy
ZWN0IGluIHZpZXdwb3J0IHNwYWNlLgorICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWlu
RnJhbWVJbXBsKCk7CisgICAgaWYgKCF3ZWJmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZy
YW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHJldHVybjsKKworICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxl
Q29udGVudFJlY3QoZmFsc2UpOworCisgICAgLy8gV2Ugc3VwcG9ydCBmYXN0IHNjcm9sbGluZyBp
biBvbmUgZGlyZWN0aW9uIGF0IGEgdGltZS4KKyAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSAm
JiBzY3JvbGxEZWx0YS5oZWlnaHQoKSkgeworICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVj
dChXZWJSZWN0KGNvbnRlbnRSZWN0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBDb21wdXRlIHRoZSByZWdpb24gd2Ugd2lsbCBleHBvc2UgYnkgc2Nyb2xsaW5nLiBXZSB1c2Ug
dGhlCisgICAgLy8gY29udGVudCByZWN0IGZvciBpbnZhbGlkYXRpb24uICBVc2luZyB0aGlzIHNw
YWNlIGZvciBkYW1hZ2UKKyAgICAvLyByZWN0cyBhbGxvd3MgdXMgdG8gaW50ZXJtaXggaW52YWxp
ZGF0ZXMgd2l0aCBzY3JvbGxzLgorICAgIEludFJlY3QgZGFtYWdlZENvbnRlbnRzUmVjdDsKKyAg
ICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSkgeworICAgICAgICBmbG9hdCBkeCA9IHN0YXRpY19j
YXN0PGZsb2F0PihzY3JvbGxEZWx0YS53aWR0aCgpKTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRz
UmVjdC5zZXRZKGNvbnRlbnRSZWN0LnkoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Qu
c2V0SGVpZ2h0KGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgaWYgKGR4ID4gMCkgewor
ICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRYKGNvbnRlbnRSZWN0LngoKSk7Cisg
ICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFdpZHRoKGR4KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WChjb250ZW50UmVjdC5y
aWdodCgpICsgZHgpOworICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aCgt
ZHgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmxvYXQgZHkgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oc2Nyb2xsRGVsdGEuaGVpZ2h0KCkpOworICAgICAgICBkYW1hZ2VkQ29udGVu
dHNSZWN0LnNldFgoY29udGVudFJlY3QueCgpKTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVj
dC5zZXRXaWR0aChjb250ZW50UmVjdC53aWR0aCgpKTsKKyAgICAgICAgaWYgKGR5ID4gMCkgewor
ICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKGNvbnRlbnRSZWN0LnkoKSk7Cisg
ICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdodChkeSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFkoY29udGVudFJlY3Qu
Ym90dG9tKCkgKyBkeSk7CisgICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdo
dCgtZHkpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9zY3JvbGxEYW1hZ2UudW5pdGUoZGFt
YWdlZENvbnRlbnRzUmVjdCk7CisgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Cit9CisK
K3ZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgLy8gRklYTUU6IFRvIGF2b2lkIGJyZWFraW5nIHRoZSBDaHJvbWUgcmVu
ZGVyX3dpZGdldCB3aGVuIHRoZSBuZXcgY29tcG9zaXRvciByZW5kZXIKKyAgICAvLyBwYXRoIGlz
IG5vdCBjaGVja2VkIGluLCB3ZSBtdXN0IHN0aWxsIHBhc3MgZGFtYWdlIHVwIHRvIHRoZSBjbGll
bnQuIFRoaXMKKyAgICAvLyBjb2RlIHdpbGwgYmUgYmFja2VkIG91dCBpbiBhIGZvbGxvd3VwIENM
IG9uY2UgdGhlIENocm9taXVtIGNoYW5nZXMgaGF2ZSBsYW5kZWQuCisgICAgbV9jbGllbnQtPmRp
ZEludmFsaWRhdGVSZWN0KHJlY3QpOworCisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisK
KyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9
IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKworICAgIC8vIHJlY3QgaXMgaW4gdmlld3Bv
cnQgc3BhY2UuIENvbnZlcnQgdG8gY29udGVudCBzcGFjZQorICAgIC8vIHNvIHRoYXQgaW52YWxp
ZGF0aW9ucyBhbmQgc2Nyb2xsIGludmFsaWRhdGlvbnMgcGxheSB3ZWxsIHdpdGggb25lLWFub3Ro
ZXIuCisgICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhy
ZWN0KTsKKworICAgIC8vIEZJWE1FOiBhZGQgYSBzbWFydGVyIGRhbWFnZSBhZ2dyZWdhdGlvbiBs
b2dpYz8gUmlnaHQgbm93LCBMYXllckNocm9taXVtIGRvZXMgc2ltcGxlIHVuaW9uLWluZy4KKyAg
ICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpLT5zZXROZWVkc0Rpc3BsYXkoY29udGVudFJl
Y3QpOwogfQogCisKIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKICAgICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUgPT0gYWN0aXZlKQpAQCAtMjEyOCwxMCArMjI0NCw2IEBAIHZvaWQgV2ViVmlld0lt
cGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAg
ICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoZ2V0T25z
Y3JlZW5HTEVTMkNvbnRleHQoKSk7CiAgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKICAg
ICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gRm9yY2UgYSByZWRyYXcgdGhlIGVudGlyZSB2aWV3IHNv
IHRoYXQgdGhlIGNvbXBvc2l0b3IgZ2V0cyB0aGUgZW50aXJlIHZpZXcsCi0gICAgICAgICAgICAv
LyByYXRoZXIgdGhhbiBqdXN0IHRoZSBjdXJyZW50bHktZGlydHkgc3Vic2V0LgotICAgICAgICAg
ICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRo
LCBtX3NpemUuaGVpZ2h0KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2lzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgbV9jb21wb3Np
dG9yQ3JlYXRpb25GYWlsZWQgPSB0cnVlOwpAQCAtMjE0MiwxNyArMjI1NCwxMSBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUp
CiAgICAgfQogfQogCi12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhj
b25zdCBXZWJSZWN0JiByZWN0KQordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29u
dGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogVGhlIGFj
Y2VsZXJhdGVkIGNvbXBvc2l0aW5nIHBhdGggaW52YWxpZGF0ZXMgYSAxeDEgcmVjdCBhdCAoMCwg
MCkKLSAgICAvLyBpbiBvcmRlciB0byBnZXQgdGhlIHJlbmRlcmVyIHRvIGFzayB0aGUgY29tcG9z
aXRvciB0byByZWRyYXcuIFRoaXMgaXMgb25seQotICAgIC8vIHRlbXBvcmFyeSB1bnRpbCB3ZSBn
ZXQgdGhlIGNvbXBvc2l0b3IgdG8gcmVuZGVyIGRpcmVjdGx5IGZyb20gaXRzIG93biB0aHJlYWQu
Ci0gICAgaWYgKCFyZWN0LnggJiYgIXJlY3QueSAmJiByZWN0LndpZHRoID09IDEgJiYgcmVjdC5o
ZWlnaHQgPT0gMSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFt
ZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICBpZiAoIXdlYmZyYW1lKQogICAgICAgICByZXR1cm47
CkBAIC0yMTY0LDcgKzIyNzAsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJD
b250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIGlmIChyb290TGF5ZXIpIHsKICAgICAg
ICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsK
IAotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6
ZShyZWN0LndpZHRoLCByZWN0LmhlaWdodCkpOworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNl
dFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
KTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiByb290TGF5ZXJDb250ZXh0ID0gbV9sYXllclJl
bmRlcmVyLT5yb290TGF5ZXJHcmFwaGljc0NvbnRleHQoKTsKIAogI2lmIFBMQVRGT1JNKFNLSUEp
CkBAIC0yMTc0LDcgKzIyODAsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJD
b250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+c2F2
ZSgpOwogCiAgICAgICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBz
eXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAgICAgIHBsYXRmb3JtQ2FudmFzLT50cmFuc2xh
dGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1yZWN0LngpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4o
LXJlY3QueSkpOworICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0
PFNrU2NhbGFyPigtcmVjdC54KCkpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueSgpKSk7
CiAKICAgICAgICAgcm9vdExheWVyQ29udGV4dC0+c2F2ZSgpOwogCkBAIC0yMTg4LDcgKzIyOTQs
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJS
ZWN0JiByZWN0KQogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNnQ29udGV4dCk7CiAKICAg
ICAgICAgLy8gQnJpbmcgdGhlIENvcmVHcmFwaGljcyBjb250ZXh0IGludG8gdGhlIGNvb3JkaW5h
dGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0oY2dDb250ZXh0LCAtcmVjdC54LCAtcmVjdC55KTsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKGNnQ29udGV4dCwgLXJlY3QueCgpLCAtcmVjdC55KCkpOwogCiAgICAgICAgIHJvb3RM
YXllckNvbnRleHQtPnNhdmUoKTsKIApAQCAtMjIwMiwyMiArMjMwOCw0OCBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAg
IH0KIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKK3Zv
aWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKFdlYkNhbnZhcyogY2FudmFzKQogewotICAgIC8v
IEZJWE1FOiBGb3Igbm93IHdlJ3JlIHBvc3RpbmcgYSByZXBhaW50IGV2ZW50IGZvciB0aGUgZW50
aXJlIHBhZ2Ugd2hpY2ggaXMgYW4gb3ZlcmtpbGwuCi0gICAgaWYgKFdlYkZyYW1lSW1wbCogd2Vi
ZnJhbWUgPSBtYWluRnJhbWVJbXBsKCkpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9
IHdlYmZyYW1lLT5mcmFtZVZpZXcoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFy
eSBoYWNrIHRvIGludmFsaWRhdGUgcGFydCBvZiB0aGUgcGFnZSBzbyB0aGF0IHdlIGdldCBjYWxs
ZWQgdG8gcmVuZGVyCi0gICAgICAgICAgICAvLyAgICAgICAgYWdhaW4uCi0gICAgICAgICAgICBJ
bnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwotICAg
ICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMSwgMSkp
OworICAgIEFTU0VSVChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSk7CisgICAgaWYg
KCFwYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCk7CisKKyAgICAvLyBUaGUgdmlzaWJsZVJlY3QgaW5jbHVkZXMg
c2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250ZW50UmVjdCBkb2Vzbid0LgorICAgIEludFJlY3Qg
dmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7CisgICAgSW50UmVj
dCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7CisgICAgSW50
UmVjdCB2aWV3UG9ydCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0
KTsKKworICAgIC8vIEdpdmUgdGhlIGNvbXBvc2l0b3IgYSBjaGFuY2UgdG8gc2V0dXAvcmVzaXpl
IHRoZSByb290IHRleHR1cmUgaGFuZGxlIGFuZCBwZXJmb3JtIHNjcm9sbGluZy4KKyAgICBtX2xh
eWVyUmVuZGVyZXItPnByZXBhcmVUb0RyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0
LCBJbnRQb2ludCh2aWV3LT5zY3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSkpOworCisgICAgLy8g
RHJhdyB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIuCisgICAgVmVjdG9yPEZsb2F0UmVj
dD4gZGFtYWdlUmVjdHM7CisgICAgZGFtYWdlUmVjdHMuYXBwZW5kKG1fc2Nyb2xsRGFtYWdlKTsK
KyAgICBkYW1hZ2VSZWN0cy5hcHBlbmQobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+ZGly
dHlSZWN0KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFtYWdlUmVjdHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgLy8gVGhlIGRhbWFnZSByZWN0IGZvciB0aGUgcm9vdCBsYXllciBp
cyBpbiBjb250ZW50IHNwYWNlIFtlLmcuIHVuc2Nyb2xsZWRdLgorICAgICAgICAvLyBDb252ZXJ0
IGZyb20gY29udGVudCBzcGFjZSB0byB2aWV3UG9ydCBzcGFjZS4KKyAgICAgICAgY29uc3QgRmxv
YXRSZWN0IGRhbWFnZWRDb250ZW50UmVjdCA9IGRhbWFnZVJlY3RzW2ldOworICAgICAgICBJbnRS
ZWN0IGRhbWFnZWRSZWN0ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhJbnRSZWN0KGRhbWFnZWRD
b250ZW50UmVjdCkpOworCisgICAgICAgIC8vIEludGVyc2VjdCB0aGlzIHJlY3RhbmdsZSB3aXRo
IHRoZSB2aWV3UG9ydC4KKyAgICAgICAgZGFtYWdlZFJlY3QuaW50ZXJzZWN0KHZpZXdQb3J0KTsK
KworICAgICAgICAvLyBOb3cgcmVuZGVyIGl0LgorICAgICAgICBpZiAoZGFtYWdlZFJlY3Qud2lk
dGgoKSAmJiBkYW1hZ2VkUmVjdC5oZWlnaHQoKSkgeworICAgICAgICAgICAgdXBkYXRlUm9vdExh
eWVyQ29udGVudHMoZGFtYWdlZFJlY3QpOworICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT51
cGRhdGVSb290TGF5ZXJUZXh0dXJlUmVjdChkYW1hZ2VkUmVjdCk7CiAgICAgICAgIH0KICAgICB9
CisgICAgbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+cmVzZXROZWVkc0Rpc3BsYXkoKTsK
KyAgICBtX3Njcm9sbERhbWFnZSA9IFdlYlJlY3QoKTsKIAotICAgIGlmIChtX2xheWVyUmVuZGVy
ZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgLy8g
RHJhdyB0aGUgYWN0dWFsIGxheWVycy4uLgorICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVy
cyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOwogfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNlbmRpZgorCiAKIFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBXZWJW
aWV3SW1wbDo6Z2V0T25zY3JlZW5HTEVTMkNvbnRleHQoKQogewpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oCmluZGV4IGE0MjA5OWM5ZDVmNDg0M2MyZjNlNDdkNzUzNzdkNGQ1YTBmN2U5ZjEuLjVl
YzdkMzgzMGYzZGU0ODBiM2IwZjQ2NDU4NmJkMTZmZDVkZGMxM2IgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJHTEVTMkNvbnRleHQu
aCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uUG9saWN5LmgiCiAjaW5jbHVkZSAiV2ViUG9pbnQu
aCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCiAjaW5jbHVkZSAiV2ViU2l6ZS5oIgogI2luY2x1ZGUg
IldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKQEAgLTkyLDYgKzkzLDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29u
c3QgV2ViUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
SW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNl
Q2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpA
QCAtMzIyLDkgKzMyNSwxMSBAQCBwdWJsaWM6CiAgICAgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgIHZvaWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAg
dm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKik7CiAgICAg
Ym9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisgICAgdm9pZCBzZXRSb290R3Jh
cGhpY3NMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKik7CisgICAgdm9pZCBzZXRSb290TGF5
ZXJOZWVkc0Rpc3BsYXkoKTsKKyAgICB2b2lkIHNjcm9sbFJvb3RMYXllcihjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3Qp
OworICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOwogI2VuZGlmCiAgICAgLy8gT25zY3JlZW4gY29udGV4dHMgZGlzcGxheSB0byB0aGUgc2Ny
ZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHZpZXcuCiAgICAgLy8gT2Zmc2NyZWVuIGNvbnRleHRz
IHJlbmRlciBvZmZzY3JlZW4gYnV0IGNhbiBzaGFyZSByZXNvdXJjZXMgd2l0aCB0aGUKQEAgLTM4
Niw3ICszOTEsOCBAQCBwcml2YXRlOgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wpOwotICAg
IHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYpOworICAgIHZvaWQg
dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZv
aWQgZG9Db21wb3NpdGUoV2ViQ2FudmFzKik7CiAjZW5kaWYKIAogICAgIFdlYlZpZXdDbGllbnQq
IG1fY2xpZW50OwpAQCAtNTExLDYgKzUxNyw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IG1fbW91c2VDYXB0dXJlTm9kZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc2Nyb2xsRGFtYWdlOwogICAgIE93blB0
cjxXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBi
b29sIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlOwogICAgIGJvb2wgbV9jb21wb3Np
dG9yQ3JlYXRpb25GYWlsZWQ7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9w
dXBNZW51VGVzdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAK
aW5kZXggNTAzMTlhZjIzYjBhOTJmNDRjOTE1OGVmYjNlNjQ2MTgyMzk4MWQxMC4uYWVmMjljZjJk
MDQxMjRiNGM4N2VmMDdhMmU1ZjM4NTA5Njc4MmI2OCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Q
b3B1cE1lbnVUZXN0LmNwcApAQCAtMTI4LDYgKzEyOCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3Qm
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCkgeyB9CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlu
cHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1
cyhib29sKSB7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67089</attachid>
            <date>2010-09-09 13:48:27 -0700</date>
            <delta_ts>2010-09-09 14:04:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45092-20100909134826.patch</filename>
            <type>text/plain</type>
            <size>37088</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTA3NDkwMzVmZGMxNmEyNWYxMTVlYTJmNTIyYjg3YTQxODQzMDc1OC4uZjk2NjEyNzExZGUxY2Ri
MDA5MmNkZDRlZGI3N2QzMWJiNTg0Nzc1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wOS0wOSAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlc2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkaXJ0eVJlY3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290
TGF5ZXJUZXh0dXJlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpwcmVzZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaDoKKwogMjAxMC0wOS0wNyAgSmFuIEUgSGFuc3NlbiAgPGpoYW5zc2Vu
QHNlbmNoYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IDY1MTlmMWZmMmJhMTgyNmYyZTI4NTk2MmIwMzgxNzEyYTQ2ZTlkY2MuLmQ2ZWVmM2Fj
ZDFlNDM3MWNiNDFkZmE1MmNlZWViMmE2NGVmOTFhYzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMjk5LDEwICsy
OTksMTUgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKICAgICBpZiAobV9ib3VuZHMgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9v
bCBmaXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAm
JiBzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKTsKKwogICAgIG1fYm91bmRzID0gc2l6ZTsK
ICAgICBtX2JhY2tpbmdTdG9yZVNpemUgPSBzaXplOwogCi0gICAgc2V0TmVlZHNDb21taXQoKTsK
KyAgICBpZiAoZmlyc3RSZXNpemUpCisgICAgICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJlY3Qo
MCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKKyAgICBlbHNlCisg
ICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJh
bWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMzExLDcgKzMxNiw3IEBAIHZvaWQgTGF5ZXJD
aHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgcmV0dXJuOwog
CiAgICAgbV9mcmFtZSA9IHJlY3Q7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICBzZXROZWVk
c0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdo
dCgpKSk7CiB9CiAKIGNvbnN0IExheWVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OnJvb3RMYXll
cigpIGNvbnN0CkBAIC0zNTMsNyArMzU4LDYgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVk
c0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCiAgICAgbV9jb250ZW50c0RpcnR5
ID0gdHJ1ZTsKIAogICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7Ci0KICAgICBzZXRO
ZWVkc0NvbW1pdCgpOwogfQogCkBAIC0zNjMsNiArMzY3LDEyIEBAIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6c2V0TmVlZHNEaXNwbGF5KCkKICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwogfQogCit2
b2lkIExheWVyQ2hyb21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBtX2RpcnR5UmVj
dCA9IEZsb2F0UmVjdCgpOworICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworfQorCiB2b2lk
IExheWVyQ2hyb21pdW06OnRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG0pCiB7CiAgICAgZmxhdHRlbmVkWzBdID0gbS5tMTEoKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5k
ZXggYmExNTA4ODQ0YmEzNWIzNDUxZjgyY2Q1ODlhNjUzOTc2NTIxYTA4Yy4uMmQyMjVkYWY1YTIw
NzFiYWJmZWJkNmE3Y2YzY2MwNWUyNmIzOTA4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTExMiw2ICsxMTIsOCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5
UmVjdCk7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBjb25zdCBGbG9hdFJlY3Qm
IGRpcnR5UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlydHlSZWN0OyB9CisgICAgdm9pZCByZXNl
dE5lZWRzRGlzcGxheSgpOwogCiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5n
ZShib29sIG5lZWRzRGlzcGxheSkgeyBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlID0gbmVl
ZHNEaXNwbGF5OyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA3ODkyOThhZWQ4Y2U5
NzYzMDIwY2ZlMGFlMjI0OGUzNzMzZGYyYzhjLi5iZGUyNDk3ZjhjNTBkODgxYmY0OGE3YTA2ZGY3
OThiY2ExN2NiZTIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0xNTksOCArMTU5LDgg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcih1bnNpZ25lZCBwcm9ncmFt
SWQpCiAKIC8vIFVwZGF0ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIHRleHR1cmUg
dGhhdCBmYWxsIGluc2lkZSB0aGUgdXBkYXRlUmVjdAogLy8gYW5kIHJlLWNvbXBvc2l0cyBhbGwg
c3VibGF5ZXJzLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3Qg
SW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAg
ICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIApAQCAtMjAwLDE0ICsyMDAsMTIgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBk
YXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9s
bFBvc2l0aW9uOwogCiAgICAgSW50UG9pbnQgc2Nyb2xsRGVsdGEgPSB0b1BvaW50KHNjcm9sbFBv
c2l0aW9uIC0gbV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgLy8gU2Nyb2xsIG9ubHkgd2hlbiB0aGUg
dXBkYXRlUmVjdCBjb250YWlucyBwaXhlbHMgZm9yIHRoZSBuZXdseSB1bmNvdmVyZWQgcmVnaW9u
IHRvIGF2b2lkIGZsYXNoaW5nLgotICAgIGlmICgoc2Nyb2xsRGVsdGEueCgpICYmIHVwZGF0ZVJl
Y3Qud2lkdGgoKSA+PSBhYnMoc2Nyb2xsRGVsdGEueCgpKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgp
ID49IGNvbnRlbnRSZWN0LmhlaWdodCgpKQotICAgICAgICB8fCAoc2Nyb2xsRGVsdGEueSgpICYm
IHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gYWJzKHNjcm9sbERlbHRhLnkoKSkgJiYgdXBkYXRlUmVj
dC53aWR0aCgpID49IGNvbnRlbnRSZWN0LndpZHRoKCkpKSB7CisgICAgLy8gU2Nyb2xsIHRoZSBi
YWNrYnVmZmVyCisgICAgaWYgKHNjcm9sbERlbHRhLngoKSB8fCBzY3JvbGxEZWx0YS55KCkpIHsK
ICAgICAgICAgLy8gU2Nyb2xsaW5nIHdvcmtzIGFzIGZvbGxvd3M6IFdlIHJlbmRlciBhIHF1YWQg
d2l0aCB0aGUgY3VycmVudCByb290IGxheWVyIGNvbnRlbnRzCiAgICAgICAgIC8vIHRyYW5zbGF0
ZWQgYnkgdGhlIGFtb3VudCB0aGUgcGFnZSBoYXMgc2Nyb2xsZWQgc2luY2UgdGhlIGxhc3QgdXBk
YXRlIGFuZCB0aGVuIHJlYWQgdGhlCiAgICAgICAgIC8vIHBpeGVscyBvZiB0aGUgY29udGVudCBh
cmVhICh2aXNpYmxlIGFyZWEgZXhjbHVkaW5nIHRoZSBzY3JvbGwgYmFycykgYmFjayBpbnRvIHRo
ZQotICAgICAgICAvLyByb290IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEg
aXMgc3ViZXNxdWVudGx5IGZpbGxlZCBhcyB1c3VhbCB3aXRoCi0gICAgICAgIC8vIHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlUmVjdC4KKyAgICAgICAgLy8gcm9vdCBsYXllciB0ZXh0dXJlLiBU
aGUgbmV3bHkgZXhwb3NlZCBhcmVhIHdpbGwgYmUgZmlsbGVkIGJ5IGEgc3Vic2VxdWVudCBkcmF3
TGF5ZXJzSW50b1JlY3QgY2FsbAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGxl
ZExheWVyTWF0cml4OwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gMS4wZjsKQEAgLTIzOCw0MiArMjM2LDY1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3Qm
CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9CiAKLSAg
ICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBjaGVjayBzaG91bGQgZ28gYXdheSB3aGVuIHRoZSBj
b21wb3NpdG9yIHJlbmRlcnMgaW5kZXBlbmRlbnRseSBmcm9tIGl0cyBvd24gdGhyZWFkLgotICAg
IC8vIElnbm9yZSBhIDF4MSB1cGRhdGUgcmVjdCBhdCAoMCwgMCkgYXMgdGhhdCdzIHVzZWQgYSB3
YXkgdG8ga2ljayBvZmYgYSByZWRyYXcgZm9yIHRoZSBjb21wb3NpdG9yLgotICAgIGlmICghKCF1
cGRhdGVSZWN0LngoKSAmJiAhdXBkYXRlUmVjdC55KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID09
IDEgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA9PSAxKSkgewotICAgICAgICAvLyBVcGRhdGUgdGhl
IHJvb3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAgICAgQVNTRVJUKCh1cGRhdGVSZWN0LngoKSArIHVw
ZGF0ZVJlY3Qud2lkdGgoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKLSAgICAgICAgICAg
ICAgICYmICh1cGRhdGVSZWN0LnkoKSArIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPD0gbV9yb290TGF5
ZXJUZXh0dXJlSGVpZ2h0KSk7CisgICAgLy8gVHJhbnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBs
YXllcnMgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbi4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
YXRyaXg7CisgICAgbWF0cml4LnRyYW5zbGF0ZTNkKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1f
c2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsKKworICAgIC8vIFRyYXZlcnNlIHRoZSBsYXllciB0cmVl
IGFuZCB1cGRhdGUgdGhlIGxheWVyIHRyYW5zZm9ybXMuCisgICAgZmxvYXQgb3BhY2l0eSA9IDE7
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBt
X3Jvb3RMYXllci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgc2l6ZV90IGk7CisgICAgZm9yIChpID0g
MDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKKyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJz
aXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgbWF0cml4LCBvcGFjaXR5KTsKK30KKwordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CisK
KyAgICBpZiAoIW1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBHTEMoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOworCisgICAgLy8g
VXBkYXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgQVNTRVJUKCh1cGRhdGVSZWN0LnJp
Z2h0KCkgIDw9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQorICAgICAgICAgICAmJiAodXBkYXRl
UmVjdC5ib3R0b20oKSA8PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsKIAogI2lmIFBMQVRG
T1JNKFNLSUEpCi0gICAgICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVj
dC4KLSAgICAgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52YXMtPmdl
dERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgICAgICBpbnQgcm9vdExheWVyV2lk
dGggPSBiaXRtYXAud2lkdGgoKTsKLSAgICAgICAgaW50IHJvb3RMYXllckhlaWdodCA9IGJpdG1h
cC5oZWlnaHQoKTsKLSAgICAgICAgQVNTRVJUKHJvb3RMYXllcldpZHRoID09IHVwZGF0ZVJlY3Qu
d2lkdGgoKSAmJiByb290TGF5ZXJIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgIHZvaWQqIHBpeGVscyA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKLQotICAgICAgICAvLyBDb3B5
IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1
cmUuCi0gICAgICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRl
UmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3Qu
aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOworICAgIC8vIEdl
dCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCBi
aXRtYXAgPSBtX3Jvb3RMYXllckNhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxz
ZSk7CisgICAgaW50IGJpdG1hcFdpZHRoID0gYml0bWFwLndpZHRoKCk7CisgICAgaW50IGJpdG1h
cEhlaWdodCA9IGJpdG1hcC5oZWlnaHQoKTsKKyAgICBBU1NFUlQoYml0bWFwV2lkdGggPT0gdXBk
YXRlUmVjdC53aWR0aCgpICYmIGJpdG1hcEhlaWdodCA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsK
KyAgICB2b2lkKiBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7CisgICAgLy8gQ29weSB0aGUg
Y29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgor
ICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCks
IHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCks
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2VsaWYgUExBVEZPUk0oQ0cp
Ci0gICAgICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAgICAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290
TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nh
c3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0
KCkpKSA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdm9pZCogcGl4ZWxzID0gbV9y
b290TGF5ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwotCi0gICAgICAgIC8vIENvcHkgdGhlIGNvbnRl
bnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAg
ICAgLy8gVGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBj
b29yZGluYXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCi0gICAg
ICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cGRhdGVSZWN0LngoKSwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0IC0g
dXBkYXRlUmVjdC55KCkgLSB1cGRhdGVSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMp
KTsKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCisgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJD
R0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50
PihDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9
PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RMYXllckJh
Y2tpbmdTdG9yZS5kYXRhKCk7CisKKyAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBk
YXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgLy8gVGhlIG9yaWdpbiBp
cyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGluYXRlIHN5c3RlbS4g
V2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCisgICAgR0xDKGdsVGV4U3ViSW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC54
KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRlUmVj
dC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwg
dXBkYXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1l
bnQgZm9yIHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCi0gICAgfQorfQorCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3Np
dGluZyk7CiAKICAgICBnbENsZWFyQ29sb3IoMCwgMCwgMSwgMSk7CiAgICAgZ2xDbGVhcihHTF9D
T0xPUl9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCk7CiAKKyAgICBHTEMoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOworCiAgICAgLy8g
UmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRoZSBlbnRp
cmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cuCiAgICAgLy8gV2UgcmV1c2UgdGhlIHNoYWRl
ciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCiAgICAgY29uc3QgQ29udGVu
dExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0gY29udGVu
dExheWVyU2hhcmVkVmFsdWVzKCk7CkBAIC0yOTcsNiArMzE4LDkgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3Qg
SW50UmVjdCYKICAgICBHTEMoZ2xFbmFibGUoR0xfQkxFTkQpKTsKICAgICBHTEMoZ2xCbGVuZEZ1
bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiAKKyAgICAvLyBTZXQgdGhlIHJv
b3RWaXNpYmxlUmVjdCAtLS0gdXNlZCBieSBzdWJzZXF1ZW50IGRyYXdMYXllcnMgY2FsbHMKKyAg
ICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OworCiAgICAgLy8gVHJhbnNsYXRlIGFs
bCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbi4KICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5zbGF0ZTNkKC1tX3Njcm9s
bFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsKQEAgLTMwOCwxMSArMzMy
LDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgZm9yIChpID0gMDsgaSA8IHN1Ymxh
eWVycy5zaXplKCk7IGkrKykKICAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVy
c1tpXS5nZXQoKSwgbWF0cml4LCBvcGFjaXR5KTsKIAotICAgIG1fcm9vdFZpc2libGVSZWN0ID0g
dmlzaWJsZVJlY3Q7Ci0KICAgICAvLyBFbmFibGUgc2Npc3NvcmluZyB0byBhdm9pZCByZW5kZXJp
bmcgY29tcG9zaXRlZCBsYXllcnMgb3ZlciB0aGUgc2Nyb2xsYmFycy4KICAgICBHTEMoZ2xFbmFi
bGUoR0xfU0NJU1NPUl9URVNUKSk7CiAgICAgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KGNvbnRlbnRS
ZWN0KTsKKwogICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNj
cm9sbCBvZmZzZXQuCiAgICAgc2Npc3NvclJlY3QubW92ZSgtbV9zY3JvbGxQb3NpdGlvbi54KCks
IC1tX3Njcm9sbFBvc2l0aW9uLnkoKSk7CiAgICAgc2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7
CkBAIC0zMjMsMTMgKzM0NiwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhn
bFN0ZW5jaWxNYXNrKDApKTsKIAogICAgIC8vIFRyYXZlcnNlIHRoZSBsYXllciB0cmVlIG9uZSBt
b3JlIHRpbWUgdG8gZHJhdyB0aGUgbGF5ZXJzLgotICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXll
cnMuc2l6ZSgpOyBpKyspCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6
ZSgpOyBpKyspCiAgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgp
LCBzY2lzc29yUmVjdCk7CiAKICAgICBHTEMoZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCkpOwor
fQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgpCit7CisgICAgLy8gV2Un
cmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVycyEKICAgICBtX2dsZXMyQ29udGV4dC0+c3dhcEJ1
ZmZlcnMoKTsKLQogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCmluZGV4IDhmNDRhZmViZDBhMmM3YjQ3NWQwNGJhNDg3MjNmMWNkYzU0NTUwOTEuLjI3
NDgxNWYzZmUyM2MzYjA3OGM0NzAzZTg0NWIzYmJjOGMzM2VjYmQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaApAQCAtNjEsOSArNjEsMTcgQEAgcHVibGljOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1
bShQYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gZ2xlczJDb250ZXh0KTsKICAgICB+TGF5ZXJSZW5k
ZXJlckNocm9taXVtKCk7CiAKLSAgICAvLyBVcGRhdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgcm9v
dCBsYXllciB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0IGFuZCByZWNvbXBvc2l0ZXMK
LSAgICAvLyBhbGwgdGhlIGxheWVycy4KLSAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIC8vIHVw
ZGF0ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5kIHNjcm9sbHMgdGhlIGJh
Y2tidWZmZXIuCisgICAgdm9pZCBwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZp
c2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNj
cm9sbFBvc2l0aW9uKTsKKworICAgIC8vIHVwZGF0ZXMgYSByZWN0YW5nbGUgd2l0aGluIHRoZSBy
b290IGxheWVyIHRleHR1cmUKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGNv
bnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOworCisgICAgLy8gZHJhd3MgdGhlIGN1cnJlbnQgbGF5
ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgSW50UmVj
dCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKworICAgIC8vIHB1
dHMgYmFja2J1ZmZlciBvbnNjcmVlbgorICAgIHZvaWQgcHJlc2VudCgpOwogCiAgICAgdm9pZCBz
ZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBsYXllcikgeyBtX3Jvb3RMYXll
ciA9IGxheWVyOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9y
b290TGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkwZGM1MzYyYmRkYTYzZjgxODkxZjQy
NDc3MzkzYTM0MzIxZGU3MzIuLmY1NWM4YmMyNTQyNzkzMTdkYmQxNGE3NjM3NTU2NTBiMzI1ZTE3
YzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEwLTA5LTA5ICBOYXQgRHVjYSAg
PG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbY2hyb21pdW1dIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nOiBzY3JlZW4g
Z2FyYmFnZSB3aGVuIHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDUwOTIKKworICAgICAgICBJbnRyb2R1Y2UgYSBuZXcgQVBJIG9uIFdl
YldpZGdldCBmb3IgcGFpbnRpbmcgd2l0aCBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGlu
ZyB0aGF0IGFsbG93cyB0aGUgY29tcG9zaXRvciB0byBwcm9wZXJseSBkaXN0aW5naXVzaAorICAg
ICAgICBzY3JvbGxpbmcsIGludmFsaWRhdGlvbiBhbmQgcmVwYWludGluZyBmcm9tIG9uZSBhbm90
aGVyLiBUaGUga2V5CisgICAgICAgIGNoYW5nZSBpcyB0aGF0IGluIGFjY2VsZXJhdGVkIHJlbmRl
cmluZyBjYXNlLCBpbnZhbGlkYXRlcyBhbmQKKyAgICAgICAgc2Nyb2xsaW5nIHBhc3MgZGlyZWN0
bHkgdG8gdGhlIGNvbXBvc2l0b3IsIHJhdGhlciB0aGFuIHBhc3NpbmcgdXAKKyAgICAgICAgdG8g
dGhlIGNsaWVudCBhcyB3YXMgdGhlIGNhc2UgaW4gdGhlIHNvZnR3YXJlIHBhdGguIEZvcgorICAg
ICAgICBhY2NlbGVyYXRlZCByZW5kZXJpbmcsIHRoZSBwcmV2aW91cyBwYWludCgpIG1ldGhvZCBp
cyByZXBsYWNlZCBieQorICAgICAgICBhIHBhaXIgb2YgbWV0aG9kczogcGFpbnRDb21wb3NpdGVk
IGFuZAorICAgICAgICBpbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QuCisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgICogcHVibGljL1dlYldpZGdldENsaWVu
dC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXRDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRl
KToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkNocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyk6CisgICAgICAg
IChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNjcm9sbCk6CisgICAgICAgICogc3JjL1dlYlBv
cHVwTWVudUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjp0aGVt
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpjb21wb3NpdGUp
OgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZp
ZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlc2l6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjp0aGVtZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29t
cG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xh
eWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlz
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXJSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5
ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSk6
CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvUG9wdXBNZW51
VGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJXaWRnZXQ6OnRoZW1lQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJXaWRnZXQ6OmNvbXBvc2l0ZSk6CisKIDIwMTAtMDkt
MDcgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldp
ZGdldC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCA1YzlmNTRl
NzkzNjZiODNhZmVlN2MwZTFlM2EzMjg4YzM0NDEyY2E5Li5kMDEwMjcwNjVjOWU5MGMxNDc1NmU3
Nzg3Y2EyNjZkZjY3ZWFlYzNiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YldpZGdldC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTYw
LDEzICs2MCwyNiBAQCBwdWJsaWM6CiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQgaW4gY2FsbHMg
dG8gV2ViV2lkZ2V0Q2xpZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCkgPSAwOwogCi0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSBzcGVjaWZpZWQgcmVn
aW9uIG9mIHRoZSBXZWJXaWRnZXQgb250byB0aGUgZ2l2ZW4KLSAgICAvLyBjYW52YXMuICBZb3Ug
TVVTVCBjYWxsIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlzCi0gICAg
Ly8gb2theSB0byBjYWxsIHBhaW50IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhhcyBiZWVu
IGNhbGxlZCwKLSAgICAvLyBhc3N1bWluZyBubyBvdGhlciBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRo
ZSBXZWJXaWRnZXQgKGUuZy4sIG9uY2UKLSAgICAvLyBldmVudHMgYXJlIHByb2Nlc3NlZCwgaXQg
c2hvdWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8KLSAgICAvLyBsYXlvdXQgaXMg
d2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCi0gICAgdmlydHVhbCB2b2lkIHBhaW50
KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSA9IDA7CisgICAgLy8gQ2FsbGVkIHRvIHBhaW50
IHRoZSByZWN0YW5ndWxhciByZWdpb24gd2l0aGluIHRoZSBXZWJXaWRnZXQgCisgICAgLy8gb250
byB0aGUgc3BlY2lmaWVkIGNhbnZhcyBhdCAodmlld1BvcnQueCx2aWV3UG9ydC55KS4gWW91IE1V
U1QgY2FsbAorICAgIC8vIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlz
IG9rYXkgdG8gY2FsbCBwYWludAorICAgIC8vIG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhh
cyBiZWVuIGNhbGxlZCwgYXNzdW1pbmcgbm8gb3RoZXIKKyAgICAvLyBjaGFuZ2VzIGFyZSBtYWRl
IHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9uY2UgZXZlbnRzIGFyZQorICAgIC8vIHByb2Nlc3Nl
ZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8gbGF5b3V0IGlzCisg
ICAgLy8gd2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCisgICAgdmlydHVhbCB2b2lk
IHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmIHZpZXdQb3J0KSA9IDA7CisKKyAgICAv
LyBUcmlnZ2VycyBjb21wb3NpdGluZyBvZiB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgc2Ny
ZWVuLgorICAgIC8vIFRoZSBmaW5pc2ggYXJndW1lbnQgY29udHJvbHMgd2hldGhlciB0aGUgY29t
cG9zaXRvciB3aWxsIHdhaXQgZm9yIHRoZQorICAgIC8vIEdQVSB0byBmaW5pc2ggcmVuZGVyaW5n
IGJlZm9yZSByZXR1cm5pbmcuIFlvdSBNVVNUIGNhbGwgTGF5b3V0CisgICAgLy8gYmVmb3JlIGNh
bGxpbmcgdGhpcyBtZXRob2QsIGZvciB0aGUgc2FtZSByZWFzb25zIGRlc2NyaWJlZCBpbgorICAg
IC8vIHRoZSBwYWludCBtZXRob2QgYWJvdmUuCisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShi
b29sIGZpbmlzaCkgPSAwOworCisgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0
IG9mIGEgY2hhbmdlIGluIHRoZW1lLgorICAgIC8vIEltcGxlbWVudG9ycyB0aGF0IGNhY2hlIHJl
bmRlcmVkIGNvcGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCisgICAgLy8gb24gcmVj
ZWl2aW5nIHRoaXMgbWVzc2FnZQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKSA9IDA7
CiAKICAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYW4gaW5wdXQgZXZl
bnQuICBSZXR1cm5zIHRydWUgaWYKICAgICAvLyB0aGUgZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2Vk
LCBmYWxzZSBvdGhlcndpc2UuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YldpZGdldENsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQu
aAppbmRleCBiZDdiZDZhNzRmY2JhZjM3MWRmM2U5YTZlNDEwYmVkYmYzNTkyMzIwLi45YmQ1NTNm
M2Y3OWRmN2Q5YmFhNDQ1MGU0MTE1YzI2ZmVkOTM1ODQxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViV2lkZ2V0Q2xpZW50LmgKQEAgLTUwLDYgKzUwLDkgQEAgcHVibGljOgogICAgIC8vIHNj
cm9sbGVkIGJ5IHRoZSBzcGVjaWZpZWQgZHggYW5kIGR5IGFtb3VudHMuCiAgICAgdmlydHVhbCB2
b2lkIGRpZFNjcm9sbFJlY3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0
KSB7IH0KIAorICAgIC8vIENhbGxlZCB3aGVuIGEgY2FsbCB0byBXZWJXaWRnZXQ6OmNvbXBvc2l0
ZSBpcyByZXF1aXJlZAorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQor
CiAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIHdpZGdldCBhY3F1aXJlcyBvciBsb3NlcyBmb2N1cywg
cmVzcGVjdGl2ZWx5LgogICAgIHZpcnR1YWwgdm9pZCBkaWRGb2N1cygpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaWRCbHVyKCkgeyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcAppbmRleCA4YTNlZGE2NjY2Y2I1NWEyYWMwMDNkNjk3YzY2MTJlZjg5NmRiYWZjLi4zZDBi
Y2FjZmE0OGJlZjdlOGJmNWZhOGYwNmIzOTA3OTY2ZDY1ZmU2IDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTQ5Myw4ICs0OTMsMTYgQEAgdm9pZCBDaHJvbWVD
bGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50UmVjdCYgdXBk
YXRlUmVjdCwgYm8KIHsKICAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKLSAgICAgICAgbV93ZWJWaWV3LT5j
bGllbnQoKS0+ZGlkSW52YWxpZGF0ZVJlY3QodXBkYXRlUmVjdCk7CisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgp
KQorICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkSW52YWxpZGF0ZVJlY3QodXBk
YXRlUmVjdCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0gZWxzZSB7
CisgICAgICAgIG1fd2ViVmlldy0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QodXBkYXRlUmVjdCk7
CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0ZUNv
bnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVk
aWF0ZSkKQEAgLTUwOCwxMSArNTE2LDE5IEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xs
KAogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIG1fd2ViVmlldy0+aGlkZVBv
cHVwcygpOwotICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7Ci0gICAgICAgIGludCBkeCA9
IHNjcm9sbERlbHRhLndpZHRoKCk7Ci0gICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRhLmhlaWdo
dCgpOwotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwg
Y2xpcFJlY3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoIW1f
d2ViVmlldy0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNlbmRpZgorICAg
ICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkgeworICAgICAgICAgICAgaW50IGR4ID0gc2Ny
b2xsRGVsdGEud2lkdGgoKTsKKyAgICAgICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRhLmhlaWdo
dCgpOworICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU2Nyb2xsUmVjdChkeCwg
ZHksIGNsaXBSZWN0KTsKKyAgICAgICAgfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICB9IGVsc2UgeworICAgICAgICBtX3dlYlZpZXctPnNjcm9sbFJvb3RMYXllclJlY3Qo
c2Nyb2xsRGVsdGEsIGNsaXBSZWN0KTsKICAgICB9CisjZW5kaWYKIH0KIAogSW50UG9pbnQgQ2hy
b21lQ2xpZW50SW1wbDo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKaW5kZXggNzVkNmNjMTQzODI0Yjdm
NTkyOTEwMjliNDI3Y2U5MjBjMjNlNDUzOS4uMDg1YTE1NzVlNTRiZjBlN2E0YWM4ZTU4NzhhMDM4
NjA1ODkyZTVkOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJ
bXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCkBA
IC0xNzQsNiArMTc0LDE2IEBAIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6cGFpbnQoV2ViQ2FudmFz
KiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAgICAgfQogfQogCit2b2lkIFdlYlBvcHVw
TWVudUltcGw6OnRoZW1lQ2hhbmdlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwogYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpoYW5kbGVJbnB1dEV2
ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGlucHV0RXZlbnQpCiB7CiAgICAgaWYgKCFtX3dpZGdl
dCkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKaW5kZXggZWRiYjRhYjUwZDQx
NmIwM2I3YmQxYTVmY2U4MDA1NTYwOTFlYTIyNy4uMjIxYmEwMzhmMmM0YzczNmQ2NzdmYWJmYTMy
MmUwNTFmOTA0MjY0YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1l
bnVJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKQEAg
LTYzLDYgKzYzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2Vi
U2l6ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpOworICAgIHZpcnR1YWwg
dm9pZCB0aGVtZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmlu
aXNoKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2
ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAppbmRleCBmNjNjOTA4MjU2MjZjYjA2Y2JjNmYwYTVhMzVmMjI3YmJkNWJlNzgyLi4xNGYyNzgx
NDM3NDJlNWRmMThjNzQxNDYzOGE2Y2VhODFiY2NkYTk4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcApAQCAtOTEyLDcgKzkxMiwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUo
Y29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKIAogICAgIGlmIChtX2NsaWVudCkgewogICAgICAgICBX
ZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0g
ICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgICAg
IGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRh
bWFnZWRSZWN0KTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY2xpZW50
LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiAgICAgfQogCiAjaWYgT1MoREFSV0lO
KQpAQCAtOTQ2LDMzICs5NTEsNDQgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bGF5b3V0KCkKIAogdm9p
ZCBXZWJWaWV3SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJl
Y3QpCiB7Ci0KKyAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKCFpc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoKSkgeworICAgICAgICBkb0NvbXBvc2l0ZSgpOworCisgICAgICAgIC8v
IFJlYWRiYWNrIGludG8gdGhlIGNhbnZhcworICAgICAgICAvLyBGSVhNRSBJbnNlcnQgd2ptYWNs
ZWFuJ3MgcmVhZGJhY2sgY29kZSBoZXJlIGZvciB3ZWJraXQgYnVnIDQ0MTI3CisKKyAgICAgICAg
Ly8gVGVtcG9yYXJpbHkgcHJlc2VudCBzbyB0aGUgZG93bnN0cmVhbSBDaHJvbWl1bSByZW5kZXJ3
aWRnZXQgc3RpbGwgcmVuZGVycy4KKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGNhbGwg
b25jZSB0aGUgY2hhbmdlcyB0byBDaHJvbWl1bSdzIHJlbmRlcndpZGdldCBoYXZlIGxhbmRlZC4K
KyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CiAjZW5kaWYKKyAgICB9IGVsc2Ug
ewogICAgICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwogICAg
ICAgICBpZiAod2ViZnJhbWUpCiAgICAgICAgICAgICB3ZWJmcmFtZS0+cGFpbnQoY2FudmFzLCBy
ZWN0KTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gRHJhdyB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIuCi0gICAgICAgIHVw
ZGF0ZVJvb3RMYXllckNvbnRlbnRzKHJlY3QpOworICAgIH0KK30KIAotICAgICAgICBXZWJGcmFt
ZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwotICAgICAgICBpZiAoIXdlYmZyYW1l
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFt
ZS0+ZnJhbWVWaWV3KCk7Ci0gICAgICAgIGlmICghdmlldykKLSAgICAgICAgICAgIHJldHVybjsK
K3ZvaWQgV2ViVmlld0ltcGw6OnRoZW1lQ2hhbmdlZCgpCit7CisgICAgaWYgKCFwYWdlKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgp
LT52aWV3KCk7CiAKLSAgICAgICAgLy8gVGhlIHZpc2libGVSZWN0IGluY2x1ZGVzIHNjcm9sbGJh
cnMgd2hlcmVhcyB0aGUgY29udGVudFJlY3QgZG9lc24ndC4KLSAgICAgICAgSW50UmVjdCB2aXNp
YmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKLSAgICAgICAgSW50UmVj
dCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7CisgICAgV2Vi
UmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAg
IHZpZXctPmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKK30KIAotICAgICAgICAvLyBBc2sg
dGhlIGxheWVyIGNvbXBvc2l0b3IgdG8gcmVkcmF3IGFsbCB0aGUgbGF5ZXJzLgotICAgICAgICBB
U1NFUlQobV9sYXllclJlbmRlcmVyLT5oYXJkd2FyZUNvbXBvc2l0aW5nKCkpOwotICAgICAgICBt
X2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMocmVjdCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0
LCBJbnRQb2ludCh2aWV3LT5zY3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSkpOwotICAgIH0KK3Zv
aWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgZG9Db21wb3NpdGUoKTsKKworICAgIC8vIEZpbmlzaCBp
ZiByZXF1ZXN0ZWQuCisgICAgLy8gRklYTUU6IGhhbmRsZSBmaW5pc2ggZmxhZy4KKworICAgIC8v
IFB1dCByZXN1bHQgb25zY3JlZW4uCisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CiAj
ZW5kaWYKIH0KIApAQCAtMjExNCwxMSArMjEzMCwxMTEgQEAgYm9vbCBXZWJWaWV3SW1wbDo6YWxs
b3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RH
cmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogeworICAgIGJvb2wg
d2FzQWN0aXZlID0gbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CiAgICAgc2V0SXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGxheWVyID8gdHJ1ZSA6IGZhbHNlKTsKICAgICBp
ZiAobV9sYXllclJlbmRlcmVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RMYXll
cihsYXllcik7CisgICAgaWYgKHdhc0FjdGl2ZSAhPSBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSkgeworICAgICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0
aCwgbV9zaXplLmhlaWdodCk7CisgICAgICAgIGlmIChtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSkKKyAgICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0
KGRhbWFnZWRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXll
ck5lZWRzRGlzcGxheSgpCit7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVD
b21wb3NpdGUoKTsKKyAgICAvLyBGSVhNRTogVG8gYXZvaWQgYnJlYWtpbmcgdGhlIGRvd25zdHJl
YW0gQ2hyb21lIHJlbmRlcl93aWRnZXQgd2hpbGUgZG93bnN0cmVhbQorICAgIC8vIGNoYW5nZXMg
bGFuZCwgd2UgYWxzbyBoYXZlIHRvIHBhc3MgYSAxeDEgaW52YWxpZGF0ZSB1cCB0byB0aGUgY2xp
ZW50CisgICAgeworICAgICAgICBXZWJSZWN0IGRhbWFnZVJlY3QoMCwgMCwgMSwgMSk7CisgICAg
ICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VSZWN0KTsKKyAgICB9Cit9CisK
Kwordm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBJbnRTaXplJiBz
Y3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgLy8gRklYTUU6IFRv
IGF2b2lkIGJyZWFraW5nIHRoZSBDaHJvbWUgcmVuZGVyX3dpZGdldCB3aGVuIHRoZSBuZXcgY29t
cG9zaXRvciByZW5kZXIKKyAgICAvLyBwYXRoIGlzIG5vdCBjaGVja2VkIGluLCB3ZSBtdXN0IHN0
aWxsIHBhc3Mgc2Nyb2xsIGRhbWFnZSB1cCB0byB0aGUgY2xpZW50LiBUaGlzCisgICAgLy8gY29k
ZSB3aWxsIGJlIGJhY2tlZCBvdXQgaW4gYSBmb2xsb3d1cCBDTCBvbmNlIHRoZSBDaHJvbWl1bSBj
aGFuZ2VzIGhhdmUgbGFuZGVkLgorICAgIG1fY2xpZW50LT5kaWRTY3JvbGxSZWN0KHNjcm9sbERl
bHRhLndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdodCgpLCBjbGlwUmVjdCk7CisKKyAgICBBU1NF
UlQobV9sYXllclJlbmRlcmVyKTsKKyAgICAvLyBDb21wdXRlIHRoZSBkYW1hZ2UgcmVjdCBpbiB2
aWV3cG9ydCBzcGFjZS4KKyAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1w
bCgpOworICAgIGlmICghd2ViZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcq
IHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KGZhbHNlKTsKKworICAgIC8vIFdlIHN1cHBvcnQgZmFzdCBzY3JvbGxpbmcgaW4gb25lIGRp
cmVjdGlvbiBhdCBhIHRpbWUuCisgICAgaWYgKHNjcm9sbERlbHRhLndpZHRoKCkgJiYgc2Nyb2xs
RGVsdGEuaGVpZ2h0KCkpIHsKKyAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoV2ViUmVj
dChjb250ZW50UmVjdCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ29tcHV0
ZSB0aGUgcmVnaW9uIHdlIHdpbGwgZXhwb3NlIGJ5IHNjcm9sbGluZy4gV2UgdXNlIHRoZQorICAg
IC8vIGNvbnRlbnQgcmVjdCBmb3IgaW52YWxpZGF0aW9uLiAgVXNpbmcgdGhpcyBzcGFjZSBmb3Ig
ZGFtYWdlCisgICAgLy8gcmVjdHMgYWxsb3dzIHVzIHRvIGludGVybWl4IGludmFsaWRhdGVzIHdp
dGggc2Nyb2xscy4KKyAgICBJbnRSZWN0IGRhbWFnZWRDb250ZW50c1JlY3Q7CisgICAgaWYgKHNj
cm9sbERlbHRhLndpZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgZHggPSBzdGF0aWNfY2FzdDxmbG9h
dD4oc2Nyb2xsRGVsdGEud2lkdGgoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0
WShjb250ZW50UmVjdC55KCkpOworICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdo
dChjb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChkeCA+IDApIHsKKyAgICAgICAg
ICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WChjb250ZW50UmVjdC54KCkpOworICAgICAgICAg
ICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aChkeCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFgoY29udGVudFJlY3QucmlnaHQoKSAr
IGR4KTsKKyAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoLWR4KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZsb2F0IGR5ID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHNjcm9sbERlbHRhLmhlaWdodCgpKTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5z
ZXRYKGNvbnRlbnRSZWN0LngoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lk
dGgoY29udGVudFJlY3Qud2lkdGgoKSk7CisgICAgICAgIGlmIChkeSA+IDApIHsKKyAgICAgICAg
ICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WShjb250ZW50UmVjdC55KCkpOworICAgICAgICAg
ICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoZHkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKGNvbnRlbnRSZWN0LmJvdHRvbSgp
ICsgZHkpOworICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoLWR5KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIG1fc2Nyb2xsRGFtYWdlLnVuaXRlKGRhbWFnZWRDb250
ZW50c1JlY3QpOworICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFdl
YlZpZXdJbXBsOjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIC8vIEZJWE1FOiBUbyBhdm9pZCBicmVha2luZyB0aGUgQ2hyb21lIHJlbmRlcl93aWRn
ZXQgd2hlbiB0aGUgbmV3IGNvbXBvc2l0b3IgcmVuZGVyCisgICAgLy8gcGF0aCBpcyBub3QgY2hl
Y2tlZCBpbiwgd2UgbXVzdCBzdGlsbCBwYXNzIGRhbWFnZSB1cCB0byB0aGUgY2xpZW50LiBUaGlz
CisgICAgLy8gY29kZSB3aWxsIGJlIGJhY2tlZCBvdXQgaW4gYSBmb2xsb3d1cCBDTCBvbmNlIHRo
ZSBDaHJvbWl1bSBjaGFuZ2VzIGhhdmUgbGFuZGVkLgorICAgIG1fY2xpZW50LT5kaWRJbnZhbGlk
YXRlUmVjdChyZWN0KTsKKworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworCisgICAgaWYg
KCFwYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCk7CisKKyAgICAvLyByZWN0IGlzIGluIHZpZXdwb3J0IHNwYWNl
LiBDb252ZXJ0IHRvIGNvbnRlbnQgc3BhY2UKKyAgICAvLyBzbyB0aGF0IGludmFsaWRhdGlvbnMg
YW5kIHNjcm9sbCBpbnZhbGlkYXRpb25zIHBsYXkgd2VsbCB3aXRoIG9uZS1hbm90aGVyLgorICAg
IEZsb2F0UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPndpbmRvd1RvQ29udGVudHMocmVjdCk7CisK
KyAgICAvLyBGSVhNRTogYWRkIGEgc21hcnRlciBkYW1hZ2UgYWdncmVnYXRpb24gbG9naWM/IFJp
Z2h0IG5vdywgTGF5ZXJDaHJvbWl1bSBkb2VzIHNpbXBsZSB1bmlvbi1pbmcuCisgICAgbV9sYXll
clJlbmRlcmVyLT5yb290TGF5ZXIoKS0+c2V0TmVlZHNEaXNwbGF5KGNvbnRlbnRSZWN0KTsKIH0K
IAorCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
Ym9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
ID09IGFjdGl2ZSkKQEAgLTIxMjgsMTAgKzIyNDQsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJ
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIG1fbGF5
ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGdldE9uc2NyZWVuR0xF
UzJDb250ZXh0KCkpOwogICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKSB7CiAgICAgICAgICAg
ICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVkcmF3IHRoZSBlbnRpcmUgdmlldyBzbyB0aGF0IHRo
ZSBjb21wb3NpdG9yIGdldHMgdGhlIGVudGlyZSB2aWV3LAotICAgICAgICAgICAgLy8gcmF0aGVy
IHRoYW4ganVzdCB0aGUgY3VycmVudGx5LWRpcnR5IHN1YnNldC4KLSAgICAgICAgICAgIG1fY2xp
ZW50LT5kaWRJbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXpl
LmhlaWdodCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgIG1fY29tcG9zaXRvckNyZWF0
aW9uRmFpbGVkID0gdHJ1ZTsKQEAgLTIxNDIsMTcgKzIyNTQsMTEgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgIH0K
IH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2Vi
UmVjdCYgcmVjdCkKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFRoZSBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBwYXRoIGludmFsaWRhdGVzIGEgMXgxIHJlY3QgYXQgKDAsIDApCi0gICAg
Ly8gaW4gb3JkZXIgdG8gZ2V0IHRoZSByZW5kZXJlciB0byBhc2sgdGhlIGNvbXBvc2l0b3IgdG8g
cmVkcmF3LiBUaGlzIGlzIG9ubHkKLSAgICAvLyB0ZW1wb3JhcnkgdW50aWwgd2UgZ2V0IHRoZSBj
b21wb3NpdG9yIHRvIHJlbmRlciBkaXJlY3RseSBmcm9tIGl0cyBvd24gdGhyZWFkLgotICAgIGlm
ICghcmVjdC54ICYmICFyZWN0LnkgJiYgcmVjdC53aWR0aCA9PSAxICYmIHJlY3QuaGVpZ2h0ID09
IDEpCi0gICAgICAgIHJldHVybjsKLQogICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWlu
RnJhbWVJbXBsKCk7CiAgICAgaWYgKCF3ZWJmcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2
NCw3ICsyMjcwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMo
Y29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICBpZiAocm9vdExheWVyKSB7CiAgICAgICAgIEludFJl
Y3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7CiAKLSAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5zZXRSb290TGF5ZXJDYW52YXNTaXplKEludFNpemUocmVjdC53
aWR0aCwgcmVjdC5oZWlnaHQpKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRSb290TGF5
ZXJDYW52YXNTaXplKEludFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVyQ29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+
cm9vdExheWVyR3JhcGhpY3NDb250ZXh0KCk7CiAKICNpZiBQTEFURk9STShTS0lBKQpAQCAtMjE3
NCw3ICsyMjgwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMo
Y29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICAgICAgcGxhdGZvcm1DYW52YXMtPnNhdmUoKTsKIAog
ICAgICAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9m
IHRoZSBwYWludCByZWN0LgotICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+dHJhbnNsYXRlKHN0YXRp
Y19jYXN0PFNrU2NhbGFyPigtcmVjdC54KSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1yZWN0Lnkp
KTsKKyAgICAgICAgcGxhdGZvcm1DYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxh
cj4oLXJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1yZWN0LnkoKSkpOwogCiAgICAg
ICAgIHJvb3RMYXllckNvbnRleHQtPnNhdmUoKTsKIApAQCAtMjE4OCw3ICsyMjk0LDcgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVj
dCkKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjZ0NvbnRleHQpOwogCiAgICAgICAgIC8v
IEJyaW5nIHRoZSBDb3JlR3JhcGhpY3MgY29udGV4dCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3Rl
bSBvZiB0aGUgcGFpbnQgcmVjdC4KLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29u
dGV4dCwgLXJlY3QueCwgLXJlY3QueSk7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShj
Z0NvbnRleHQsIC1yZWN0LngoKSwgLXJlY3QueSgpKTsKIAogICAgICAgICByb290TGF5ZXJDb250
ZXh0LT5zYXZlKCk7CiAKQEAgLTIyMDIsMjIgKzIzMDgsNDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6
dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICB9CiB9CiAK
LXZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCit2b2lkIFdlYlZp
ZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2UncmUgcG9z
dGluZyBhIHJlcGFpbnQgZXZlbnQgZm9yIHRoZSBlbnRpcmUgcGFnZSB3aGljaCBpcyBhbiBvdmVy
a2lsbC4KLSAgICBpZiAoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKSkg
ewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGhhY2sgdG8gaW52YWxpZGF0ZSBwYXJ0
IG9mIHRoZSBwYWdlIHNvIHRoYXQgd2UgZ2V0IGNhbGxlZCB0byByZW5kZXIKLSAgICAgICAgICAg
IC8vICAgICAgICBhZ2Fpbi4KLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3
LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52
YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxLCAxKSk7CisgICAgQVNTRVJUKGlzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKTsKKyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKwor
ICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBpbmNsdWRlcyBzY3JvbGxiYXJzIHdoZXJlYXMgdGhlIGNv
bnRlbnRSZWN0IGRvZXNuJ3QuCisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2li
bGVDb250ZW50UmVjdCh0cnVlKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlz
aWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKKyAgICBJbnRSZWN0IHZpZXdQb3J0ID0gSW50UmVjdCgw
LCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworCisgICAgLy8gR2l2ZSB0aGUgY29t
cG9zaXRvciBhIGNoYW5jZSB0byBzZXR1cC9yZXNpemUgdGhlIHJvb3QgdGV4dHVyZSBoYW5kbGUg
YW5kIHBlcmZvcm0gc2Nyb2xsaW5nLgorICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlcGFyZVRvRHJh
d0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIEludFBvaW50KHZpZXctPnNjcm9sbFgo
KSwgdmlldy0+c2Nyb2xsWSgpKSk7CisKKyAgICAvLyBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUg
cm9vdCBsYXllci4KKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBkYW1hZ2VSZWN0czsKKyAgICBkYW1h
Z2VSZWN0cy5hcHBlbmQobV9zY3JvbGxEYW1hZ2UpOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZCht
X2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpLT5kaXJ0eVJlY3QoKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBkYW1hZ2VSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBUaGUg
ZGFtYWdlIHJlY3QgZm9yIHRoZSByb290IGxheWVyIGlzIGluIGNvbnRlbnQgc3BhY2UgW2UuZy4g
dW5zY3JvbGxlZF0uCisgICAgICAgIC8vIENvbnZlcnQgZnJvbSBjb250ZW50IHNwYWNlIHRvIHZp
ZXdQb3J0IHNwYWNlLgorICAgICAgICBjb25zdCBGbG9hdFJlY3QgZGFtYWdlZENvbnRlbnRSZWN0
ID0gZGFtYWdlUmVjdHNbaV07CisgICAgICAgIEludFJlY3QgZGFtYWdlZFJlY3QgPSB2aWV3LT5j
b250ZW50c1RvV2luZG93KEludFJlY3QoZGFtYWdlZENvbnRlbnRSZWN0KSk7CisKKyAgICAgICAg
Ly8gSW50ZXJzZWN0IHRoaXMgcmVjdGFuZ2xlIHdpdGggdGhlIHZpZXdQb3J0LgorICAgICAgICBk
YW1hZ2VkUmVjdC5pbnRlcnNlY3Qodmlld1BvcnQpOworCisgICAgICAgIC8vIE5vdyByZW5kZXIg
aXQuCisgICAgICAgIGlmIChkYW1hZ2VkUmVjdC53aWR0aCgpICYmIGRhbWFnZWRSZWN0LmhlaWdo
dCgpKSB7CisgICAgICAgICAgICB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhkYW1hZ2VkUmVjdCk7
CisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0
KGRhbWFnZWRSZWN0KTsKICAgICAgICAgfQogICAgIH0KKyAgICBtX2xheWVyUmVuZGVyZXItPnJv
b3RMYXllcigpLT5yZXNldE5lZWRzRGlzcGxheSgpOworICAgIG1fc2Nyb2xsRGFtYWdlID0gV2Vi
UmVjdCgpOwogCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAvLyBEcmF3IHRoZSBhY3R1YWwgbGF5ZXJzLi4u
CisgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVj
dCk7CiB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmCisK
IAogUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdlYlZpZXdJbXBsOjpnZXRPbnNjcmVlbkdMRVMy
Q29udGV4dCgpCiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYTQyMDk5YzlkNWY0
ODQzYzJmM2U0N2Q3NTM3N2Q0ZDVhMGY3ZTlmMS4uY2I3ZGE5NWQ5YjY2OGJmZjNiODljZjBkMDUz
OWZmYWQzNmQwN2FmYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIldlYkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRp
b25Qb2xpY3kuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIK
ICNpbmNsdWRlICJXZWJTaXplLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAi
V2ViVmlldy5oIgpAQCAtOTIsNiArOTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
c2l6ZShjb25zdCBXZWJTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHRoZW1lQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBm
aW5pc2gpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0
RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CkBAIC0zMjIsOSArMzI1LDExIEBAIHB1Ymxp
YzoKICAgICB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBz
ZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVy
KFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKTsKICAgICBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKTsKKyAgICB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRm
b3JtTGF5ZXIqKTsKKyAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworICAgIHZv
aWQgc2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0
YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworICAgIHZvaWQgaW52YWxpZGF0
ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogI2VuZGlmCiAgICAgLy8g
T25zY3JlZW4gY29udGV4dHMgZGlzcGxheSB0byB0aGUgc2NyZWVuIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIHZpZXcuCiAgICAgLy8gT2Zmc2NyZWVuIGNvbnRleHRzIHJlbmRlciBvZmZzY3JlZW4gYnV0
IGNhbiBzaGFyZSByZXNvdXJjZXMgd2l0aCB0aGUKQEAgLTM4Niw3ICszOTEsOCBAQCBwcml2YXRl
OgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wpOwotICAgIHZvaWQgdXBkYXRlUm9vdExheWVy
Q29udGVudHMoY29uc3QgV2ViUmVjdCYpOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVu
dHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZG9Db21wb3NpdGUoKTsKICNl
bmRpZgogCiAgICAgV2ViVmlld0NsaWVudCogbV9jbGllbnQ7CkBAIC01MTEsNiArNTE3LDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9tb3VzZUNhcHR1cmVOb2RlOwog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFdlYkNvcmU6OkludFJlY3Qg
bV9zY3JvbGxEYW1hZ2U7CiAgICAgT3duUHRyPFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bT4gbV9sYXllclJlbmRlcmVyOwogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmU7CiAgICAgYm9vbCBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZDsKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAppbmRleCA1MDMxOWFmMjNiMGE5MmY0NGM5MTU4ZWZi
M2U2NDYxODIzOTgxZDEwLi5hZWYyOWNmMmQwNDEyNGI0Yzg3ZWYwN2EyZTVmMzg1MDk2NzgyYjY4
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCkBAIC0xMjgsNiArMTI4
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
V2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNo
YW5nZWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSB7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jikg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67094</attachid>
            <date>2010-09-09 14:05:09 -0700</date>
            <delta_ts>2010-09-09 14:10:59 -0700</delta_ts>
            <desc>I fail at changelogs.</desc>
            <filename>bug-45092-20100909140508.patch</filename>
            <type>text/plain</type>
            <size>37088</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTA3NDkwMzVmZGMxNmEyNWYxMTVlYTJmNTIyYjg3YTQxODQzMDc1OC4uZjk2NjEyNzExZGUxY2Ri
MDA5MmNkZDRlZGI3N2QzMWJiNTg0Nzc1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wOS0wOSAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6cGFpbnRDb21wb3NpdGVkIHJlbmRlcmluZyBwYXRoLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlc2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkaXJ0eVJlY3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290
TGF5ZXJUZXh0dXJlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpwcmVzZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaDoKKwogMjAxMC0wOS0wNyAgSmFuIEUgSGFuc3NlbiAgPGpoYW5zc2Vu
QHNlbmNoYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IDY1MTlmMWZmMmJhMTgyNmYyZTI4NTk2MmIwMzgxNzEyYTQ2ZTlkY2MuLmQ2ZWVmM2Fj
ZDFlNDM3MWNiNDFkZmE1MmNlZWViMmE2NGVmOTFhYzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMjk5LDEwICsy
OTksMTUgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKICAgICBpZiAobV9ib3VuZHMgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9v
bCBmaXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAm
JiBzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKTsKKwogICAgIG1fYm91bmRzID0gc2l6ZTsK
ICAgICBtX2JhY2tpbmdTdG9yZVNpemUgPSBzaXplOwogCi0gICAgc2V0TmVlZHNDb21taXQoKTsK
KyAgICBpZiAoZmlyc3RSZXNpemUpCisgICAgICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJlY3Qo
MCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKKyAgICBlbHNlCisg
ICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJh
bWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMzExLDcgKzMxNiw3IEBAIHZvaWQgTGF5ZXJD
aHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgcmV0dXJuOwog
CiAgICAgbV9mcmFtZSA9IHJlY3Q7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICBzZXROZWVk
c0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdo
dCgpKSk7CiB9CiAKIGNvbnN0IExheWVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OnJvb3RMYXll
cigpIGNvbnN0CkBAIC0zNTMsNyArMzU4LDYgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVk
c0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCiAgICAgbV9jb250ZW50c0RpcnR5
ID0gdHJ1ZTsKIAogICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7Ci0KICAgICBzZXRO
ZWVkc0NvbW1pdCgpOwogfQogCkBAIC0zNjMsNiArMzY3LDEyIEBAIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6c2V0TmVlZHNEaXNwbGF5KCkKICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwogfQogCit2
b2lkIExheWVyQ2hyb21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBtX2RpcnR5UmVj
dCA9IEZsb2F0UmVjdCgpOworICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworfQorCiB2b2lk
IExheWVyQ2hyb21pdW06OnRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG0pCiB7CiAgICAgZmxhdHRlbmVkWzBdID0gbS5tMTEoKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5k
ZXggYmExNTA4ODQ0YmEzNWIzNDUxZjgyY2Q1ODlhNjUzOTc2NTIxYTA4Yy4uMmQyMjVkYWY1YTIw
NzFiYWJmZWJkNmE3Y2YzY2MwNWUyNmIzOTA4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTExMiw2ICsxMTIsOCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5
UmVjdCk7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBjb25zdCBGbG9hdFJlY3Qm
IGRpcnR5UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlydHlSZWN0OyB9CisgICAgdm9pZCByZXNl
dE5lZWRzRGlzcGxheSgpOwogCiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5n
ZShib29sIG5lZWRzRGlzcGxheSkgeyBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlID0gbmVl
ZHNEaXNwbGF5OyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA3ODkyOThhZWQ4Y2U5
NzYzMDIwY2ZlMGFlMjI0OGUzNzMzZGYyYzhjLi5iZGUyNDk3ZjhjNTBkODgxYmY0OGE3YTA2ZGY3
OThiY2ExN2NiZTIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0xNTksOCArMTU5LDgg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcih1bnNpZ25lZCBwcm9ncmFt
SWQpCiAKIC8vIFVwZGF0ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIHRleHR1cmUg
dGhhdCBmYWxsIGluc2lkZSB0aGUgdXBkYXRlUmVjdAogLy8gYW5kIHJlLWNvbXBvc2l0cyBhbGwg
c3VibGF5ZXJzLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3Qg
SW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAg
ICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIApAQCAtMjAwLDE0ICsyMDAsMTIgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBk
YXRlUmVjdCwgY29uc3QgSW50UmVjdCYKICAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9s
bFBvc2l0aW9uOwogCiAgICAgSW50UG9pbnQgc2Nyb2xsRGVsdGEgPSB0b1BvaW50KHNjcm9sbFBv
c2l0aW9uIC0gbV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgLy8gU2Nyb2xsIG9ubHkgd2hlbiB0aGUg
dXBkYXRlUmVjdCBjb250YWlucyBwaXhlbHMgZm9yIHRoZSBuZXdseSB1bmNvdmVyZWQgcmVnaW9u
IHRvIGF2b2lkIGZsYXNoaW5nLgotICAgIGlmICgoc2Nyb2xsRGVsdGEueCgpICYmIHVwZGF0ZVJl
Y3Qud2lkdGgoKSA+PSBhYnMoc2Nyb2xsRGVsdGEueCgpKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgp
ID49IGNvbnRlbnRSZWN0LmhlaWdodCgpKQotICAgICAgICB8fCAoc2Nyb2xsRGVsdGEueSgpICYm
IHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPj0gYWJzKHNjcm9sbERlbHRhLnkoKSkgJiYgdXBkYXRlUmVj
dC53aWR0aCgpID49IGNvbnRlbnRSZWN0LndpZHRoKCkpKSB7CisgICAgLy8gU2Nyb2xsIHRoZSBi
YWNrYnVmZmVyCisgICAgaWYgKHNjcm9sbERlbHRhLngoKSB8fCBzY3JvbGxEZWx0YS55KCkpIHsK
ICAgICAgICAgLy8gU2Nyb2xsaW5nIHdvcmtzIGFzIGZvbGxvd3M6IFdlIHJlbmRlciBhIHF1YWQg
d2l0aCB0aGUgY3VycmVudCByb290IGxheWVyIGNvbnRlbnRzCiAgICAgICAgIC8vIHRyYW5zbGF0
ZWQgYnkgdGhlIGFtb3VudCB0aGUgcGFnZSBoYXMgc2Nyb2xsZWQgc2luY2UgdGhlIGxhc3QgdXBk
YXRlIGFuZCB0aGVuIHJlYWQgdGhlCiAgICAgICAgIC8vIHBpeGVscyBvZiB0aGUgY29udGVudCBh
cmVhICh2aXNpYmxlIGFyZWEgZXhjbHVkaW5nIHRoZSBzY3JvbGwgYmFycykgYmFjayBpbnRvIHRo
ZQotICAgICAgICAvLyByb290IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEg
aXMgc3ViZXNxdWVudGx5IGZpbGxlZCBhcyB1c3VhbCB3aXRoCi0gICAgICAgIC8vIHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlUmVjdC4KKyAgICAgICAgLy8gcm9vdCBsYXllciB0ZXh0dXJlLiBU
aGUgbmV3bHkgZXhwb3NlZCBhcmVhIHdpbGwgYmUgZmlsbGVkIGJ5IGEgc3Vic2VxdWVudCBkcmF3
TGF5ZXJzSW50b1JlY3QgY2FsbAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGxl
ZExheWVyTWF0cml4OwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gMS4wZjsKQEAgLTIzOCw0MiArMjM2LDY1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3Qm
CiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9CiAKLSAg
ICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBjaGVjayBzaG91bGQgZ28gYXdheSB3aGVuIHRoZSBj
b21wb3NpdG9yIHJlbmRlcnMgaW5kZXBlbmRlbnRseSBmcm9tIGl0cyBvd24gdGhyZWFkLgotICAg
IC8vIElnbm9yZSBhIDF4MSB1cGRhdGUgcmVjdCBhdCAoMCwgMCkgYXMgdGhhdCdzIHVzZWQgYSB3
YXkgdG8ga2ljayBvZmYgYSByZWRyYXcgZm9yIHRoZSBjb21wb3NpdG9yLgotICAgIGlmICghKCF1
cGRhdGVSZWN0LngoKSAmJiAhdXBkYXRlUmVjdC55KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID09
IDEgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA9PSAxKSkgewotICAgICAgICAvLyBVcGRhdGUgdGhl
IHJvb3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAgICAgQVNTRVJUKCh1cGRhdGVSZWN0LngoKSArIHVw
ZGF0ZVJlY3Qud2lkdGgoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKLSAgICAgICAgICAg
ICAgICYmICh1cGRhdGVSZWN0LnkoKSArIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPD0gbV9yb290TGF5
ZXJUZXh0dXJlSGVpZ2h0KSk7CisgICAgLy8gVHJhbnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBs
YXllcnMgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbi4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
YXRyaXg7CisgICAgbWF0cml4LnRyYW5zbGF0ZTNkKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1f
c2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsKKworICAgIC8vIFRyYXZlcnNlIHRoZSBsYXllciB0cmVl
IGFuZCB1cGRhdGUgdGhlIGxheWVyIHRyYW5zZm9ybXMuCisgICAgZmxvYXQgb3BhY2l0eSA9IDE7
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBt
X3Jvb3RMYXllci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgc2l6ZV90IGk7CisgICAgZm9yIChpID0g
MDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKKyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJz
aXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgbWF0cml4LCBvcGFjaXR5KTsKK30KKwordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CisK
KyAgICBpZiAoIW1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBHTEMoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOworCisgICAgLy8g
VXBkYXRlIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgQVNTRVJUKCh1cGRhdGVSZWN0LnJp
Z2h0KCkgIDw9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQorICAgICAgICAgICAmJiAodXBkYXRl
UmVjdC5ib3R0b20oKSA8PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsKIAogI2lmIFBMQVRG
T1JNKFNLSUEpCi0gICAgICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVj
dC4KLSAgICAgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52YXMtPmdl
dERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgICAgICBpbnQgcm9vdExheWVyV2lk
dGggPSBiaXRtYXAud2lkdGgoKTsKLSAgICAgICAgaW50IHJvb3RMYXllckhlaWdodCA9IGJpdG1h
cC5oZWlnaHQoKTsKLSAgICAgICAgQVNTRVJUKHJvb3RMYXllcldpZHRoID09IHVwZGF0ZVJlY3Qu
d2lkdGgoKSAmJiByb290TGF5ZXJIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgIHZvaWQqIHBpeGVscyA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKLQotICAgICAgICAvLyBDb3B5
IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1
cmUuCi0gICAgICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRl
UmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3Qu
aGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOworICAgIC8vIEdl
dCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCBi
aXRtYXAgPSBtX3Jvb3RMYXllckNhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxz
ZSk7CisgICAgaW50IGJpdG1hcFdpZHRoID0gYml0bWFwLndpZHRoKCk7CisgICAgaW50IGJpdG1h
cEhlaWdodCA9IGJpdG1hcC5oZWlnaHQoKTsKKyAgICBBU1NFUlQoYml0bWFwV2lkdGggPT0gdXBk
YXRlUmVjdC53aWR0aCgpICYmIGJpdG1hcEhlaWdodCA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsK
KyAgICB2b2lkKiBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7CisgICAgLy8gQ29weSB0aGUg
Y29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgor
ICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCks
IHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCks
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2VsaWYgUExBVEZPUk0oQ0cp
Ci0gICAgICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAgICAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290
TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nh
c3Q8aW50PihDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0
KCkpKSA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdm9pZCogcGl4ZWxzID0gbV9y
b290TGF5ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwotCi0gICAgICAgIC8vIENvcHkgdGhlIGNvbnRl
bnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAg
ICAgLy8gVGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBj
b29yZGluYXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCi0gICAg
ICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cGRhdGVSZWN0LngoKSwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0IC0g
dXBkYXRlUmVjdC55KCkgLSB1cGRhdGVSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMp
KTsKKyAgICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCisgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJD
R0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50
PihDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9
PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RMYXllckJh
Y2tpbmdTdG9yZS5kYXRhKCk7CisKKyAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBk
YXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgLy8gVGhlIG9yaWdpbiBp
cyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGluYXRlIHN5c3RlbS4g
V2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCisgICAgR0xDKGdsVGV4U3ViSW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC54
KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRlUmVj
dC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwg
dXBkYXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1l
bnQgZm9yIHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCi0gICAgfQorfQorCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3Np
dGluZyk7CiAKICAgICBnbENsZWFyQ29sb3IoMCwgMCwgMSwgMSk7CiAgICAgZ2xDbGVhcihHTF9D
T0xPUl9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCk7CiAKKyAgICBHTEMoZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOworCiAgICAgLy8g
UmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRoZSBlbnRp
cmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cuCiAgICAgLy8gV2UgcmV1c2UgdGhlIHNoYWRl
ciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCiAgICAgY29uc3QgQ29udGVu
dExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0gY29udGVu
dExheWVyU2hhcmVkVmFsdWVzKCk7CkBAIC0yOTcsNiArMzE4LDkgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3Qg
SW50UmVjdCYKICAgICBHTEMoZ2xFbmFibGUoR0xfQkxFTkQpKTsKICAgICBHTEMoZ2xCbGVuZEZ1
bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiAKKyAgICAvLyBTZXQgdGhlIHJv
b3RWaXNpYmxlUmVjdCAtLS0gdXNlZCBieSBzdWJzZXF1ZW50IGRyYXdMYXllcnMgY2FsbHMKKyAg
ICBtX3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OworCiAgICAgLy8gVHJhbnNsYXRlIGFs
bCB0aGUgY29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbi4KICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5zbGF0ZTNkKC1tX3Njcm9s
bFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsKQEAgLTMwOCwxMSArMzMy
LDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgZm9yIChpID0gMDsgaSA8IHN1Ymxh
eWVycy5zaXplKCk7IGkrKykKICAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVy
c1tpXS5nZXQoKSwgbWF0cml4LCBvcGFjaXR5KTsKIAotICAgIG1fcm9vdFZpc2libGVSZWN0ID0g
dmlzaWJsZVJlY3Q7Ci0KICAgICAvLyBFbmFibGUgc2Npc3NvcmluZyB0byBhdm9pZCByZW5kZXJp
bmcgY29tcG9zaXRlZCBsYXllcnMgb3ZlciB0aGUgc2Nyb2xsYmFycy4KICAgICBHTEMoZ2xFbmFi
bGUoR0xfU0NJU1NPUl9URVNUKSk7CiAgICAgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KGNvbnRlbnRS
ZWN0KTsKKwogICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNj
cm9sbCBvZmZzZXQuCiAgICAgc2Npc3NvclJlY3QubW92ZSgtbV9zY3JvbGxQb3NpdGlvbi54KCks
IC1tX3Njcm9sbFBvc2l0aW9uLnkoKSk7CiAgICAgc2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7
CkBAIC0zMjMsMTMgKzM0NiwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVycyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhn
bFN0ZW5jaWxNYXNrKDApKTsKIAogICAgIC8vIFRyYXZlcnNlIHRoZSBsYXllciB0cmVlIG9uZSBt
b3JlIHRpbWUgdG8gZHJhdyB0aGUgbGF5ZXJzLgotICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXll
cnMuc2l6ZSgpOyBpKyspCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6
ZSgpOyBpKyspCiAgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgp
LCBzY2lzc29yUmVjdCk7CiAKICAgICBHTEMoZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCkpOwor
fQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgpCit7CisgICAgLy8gV2Un
cmUgZG9uZSEgVGltZSB0byBzd2FwYnVmZmVycyEKICAgICBtX2dsZXMyQ29udGV4dC0+c3dhcEJ1
ZmZlcnMoKTsKLQogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCmluZGV4IDhmNDRhZmViZDBhMmM3YjQ3NWQwNGJhNDg3MjNmMWNkYzU0NTUwOTEuLjI3
NDgxNWYzZmUyM2MzYjA3OGM0NzAzZTg0NWIzYmJjOGMzM2VjYmQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaApAQCAtNjEsOSArNjEsMTcgQEAgcHVibGljOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1
bShQYXNzT3duUHRyPEdMRVMyQ29udGV4dD4gZ2xlczJDb250ZXh0KTsKICAgICB+TGF5ZXJSZW5k
ZXJlckNocm9taXVtKCk7CiAKLSAgICAvLyBVcGRhdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgcm9v
dCBsYXllciB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0IGFuZCByZWNvbXBvc2l0ZXMK
LSAgICAvLyBhbGwgdGhlIGxheWVycy4KLSAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIC8vIHVw
ZGF0ZXMgc2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5kIHNjcm9sbHMgdGhlIGJh
Y2tidWZmZXIuCisgICAgdm9pZCBwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZp
c2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNj
cm9sbFBvc2l0aW9uKTsKKworICAgIC8vIHVwZGF0ZXMgYSByZWN0YW5nbGUgd2l0aGluIHRoZSBy
b290IGxheWVyIHRleHR1cmUKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGNv
bnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpOworCisgICAgLy8gZHJhd3MgdGhlIGN1cnJlbnQgbGF5
ZXJzIG9udG8gdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgSW50UmVj
dCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKworICAgIC8vIHB1
dHMgYmFja2J1ZmZlciBvbnNjcmVlbgorICAgIHZvaWQgcHJlc2VudCgpOwogCiAgICAgdm9pZCBz
ZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBsYXllcikgeyBtX3Jvb3RMYXll
ciA9IGxheWVyOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9y
b290TGF5ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkwZGM1MzYyYmRkYTYzZjgxODkxZjQy
NDc3MzkzYTM0MzIxZGU3MzIuLmY1NWM4YmMyNTQyNzkzMTdkYmQxNGE3NjM3NTU2NTBiMzI1ZTE3
YzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEwLTA5LTA5ICBOYXQgRHVjYSAg
PG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbY2hyb21pdW1dIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nOiBzY3JlZW4g
Z2FyYmFnZSB3aGVuIHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDUwOTIKKworICAgICAgICBJbnRyb2R1Y2UgYSBuZXcgQVBJIG9uIFdl
YldpZGdldCBmb3IgcGFpbnRpbmcgd2l0aCBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGlu
ZyB0aGF0IGFsbG93cyB0aGUgY29tcG9zaXRvciB0byBwcm9wZXJseSBkaXN0aW5naXVzaAorICAg
ICAgICBzY3JvbGxpbmcsIGludmFsaWRhdGlvbiBhbmQgcmVwYWludGluZyBmcm9tIG9uZSBhbm90
aGVyLiBUaGUga2V5CisgICAgICAgIGNoYW5nZSBpcyB0aGF0IGluIGFjY2VsZXJhdGVkIHJlbmRl
cmluZyBjYXNlLCBpbnZhbGlkYXRlcyBhbmQKKyAgICAgICAgc2Nyb2xsaW5nIHBhc3MgZGlyZWN0
bHkgdG8gdGhlIGNvbXBvc2l0b3IsIHJhdGhlciB0aGFuIHBhc3NpbmcgdXAKKyAgICAgICAgdG8g
dGhlIGNsaWVudCBhcyB3YXMgdGhlIGNhc2UgaW4gdGhlIHNvZnR3YXJlIHBhdGguIEZvcgorICAg
ICAgICBhY2NlbGVyYXRlZCByZW5kZXJpbmcsIHRoZSBwcmV2aW91cyBwYWludCgpIG1ldGhvZCBp
cyByZXBsYWNlZCBieQorICAgICAgICBhIHBhaXIgb2YgbWV0aG9kczogcGFpbnRDb21wb3NpdGVk
IGFuZAorICAgICAgICBpbnZhbGlkYXRlQ29tcG9zaXRlZFJvb3RMYXllclJlY3QuCisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViV2lkZ2V0Lmg6CisgICAgICAgICogcHVibGljL1dlYldpZGdldENsaWVu
dC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXaWRnZXRDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRl
KToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkNocm9tZUNsaWVudEltcGw6OmludmFsaWRhdGVDb250ZW50c0FuZFdpbmRvdyk6CisgICAgICAg
IChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNjcm9sbCk6CisgICAgICAgICogc3JjL1dlYlBv
cHVwTWVudUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjp0aGVt
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVJbXBsOjpjb21wb3NpdGUp
OgorICAgICAgICAqIHNyYy9XZWJQb3B1cE1lbnVJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZp
ZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlc2l6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjp0aGVtZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29t
cG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xh
eWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlz
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXJSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5
ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSk6
CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvUG9wdXBNZW51
VGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJXaWRnZXQ6OnRoZW1lQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJXaWRnZXQ6OmNvbXBvc2l0ZSk6CisKIDIwMTAtMDkt
MDcgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldp
ZGdldC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaAppbmRleCA1YzlmNTRl
NzkzNjZiODNhZmVlN2MwZTFlM2EzMjg4YzM0NDEyY2E5Li5kMDEwMjcwNjVjOWU5MGMxNDc1NmU3
Nzg3Y2EyNjZkZjY3ZWFlYzNiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YldpZGdldC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKQEAgLTYw
LDEzICs2MCwyNiBAQCBwdWJsaWM6CiAgICAgLy8gYW5kIGl0IG1heSByZXN1bHQgaW4gY2FsbHMg
dG8gV2ViV2lkZ2V0Q2xpZW50OjpkaWRJbnZhbGlkYXRlUmVjdC4KICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCkgPSAwOwogCi0gICAgLy8gQ2FsbGVkIHRvIHBhaW50IHRoZSBzcGVjaWZpZWQgcmVn
aW9uIG9mIHRoZSBXZWJXaWRnZXQgb250byB0aGUgZ2l2ZW4KLSAgICAvLyBjYW52YXMuICBZb3Ug
TVVTVCBjYWxsIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlzCi0gICAg
Ly8gb2theSB0byBjYWxsIHBhaW50IG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhhcyBiZWVu
IGNhbGxlZCwKLSAgICAvLyBhc3N1bWluZyBubyBvdGhlciBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRo
ZSBXZWJXaWRnZXQgKGUuZy4sIG9uY2UKLSAgICAvLyBldmVudHMgYXJlIHByb2Nlc3NlZCwgaXQg
c2hvdWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8KLSAgICAvLyBsYXlvdXQgaXMg
d2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCi0gICAgdmlydHVhbCB2b2lkIHBhaW50
KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKSA9IDA7CisgICAgLy8gQ2FsbGVkIHRvIHBhaW50
IHRoZSByZWN0YW5ndWxhciByZWdpb24gd2l0aGluIHRoZSBXZWJXaWRnZXQgCisgICAgLy8gb250
byB0aGUgc3BlY2lmaWVkIGNhbnZhcyBhdCAodmlld1BvcnQueCx2aWV3UG9ydC55KS4gWW91IE1V
U1QgY2FsbAorICAgIC8vIExheW91dCBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC4gIEl0IGlz
IG9rYXkgdG8gY2FsbCBwYWludAorICAgIC8vIG11bHRpcGxlIHRpbWVzIG9uY2UgbGF5b3V0IGhh
cyBiZWVuIGNhbGxlZCwgYXNzdW1pbmcgbm8gb3RoZXIKKyAgICAvLyBjaGFuZ2VzIGFyZSBtYWRl
IHRvIHRoZSBXZWJXaWRnZXQgKGUuZy4sIG9uY2UgZXZlbnRzIGFyZQorICAgIC8vIHByb2Nlc3Nl
ZCwgaXQgc2hvdWxkIGJlIGFzc3VtZWQgdGhhdCBhbm90aGVyIGNhbGwgdG8gbGF5b3V0IGlzCisg
ICAgLy8gd2FycmFudGVkIGJlZm9yZSBwYWludGluZyBhZ2FpbikuCisgICAgdmlydHVhbCB2b2lk
IHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmIHZpZXdQb3J0KSA9IDA7CisKKyAgICAv
LyBUcmlnZ2VycyBjb21wb3NpdGluZyBvZiB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgc2Ny
ZWVuLgorICAgIC8vIFRoZSBmaW5pc2ggYXJndW1lbnQgY29udHJvbHMgd2hldGhlciB0aGUgY29t
cG9zaXRvciB3aWxsIHdhaXQgZm9yIHRoZQorICAgIC8vIEdQVSB0byBmaW5pc2ggcmVuZGVyaW5n
IGJlZm9yZSByZXR1cm5pbmcuIFlvdSBNVVNUIGNhbGwgTGF5b3V0CisgICAgLy8gYmVmb3JlIGNh
bGxpbmcgdGhpcyBtZXRob2QsIGZvciB0aGUgc2FtZSByZWFzb25zIGRlc2NyaWJlZCBpbgorICAg
IC8vIHRoZSBwYWludCBtZXRob2QgYWJvdmUuCisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShi
b29sIGZpbmlzaCkgPSAwOworCisgICAgLy8gQ2FsbGVkIHRvIGluZm9ybSB0aGUgV2ViV2lkZ2V0
IG9mIGEgY2hhbmdlIGluIHRoZW1lLgorICAgIC8vIEltcGxlbWVudG9ycyB0aGF0IGNhY2hlIHJl
bmRlcmVkIGNvcGllcyBvZiB3aWRnZXRzIG5lZWQgdG8gcmUtcmVuZGVyCisgICAgLy8gb24gcmVj
ZWl2aW5nIHRoaXMgbWVzc2FnZQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKSA9IDA7
CiAKICAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYW4gaW5wdXQgZXZl
bnQuICBSZXR1cm5zIHRydWUgaWYKICAgICAvLyB0aGUgZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2Vk
LCBmYWxzZSBvdGhlcndpc2UuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YldpZGdldENsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQu
aAppbmRleCBiZDdiZDZhNzRmY2JhZjM3MWRmM2U5YTZlNDEwYmVkYmYzNTkyMzIwLi45YmQ1NTNm
M2Y3OWRmN2Q5YmFhNDQ1MGU0MTE1YzI2ZmVkOTM1ODQxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViV2lkZ2V0Q2xpZW50LmgKQEAgLTUwLDYgKzUwLDkgQEAgcHVibGljOgogICAgIC8vIHNj
cm9sbGVkIGJ5IHRoZSBzcGVjaWZpZWQgZHggYW5kIGR5IGFtb3VudHMuCiAgICAgdmlydHVhbCB2
b2lkIGRpZFNjcm9sbFJlY3QoaW50IGR4LCBpbnQgZHksIGNvbnN0IFdlYlJlY3QmIGNsaXBSZWN0
KSB7IH0KIAorICAgIC8vIENhbGxlZCB3aGVuIGEgY2FsbCB0byBXZWJXaWRnZXQ6OmNvbXBvc2l0
ZSBpcyByZXF1aXJlZAorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQor
CiAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIHdpZGdldCBhY3F1aXJlcyBvciBsb3NlcyBmb2N1cywg
cmVzcGVjdGl2ZWx5LgogICAgIHZpcnR1YWwgdm9pZCBkaWRGb2N1cygpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBkaWRCbHVyKCkgeyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0No
cm9tZUNsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcAppbmRleCA4YTNlZGE2NjY2Y2I1NWEyYWMwMDNkNjk3YzY2MTJlZjg5NmRiYWZjLi4zZDBi
Y2FjZmE0OGJlZjdlOGJmNWZhOGYwNmIzOTA3OTY2ZDY1ZmU2IDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTQ5Myw4ICs0OTMsMTYgQEAgdm9pZCBDaHJvbWVD
bGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNBbmRXaW5kb3coY29uc3QgSW50UmVjdCYgdXBk
YXRlUmVjdCwgYm8KIHsKICAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKLSAgICAgICAgbV93ZWJWaWV3LT5j
bGllbnQoKS0+ZGlkSW52YWxpZGF0ZVJlY3QodXBkYXRlUmVjdCk7CisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgp
KQorICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkSW52YWxpZGF0ZVJlY3QodXBk
YXRlUmVjdCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0gZWxzZSB7
CisgICAgICAgIG1fd2ViVmlldy0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QodXBkYXRlUmVjdCk7
CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6aW52YWxpZGF0ZUNv
bnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVk
aWF0ZSkKQEAgLTUwOCwxMSArNTE2LDE5IEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6c2Nyb2xs
KAogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIG1fd2ViVmlldy0+aGlkZVBv
cHVwcygpOwotICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKSB7Ci0gICAgICAgIGludCBkeCA9
IHNjcm9sbERlbHRhLndpZHRoKCk7Ci0gICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRhLmhlaWdo
dCgpOwotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwg
Y2xpcFJlY3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoIW1f
d2ViVmlldy0+aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKKyNlbmRpZgorICAg
ICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkgeworICAgICAgICAgICAgaW50IGR4ID0gc2Ny
b2xsRGVsdGEud2lkdGgoKTsKKyAgICAgICAgICAgIGludCBkeSA9IHNjcm9sbERlbHRhLmhlaWdo
dCgpOworICAgICAgICAgICAgbV93ZWJWaWV3LT5jbGllbnQoKS0+ZGlkU2Nyb2xsUmVjdChkeCwg
ZHksIGNsaXBSZWN0KTsKKyAgICAgICAgfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICB9IGVsc2UgeworICAgICAgICBtX3dlYlZpZXctPnNjcm9sbFJvb3RMYXllclJlY3Qo
c2Nyb2xsRGVsdGEsIGNsaXBSZWN0KTsKICAgICB9CisjZW5kaWYKIH0KIAogSW50UG9pbnQgQ2hy
b21lQ2xpZW50SW1wbDo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKaW5kZXggNzVkNmNjMTQzODI0Yjdm
NTkyOTEwMjliNDI3Y2U5MjBjMjNlNDUzOS4uMDg1YTE1NzVlNTRiZjBlN2E0YWM4ZTU4NzhhMDM4
NjA1ODkyZTVkOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJ
bXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCkBA
IC0xNzQsNiArMTc0LDE2IEBAIHZvaWQgV2ViUG9wdXBNZW51SW1wbDo6cGFpbnQoV2ViQ2FudmFz
KiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAgICAgfQogfQogCit2b2lkIFdlYlBvcHVw
TWVudUltcGw6OnRoZW1lQ2hhbmdlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwogYm9vbCBXZWJQb3B1cE1lbnVJbXBsOjpoYW5kbGVJbnB1dEV2
ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmIGlucHV0RXZlbnQpCiB7CiAgICAgaWYgKCFtX3dpZGdl
dCkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5oIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKaW5kZXggZWRiYjRhYjUwZDQx
NmIwM2I3YmQxYTVmY2U4MDA1NTYwOTFlYTIyNy4uMjIxYmEwMzhmMmM0YzczNmQ2NzdmYWJmYTMy
MmUwNTFmOTA0MjY0YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1l
bnVJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmgKQEAg
LTYzLDYgKzYzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2Vi
U2l6ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpOworICAgIHZpcnR1YWwg
dm9pZCB0aGVtZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmlu
aXNoKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2
ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Rm9jdXMoYm9vbCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAppbmRleCBmNjNjOTA4MjU2MjZjYjA2Y2JjNmYwYTVhMzVmMjI3YmJkNWJlNzgyLi4xNGYyNzgx
NDM3NDJlNWRmMThjNzQxNDYzOGE2Y2VhODFiY2NkYTk4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcApAQCAtOTEyLDcgKzkxMiwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUo
Y29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKIAogICAgIGlmIChtX2NsaWVudCkgewogICAgICAgICBX
ZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0g
ICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CisgICAgICAg
IGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRh
bWFnZWRSZWN0KTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY2xpZW50
LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7CiAgICAgfQogCiAjaWYgT1MoREFSV0lO
KQpAQCAtOTQ2LDMzICs5NTEsNDQgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bGF5b3V0KCkKIAogdm9p
ZCBXZWJWaWV3SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJl
Y3QpCiB7Ci0KKyAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKCFpc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUoKSkgeworICAgICAgICBkb0NvbXBvc2l0ZSgpOworCisgICAgICAgIC8v
IFJlYWRiYWNrIGludG8gdGhlIGNhbnZhcworICAgICAgICAvLyBGSVhNRSBJbnNlcnQgd2ptYWNs
ZWFuJ3MgcmVhZGJhY2sgY29kZSBoZXJlIGZvciB3ZWJraXQgYnVnIDQ0MTI3CisKKyAgICAgICAg
Ly8gVGVtcG9yYXJpbHkgcHJlc2VudCBzbyB0aGUgZG93bnN0cmVhbSBDaHJvbWl1bSByZW5kZXJ3
aWRnZXQgc3RpbGwgcmVuZGVycy4KKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGNhbGwg
b25jZSB0aGUgY2hhbmdlcyB0byBDaHJvbWl1bSdzIHJlbmRlcndpZGdldCBoYXZlIGxhbmRlZC4K
KyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CiAjZW5kaWYKKyAgICB9IGVsc2Ug
ewogICAgICAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwogICAg
ICAgICBpZiAod2ViZnJhbWUpCiAgICAgICAgICAgICB3ZWJmcmFtZS0+cGFpbnQoY2FudmFzLCBy
ZWN0KTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gRHJhdyB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIuCi0gICAgICAgIHVw
ZGF0ZVJvb3RMYXllckNvbnRlbnRzKHJlY3QpOworICAgIH0KK30KIAotICAgICAgICBXZWJGcmFt
ZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpOwotICAgICAgICBpZiAoIXdlYmZyYW1l
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFt
ZS0+ZnJhbWVWaWV3KCk7Ci0gICAgICAgIGlmICghdmlldykKLSAgICAgICAgICAgIHJldHVybjsK
K3ZvaWQgV2ViVmlld0ltcGw6OnRoZW1lQ2hhbmdlZCgpCit7CisgICAgaWYgKCFwYWdlKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgp
LT52aWV3KCk7CiAKLSAgICAgICAgLy8gVGhlIHZpc2libGVSZWN0IGluY2x1ZGVzIHNjcm9sbGJh
cnMgd2hlcmVhcyB0aGUgY29udGVudFJlY3QgZG9lc24ndC4KLSAgICAgICAgSW50UmVjdCB2aXNp
YmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKLSAgICAgICAgSW50UmVj
dCBjb250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdChmYWxzZSk7CisgICAgV2Vi
UmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworICAg
IHZpZXctPmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKK30KIAotICAgICAgICAvLyBBc2sg
dGhlIGxheWVyIGNvbXBvc2l0b3IgdG8gcmVkcmF3IGFsbCB0aGUgbGF5ZXJzLgotICAgICAgICBB
U1NFUlQobV9sYXllclJlbmRlcmVyLT5oYXJkd2FyZUNvbXBvc2l0aW5nKCkpOwotICAgICAgICBt
X2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMocmVjdCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0
LCBJbnRQb2ludCh2aWV3LT5zY3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSkpOwotICAgIH0KK3Zv
aWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgZG9Db21wb3NpdGUoKTsKKworICAgIC8vIEZpbmlzaCBp
ZiByZXF1ZXN0ZWQuCisgICAgLy8gRklYTUU6IGhhbmRsZSBmaW5pc2ggZmxhZy4KKworICAgIC8v
IFB1dCByZXN1bHQgb25zY3JlZW4uCisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CiAj
ZW5kaWYKIH0KIApAQCAtMjExNCwxMSArMjEzMCwxMTEgQEAgYm9vbCBXZWJWaWV3SW1wbDo6YWxs
b3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RH
cmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogeworICAgIGJvb2wg
d2FzQWN0aXZlID0gbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CiAgICAgc2V0SXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGxheWVyID8gdHJ1ZSA6IGZhbHNlKTsKICAgICBp
ZiAobV9sYXllclJlbmRlcmVyKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RMYXll
cihsYXllcik7CisgICAgaWYgKHdhc0FjdGl2ZSAhPSBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSkgeworICAgICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0
aCwgbV9zaXplLmhlaWdodCk7CisgICAgICAgIGlmIChtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSkKKyAgICAgICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0
KGRhbWFnZWRSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXll
ck5lZWRzRGlzcGxheSgpCit7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVD
b21wb3NpdGUoKTsKKyAgICAvLyBGSVhNRTogVG8gYXZvaWQgYnJlYWtpbmcgdGhlIGRvd25zdHJl
YW0gQ2hyb21lIHJlbmRlcl93aWRnZXQgd2hpbGUgZG93bnN0cmVhbQorICAgIC8vIGNoYW5nZXMg
bGFuZCwgd2UgYWxzbyBoYXZlIHRvIHBhc3MgYSAxeDEgaW52YWxpZGF0ZSB1cCB0byB0aGUgY2xp
ZW50CisgICAgeworICAgICAgICBXZWJSZWN0IGRhbWFnZVJlY3QoMCwgMCwgMSwgMSk7CisgICAg
ICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VSZWN0KTsKKyAgICB9Cit9CisK
Kwordm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBJbnRTaXplJiBz
Y3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgLy8gRklYTUU6IFRv
IGF2b2lkIGJyZWFraW5nIHRoZSBDaHJvbWUgcmVuZGVyX3dpZGdldCB3aGVuIHRoZSBuZXcgY29t
cG9zaXRvciByZW5kZXIKKyAgICAvLyBwYXRoIGlzIG5vdCBjaGVja2VkIGluLCB3ZSBtdXN0IHN0
aWxsIHBhc3Mgc2Nyb2xsIGRhbWFnZSB1cCB0byB0aGUgY2xpZW50LiBUaGlzCisgICAgLy8gY29k
ZSB3aWxsIGJlIGJhY2tlZCBvdXQgaW4gYSBmb2xsb3d1cCBDTCBvbmNlIHRoZSBDaHJvbWl1bSBj
aGFuZ2VzIGhhdmUgbGFuZGVkLgorICAgIG1fY2xpZW50LT5kaWRTY3JvbGxSZWN0KHNjcm9sbERl
bHRhLndpZHRoKCksIHNjcm9sbERlbHRhLmhlaWdodCgpLCBjbGlwUmVjdCk7CisKKyAgICBBU1NF
UlQobV9sYXllclJlbmRlcmVyKTsKKyAgICAvLyBDb21wdXRlIHRoZSBkYW1hZ2UgcmVjdCBpbiB2
aWV3cG9ydCBzcGFjZS4KKyAgICBXZWJGcmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1w
bCgpOworICAgIGlmICghd2ViZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcq
IHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KGZhbHNlKTsKKworICAgIC8vIFdlIHN1cHBvcnQgZmFzdCBzY3JvbGxpbmcgaW4gb25lIGRp
cmVjdGlvbiBhdCBhIHRpbWUuCisgICAgaWYgKHNjcm9sbERlbHRhLndpZHRoKCkgJiYgc2Nyb2xs
RGVsdGEuaGVpZ2h0KCkpIHsKKyAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoV2ViUmVj
dChjb250ZW50UmVjdCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ29tcHV0
ZSB0aGUgcmVnaW9uIHdlIHdpbGwgZXhwb3NlIGJ5IHNjcm9sbGluZy4gV2UgdXNlIHRoZQorICAg
IC8vIGNvbnRlbnQgcmVjdCBmb3IgaW52YWxpZGF0aW9uLiAgVXNpbmcgdGhpcyBzcGFjZSBmb3Ig
ZGFtYWdlCisgICAgLy8gcmVjdHMgYWxsb3dzIHVzIHRvIGludGVybWl4IGludmFsaWRhdGVzIHdp
dGggc2Nyb2xscy4KKyAgICBJbnRSZWN0IGRhbWFnZWRDb250ZW50c1JlY3Q7CisgICAgaWYgKHNj
cm9sbERlbHRhLndpZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgZHggPSBzdGF0aWNfY2FzdDxmbG9h
dD4oc2Nyb2xsRGVsdGEud2lkdGgoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0
WShjb250ZW50UmVjdC55KCkpOworICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdo
dChjb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChkeCA+IDApIHsKKyAgICAgICAg
ICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WChjb250ZW50UmVjdC54KCkpOworICAgICAgICAg
ICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aChkeCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFgoY29udGVudFJlY3QucmlnaHQoKSAr
IGR4KTsKKyAgICAgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lkdGgoLWR4KTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZsb2F0IGR5ID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHNjcm9sbERlbHRhLmhlaWdodCgpKTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5z
ZXRYKGNvbnRlbnRSZWN0LngoKSk7CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0V2lk
dGgoY29udGVudFJlY3Qud2lkdGgoKSk7CisgICAgICAgIGlmIChkeSA+IDApIHsKKyAgICAgICAg
ICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0WShjb250ZW50UmVjdC55KCkpOworICAgICAgICAg
ICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoZHkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKGNvbnRlbnRSZWN0LmJvdHRvbSgp
ICsgZHkpOworICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRIZWlnaHQoLWR5KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIG1fc2Nyb2xsRGFtYWdlLnVuaXRlKGRhbWFnZWRDb250
ZW50c1JlY3QpOworICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIFdl
YlZpZXdJbXBsOjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIC8vIEZJWE1FOiBUbyBhdm9pZCBicmVha2luZyB0aGUgQ2hyb21lIHJlbmRlcl93aWRn
ZXQgd2hlbiB0aGUgbmV3IGNvbXBvc2l0b3IgcmVuZGVyCisgICAgLy8gcGF0aCBpcyBub3QgY2hl
Y2tlZCBpbiwgd2UgbXVzdCBzdGlsbCBwYXNzIGRhbWFnZSB1cCB0byB0aGUgY2xpZW50LiBUaGlz
CisgICAgLy8gY29kZSB3aWxsIGJlIGJhY2tlZCBvdXQgaW4gYSBmb2xsb3d1cCBDTCBvbmNlIHRo
ZSBDaHJvbWl1bSBjaGFuZ2VzIGhhdmUgbGFuZGVkLgorICAgIG1fY2xpZW50LT5kaWRJbnZhbGlk
YXRlUmVjdChyZWN0KTsKKworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworCisgICAgaWYg
KCFwYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCk7CisKKyAgICAvLyByZWN0IGlzIGluIHZpZXdwb3J0IHNwYWNl
LiBDb252ZXJ0IHRvIGNvbnRlbnQgc3BhY2UKKyAgICAvLyBzbyB0aGF0IGludmFsaWRhdGlvbnMg
YW5kIHNjcm9sbCBpbnZhbGlkYXRpb25zIHBsYXkgd2VsbCB3aXRoIG9uZS1hbm90aGVyLgorICAg
IEZsb2F0UmVjdCBjb250ZW50UmVjdCA9IHZpZXctPndpbmRvd1RvQ29udGVudHMocmVjdCk7CisK
KyAgICAvLyBGSVhNRTogYWRkIGEgc21hcnRlciBkYW1hZ2UgYWdncmVnYXRpb24gbG9naWM/IFJp
Z2h0IG5vdywgTGF5ZXJDaHJvbWl1bSBkb2VzIHNpbXBsZSB1bmlvbi1pbmcuCisgICAgbV9sYXll
clJlbmRlcmVyLT5yb290TGF5ZXIoKS0+c2V0TmVlZHNEaXNwbGF5KGNvbnRlbnRSZWN0KTsKIH0K
IAorCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
Ym9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
ID09IGFjdGl2ZSkKQEAgLTIxMjgsMTAgKzIyNDQsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJ
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIG1fbGF5
ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGdldE9uc2NyZWVuR0xF
UzJDb250ZXh0KCkpOwogICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKSB7CiAgICAgICAgICAg
ICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVkcmF3IHRoZSBlbnRpcmUgdmlldyBzbyB0aGF0IHRo
ZSBjb21wb3NpdG9yIGdldHMgdGhlIGVudGlyZSB2aWV3LAotICAgICAgICAgICAgLy8gcmF0aGVy
IHRoYW4ganVzdCB0aGUgY3VycmVudGx5LWRpcnR5IHN1YnNldC4KLSAgICAgICAgICAgIG1fY2xp
ZW50LT5kaWRJbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXpl
LmhlaWdodCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgIG1fY29tcG9zaXRvckNyZWF0
aW9uRmFpbGVkID0gdHJ1ZTsKQEAgLTIxNDIsMTcgKzIyNTQsMTEgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgIH0K
IH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2Vi
UmVjdCYgcmVjdCkKK3ZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFRoZSBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBwYXRoIGludmFsaWRhdGVzIGEgMXgxIHJlY3QgYXQgKDAsIDApCi0gICAg
Ly8gaW4gb3JkZXIgdG8gZ2V0IHRoZSByZW5kZXJlciB0byBhc2sgdGhlIGNvbXBvc2l0b3IgdG8g
cmVkcmF3LiBUaGlzIGlzIG9ubHkKLSAgICAvLyB0ZW1wb3JhcnkgdW50aWwgd2UgZ2V0IHRoZSBj
b21wb3NpdG9yIHRvIHJlbmRlciBkaXJlY3RseSBmcm9tIGl0cyBvd24gdGhyZWFkLgotICAgIGlm
ICghcmVjdC54ICYmICFyZWN0LnkgJiYgcmVjdC53aWR0aCA9PSAxICYmIHJlY3QuaGVpZ2h0ID09
IDEpCi0gICAgICAgIHJldHVybjsKLQogICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWlu
RnJhbWVJbXBsKCk7CiAgICAgaWYgKCF3ZWJmcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE2
NCw3ICsyMjcwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMo
Y29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICBpZiAocm9vdExheWVyKSB7CiAgICAgICAgIEludFJl
Y3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7CiAKLSAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5zZXRSb290TGF5ZXJDYW52YXNTaXplKEludFNpemUocmVjdC53
aWR0aCwgcmVjdC5oZWlnaHQpKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRSb290TGF5
ZXJDYW52YXNTaXplKEludFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVyQ29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+
cm9vdExheWVyR3JhcGhpY3NDb250ZXh0KCk7CiAKICNpZiBQTEFURk9STShTS0lBKQpAQCAtMjE3
NCw3ICsyMjgwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMo
Y29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICAgICAgcGxhdGZvcm1DYW52YXMtPnNhdmUoKTsKIAog
ICAgICAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9m
IHRoZSBwYWludCByZWN0LgotICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+dHJhbnNsYXRlKHN0YXRp
Y19jYXN0PFNrU2NhbGFyPigtcmVjdC54KSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1yZWN0Lnkp
KTsKKyAgICAgICAgcGxhdGZvcm1DYW52YXMtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxTa1NjYWxh
cj4oLXJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1yZWN0LnkoKSkpOwogCiAgICAg
ICAgIHJvb3RMYXllckNvbnRleHQtPnNhdmUoKTsKIApAQCAtMjE4OCw3ICsyMjk0LDcgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVj
dCkKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjZ0NvbnRleHQpOwogCiAgICAgICAgIC8v
IEJyaW5nIHRoZSBDb3JlR3JhcGhpY3MgY29udGV4dCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3Rl
bSBvZiB0aGUgcGFpbnQgcmVjdC4KLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29u
dGV4dCwgLXJlY3QueCwgLXJlY3QueSk7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShj
Z0NvbnRleHQsIC1yZWN0LngoKSwgLXJlY3QueSgpKTsKIAogICAgICAgICByb290TGF5ZXJDb250
ZXh0LT5zYXZlKCk7CiAKQEAgLTIyMDIsMjIgKzIzMDgsNDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6
dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICB9CiB9CiAK
LXZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCit2b2lkIFdlYlZp
ZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiB7Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2UncmUgcG9z
dGluZyBhIHJlcGFpbnQgZXZlbnQgZm9yIHRoZSBlbnRpcmUgcGFnZSB3aGljaCBpcyBhbiBvdmVy
a2lsbC4KLSAgICBpZiAoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKSkg
ewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGhhY2sgdG8gaW52YWxpZGF0ZSBwYXJ0
IG9mIHRoZSBwYWdlIHNvIHRoYXQgd2UgZ2V0IGNhbGxlZCB0byByZW5kZXIKLSAgICAgICAgICAg
IC8vICAgICAgICBhZ2Fpbi4KLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3
LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52
YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAxLCAxKSk7CisgICAgQVNTRVJUKGlzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKTsKKyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKwor
ICAgIC8vIFRoZSB2aXNpYmxlUmVjdCBpbmNsdWRlcyBzY3JvbGxiYXJzIHdoZXJlYXMgdGhlIGNv
bnRlbnRSZWN0IGRvZXNuJ3QuCisgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2li
bGVDb250ZW50UmVjdCh0cnVlKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmlldy0+dmlz
aWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKKyAgICBJbnRSZWN0IHZpZXdQb3J0ID0gSW50UmVjdCgw
LCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOworCisgICAgLy8gR2l2ZSB0aGUgY29t
cG9zaXRvciBhIGNoYW5jZSB0byBzZXR1cC9yZXNpemUgdGhlIHJvb3QgdGV4dHVyZSBoYW5kbGUg
YW5kIHBlcmZvcm0gc2Nyb2xsaW5nLgorICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlcGFyZVRvRHJh
d0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIEludFBvaW50KHZpZXctPnNjcm9sbFgo
KSwgdmlldy0+c2Nyb2xsWSgpKSk7CisKKyAgICAvLyBEcmF3IHRoZSBjb250ZW50cyBvZiB0aGUg
cm9vdCBsYXllci4KKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBkYW1hZ2VSZWN0czsKKyAgICBkYW1h
Z2VSZWN0cy5hcHBlbmQobV9zY3JvbGxEYW1hZ2UpOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZCht
X2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpLT5kaXJ0eVJlY3QoKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBkYW1hZ2VSZWN0cy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBUaGUg
ZGFtYWdlIHJlY3QgZm9yIHRoZSByb290IGxheWVyIGlzIGluIGNvbnRlbnQgc3BhY2UgW2UuZy4g
dW5zY3JvbGxlZF0uCisgICAgICAgIC8vIENvbnZlcnQgZnJvbSBjb250ZW50IHNwYWNlIHRvIHZp
ZXdQb3J0IHNwYWNlLgorICAgICAgICBjb25zdCBGbG9hdFJlY3QgZGFtYWdlZENvbnRlbnRSZWN0
ID0gZGFtYWdlUmVjdHNbaV07CisgICAgICAgIEludFJlY3QgZGFtYWdlZFJlY3QgPSB2aWV3LT5j
b250ZW50c1RvV2luZG93KEludFJlY3QoZGFtYWdlZENvbnRlbnRSZWN0KSk7CisKKyAgICAgICAg
Ly8gSW50ZXJzZWN0IHRoaXMgcmVjdGFuZ2xlIHdpdGggdGhlIHZpZXdQb3J0LgorICAgICAgICBk
YW1hZ2VkUmVjdC5pbnRlcnNlY3Qodmlld1BvcnQpOworCisgICAgICAgIC8vIE5vdyByZW5kZXIg
aXQuCisgICAgICAgIGlmIChkYW1hZ2VkUmVjdC53aWR0aCgpICYmIGRhbWFnZWRSZWN0LmhlaWdo
dCgpKSB7CisgICAgICAgICAgICB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhkYW1hZ2VkUmVjdCk7
CisgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0
KGRhbWFnZWRSZWN0KTsKICAgICAgICAgfQogICAgIH0KKyAgICBtX2xheWVyUmVuZGVyZXItPnJv
b3RMYXllcigpLT5yZXNldE5lZWRzRGlzcGxheSgpOworICAgIG1fc2Nyb2xsRGFtYWdlID0gV2Vi
UmVjdCgpOwogCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAvLyBEcmF3IHRoZSBhY3R1YWwgbGF5ZXJzLi4u
CisgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVj
dCk7CiB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2VuZGlmCisK
IAogUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IFdlYlZpZXdJbXBsOjpnZXRPbnNjcmVlbkdMRVMy
Q29udGV4dCgpCiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYTQyMDk5YzlkNWY0
ODQzYzJmM2U0N2Q3NTM3N2Q0ZDVhMGY3ZTlmMS4uY2I3ZGE5NWQ5YjY2OGJmZjNiODljZjBkMDUz
OWZmYWQzNmQwN2FmYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIldlYkdMRVMyQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRp
b25Qb2xpY3kuaCIKICNpbmNsdWRlICJXZWJQb2ludC5oIgorI2luY2x1ZGUgIldlYlJlY3QuaCIK
ICNpbmNsdWRlICJXZWJTaXplLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAi
V2ViVmlldy5oIgpAQCAtOTIsNiArOTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
c2l6ZShjb25zdCBXZWJTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHRoZW1lQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBm
aW5pc2gpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0
RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRGb2N1cyhib29sIGVuYWJsZSk7CkBAIC0zMjIsOSArMzI1LDExIEBAIHB1Ymxp
YzoKICAgICB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBz
ZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVy
KFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKTsKICAgICBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKTsKKyAgICB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBsYXRm
b3JtTGF5ZXIqKTsKKyAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworICAgIHZv
aWQgc2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0
YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworICAgIHZvaWQgaW52YWxpZGF0
ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogI2VuZGlmCiAgICAgLy8g
T25zY3JlZW4gY29udGV4dHMgZGlzcGxheSB0byB0aGUgc2NyZWVuIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIHZpZXcuCiAgICAgLy8gT2Zmc2NyZWVuIGNvbnRleHRzIHJlbmRlciBvZmZzY3JlZW4gYnV0
IGNhbiBzaGFyZSByZXNvdXJjZXMgd2l0aCB0aGUKQEAgLTM4Niw3ICszOTEsOCBAQCBwcml2YXRl
OgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wpOwotICAgIHZvaWQgdXBkYXRlUm9vdExheWVy
Q29udGVudHMoY29uc3QgV2ViUmVjdCYpOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVu
dHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZG9Db21wb3NpdGUoKTsKICNl
bmRpZgogCiAgICAgV2ViVmlld0NsaWVudCogbV9jbGllbnQ7CkBAIC01MTEsNiArNTE3LDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9tb3VzZUNhcHR1cmVOb2RlOwog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFdlYkNvcmU6OkludFJlY3Qg
bV9zY3JvbGxEYW1hZ2U7CiAgICAgT3duUHRyPFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bT4gbV9sYXllclJlbmRlcmVyOwogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmU7CiAgICAgYm9vbCBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZDsKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAppbmRleCA1MDMxOWFmMjNiMGE5MmY0NGM5MTU4ZWZi
M2U2NDYxODIzOTgxZDEwLi5hZWYyOWNmMmQwNDEyNGI0Yzg3ZWYwN2EyZTVmMzg1MDk2NzgyYjY4
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCkBAIC0xMjgsNiArMTI4
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZXNpemUoY29uc3QgV2ViU2l6ZSYpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
V2ViQ2FudmFzKiwgY29uc3QgV2ViUmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNo
YW5nZWQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSB7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jikg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67096</attachid>
            <date>2010-09-09 14:11:08 -0700</date>
            <delta_ts>2010-09-10 11:24:33 -0700</delta_ts>
            <desc>I fail at git as well.</desc>
            <filename>bug-45092-20100909141107.patch</filename>
            <type>text/plain</type>
            <size>37012</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTA3NDkwMzVmZGMxNmEyNWYxMTVlYTJmNTIyYjg3YTQxODQzMDc1OC4uNjMzMGIzZDIwYTM4MWEw
OWQ0MmFkY2VmMDQxZGIyMzg5NjI5ZTM4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wOS0wOSAgTmF0
IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBDb21wb3NpdGluZzog
c2NyZWVuIGdhcmJhZ2Ugd2hlbiBzY3JvbGxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDkyCisKKyAgICAgICAgU3BsaXQgTGF5ZXJSZW5kZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyBpbnRvIHNldmVyYWwgZGlmZmVyZW50CisgICAgICAgIGZ1bmN0
aW9ucywgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyB0aGUgYmFja2J1ZmZlciwgdXBkYXRpbmcg
dGhlCisgICAgICAgIHJvb3QgdGV4dHVyZSwgY29tcG9zaXRpbmcgYW5kIHBlcmZvcm1pbmcgdGhl
IGZpbmFsCisgICAgICAgIHN3YXBidWZmZXJzLiBUaGlzIGFyZSB0aGVuIHVzZWQgYnkgdGhlIG5l
dworICAgICAgICBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlIHJlbmRlcmluZyBwYXRoLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkaXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYXdMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJU
ZXh0dXJlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVz
ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaDoKKwogMjAxMC0wOS0wNyAgSmFuIEUgSGFuc3NlbiAgPGpoYW5zc2VuQHNlbmNo
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4
IDY1MTlmMWZmMmJhMTgyNmYyZTI4NTk2MmIwMzgxNzEyYTQ2ZTlkY2MuLmQ2ZWVmM2FjZDFlNDM3
MWNiNDFkZmE1MmNlZWViMmE2NGVmOTFhYzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMjk5LDEwICsyOTksMTUg
QEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAg
ICBpZiAobV9ib3VuZHMgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBmaXJz
dFJlc2l6ZSA9ICFtX2JvdW5kcy53aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBzaXpl
LndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKTsKKwogICAgIG1fYm91bmRzID0gc2l6ZTsKICAgICBt
X2JhY2tpbmdTdG9yZVNpemUgPSBzaXplOwogCi0gICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICBp
ZiAoZmlyc3RSZXNpemUpCisgICAgICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJlY3QoMCwgMCwg
bV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKKyAgICBlbHNlCisgICAgICAg
IHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMzExLDcgKzMxNiw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgcmV0dXJuOwogCiAgICAg
bV9mcmFtZSA9IHJlY3Q7Ci0gICAgc2V0TmVlZHNDb21taXQoKTsKKyAgICBzZXROZWVkc0Rpc3Bs
YXkoRmxvYXRSZWN0KDAsIDAsIG1fYm91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpKSk7
CiB9CiAKIGNvbnN0IExheWVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OnJvb3RMYXllcigpIGNv
bnN0CkBAIC0zNTMsNyArMzU4LDYgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3Bs
YXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCiAgICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1
ZTsKIAogICAgIG1fZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7Ci0KICAgICBzZXROZWVkc0Nv
bW1pdCgpOwogfQogCkBAIC0zNjMsNiArMzY3LDEyIEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
TmVlZHNEaXNwbGF5KCkKICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwogfQogCit2b2lkIExh
eWVyQ2hyb21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBtX2RpcnR5UmVjdCA9IEZs
b2F0UmVjdCgpOworICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworfQorCiB2b2lkIExheWVy
Q2hyb21pdW06OnRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG0pCiB7CiAgICAgZmxhdHRlbmVkWzBdID0gbS5tMTEoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggYmEx
NTA4ODQ0YmEzNWIzNDUxZjgyY2Q1ODlhNjUzOTc2NTIxYTA4Yy4uMmQyMjVkYWY1YTIwNzFiYWJm
ZWJkNmE3Y2YzY2MwNWUyNmIzOTA4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTExMiw2ICsxMTIsOCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCk7
CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIGRpcnR5
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlydHlSZWN0OyB9CisgICAgdm9pZCByZXNldE5lZWRz
RGlzcGxheSgpOwogCiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShib29s
IG5lZWRzRGlzcGxheSkgeyBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlID0gbmVlZHNEaXNw
bGF5OyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA3ODkyOThhZWQ4Y2U5NzYzMDIw
Y2ZlMGFlMjI0OGUzNzMzZGYyYzhjLi5iZGUyNDk3ZjhjNTBkODgxYmY0OGE3YTA2ZGY3OThiY2Ex
N2NiZTIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0xNTksOCArMTU5LDggQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcih1bnNpZ25lZCBwcm9ncmFtSWQpCiAK
IC8vIFVwZGF0ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIHRleHR1cmUgdGhhdCBm
YWxsIGluc2lkZSB0aGUgdXBkYXRlUmVjdAogLy8gYW5kIHJlLWNvbXBvc2l0cyBhbGwgc3VibGF5
ZXJzLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
c3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnByZXBhcmVUb0RyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAgICBBU1NF
UlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIApAQCAtMjAwLDE0ICsyMDAsMTIgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVj
dCwgY29uc3QgSW50UmVjdCYKICAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0
aW9uOwogCiAgICAgSW50UG9pbnQgc2Nyb2xsRGVsdGEgPSB0b1BvaW50KHNjcm9sbFBvc2l0aW9u
IC0gbV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgLy8gU2Nyb2xsIG9ubHkgd2hlbiB0aGUgdXBkYXRl
UmVjdCBjb250YWlucyBwaXhlbHMgZm9yIHRoZSBuZXdseSB1bmNvdmVyZWQgcmVnaW9uIHRvIGF2
b2lkIGZsYXNoaW5nLgotICAgIGlmICgoc2Nyb2xsRGVsdGEueCgpICYmIHVwZGF0ZVJlY3Qud2lk
dGgoKSA+PSBhYnMoc2Nyb2xsRGVsdGEueCgpKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID49IGNv
bnRlbnRSZWN0LmhlaWdodCgpKQotICAgICAgICB8fCAoc2Nyb2xsRGVsdGEueSgpICYmIHVwZGF0
ZVJlY3QuaGVpZ2h0KCkgPj0gYWJzKHNjcm9sbERlbHRhLnkoKSkgJiYgdXBkYXRlUmVjdC53aWR0
aCgpID49IGNvbnRlbnRSZWN0LndpZHRoKCkpKSB7CisgICAgLy8gU2Nyb2xsIHRoZSBiYWNrYnVm
ZmVyCisgICAgaWYgKHNjcm9sbERlbHRhLngoKSB8fCBzY3JvbGxEZWx0YS55KCkpIHsKICAgICAg
ICAgLy8gU2Nyb2xsaW5nIHdvcmtzIGFzIGZvbGxvd3M6IFdlIHJlbmRlciBhIHF1YWQgd2l0aCB0
aGUgY3VycmVudCByb290IGxheWVyIGNvbnRlbnRzCiAgICAgICAgIC8vIHRyYW5zbGF0ZWQgYnkg
dGhlIGFtb3VudCB0aGUgcGFnZSBoYXMgc2Nyb2xsZWQgc2luY2UgdGhlIGxhc3QgdXBkYXRlIGFu
ZCB0aGVuIHJlYWQgdGhlCiAgICAgICAgIC8vIHBpeGVscyBvZiB0aGUgY29udGVudCBhcmVhICh2
aXNpYmxlIGFyZWEgZXhjbHVkaW5nIHRoZSBzY3JvbGwgYmFycykgYmFjayBpbnRvIHRoZQotICAg
ICAgICAvLyByb290IGxheWVyIHRleHR1cmUuIFRoZSBuZXdseSBleHBvc2VkIGFyZWEgaXMgc3Vi
ZXNxdWVudGx5IGZpbGxlZCBhcyB1c3VhbCB3aXRoCi0gICAgICAgIC8vIHRoZSBjb250ZW50cyBv
ZiB0aGUgdXBkYXRlUmVjdC4KKyAgICAgICAgLy8gcm9vdCBsYXllciB0ZXh0dXJlLiBUaGUgbmV3
bHkgZXhwb3NlZCBhcmVhIHdpbGwgYmUgZmlsbGVkIGJ5IGEgc3Vic2VxdWVudCBkcmF3TGF5ZXJz
SW50b1JlY3QgY2FsbAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGxlZExheWVy
TWF0cml4OwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
MS4wZjsKQEAgLTIzOCw0MiArMjM2LDY1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAg
ICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9CiAKLSAgICAvLyBG
SVhNRTogVGhlIGZvbGxvd2luZyBjaGVjayBzaG91bGQgZ28gYXdheSB3aGVuIHRoZSBjb21wb3Np
dG9yIHJlbmRlcnMgaW5kZXBlbmRlbnRseSBmcm9tIGl0cyBvd24gdGhyZWFkLgotICAgIC8vIEln
bm9yZSBhIDF4MSB1cGRhdGUgcmVjdCBhdCAoMCwgMCkgYXMgdGhhdCdzIHVzZWQgYSB3YXkgdG8g
a2ljayBvZmYgYSByZWRyYXcgZm9yIHRoZSBjb21wb3NpdG9yLgotICAgIGlmICghKCF1cGRhdGVS
ZWN0LngoKSAmJiAhdXBkYXRlUmVjdC55KCkgJiYgdXBkYXRlUmVjdC53aWR0aCgpID09IDEgJiYg
dXBkYXRlUmVjdC5oZWlnaHQoKSA9PSAxKSkgewotICAgICAgICAvLyBVcGRhdGUgdGhlIHJvb3Qg
bGF5ZXIgdGV4dHVyZS4KLSAgICAgICAgQVNTRVJUKCh1cGRhdGVSZWN0LngoKSArIHVwZGF0ZVJl
Y3Qud2lkdGgoKSA8PSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCkKLSAgICAgICAgICAgICAgICYm
ICh1cGRhdGVSZWN0LnkoKSArIHVwZGF0ZVJlY3QuaGVpZ2h0KCkgPD0gbV9yb290TGF5ZXJUZXh0
dXJlSGVpZ2h0KSk7CisgICAgLy8gVHJhbnNsYXRlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMg
YnkgdGhlIHNjcm9sbCBwb3NpdGlvbi4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7
CisgICAgbWF0cml4LnRyYW5zbGF0ZTNkKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xs
UG9zaXRpb24ueSgpLCAwKTsKKworICAgIC8vIFRyYXZlcnNlIHRoZSBsYXllciB0cmVlIGFuZCB1
cGRhdGUgdGhlIGxheWVyIHRyYW5zZm9ybXMuCisgICAgZmxvYXQgb3BhY2l0eSA9IDE7CisgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBtX3Jvb3RM
YXllci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgc2l6ZV90IGk7CisgICAgZm9yIChpID0gMDsgaSA8
IHN1YmxheWVycy5zaXplKCk7IGkrKykKKyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1
YmxheWVyc1tpXS5nZXQoKSwgbWF0cml4LCBvcGFjaXR5KTsKK30KKwordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CisKKyAgICBp
ZiAoIW1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBHTEMoZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOworCisgICAgLy8gVXBkYXRl
IHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgQVNTRVJUKCh1cGRhdGVSZWN0LnJpZ2h0KCkg
IDw9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKQorICAgICAgICAgICAmJiAodXBkYXRlUmVjdC5i
b3R0b20oKSA8PSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpKTsKIAogI2lmIFBMQVRGT1JNKFNL
SUEpCi0gICAgICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAg
ICAgICAgY29uc3QgU2tCaXRtYXAgYml0bWFwID0gbV9yb290TGF5ZXJDYW52YXMtPmdldERldmlj
ZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwotICAgICAgICBpbnQgcm9vdExheWVyV2lkdGggPSBi
aXRtYXAud2lkdGgoKTsKLSAgICAgICAgaW50IHJvb3RMYXllckhlaWdodCA9IGJpdG1hcC5oZWln
aHQoKTsKLSAgICAgICAgQVNTRVJUKHJvb3RMYXllcldpZHRoID09IHVwZGF0ZVJlY3Qud2lkdGgo
KSAmJiByb290TGF5ZXJIZWlnaHQgPT0gdXBkYXRlUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHZv
aWQqIHBpeGVscyA9IGJpdG1hcC5nZXRQaXhlbHMoKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBj
b250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCi0g
ICAgICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54
KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0
KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOworICAgIC8vIEdldCB0aGUg
Y29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KKyAgICBjb25zdCBTa0JpdG1hcCBiaXRtYXAg
PSBtX3Jvb3RMYXllckNhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Cisg
ICAgaW50IGJpdG1hcFdpZHRoID0gYml0bWFwLndpZHRoKCk7CisgICAgaW50IGJpdG1hcEhlaWdo
dCA9IGJpdG1hcC5oZWlnaHQoKTsKKyAgICBBU1NFUlQoYml0bWFwV2lkdGggPT0gdXBkYXRlUmVj
dC53aWR0aCgpICYmIGJpdG1hcEhlaWdodCA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKKyAgICB2
b2lkKiBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4ZWxzKCk7CisgICAgLy8gQ29weSB0aGUgY29udGVu
dHMgb2YgdGhlIHVwZGF0ZWQgcmVjdCB0byB0aGUgcm9vdCBsYXllciB0ZXh0dXJlLgorICAgIEdM
QyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0
ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAg
ICAgIC8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KLSAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJD
R0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50
PihDR0JpdG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9
PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5
ZXJCYWNraW5nU3RvcmUuZGF0YSgpOwotCi0gICAgICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9m
IHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KLSAgICAgICAgLy8g
VGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGlu
YXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCi0gICAgICAgIEdM
QyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cGRhdGVSZWN0LngoKSwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0IC0gdXBkYXRl
UmVjdC55KCkgLSB1cGRhdGVSZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAg
ICAvLyBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QuCisgICAgQVNTRVJUKHN0
YXRpY19jYXN0PGludD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJDR0NvbnRl
eHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihDR0Jp
dG1hcENvbnRleHRHZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRh
dGVSZWN0LmhlaWdodCgpKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RMYXllckJhY2tpbmdT
dG9yZS5kYXRhKCk7CisKKyAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCBy
ZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCisgICAgLy8gVGhlIG9yaWdpbiBpcyBhdCB0
aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGluYXRlIHN5c3RlbS4gV2UgbmVl
ZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCisgICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC54KCksIG1f
cm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRlUmVjdC5oZWln
aHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRl
UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIHBpeGVscykpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9y
IHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCi0gICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7
CiAKICAgICBnbENsZWFyQ29sb3IoMCwgMCwgMSwgMSk7CiAgICAgZ2xDbGVhcihHTF9DT0xPUl9C
VUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCk7CiAKKyAgICBHTEMoZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX3Jvb3RMYXllclRleHR1cmVJZCkpOworCiAgICAgLy8gUmVuZGVy
IHRoZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRoZSBlbnRpcmUgdmlz
aWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cuCiAgICAgLy8gV2UgcmV1c2UgdGhlIHNoYWRlciBwcm9n
cmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCiAgICAgY29uc3QgQ29udGVudExheWVy
Q2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyVmFsdWVzID0gY29udGVudExheWVy
U2hhcmVkVmFsdWVzKCk7CkBAIC0yOTcsNiArMzE4LDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgY29uc3QgSW50UmVj
dCYKICAgICBHTEMoZ2xFbmFibGUoR0xfQkxFTkQpKTsKICAgICBHTEMoZ2xCbGVuZEZ1bmMoR0xf
T05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiAKKyAgICAvLyBTZXQgdGhlIHJvb3RWaXNp
YmxlUmVjdCAtLS0gdXNlZCBieSBzdWJzZXF1ZW50IGRyYXdMYXllcnMgY2FsbHMKKyAgICBtX3Jv
b3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OworCiAgICAgLy8gVHJhbnNsYXRlIGFsbCB0aGUg
Y29tcG9zaXRlZCBsYXllcnMgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbi4KICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtYXRyaXg7CiAgICAgbWF0cml4LnRyYW5zbGF0ZTNkKC1tX3Njcm9sbFBvc2l0
aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpLCAwKTsKQEAgLTMwOCwxMSArMzMyLDEwIEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmCiAgICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5z
aXplKCk7IGkrKykKICAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5n
ZXQoKSwgbWF0cml4LCBvcGFjaXR5KTsKIAotICAgIG1fcm9vdFZpc2libGVSZWN0ID0gdmlzaWJs
ZVJlY3Q7Ci0KICAgICAvLyBFbmFibGUgc2Npc3NvcmluZyB0byBhdm9pZCByZW5kZXJpbmcgY29t
cG9zaXRlZCBsYXllcnMgb3ZlciB0aGUgc2Nyb2xsYmFycy4KICAgICBHTEMoZ2xFbmFibGUoR0xf
U0NJU1NPUl9URVNUKSk7CiAgICAgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KGNvbnRlbnRSZWN0KTsK
KwogICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBv
ZmZzZXQuCiAgICAgc2Npc3NvclJlY3QubW92ZSgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Nj
cm9sbFBvc2l0aW9uLnkoKSk7CiAgICAgc2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7CkBAIC0z
MjMsMTMgKzM0NiwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhj
b25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBjb25zdCBJbnRSZWN0JgogICAgIEdMQyhnbFN0ZW5j
aWxNYXNrKDApKTsKIAogICAgIC8vIFRyYXZlcnNlIHRoZSBsYXllciB0cmVlIG9uZSBtb3JlIHRp
bWUgdG8gZHJhdyB0aGUgbGF5ZXJzLgotICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6
ZSgpOyBpKyspCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBp
KyspCiAgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpLCBzY2lz
c29yUmVjdCk7CiAKICAgICBHTEMoZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCkpOworfQogCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgpCit7CisgICAgLy8gV2UncmUgZG9u
ZSEgVGltZSB0byBzd2FwYnVmZmVycyEKICAgICBtX2dsZXMyQ29udGV4dC0+c3dhcEJ1ZmZlcnMo
KTsKLQogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
CmluZGV4IDhmNDRhZmViZDBhMmM3YjQ3NWQwNGJhNDg3MjNmMWNkYzU0NTUwOTEuLjI3NDgxNWYz
ZmUyM2MzYjA3OGM0NzAzZTg0NWIzYmJjOGMzM2VjYmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApA
QCAtNjEsOSArNjEsMTcgQEAgcHVibGljOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNz
T3duUHRyPEdMRVMyQ29udGV4dD4gZ2xlczJDb250ZXh0KTsKICAgICB+TGF5ZXJSZW5kZXJlckNo
cm9taXVtKCk7CiAKLSAgICAvLyBVcGRhdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXll
ciB0aGF0IGZhbGwgaW5zaWRlIHRoZSB1cGRhdGVSZWN0IGFuZCByZWNvbXBvc2l0ZXMKLSAgICAv
LyBhbGwgdGhlIGxheWVycy4KLSAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBk
YXRlUmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIC8vIHVwZGF0ZXMg
c2l6ZSBvZiByb290IHRleHR1cmUsIGlmIG5lZWRlZCwgYW5kIHNjcm9sbHMgdGhlIGJhY2tidWZm
ZXIuCisgICAgdm9pZCBwcmVwYXJlVG9EcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVS
ZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBv
c2l0aW9uKTsKKworICAgIC8vIHVwZGF0ZXMgYSByZWN0YW5nbGUgd2l0aGluIHRoZSByb290IGxh
eWVyIHRleHR1cmUKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllclRleHR1cmVSZWN0KGNvbnN0IElu
dFJlY3QmIHVwZGF0ZVJlY3QpOworCisgICAgLy8gZHJhd3MgdGhlIGN1cnJlbnQgbGF5ZXJzIG9u
dG8gdGhlIGJhY2tidWZmZXIKKyAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKworICAgIC8vIHB1dHMgYmFj
a2J1ZmZlciBvbnNjcmVlbgorICAgIHZvaWQgcHJlc2VudCgpOwogCiAgICAgdm9pZCBzZXRSb290
TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBsYXllcikgeyBtX3Jvb3RMYXllciA9IGxh
eWVyOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkwZGM1MzYyYmRkYTYzZjgxODkxZjQyNDc3Mzkz
YTM0MzIxZGU3MzIuLjI4NzNiZjA5MTc3MDIwMjMwY2QwMDk2YWIzOGNmZTc5MGMzYWE4MmUgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEwLTA5LTA5ICBOYXQgRHVjYSAgPG5kdWNh
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbY2hyb21pdW1dIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nOiBzY3JlZW4gZ2FyYmFn
ZSB3aGVuIHNjcm9sbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDUwOTIKKworICAgICAgICBJbnRyb2R1Y2UgYSBuZXcgQVBJIG9uIFdlYldpZGdl
dCBmb3IgcGFpbnRpbmcgd2l0aCBhY2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGluZyB0aGF0
IGFsbG93cyB0aGUgY29tcG9zaXRvciB0byBwcm9wZXJseSBkaXN0aW5naXVzaAorICAgICAgICBz
Y3JvbGxpbmcsIGludmFsaWRhdGlvbiBhbmQgcmVwYWludGluZyBmcm9tIG9uZSBhbm90aGVyLiBU
aGUga2V5CisgICAgICAgIGNoYW5nZSBpcyB0aGF0IGluIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBj
YXNlLCBpbnZhbGlkYXRlcyBhbmQKKyAgICAgICAgc2Nyb2xsaW5nIHBhc3MgZGlyZWN0bHkgdG8g
dGhlIGNvbXBvc2l0b3IsIHJhdGhlciB0aGFuIHBhc3NpbmcgdXAKKyAgICAgICAgdG8gdGhlIGNs
aWVudCBhcyB3YXMgdGhlIGNhc2UgaW4gdGhlIHNvZnR3YXJlIHBhdGguIEZvcgorICAgICAgICBh
Y2NlbGVyYXRlZCByZW5kZXJpbmcsIHRoZSBwcmV2aW91cyBwYWludCgpIG1ldGhvZCBpcyByZXBs
YWNlZCBieQorICAgICAgICBjb21wb3NpdGUoKS4KKworICAgICAgICAqIHB1YmxpYy9XZWJXaWRn
ZXQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lkZ2V0Q2xpZW50Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYldpZGdldENsaWVudDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAqIHNyYy9D
aHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6
aW52YWxpZGF0ZUNvbnRlbnRzQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50SW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKiBzcmMvV2ViUG9wdXBNZW51SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OnRoZW1lQ2hhbmdlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBvcHVwTWVudUltcGw6OmNvbXBvc2l0ZSk6CisgICAgICAgICogc3JjL1dl
YlBvcHVwTWVudUltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnRoZW1lQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKToKKyAgICAgICAgKiBzcmMvV2Vi
Vmlld0ltcGwuaDoKKyAgICAgICAgKiB0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6VGVzdFdlYldpZGdldDo6dGhlbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
VGVzdFdlYldpZGdldDo6Y29tcG9zaXRlKToKKwogMjAxMC0wOS0wNyAgVG9ueSBDaGFuZyAgPHRv
bnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmggYi9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldpZGdldC5oCmluZGV4IDVjOWY1NGU3OTM2NmI4M2FmZWU3YzBlMWUz
YTMyODhjMzQ0MTJjYTkuLmQwMTAyNzA2NWM5ZTkwYzE0NzU2ZTc3ODdjYTI2NmRmNjdlYWVjM2Ig
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0LmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXQuaApAQCAtNjAsMTMgKzYwLDI2IEBAIHB1Ymxp
YzoKICAgICAvLyBhbmQgaXQgbWF5IHJlc3VsdCBpbiBjYWxscyB0byBXZWJXaWRnZXRDbGllbnQ6
OmRpZEludmFsaWRhdGVSZWN0LgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7CiAKLSAg
ICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHNwZWNpZmllZCByZWdpb24gb2YgdGhlIFdlYldpZGdl
dCBvbnRvIHRoZSBnaXZlbgotICAgIC8vIGNhbnZhcy4gIFlvdSBNVVNUIGNhbGwgTGF5b3V0IGJl
Zm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMKLSAgICAvLyBva2F5IHRvIGNhbGwgcGFp
bnQgbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4gY2FsbGVkLAotICAgIC8vIGFz
c3VtaW5nIG5vIG90aGVyIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIFdlYldpZGdldCAoZS5nLiwg
b25jZQotICAgIC8vIGV2ZW50cyBhcmUgcHJvY2Vzc2VkLCBpdCBzaG91bGQgYmUgYXNzdW1lZCB0
aGF0IGFub3RoZXIgY2FsbCB0bwotICAgIC8vIGxheW91dCBpcyB3YXJyYW50ZWQgYmVmb3JlIHBh
aW50aW5nIGFnYWluKS4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwgY29uc3Qg
V2ViUmVjdCYpID0gMDsKKyAgICAvLyBDYWxsZWQgdG8gcGFpbnQgdGhlIHJlY3Rhbmd1bGFyIHJl
Z2lvbiB3aXRoaW4gdGhlIFdlYldpZGdldCAKKyAgICAvLyBvbnRvIHRoZSBzcGVjaWZpZWQgY2Fu
dmFzIGF0ICh2aWV3UG9ydC54LHZpZXdQb3J0LnkpLiBZb3UgTVVTVCBjYWxsCisgICAgLy8gTGF5
b3V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLiAgSXQgaXMgb2theSB0byBjYWxsIHBhaW50
CisgICAgLy8gbXVsdGlwbGUgdGltZXMgb25jZSBsYXlvdXQgaGFzIGJlZW4gY2FsbGVkLCBhc3N1
bWluZyBubyBvdGhlcgorICAgIC8vIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIFdlYldpZGdldCAo
ZS5nLiwgb25jZSBldmVudHMgYXJlCisgICAgLy8gcHJvY2Vzc2VkLCBpdCBzaG91bGQgYmUgYXNz
dW1lZCB0aGF0IGFub3RoZXIgY2FsbCB0byBsYXlvdXQgaXMKKyAgICAvLyB3YXJyYW50ZWQgYmVm
b3JlIHBhaW50aW5nIGFnYWluKS4KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ2FudmFzKiwg
Y29uc3QgV2ViUmVjdCYgdmlld1BvcnQpID0gMDsKKworICAgIC8vIFRyaWdnZXJzIGNvbXBvc2l0
aW5nIG9mIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBzY3JlZW4uCisgICAgLy8gVGhlIGZp
bmlzaCBhcmd1bWVudCBjb250cm9scyB3aGV0aGVyIHRoZSBjb21wb3NpdG9yIHdpbGwgd2FpdCBm
b3IgdGhlCisgICAgLy8gR1BVIHRvIGZpbmlzaCByZW5kZXJpbmcgYmVmb3JlIHJldHVybmluZy4g
WW91IE1VU1QgY2FsbCBMYXlvdXQKKyAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCwg
Zm9yIHRoZSBzYW1lIHJlYXNvbnMgZGVzY3JpYmVkIGluCisgICAgLy8gdGhlIHBhaW50IG1ldGhv
ZCBhYm92ZS4KKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKSA9IDA7CisK
KyAgICAvLyBDYWxsZWQgdG8gaW5mb3JtIHRoZSBXZWJXaWRnZXQgb2YgYSBjaGFuZ2UgaW4gdGhl
bWUuCisgICAgLy8gSW1wbGVtZW50b3JzIHRoYXQgY2FjaGUgcmVuZGVyZWQgY29waWVzIG9mIHdp
ZGdldHMgbmVlZCB0byByZS1yZW5kZXIKKyAgICAvLyBvbiByZWNlaXZpbmcgdGhpcyBtZXNzYWdl
CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpID0gMDsKIAogICAgIC8vIENhbGxlZCB0
byBpbmZvcm0gdGhlIFdlYldpZGdldCBvZiBhbiBpbnB1dCBldmVudC4gIFJldHVybnMgdHJ1ZSBp
ZgogICAgIC8vIHRoZSBldmVudCBoYXMgYmVlbiBwcm9jZXNzZWQsIGZhbHNlIG90aGVyd2lzZS4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lkZ2V0Q2xpZW50LmggYi9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCmluZGV4IGJkN2JkNmE3NGZj
YmFmMzcxZGYzZTlhNmU0MTBiZWRiZjM1OTIzMjAuLjliZDU1M2YzZjc5ZGY3ZDliYWE0NDUwZTQx
MTVjMjZmZWQ5MzU4NDEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV2lk
Z2V0Q2xpZW50LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQu
aApAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgLy8gc2Nyb2xsZWQgYnkgdGhlIHNwZWNp
ZmllZCBkeCBhbmQgZHkgYW1vdW50cy4KICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsUmVjdChp
bnQgZHgsIGludCBkeSwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3QpIHsgfQogCisgICAgLy8gQ2Fs
bGVkIHdoZW4gYSBjYWxsIHRvIFdlYldpZGdldDo6Y29tcG9zaXRlIGlzIHJlcXVpcmVkCisgICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9CisKICAgICAvLyBDYWxsZWQgd2hl
biB0aGUgd2lkZ2V0IGFjcXVpcmVzIG9yIGxvc2VzIGZvY3VzLCByZXNwZWN0aXZlbHkuCiAgICAg
dmlydHVhbCB2b2lkIGRpZEZvY3VzKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEJsdXIoKSB7
IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IDhhM2VkYTY2
NjZjYjU1YTJhYzAwM2Q2OTdjNjYxMmVmODk2ZGJhZmMuLjNkMGJjYWNmYTQ4YmVmN2U4YmY1ZmE4
ZjA2YjM5MDc5NjZkNjVmZTYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBs
LmNwcApAQCAtNDkzLDggKzQ5MywxNiBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OmludmFsaWRh
dGVDb250ZW50c0FuZFdpbmRvdyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBibwogewogICAg
IGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3dl
YlZpZXctPmNsaWVudCgpKQotICAgICAgICBtX3dlYlZpZXctPmNsaWVudCgpLT5kaWRJbnZhbGlk
YXRlUmVjdCh1cGRhdGVSZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgaWYgKCFtX3dlYlZpZXctPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7Cisj
ZW5kaWYKKyAgICAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCisgICAgICAgICAgICBtX3dl
YlZpZXctPmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdCh1cGRhdGVSZWN0KTsKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV93ZWJWaWV3
LT5pbnZhbGlkYXRlUm9vdExheWVyUmVjdCh1cGRhdGVSZWN0KTsKKyAgICB9CisjZW5kaWYKIH0K
IAogdm9pZCBDaHJvbWVDbGllbnRJbXBsOjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xs
KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQpAQCAtNTA4LDExICs1
MTYsMTkgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzY3JvbGwoCiAgICAgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCiB7CiAgICAgbV93ZWJWaWV3LT5oaWRlUG9wdXBzKCk7Ci0gICAgaWYgKG1f
d2ViVmlldy0+Y2xpZW50KCkpIHsKLSAgICAgICAgaW50IGR4ID0gc2Nyb2xsRGVsdGEud2lkdGgo
KTsKLSAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0gICAgICAgIG1fd2Vi
Vmlldy0+Y2xpZW50KCktPmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBjbGlwUmVjdCk7CisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV93ZWJWaWV3LT5pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgeworI2VuZGlmCisgICAgICAgIGlmIChtX3dlYlZpZXct
PmNsaWVudCgpKSB7CisgICAgICAgICAgICBpbnQgZHggPSBzY3JvbGxEZWx0YS53aWR0aCgpOwor
ICAgICAgICAgICAgaW50IGR5ID0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CisgICAgICAgICAgICBt
X3dlYlZpZXctPmNsaWVudCgpLT5kaWRTY3JvbGxSZWN0KGR4LCBkeSwgY2xpcFJlY3QpOworICAg
ICAgICB9CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIG1fd2ViVmlldy0+c2Nyb2xsUm9vdExheWVyUmVjdChzY3JvbGxEZWx0YSwgY2xpcFJl
Y3QpOwogICAgIH0KKyNlbmRpZgogfQogCiBJbnRQb2ludCBDaHJvbWVDbGllbnRJbXBsOjpzY3Jl
ZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
b3B1cE1lbnVJbXBsLmNwcAppbmRleCA3NWQ2Y2MxNDM4MjRiN2Y1OTI5MTAyOWI0MjdjZTkyMGMy
M2U0NTM5Li4wODVhMTU3NWU1NGJmMGU3YTRhYzhlNTg3OGEwMzg2MDU4OTJlNWQ5IDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUG9wdXBNZW51SW1wbC5jcHAKQEAgLTE3NCw2ICsxNzQsMTYgQEAg
dm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2Vi
UmVjdCYgcmVjdCkKICAgICB9CiB9CiAKK3ZvaWQgV2ViUG9wdXBNZW51SW1wbDo6dGhlbWVDaGFu
Z2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBvcHVwTWVudUlt
cGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CiBib29sIFdlYlBvcHVwTWVudUltcGw6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRF
dmVudCYgaW5wdXRFdmVudCkKIHsKICAgICBpZiAoIW1fd2lkZ2V0KQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQb3B1cE1lbnVJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBvcHVwTWVudUltcGwuaAppbmRleCBlZGJiNGFiNTBkNDE2YjAzYjdiZDFhNWZjZTgwMDU1
NjA5MWVhMjI3Li4yMjFiYTAzOGYyYzRjNzM2ZDY3N2ZhYmZhMzIyZTA1MWY5MDQyNjRjIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuaApAQCAtNjMsNiArNjMsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJik7CiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqIGNhbnZh
cywgY29uc3QgV2ViUmVjdCYgcmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgp
OworICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOwogICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKTsKICAgICB2aXJ0dWFs
IHZvaWQgbW91c2VDYXB0dXJlTG9zdCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29s
IGVuYWJsZSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGY2M2M5MDgyNTYy
NmNiMDZjYmM2ZjBhNWEzNWYyMjdiYmQ1YmU3ODIuLjE0ZjI3ODE0Mzc0MmU1ZGYxOGM3NDE0NjM4
YTZjZWE4MWJjY2RhOTggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC05MTIs
NyArOTEyLDEyIEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXplJiBuZXdT
aXplKQogCiAgICAgaWYgKG1fY2xpZW50KSB7CiAgICAgICAgIFdlYlJlY3QgZGFtYWdlZFJlY3Qo
MCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKLSAgICAgICAgbV9jbGllbnQtPmRp
ZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKKyAgICAgICAgaWYgKGlzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZSgpKSB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgICAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGFtYWdlZFJlY3QpOworI2VuZGlm
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0
KGRhbWFnZWRSZWN0KTsKICAgICB9CiAKICNpZiBPUyhEQVJXSU4pCkBAIC05NDYsMzMgKzk1MSw0
NCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpsYXlvdXQoKQogCiB2b2lkIFdlYlZpZXdJbXBsOjpwYWlu
dChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKLQorICAgIGlmIChp
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7
CisgICAgICAgIGRvQ29tcG9zaXRlKCk7CisKKyAgICAgICAgLy8gUmVhZGJhY2sgaW50byB0aGUg
Y2FudmFzCisgICAgICAgIC8vIEZJWE1FIEluc2VydCB3am1hY2xlYW4ncyByZWFkYmFjayBjb2Rl
IGhlcmUgZm9yIHdlYmtpdCBidWcgNDQxMjcKKworICAgICAgICAvLyBUZW1wb3JhcmlseSBwcmVz
ZW50IHNvIHRoZSBkb3duc3RyZWFtIENocm9taXVtIHJlbmRlcndpZGdldCBzdGlsbCByZW5kZXJz
LgorICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgY2FsbCBvbmNlIHRoZSBjaGFuZ2VzIHRv
IENocm9taXVtJ3MgcmVuZGVyd2lkZ2V0IGhhdmUgbGFuZGVkLgorICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPnByZXNlbnQoKTsKICNlbmRpZgorICAgIH0gZWxzZSB7CiAgICAgICAgIFdlYkZyYW1l
SW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CiAgICAgICAgIGlmICh3ZWJmcmFtZSkK
ICAgICAgICAgICAgIHdlYmZyYW1lLT5wYWludChjYW52YXMsIHJlY3QpOwotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBEcmF3IHRoZSBj
b250ZW50cyBvZiB0aGUgcm9vdCBsYXllci4KLSAgICAgICAgdXBkYXRlUm9vdExheWVyQ29udGVu
dHMocmVjdCk7CisgICAgfQorfQogCi0gICAgICAgIFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBt
YWluRnJhbWVJbXBsKCk7Ci0gICAgICAgIGlmICghd2ViZnJhbWUpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKLSAg
ICAgICAgaWYgKCF2aWV3KQotICAgICAgICAgICAgcmV0dXJuOwordm9pZCBXZWJWaWV3SW1wbDo6
dGhlbWVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKIAotICAgICAg
ICAvLyBUaGUgdmlzaWJsZVJlY3QgaW5jbHVkZXMgc2Nyb2xsYmFycyB3aGVyZWFzIHRoZSBjb250
ZW50UmVjdCBkb2Vzbid0LgotICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlz
aWJsZUNvbnRlbnRSZWN0KHRydWUpOwotICAgICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gdmll
dy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKTsKKyAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAs
IDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CisgICAgdmlldy0+aW52YWxpZGF0ZVJl
Y3QoZGFtYWdlZFJlY3QpOworfQogCi0gICAgICAgIC8vIEFzayB0aGUgbGF5ZXIgY29tcG9zaXRv
ciB0byByZWRyYXcgYWxsIHRoZSBsYXllcnMuCi0gICAgICAgIEFTU0VSVChtX2xheWVyUmVuZGVy
ZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSk7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJh
d0xheWVycyhyZWN0LCB2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIEludFBvaW50KHZpZXctPnNj
cm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKSk7Ci0gICAgfQordm9pZCBXZWJWaWV3SW1wbDo6Y29t
cG9zaXRlKGJvb2wgZmluaXNoKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyAgICBkb0NvbXBvc2l0ZSgpOworCisgICAgLy8gRmluaXNoIGlmIHJlcXVlc3RlZC4KKyAgICAv
LyBGSVhNRTogaGFuZGxlIGZpbmlzaCBmbGFnLgorCisgICAgLy8gUHV0IHJlc3VsdCBvbnNjcmVl
bi4KKyAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKICNlbmRpZgogfQogCkBAIC0yMTE0
LDExICsyMTMwLDExMSBAQCBib29sIFdlYlZpZXdJbXBsOjphbGxvd3NBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCkKIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29y
ZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpCiB7CisgICAgYm9vbCB3YXNBY3RpdmUgPSBtX2lzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsKICAgICBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUobGF5ZXIgPyB0cnVlIDogZmFsc2UpOwogICAgIGlmIChtX2xheWVyUmVuZGVyZXIp
CiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Um9vdExheWVyKGxheWVyKTsKKyAgICBpZiAo
d2FzQWN0aXZlICE9IG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKSB7CisgICAgICAg
IEludFJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsK
KyAgICAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKQorICAgICAgICAg
ICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGFtYWdlZFJlY3QpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOworICAg
IH0KK30KKwordm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKK3sK
KyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5l
ZWRzRGlzcGxheSgpOworICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworICAgIC8v
IEZJWE1FOiBUbyBhdm9pZCBicmVha2luZyB0aGUgZG93bnN0cmVhbSBDaHJvbWUgcmVuZGVyX3dp
ZGdldCB3aGlsZSBkb3duc3RyZWFtCisgICAgLy8gY2hhbmdlcyBsYW5kLCB3ZSBhbHNvIGhhdmUg
dG8gcGFzcyBhIDF4MSBpbnZhbGlkYXRlIHVwIHRvIHRoZSBjbGllbnQKKyAgICB7CisgICAgICAg
IFdlYlJlY3QgZGFtYWdlUmVjdCgwLCAwLCAxLCAxKTsKKyAgICAgICAgbV9jbGllbnQtPmRpZElu
dmFsaWRhdGVSZWN0KGRhbWFnZVJlY3QpOworICAgIH0KK30KKworCit2b2lkIFdlYlZpZXdJbXBs
OjpzY3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICAvLyBGSVhNRTogVG8gYXZvaWQgYnJlYWtpbmcgdGhl
IENocm9tZSByZW5kZXJfd2lkZ2V0IHdoZW4gdGhlIG5ldyBjb21wb3NpdG9yIHJlbmRlcgorICAg
IC8vIHBhdGggaXMgbm90IGNoZWNrZWQgaW4sIHdlIG11c3Qgc3RpbGwgcGFzcyBzY3JvbGwgZGFt
YWdlIHVwIHRvIHRoZSBjbGllbnQuIFRoaXMKKyAgICAvLyBjb2RlIHdpbGwgYmUgYmFja2VkIG91
dCBpbiBhIGZvbGxvd3VwIENMIG9uY2UgdGhlIENocm9taXVtIGNoYW5nZXMgaGF2ZSBsYW5kZWQu
CisgICAgbV9jbGllbnQtPmRpZFNjcm9sbFJlY3Qoc2Nyb2xsRGVsdGEud2lkdGgoKSwgc2Nyb2xs
RGVsdGEuaGVpZ2h0KCksIGNsaXBSZWN0KTsKKworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIp
OworICAgIC8vIENvbXB1dGUgdGhlIGRhbWFnZSByZWN0IGluIHZpZXdwb3J0IHNwYWNlLgorICAg
IFdlYkZyYW1lSW1wbCogd2ViZnJhbWUgPSBtYWluRnJhbWVJbXBsKCk7CisgICAgaWYgKCF3ZWJm
cmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHdlYmZyYW1lLT5m
cmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJl
Y3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpOworCisgICAg
Ly8gV2Ugc3VwcG9ydCBmYXN0IHNjcm9sbGluZyBpbiBvbmUgZGlyZWN0aW9uIGF0IGEgdGltZS4K
KyAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSAmJiBzY3JvbGxEZWx0YS5oZWlnaHQoKSkgewor
ICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChXZWJSZWN0KGNvbnRlbnRSZWN0KSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDb21wdXRlIHRoZSByZWdpb24gd2Ugd2ls
bCBleHBvc2UgYnkgc2Nyb2xsaW5nLiBXZSB1c2UgdGhlCisgICAgLy8gY29udGVudCByZWN0IGZv
ciBpbnZhbGlkYXRpb24uICBVc2luZyB0aGlzIHNwYWNlIGZvciBkYW1hZ2UKKyAgICAvLyByZWN0
cyBhbGxvd3MgdXMgdG8gaW50ZXJtaXggaW52YWxpZGF0ZXMgd2l0aCBzY3JvbGxzLgorICAgIElu
dFJlY3QgZGFtYWdlZENvbnRlbnRzUmVjdDsKKyAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSkg
eworICAgICAgICBmbG9hdCBkeCA9IHN0YXRpY19jYXN0PGZsb2F0PihzY3JvbGxEZWx0YS53aWR0
aCgpKTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRZKGNvbnRlbnRSZWN0LnkoKSk7
CisgICAgICAgIGRhbWFnZWRDb250ZW50c1JlY3Quc2V0SGVpZ2h0KGNvbnRlbnRSZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgaWYgKGR4ID4gMCkgeworICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRz
UmVjdC5zZXRYKGNvbnRlbnRSZWN0LngoKSk7CisgICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNS
ZWN0LnNldFdpZHRoKGR4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhbWFnZWRD
b250ZW50c1JlY3Quc2V0WChjb250ZW50UmVjdC5yaWdodCgpICsgZHgpOworICAgICAgICAgICAg
ZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aCgtZHgpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZmxvYXQgZHkgPSBzdGF0aWNfY2FzdDxmbG9hdD4oc2Nyb2xsRGVsdGEuaGVp
Z2h0KCkpOworICAgICAgICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldFgoY29udGVudFJlY3QueCgp
KTsKKyAgICAgICAgZGFtYWdlZENvbnRlbnRzUmVjdC5zZXRXaWR0aChjb250ZW50UmVjdC53aWR0
aCgpKTsKKyAgICAgICAgaWYgKGR5ID4gMCkgeworICAgICAgICAgICAgZGFtYWdlZENvbnRlbnRz
UmVjdC5zZXRZKGNvbnRlbnRSZWN0LnkoKSk7CisgICAgICAgICAgICBkYW1hZ2VkQ29udGVudHNS
ZWN0LnNldEhlaWdodChkeSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYW1hZ2Vk
Q29udGVudHNSZWN0LnNldFkoY29udGVudFJlY3QuYm90dG9tKCkgKyBkeSk7CisgICAgICAgICAg
ICBkYW1hZ2VkQ29udGVudHNSZWN0LnNldEhlaWdodCgtZHkpOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9zY3JvbGxEYW1hZ2UudW5pdGUoZGFtYWdlZENvbnRlbnRzUmVjdCk7CisgICAgc2V0
Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRh
dGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gRklYTUU6IFRv
IGF2b2lkIGJyZWFraW5nIHRoZSBDaHJvbWUgcmVuZGVyX3dpZGdldCB3aGVuIHRoZSBuZXcgY29t
cG9zaXRvciByZW5kZXIKKyAgICAvLyBwYXRoIGlzIG5vdCBjaGVja2VkIGluLCB3ZSBtdXN0IHN0
aWxsIHBhc3MgZGFtYWdlIHVwIHRvIHRoZSBjbGllbnQuIFRoaXMKKyAgICAvLyBjb2RlIHdpbGwg
YmUgYmFja2VkIG91dCBpbiBhIGZvbGxvd3VwIENMIG9uY2UgdGhlIENocm9taXVtIGNoYW5nZXMg
aGF2ZSBsYW5kZWQuCisgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KHJlY3QpOworCisg
ICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisKKyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXco
KTsKKworICAgIC8vIHJlY3QgaXMgaW4gdmlld3BvcnQgc3BhY2UuIENvbnZlcnQgdG8gY29udGVu
dCBzcGFjZQorICAgIC8vIHNvIHRoYXQgaW52YWxpZGF0aW9ucyBhbmQgc2Nyb2xsIGludmFsaWRh
dGlvbnMgcGxheSB3ZWxsIHdpdGggb25lLWFub3RoZXIuCisgICAgRmxvYXRSZWN0IGNvbnRlbnRS
ZWN0ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhyZWN0KTsKKworICAgIC8vIEZJWE1FOiBhZGQg
YSBzbWFydGVyIGRhbWFnZSBhZ2dyZWdhdGlvbiBsb2dpYz8gUmlnaHQgbm93LCBMYXllckNocm9t
aXVtIGRvZXMgc2ltcGxlIHVuaW9uLWluZy4KKyAgICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXll
cigpLT5zZXROZWVkc0Rpc3BsYXkoY29udGVudFJlY3QpOwogfQogCisKIHZvaWQgV2ViVmlld0lt
cGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKICAg
ICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPT0gYWN0aXZlKQpAQCAtMjEy
OCwxMCArMjI0NCw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUoZ2V0T25zY3JlZW5HTEVTMkNvbnRleHQoKSk7CiAgICAg
ICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9y
Y2UgYSByZWRyYXcgdGhlIGVudGlyZSB2aWV3IHNvIHRoYXQgdGhlIGNvbXBvc2l0b3IgZ2V0cyB0
aGUgZW50aXJlIHZpZXcsCi0gICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBqdXN0IHRoZSBjdXJy
ZW50bHktZGlydHkgc3Vic2V0LgotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVS
ZWN0KEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9
IGZhbHNlOwogICAgICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSB0cnVlOwpA
QCAtMjE0MiwxNyArMjI1NCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgfQogfQogCi12b2lkIFdlYlZpZXdJ
bXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQordm9pZCBX
ZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICBpZiAoIWlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyBGSVhNRTogVGhlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIHBhdGgg
aW52YWxpZGF0ZXMgYSAxeDEgcmVjdCBhdCAoMCwgMCkKLSAgICAvLyBpbiBvcmRlciB0byBnZXQg
dGhlIHJlbmRlcmVyIHRvIGFzayB0aGUgY29tcG9zaXRvciB0byByZWRyYXcuIFRoaXMgaXMgb25s
eQotICAgIC8vIHRlbXBvcmFyeSB1bnRpbCB3ZSBnZXQgdGhlIGNvbXBvc2l0b3IgdG8gcmVuZGVy
IGRpcmVjdGx5IGZyb20gaXRzIG93biB0aHJlYWQuCi0gICAgaWYgKCFyZWN0LnggJiYgIXJlY3Qu
eSAmJiByZWN0LndpZHRoID09IDEgJiYgcmVjdC5oZWlnaHQgPT0gMSkKLSAgICAgICAgcmV0dXJu
OwotCiAgICAgV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSA9IG1haW5GcmFtZUltcGwoKTsKICAgICBp
ZiAoIXdlYmZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC0yMTY0LDcgKzIyNzAsNyBAQCB2b2lk
IFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0
KQogICAgIGlmIChyb290TGF5ZXIpIHsKICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZp
ZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKIAotICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnNldFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6ZShyZWN0LndpZHRoLCByZWN0LmhlaWdodCkp
OworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldFJvb3RMYXllckNhbnZhc1NpemUoSW50U2l6
ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
KiByb290TGF5ZXJDb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXJHcmFwaGljc0Nv
bnRleHQoKTsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCkBAIC0yMTc0LDcgKzIyODAsNyBAQCB2b2lk
IFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0
KQogICAgICAgICBwbGF0Zm9ybUNhbnZhcy0+c2F2ZSgpOwogCiAgICAgICAgIC8vIEJyaW5nIHRo
ZSBjYW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0g
ICAgICAgIHBsYXRmb3JtQ2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1y
ZWN0LngpLCBzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueSkpOworICAgICAgICBwbGF0Zm9y
bUNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtcmVjdC54KCkpLCBzdGF0
aWNfY2FzdDxTa1NjYWxhcj4oLXJlY3QueSgpKSk7CiAKICAgICAgICAgcm9vdExheWVyQ29udGV4
dC0+c2F2ZSgpOwogCkBAIC0yMTg4LDcgKzIyOTQsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRh
dGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNnQ29udGV4dCk7CiAKICAgICAgICAgLy8gQnJpbmcgdGhlIENvcmVHcmFw
aGljcyBjb250ZXh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0
LgotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCAtcmVjdC54LCAtcmVj
dC55KTsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgLXJlY3QueCgp
LCAtcmVjdC55KCkpOwogCiAgICAgICAgIHJvb3RMYXllckNvbnRleHQtPnNhdmUoKTsKIApAQCAt
MjIwMiwyMiArMjMwOCw0OCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250
ZW50cyhjb25zdCBXZWJSZWN0JiByZWN0KQogICAgIH0KIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6
c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKK3ZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRl
KCkKIHsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBwb3N0aW5nIGEgcmVwYWludCBldmVu
dCBmb3IgdGhlIGVudGlyZSBwYWdlIHdoaWNoIGlzIGFuIG92ZXJraWxsLgotICAgIGlmIChXZWJG
cmFtZUltcGwqIHdlYmZyYW1lID0gbWFpbkZyYW1lSW1wbCgpKSB7Ci0gICAgICAgIGlmIChGcmFt
ZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCkpIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBUZW1wb3JhcnkgaGFjayB0byBpbnZhbGlkYXRlIHBhcnQgb2YgdGhlIHBhZ2Ugc28gdGhh
dCB3ZSBnZXQgY2FsbGVkIHRvIHJlbmRlcgotICAgICAgICAgICAgLy8gICAgICAgIGFnYWluLgot
ICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVj
dCh0cnVlKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChJbnRSZWN0
KDAsIDAsIDEsIDEpKTsKKyAgICBBU1NFUlQoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpOworICAgIGlmICghcGFnZSgpKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWVWaWV3KiB2
aWV3ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOworCisgICAgLy8gVGhlIHZpc2libGVS
ZWN0IGluY2x1ZGVzIHNjcm9sbGJhcnMgd2hlcmVhcyB0aGUgY29udGVudFJlY3QgZG9lc24ndC4K
KyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUp
OworICAgIEludFJlY3QgY29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFs
c2UpOworICAgIEludFJlY3Qgdmlld1BvcnQgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwg
bV9zaXplLmhlaWdodCk7CisKKyAgICAvLyBHaXZlIHRoZSBjb21wb3NpdG9yIGEgY2hhbmNlIHRv
IHNldHVwL3Jlc2l6ZSB0aGUgcm9vdCB0ZXh0dXJlIGhhbmRsZSBhbmQgcGVyZm9ybSBzY3JvbGxp
bmcuCisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVwYXJlVG9EcmF3TGF5ZXJzKHZpc2libGVSZWN0
LCBjb250ZW50UmVjdCwgSW50UG9pbnQodmlldy0+c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkp
KTsKKworICAgIC8vIERyYXcgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyLgorICAgIFZl
Y3RvcjxGbG9hdFJlY3Q+IGRhbWFnZVJlY3RzOworICAgIGRhbWFnZVJlY3RzLmFwcGVuZChtX3Nj
cm9sbERhbWFnZSk7CisgICAgZGFtYWdlUmVjdHMuYXBwZW5kKG1fbGF5ZXJSZW5kZXJlci0+cm9v
dExheWVyKCktPmRpcnR5UmVjdCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhbWFn
ZVJlY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIFRoZSBkYW1hZ2UgcmVjdCBmb3IgdGhl
IHJvb3QgbGF5ZXIgaXMgaW4gY29udGVudCBzcGFjZSBbZS5nLiB1bnNjcm9sbGVkXS4KKyAgICAg
ICAgLy8gQ29udmVydCBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gdmlld1BvcnQgc3BhY2UuCisgICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCBkYW1hZ2VkQ29udGVudFJlY3QgPSBkYW1hZ2VSZWN0c1tpXTsK
KyAgICAgICAgSW50UmVjdCBkYW1hZ2VkUmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coSW50
UmVjdChkYW1hZ2VkQ29udGVudFJlY3QpKTsKKworICAgICAgICAvLyBJbnRlcnNlY3QgdGhpcyBy
ZWN0YW5nbGUgd2l0aCB0aGUgdmlld1BvcnQuCisgICAgICAgIGRhbWFnZWRSZWN0LmludGVyc2Vj
dCh2aWV3UG9ydCk7CisKKyAgICAgICAgLy8gTm93IHJlbmRlciBpdC4KKyAgICAgICAgaWYgKGRh
bWFnZWRSZWN0LndpZHRoKCkgJiYgZGFtYWdlZFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAg
IHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKGRhbWFnZWRSZWN0KTsKKyAgICAgICAgICAgIG1fbGF5
ZXJSZW5kZXJlci0+dXBkYXRlUm9vdExheWVyVGV4dHVyZVJlY3QoZGFtYWdlZFJlY3QpOwogICAg
ICAgICB9CiAgICAgfQorICAgIG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCktPnJlc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgbV9zY3JvbGxEYW1hZ2UgPSBXZWJSZWN0KCk7CiAKLSAgICBpZiAo
bV9sYXllclJlbmRlcmVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzRGlzcGxh
eSgpOworICAgIC8vIERyYXcgdGhlIGFjdHVhbCBsYXllcnMuLi4KKyAgICBtX2xheWVyUmVuZGVy
ZXItPmRyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKIH0KLSNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjZW5kaWYKKwogCiBQYXNzT3duUHRyPEdMRVMy
Q29udGV4dD4gV2ViVmlld0ltcGw6OmdldE9uc2NyZWVuR0xFUzJDb250ZXh0KCkKIHsKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBhNDIwOTljOWQ1ZjQ4NDNjMmYzZTQ3ZDc1Mzc3ZDRk
NWEwZjdlOWYxLi5jYjdkYTk1ZDliNjY4YmZmM2I4OWNmMGQwNTM5ZmZhZDM2ZDA3YWZiIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiV2Vi
R0xFUzJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViTmF2aWdhdGlvblBvbGljeS5oIgogI2luY2x1
ZGUgIldlYlBvaW50LmgiCisjaW5jbHVkZSAiV2ViUmVjdC5oIgogI2luY2x1ZGUgIldlYlNpemUu
aCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCkBAIC05Miw2
ICs5Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGNvbnN0IFdlYlNpemUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdl
YkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2Vk
KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CiAgICAgdmlydHVh
bCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogICAgIHZpcnR1
YWwgdm9pZCBtb3VzZUNhcHR1cmVMb3N0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJv
b2wgZW5hYmxlKTsKQEAgLTMyMiw5ICszMjUsMTEgQEAgcHVibGljOgogICAgIH0KIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlz
cGxheSgpOwotICAgIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1M
YXllciopOwogICAgIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOworICAgIHZv
aWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1MYXllciopOworICAgIHZv
aWQgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzY3JvbGxSb290TGF5ZXJS
ZWN0KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBjbGlwUmVjdCk7CisgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAjZW5kaWYKICAgICAvLyBPbnNjcmVlbiBjb250ZXh0cyBk
aXNwbGF5IHRvIHRoZSBzY3JlZW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgdmlldy4KICAgICAvLyBP
ZmZzY3JlZW4gY29udGV4dHMgcmVuZGVyIG9mZnNjcmVlbiBidXQgY2FuIHNoYXJlIHJlc291cmNl
cyB3aXRoIHRoZQpAQCAtMzg2LDcgKzM5MSw4IEBAIHByaXZhdGU6CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUoYm9vbCk7Ci0gICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJS
ZWN0Jik7CisgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7CisgICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwogI2VuZGlmCiAKICAgICBXZWJWaWV3
Q2xpZW50KiBtX2NsaWVudDsKQEAgLTUxMSw2ICs1MTcsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxXZWJDb3JlOjpOb2RlPiBtX21vdXNlQ2FwdHVyZU5vZGU7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Njcm9sbERhbWFnZTsKICAg
ICBPd25QdHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7
CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsKICAgICBib29sIG1f
Y29tcG9zaXRvckNyZWF0aW9uRmFpbGVkOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1BvcHVwTWVudVRlc3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BvcHVwTWVudVRl
c3QuY3BwCmluZGV4IDUwMzE5YWYyM2IwYTkyZjQ0YzkxNThlZmIzZTY0NjE4MjM5ODFkMTAuLmFl
ZjI5Y2YyZDA0MTI0YjRjODdlZjA3YTJlNWYzODUwOTY3ODJiNjggMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvUG9wdXBNZW51VGVzdC5jcHAKQEAgLTEyOCw2ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHJlc2l6ZShjb25zdCBXZWJTaXplJikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25zdCBX
ZWJSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQmKSB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIG1vdXNlQ2FwdHVyZUxvc3QoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0Rm9jdXMoYm9vbCkgeyB9Cg==
</data>
<flag name="review"
          id="56307"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="56454"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>