<?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>90085</bug_id>
          
          <creation_ts>2012-06-27 11:07:44 -0700</creation_ts>
          <short_desc>[GTK] Using a native window for the WebView breaks GtkOverlay</short_desc>
          <delta_ts>2012-10-09 10:10:58 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          <dependson>94678</dependson>
          <blocked>94417</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>alex</cc>
    
    <cc>csaavedra</cc>
    
    <cc>dev</cc>
    
    <cc>dsd</cc>
    
    <cc>gustavo</cc>
    
    <cc>joone</cc>
    
    <cc>mrobinson</cc>
    
    <cc>skyul</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yoon</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>658718</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-27 11:07:44 -0700</bug_when>
    <thetext>Which is the case of epiphany, the child widgets of the GtkOverlay are not shown when webkit is built with AC enabled. The problem happens with WebKit1 and WebKit2, and I&apos;ve checked that it doesn&apos;t happen when building without AC (I used --disable-accelerated-compositing --disable-webgl --with-acceleration-backend=none configure options, it needs a patch to build with those flags, though). 
I think we should fix the build with AC disabled, and disable it by default until the problem is fixed beause it breaks important basic features in epiphany (loading progress bar, hovered link messages and fullscreen message box)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658721</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-27 11:10:51 -0700</bug_when>
    <thetext>Btw, the OSD style class is relevant because it uses a transparent background for the GtkOverlay, so it&apos;s a problem with transparencies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659023</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-27 17:55:19 -0700</bug_when>
    <thetext>A quick update debugging this issue. It seems that the root of the problem is that GtkOverlay does not react well when the background widget has its own native window. This feels like a bug in GTK+, but I&apos;m still digging for the cause.

What we know so far is that GtkOverlay creates child windows for all its overlaid widgets and calls gtk_widget_set_parent_window on them. I&apos;m going to try to explore whether or not the overlaid widget windows are just hiding behind the WebView window for some reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659235</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-27 23:08:43 -0700</bug_when>
    <thetext>I tried lowering and raising the child windows in the z-order and it didn&apos;t work. Note that it works even with AC enabled if the overlay uses an opaque background color. It seems the problem has to do with the way things are composed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661187</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-01 16:32:06 -0700</bug_when>
    <thetext>Another update: I haven&apos;t spent any time looking at the GTK+ bug, but I&apos;ve successfully eliminated the need to have a native window for accelerated compositing support using XComposite to redirect a window a pixmap. This approach has quite a few other benefits as well such as allowing us to do pixel tests with accelerated compositing and 3D CSS transforms.

I have the patch cooking locally, but I hope to post it early next week. If there&apos;s a release coming up, I&apos;m fine with disabling accelerated compositing for the moment. I wanted to delay turning it off in the case that the fix was simple.

Again I hope to post the patch within a few days though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661287</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-07-01 23:58:54 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Another update: I haven&apos;t spent any time looking at the GTK+ bug, but I&apos;ve successfully eliminated the need to have a native window for accelerated compositing support using XComposite to redirect a window a pixmap. This approach has quite a few other benefits as well such as allowing us to do pixel tests with accelerated compositing and 3D CSS transforms.

Great news.

&gt; I have the patch cooking locally, but I hope to post it early next week. If there&apos;s a release coming up, I&apos;m fine with disabling accelerated compositing for the moment. I wanted to delay turning it off in the case that the fix was simple.

Sure.

&gt; Again I hope to post the patch within a few days though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664206</commentid>
    <comment_count>6</comment_count>
      <attachid>151106</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-06 11:12:58 -0700</bug_when>
    <thetext>Created attachment 151106
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669461</commentid>
    <comment_count>7</comment_count>
      <attachid>152344</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-07-13 14:59:37 -0700</bug_when>
    <thetext>Created attachment 152344
Add xcomposite pkg-config parsing to configuration, fix some assertions, and improve performance on the 2012 beercamp demo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692652</commentid>
    <comment_count>8</comment_count>
      <attachid>157755</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-10 10:21:06 -0700</bug_when>
    <thetext>Created attachment 157755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698482</commentid>
    <comment_count>9</comment_count>
      <attachid>159158</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-17 10:49:45 -0700</bug_when>
    <thetext>Created attachment 159158
Patch fixing issues with scrolling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699015</commentid>
    <comment_count>10</comment_count>
      <attachid>159158</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-19 03:32:43 -0700</bug_when>
    <thetext>Comment on attachment 159158
Patch fixing issues with scrolling

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

&gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:103
&gt; +    cleanupPixmapAndPixmapSurface();

You should probably remove the source if m_pendingResizeSourceId &gt; 0 to avoid the callback could be called on a destroyed object.

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:115
&gt; +bool AcceleratedCompositingContext::renderLayersToWindow(cairo_t* cr, const IntRect&amp; clipRect)

clipRect is passed but it doesn&apos;t seem to be used, is it really needed?

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:135
&gt; +
&gt; +

Extra line here?

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:228
&gt; +    if (m_layerFlushTimerCallbackId) {
&gt; +        g_source_remove(m_layerFlushTimerCallbackId);
&gt; +        m_layerFlushTimerCallbackId = 0;
&gt; +    }

This is done 3 times, maybe you could add a helper clearLayerFlushTimerSource() or seomthing similar.

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:321
&gt; +    {
&gt; +        Frame* frame = core(m_webView)-&gt;mainFrame();
&gt; +        if (!frame || !frame-&gt;contentRenderer() || !frame-&gt;view())
&gt; +            return;
&gt; +        frame-&gt;view()-&gt;updateLayoutAndStyleIfNeededRecursive();
&gt; +    }

why the braces?

&gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:1010
&gt; +    IntRect webViewRect = getWebViewRect(m_webView);
&gt; +    if (turningOnCompositing) {
&gt; +        m_displayTimer.stop();
&gt; +        m_webView-&gt;priv-&gt;backingStore = WebCore::WidgetBackingStore::create(GTK_WIDGET(m_webView), IntSize(1, 1));
&gt; +    }
&gt; +
&gt; +    if (turningOffCompositing) {
&gt; +        m_webView-&gt;priv-&gt;backingStore = WebCore::WidgetBackingStore::create(GTK_WIDGET(m_webView), webViewRect.size());
&gt; +        RefPtr&lt;cairo_t&gt; cr = adoptRef(cairo_create(m_webView-&gt;priv-&gt;backingStore-&gt;cairoSurface()));
&gt; +        clearEverywhereInBackingStore(m_webView, cr.get());
&gt; +    }

webViewRect is only used when turning compositing off, so it could be moved here and maybe don&apos;t use a local variable:

m_webView-&gt;priv-&gt;backingStore = WebCore::WidgetBackingStore::create(GTK_WIDGET(m_webView), getWebViewRect().size());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699254</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-19 23:34:41 -0700</bug_when>
    <thetext>(In reply to comment #10)

Thanks for the review!

&gt; (From update of attachment 159158 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159158&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:103
&gt; &gt; +    cleanupPixmapAndPixmapSurface();
&gt; 
&gt; You should probably remove the source if m_pendingResizeSourceId &gt; 0 to avoid the callback could be called on a destroyed object.

Okay.

&gt; 
&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:115
&gt; &gt; +bool AcceleratedCompositingContext::renderLayersToWindow(cairo_t* cr, const IntRect&amp; clipRect)
&gt; 
&gt; clipRect is passed but it doesn&apos;t seem to be used, is it really needed?

It can&apos;t be removed, because it might be used by the other implementations. In fact, I&apos;ll use it here to speed up painting AC results after damage events.
&gt; 
&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:135
&gt; &gt; +
&gt; &gt; +
&gt; 
&gt; Extra line here?

Removed.


&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:228
&gt; &gt; +    if (m_layerFlushTimerCallbackId) {
&gt; &gt; +        g_source_remove(m_layerFlushTimerCallbackId);
&gt; &gt; +        m_layerFlushTimerCallbackId = 0;
&gt; &gt; +    }
&gt; 
&gt; This is done 3 times, maybe you could add a helper clearLayerFlushTimerSource() or seomthing similar.

Okay.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:321
&gt; &gt; +    {
&gt; &gt; +        Frame* frame = core(m_webView)-&gt;mainFrame();
&gt; &gt; +        if (!frame || !frame-&gt;contentRenderer() || !frame-&gt;view())
&gt; &gt; +            return;
&gt; &gt; +        frame-&gt;view()-&gt;updateLayoutAndStyleIfNeededRecursive();
&gt; &gt; +    }
&gt; 
&gt; why the braces?

There was a smart pointer in an older implementation. I&apos;ve removed them.

&gt; webViewRect is only used when turning compositing off, so it could be moved here and maybe don&apos;t use a local variable:

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699255</commentid>
    <comment_count>12</comment_count>
      <attachid>159341</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-19 23:38:20 -0700</bug_when>
    <thetext>Created attachment 159341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699273</commentid>
    <comment_count>13</comment_count>
      <attachid>159341</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-20 00:20:16 -0700</bug_when>
    <thetext>Comment on attachment 159341
Patch

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

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:-60
&gt; -    if (m_syncTimerCallbackId)
&gt; -        g_source_remove(m_syncTimerCallbackId);

This should be now stopAnyPendingLayerFlush();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699500</commentid>
    <comment_count>14</comment_count>
      <attachid>159426</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-20 07:46:45 -0700</bug_when>
    <thetext>Created attachment 159426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700713</commentid>
    <comment_count>15</comment_count>
      <attachid>159426</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-21 06:50:30 -0700</bug_when>
    <thetext>Comment on attachment 159426
Patch

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

&gt; Source/WebCore/platform/graphics/glx/GLContextGLX.cpp:108
&gt; +    static int framebufferAttributes[] = {
&gt; +        GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,
&gt; +        GLX_DOUBLEBUFFER, bufferingType == DoubleBuffer ? True : False,
&gt; +        GLX_RENDER_TYPE, GLX_RGBA_BIT,
&gt; +        GLX_RED_SIZE, 1,
&gt; +        GLX_GREEN_SIZE, 1,
&gt; +        GLX_BLUE_SIZE, 1,
&gt; +        GLX_STENCIL_SIZE, 1,
&gt; +        None
&gt; +    };

if this is static, GLX_DOUBLEBUFFER would only be initialized the first time with whatever bufferingType is, no?

&gt; Source/WebCore/platform/graphics/glx/GLContextGLX.cpp:114
&gt; +    if (!numberReturned || !configs)
&gt; +        return nullptr;

is configs leaked here if !numberReturned? or glXChooseFBConfig never sets numberReturned=0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700746</commentid>
    <comment_count>16</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-21 07:44:33 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 159426 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159426&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/glx/GLContextGLX.cpp:108
&gt; &gt; +    static int framebufferAttributes[] = {
&gt; &gt; +        GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,
&gt; &gt; +        GLX_DOUBLEBUFFER, bufferingType == DoubleBuffer ? True : False,
&gt; &gt; +        GLX_RENDER_TYPE, GLX_RGBA_BIT,
&gt; &gt; +        GLX_RED_SIZE, 1,
&gt; &gt; +        GLX_GREEN_SIZE, 1,
&gt; &gt; +        GLX_BLUE_SIZE, 1,
&gt; &gt; +        GLX_STENCIL_SIZE, 1,
&gt; &gt; +        None
&gt; &gt; +    };
&gt; 
&gt; if this is static, GLX_DOUBLEBUFFER would only be initialized the first time with whatever bufferingType is, no?

Nice catch! This isn&apos;t a huge deal since there&apos;s no double-buffered GLContexts at the moment, but I&apos;ve fixed this.

&gt; &gt; Source/WebCore/platform/graphics/glx/GLContextGLX.cpp:114
&gt; &gt; +    if (!numberReturned || !configs)
&gt; &gt; +        return nullptr;
&gt; 
&gt; is configs leaked here if !numberReturned? or glXChooseFBConfig never sets numberReturned=0?

I believe that when numberReturned == 0, configs will always be null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700785</commentid>
    <comment_count>17</comment_count>
      <attachid>159694</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-21 08:20:40 -0700</bug_when>
    <thetext>Created attachment 159694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700954</commentid>
    <comment_count>18</comment_count>
      <attachid>159728</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-21 11:33:08 -0700</bug_when>
    <thetext>Created attachment 159728
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701014</commentid>
    <comment_count>19</comment_count>
      <attachid>159728</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2012-08-21 12:45:38 -0700</bug_when>
    <thetext>Comment on attachment 159728
Patch

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

Great patch, LGTM. This seems the way to go.

&gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:66
&gt; +    m_parentWindow = XCreateWindow(display,
&gt; +                                   RootWindow(display, DefaultScreen(display)),
&gt; +                                    -100, -100, 1, 1,
&gt; +                                    0,
&gt; +                                    CopyFromParent,
&gt; +                                    InputOutput,
&gt; +                                    CopyFromParent,
&gt; +                                    CWOverrideRedirect,
&gt; +                                    &amp;windowAttributes);

Indent typo.

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContext.h:-81
&gt; -#if USE(TEXTURE_MAPPER_GL)
&gt;      WebCore::GLContext* glContext();
&gt;      OwnPtr&lt;WebCore::GLContext&gt; m_context;
&gt;  #endif
&gt; -#endif

Why do you remove this #if?

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:193
&gt; +    // called. For non-animation situations we use this terrible hack until we can get to the

Trailing whitespace in horrible hack comment ;).

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:216
&gt; +    // to update. This isn&apos;t a problem during animations, because swapBuffer is continuously 

Ditto.

&gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:348
&gt; +    //    return;

I guess this is a leftover.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701064</commentid>
    <comment_count>20</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-21 13:28:48 -0700</bug_when>
    <thetext>Committed r126182: &lt;http://trac.webkit.org/changeset/126182&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701068</commentid>
    <comment_count>21</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-21 13:30:37 -0700</bug_when>
    <thetext>(In reply to comment #19)

Thanks for the review!

&gt; &gt; Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp:66
&gt; &gt; +    m_parentWindow = XCreateWindow(display,
&gt; &gt; +                                   RootWindow(display, DefaultScreen(display)),
&gt; &gt; +                                    -100, -100, 1, 1,
&gt; &gt; +                                    0,
&gt; &gt; +                                    CopyFromParent,
&gt; &gt; +                                    InputOutput,
&gt; &gt; +                                    CopyFromParent,
&gt; &gt; +                                    CWOverrideRedirect,
&gt; &gt; +                                    &amp;windowAttributes);
&gt; 
&gt; Indent typo.

Fixed.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContext.h:-81
&gt; &gt; -#if USE(TEXTURE_MAPPER_GL)
&gt; &gt;      WebCore::GLContext* glContext();
&gt; &gt;      OwnPtr&lt;WebCore::GLContext&gt; m_context;
&gt; &gt;  #endif
&gt; &gt; -#endif
&gt; 
&gt; Why do you remove this #if?

I actually meant to remove these entirely. I&apos;ve done that.

&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:193
&gt; &gt; +    // called. For non-animation situations we use this terrible hack until we can get to the
&gt; 
&gt; Trailing whitespace in horrible hack comment ;).

Fixed.


&gt; &gt; Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp:348
&gt; &gt; +    //    return;
&gt; 
&gt; I guess this is a leftover.

I meant this to be

if (!flush....)
   return;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701664</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 01:21:53 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 94678</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737902</commentid>
    <comment_count>23</comment_count>
    <who name="Daniel Drake">dsd</who>
    <bug_when>2012-10-09 10:10:58 -0700</bug_when>
    <thetext>r126182 a regression in plugin display, filed as bug #98789.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151106</attachid>
            <date>2012-07-06 11:12:58 -0700</date>
            <delta_ts>2012-07-13 14:59:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90085-20120706111257.patch</filename>
            <type>text/plain</type>
            <size>45474</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTYwNmFkOTk5ZjIyNDc3
ZGI3Yjg4ZWRkOGZmYzU4ZDI1YTllODA0MC4uYzc3Njk3ODc5Mzc3OGJiOTZhNTI1YjMzMjRkNTgz
NDFjMTdiMDRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTAzICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2lu
ZyBhIG5hdGl2ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGhpcyB3aWxsIGJlIGNvdmVyZWQgYnkgcGl4ZWwgdGVzdCBmb3IgYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgd2hlbiB0aGV5IGFyZSBhY3RpdmF0ZWQuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOiBBZGQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZmlsZXMgdG8g
dGhlIHNvdXJjZSBsaXN0LgorICAgICAgICBNYWtlIGEgbmV3IHNlY3Rpb24gZm9yIEdMWCBzcGVj
aWZpYyBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xY
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSk6IEV4
cG9zZSBzaGFyZWREaXNwbGF5IGFzIGEgc3RhdGljIG1ldGhvZAorICAgICAgICBzbyB0aGF0IGl0
IGNhbiBiZSBjYWxsZWQgYnkgb3RoZXIgWDExIHNwZWNpZmljIGNvZGUuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBBZGRlZC4gQW4gaW1wbGVt
ZW50YXRpb24gb2YgYSBHTCBzdXJmYWNlCisgICAgICAgIHRoYXQgcmVuZGVycyB0byBhbiBYLXdp
bmRvdyB3aGljaCByZWRpcmVjdHMgdG8gYSBwaXhtYXAuCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg6IEFkZGVkLgorCiAyMDEyLTA3LTAzICBWc2V2
b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IEludHJvZHVjZSBXb3Jrc3BhY2UgbWFrZSBpdCBVSVNvdXJjZUNvZGUgcHJvdmlkZXIgZm9y
IFNjcmlwdHNQYW5lbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBiMWE3YzFjZTNjMGYxNGIxY2Y2NTgx
ODg0NmMxZTI3Y2IwZjU5ODhkLi5iMzcwYTdiMDlkZjg2NzliOTNiNzU0Mzc1OWJjNTg5ZTczMGVm
NTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTItMDctMDMgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFVzaW5n
IGEgbmF0aXZlIHdpbmRvdyBmb3IgdGhlIFdlYlZpZXcgYnJlYWtzIEd0a092ZXJsYXkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMDg1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3cml0ZSBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dCBmb3IgVGV4dHVyZU1hcHBlckdMIHRvIGJlIG1vcmUgc2lt
aWxhciB0bworICAgICAgICB0aGUgV2ViS2l0MiBMYXllclRyZWVIb3N0IGFuZCBzd2l0Y2ggZnJv
bSByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIHdpZGdldCB3aW5kb3cKKyAgICAgICAgdG8gYSB3
aW5kb3cgcmVkaXJlY3RlZCB0byBhIHBpeG1hcCB2aWEgWENvbXBvc2l0ZS4gVGhlIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0CisgICAgICAgIG5vdyBoYW5kbGVzIHBhaW50aW5nIHRoZSBu
b24tY29tcG9zaXRlZCBjb250ZW50IGl0c2VsZiBhbmQgbm8gbG9uZ2VyIHJlbGllcyBvbiB0aGUK
KyAgICAgICAgQ2hyb21lQ2xpZW50IGJhY2tpbmcgc3RvcmUuCisKKyAgICAgICAgVGhpcyBmaXhl
cyBpc3N1ZXMgd2l0aCB1c2luZyBHdGtPdmVybGF5IFdlYktpdFdlYlZpZXcgYXMgd2VsbCBhcyBt
YWtpbmcgaXQgcG9zc2libGUKKyAgICAgICAgdG8gcnVuIHBpeGVsIHRlc3RzIHdpdGggYWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcgdHVybmVkIG9uLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaDoKKyAgICAgICAgKEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dEdMLmNwcDoKKyAgICAgICAgUmVuYW1lIHNvbWUgbWV0aG9kcyB0byBt
YWtlIHRoZW0gbW9yZSBzaW1pbGFyIHRvIExheWVyVHJlZUhvc3QuIE5vdyB3ZSB3YWl0IHRvIHJl
bmRlcgorICAgICAgICB0aGUgT3BlbkdMIGNvbnRleHQgdG8gdGhlIHdpbmRvdyB1bnRpbCB0aGUg
d2lkZ2V0J3MgZHJhdyBzaWduYWwuIEVzY2FwZSBvdXQgb2YgYWxsCisgICAgICAgIG1ldGhvZHMg
ZWFybHkgaWYgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgZGlzYWJsZWQuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDogQWx3YXlzIGNoZWNrIGlmIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nIGlzIG9uCisgICAgICAgIGJlZm9yZSBjYWxsaW5nIGludG8gQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQgbWV0aG9kcy4gV2hlbiBBQyBpcyBvbiwgbmV2ZXIg
cGFpbnQKKyAgICAgICAgdGhlIGJhY2tpbmcgc3RvcmUsIGRlZmVycmluZyBpbW1lZGlhdGVseSB0
byB0aGUgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuIFdoZW4KKyAgICAgICAgQUMgaXMg
dHVybmVkIG9uIHRoZSBiYWNraW5nIHN0b3JlIG5vdyBzaHJpbmtzIHRvIGEgc21hbGwgc2l6ZSB0
byBzYXZlIG1lbW9yeS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAg
ICAgIChyZXNpemVXZWJWaWV3RnJvbUFsbG9jYXRpb24pOiBDaHJvbWVDbGllbnQgaXMgbm93IHJl
c3BvbnNpYmxlIGZvciB0YWxraW5nIHRvIHRoZQorICAgICAgICBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dCBkaXJlY3RseS4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19zaXplX2FsbG9j
YXRlKTogRXhpdCBlYXJseSBpZiB0aGUgYWxsb2NhdGlvbiBpcyBub3QgYSByZXNpemUuIFRoaXMK
KyAgICAgICAgbWFrZXMgc29tZSBkZWVwZXIgbG9naWMgYSBiaXQgc2ltcGxlciBhbmQgYXZvaWRz
IGFjY2lkZW50YWxseSBkb2luZyB0b28gbXVjaCB3b3JrIGZvcgorICAgICAgICB3aWRnZXQgbW92
ZW1lbnQuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfcmVhbGl6ZSk6IFdlIG5vIGxvbmdlciBu
ZWVkIGEgbmF0aXZlIHdpbmRvdy4KKwogMjAxMi0wNy0wMiAgQmVuamFtaW4gUG91bGFpbiAgPGJw
b3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBEbyBub3QgZG8gYW55IGxvZ2dpbmcgaW5pdGlh
bGl6YXRpb24gd2hlbiBsb2dnaW5nIGlzIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCBkZTdiY2M2NGYzOWViZGEzNmI3NzQ2OTMyMWI5YTBkYzg5MGViZjg4Li5iYTI0
ZmNkODdkYTMyMjUxMDNhMmY3NjJlYWFlNzE2NzAxYmRmYTIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTQ4NTgsOCArNDg1OCw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBc
CiAKIGlmIFRBUkdFVF9YMTEKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVYMTEuY3BwIFwKQEAgLTQ4OTYsNiAr
NDg5NCwxNSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogZW5kaWYgIyBFTkQgVEFSR0VUX1dJTjMy
CiBlbmRpZiAjIEVORCBUQVJHRVRfWDExCiAKK2lmIFVTRV9HTFgKK3dlYmNvcmVfc291cmNlcyAr
PSBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFgu
aAord2ViY29yZWd0a19zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaAorZW5kaWYgIyBVU0VfR0xYCisKICMg
LS0tLQogIyBpY3UgdW5pY29kZSBiYWNrZW5kCiAjIC0tLS0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAKaW5kZXggMTk0YTVh
YWU1YzkxYzVjMzQ2NTE2ZGE0YjFlY2ViYzcxNmM1MTMyMy4uNzk3ZjU4YmE5YmQ4ZTMyZjBmNjRl
ODY0ZTZmZTk1YjNlNDk2ZGI1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogLy8gYmVjYXVzZSBpdCBtaWdodCBsZWFkIHRvIGNyYXNoZXMgaW4gc29t
ZSBkcml2ZXJzIChmZ2xyeCkuIFdlIHVzZSBhIHNoYXJlZCBkaXNwbGF5CiAvLyBwb2ludGVyIGhl
cmUuCiBzdGF0aWMgRGlzcGxheSogZ1NoYXJlZERpc3BsYXkgPSAwOwotc3RhdGljIERpc3BsYXkq
IHNoYXJlZERpc3BsYXkoKQorRGlzcGxheSogR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCkK
IHsKICAgICBpZiAoIWdTaGFyZWREaXNwbGF5KQogICAgICAgICBnU2hhcmVkRGlzcGxheSA9IFhP
cGVuRGlzcGxheSgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dseC9HTENvbnRleHRHTFguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dseC9HTENvbnRleHRHTFguaAppbmRleCAxMThlZGQ0MWQ0MjJhZWNjYjk5MGQxYjdhZmM2NGYw
ZDY3YWIxNjYyLi41NTg4Y2YwMGM5MDE2ODVmMWNiODQ0OTJkMGM4MmUzMmFmMWFjMjEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xY
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdM
WC5oCkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVy
VG9EZWZhdWx0RnJhbWVidWZmZXIoKTsKICAgICB2aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1l
QnVmZmVyU2l6ZSgpOwogCisgICAgc3RhdGljIERpc3BsYXkqIHNoYXJlZERpc3BsYXkoKTsKKwog
I2lmIEVOQUJMRShXRUJHTCkKICAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
cGxhdGZvcm1Db250ZXh0KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUzMzIwNmYwMTc2YWU1NjE4YjhkMzYxYzRjZDY2NmI3ODBiNGZlOTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cuY3BwCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgorCisjaW5jbHVkZSAi
R0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjaW5jbHVkZSA8WDExL2V4dGVu
c2lvbnMvWGNvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxn
ZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXpl
KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3co
c2l6ZSkpOworfQorCitSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fd2luZG93KDApCisgICAg
LCBtX3BhcmVudFdpbmRvdygwKQorICAgICwgbV9waXhtYXAoMCkKKyAgICAsIG1fc3VyZmFjZSgw
KQorICAgICwgbV9wZW5kaW5nUmVzaXplU291cmNlSWQoMCkKKyAgICAsIG1fbmVlZHNOZXdQaXht
YXBBZnRlclJlc2l6ZShmYWxzZSkKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0
R0xYOjpzaGFyZWREaXNwbGF5KCk7CisKKyAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJv
bSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29tbW9uL2dwdS9pbWFnZV90cmFuc3BvcnRfc3VyZmFj
ZV9saW51eC5jYworICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Cisg
ICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7CisgICAgbV9wYXJl
bnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJvb3RXaW5kb3coZGlzcGxheSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTAwLCAtMTAwLCAxLCAxLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENXT3ZlcnJpZGVSZWRpcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKKyAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fcGFyZW50
V2luZG93KTsKKworICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5v
dGlmeU1hc2s7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNl
OworICAgIG1fd2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3BhcmVudFdpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDV0V2ZW50TWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRv
d0F0dHJpYnV0ZXMpOworICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV93aW5kb3cpOworCisgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgWEV2ZW50IGV2ZW50OworICAgICAgICBYV2luZG93RXZlbnQo
ZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7CisgICAgICAg
IGlmIChldmVudC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dp
bmRvdykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBYU2VsZWN0SW5wdXQoZGlzcGxh
eSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsKKworICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRv
dyhkaXNwbGF5LCBtX3dpbmRvdywgQ29tcG9zaXRlUmVkaXJlY3RNYW51YWwpOworCisgICAgcmVz
aXplKHNpemUpOworICAgIHJlc2l6ZUxhdGVyKCk7IC8vIEZvcmNlIHVwZGF0ZSBvZiB0aGUgdXNh
YmxlIGFyZWEuCit9CisKK1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+UmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3coKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHTENvbnRleHRHTFg6
OnNoYXJlZERpc3BsYXkoKTsKKyAgICBpZiAobV93aW5kb3cpCisgICAgICAgIFhEZXN0cm95V2lu
ZG93KGRpc3BsYXksIG1fd2luZG93KTsKKyAgICBpZiAobV9wYXJlbnRXaW5kb3cpCisgICAgICAg
IFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsKKyAgICBjbGVhbnVwUGl4
bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworfQorCitnYm9vbGVhbiBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdzo6cmVzaXplTGF0ZXJDYWxsYmFjayhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyog
d2luZG93KQoreworICAgIHdpbmRvdy0+cmVzaXplTGF0ZXIoKTsKKyAgICByZXR1cm4gRkFMU0U7
Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZUxhdGVyKCkKK3sK
KyAgICBtX3VzYWJsZVNpemUgPSBtX3NpemU7CisgICAgbV9wZW5kaW5nUmVzaXplU291cmNlSWQg
PSAwOworfQorCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpyZXNpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBXaGVuIGVubGFyZ2luZyBhIHJlZGlyZWN0ZWQgd2lu
ZG93LCBmb3IgdGhlIGZpcnN0IHJlbmRlciwgdGhlIG5ld2x5IGV4cG9zZWQgYXJlYXMgc2VlbQor
ICAgIC8vIHRvIGNvbnRhaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb24gSW50ZWwgZHJpdmVycy4g
VG8gYXZvaWQgcmVuZGVyaW5nIGFydGlmYWN0cyB3aGlsZQorICAgIC8vIHJlc2l6aW5nLCB3ZSB3
YWl0IHRvIHJlbmRlciB0aG9zZSBuZXcgYXJlYXMgdW50aWwgYWZ0ZXIgYSBzaG9ydCB0aW1lb3V0
LiBUaHVzLCB0aGUKKyAgICAvLyAidXNhYmxlIHNpemUiIG9mIHRoZSB3aW5kb3cgaXMgc21hbGxl
ciB0aGFuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgd2luZG93IGZvciB0aGUgZmlyc3QKKyAgICAv
LyByZW5kZXIuCisgICAgbV91c2FibGVTaXplID0gc2l6ZS5zaHJ1bmtUbyhtX3VzYWJsZVNpemUp
OworICAgIGlmIChtX3VzYWJsZVNpemUud2lkdGgoKSA8IHNpemUud2lkdGgoKSB8fCBtX3VzYWJs
ZVNpemUuaGVpZ2h0KCkgPCBzaXplLmhlaWdodCgpKSB7IC8vIFRoZSB3aW5kb3cgaXMgZ3Jvd2lu
Zy4KKyAgICAgICAgLy8gV2UncmUgYmVpbmcgdmVyeSBjb25zZXJ2YXRpdmUgaGVyZS4gSW5zdGVh
ZCBvZiByaXNraW5nIGRyYXdpbmcgYXJ0aWZhY3RzIHdoaWxlIGRvaW5nIGNvbnRpbnVvdXMKKyAg
ICAgICAgLy8gb3BhcXVlIHJlc2l6aW5nLCB3ZSBlcnIgb24gdGhlIHNpZGUgb2YgaGF2aW5nIG1v
cmUgdW5kcmF3biBhcmVhcy4KKyAgICAgICAgaWYgKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKQor
ICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKTsKKyAg
ICAgICAgbV9wZW5kaW5nUmVzaXplU291cmNlSWQgPSBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlc2l6ZUxhdGVyQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9
CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCk7
CisgICAgWFJlc2l6ZVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKKyAgICBnbFhXYWl0WCgpOworCisgICAgLy8gVGhpcyBzd2FwIGlzIGJhc2Vk
IG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRvIHdvcmstYXJvdW5kIGEgYnVnIGluIHRo
ZSBJbnRlbCBkcml2ZXJzCisgICAgLy8gd2hlcmUgYSBzd2FwIGlzIG5lY2Vzc2FyeSB0byBlbnN1
cmUgdGhlIGZyb250IGFuZCBiYWNrIGJ1ZmZlcnMgYXJlIHByb3Blcmx5IHJlc2l6ZWQuCisgICAg
aWYgKGNvbnRleHQoKSA9PSBHTENvbnRleHQ6OmdldEN1cnJlbnQoKSkKKyAgICAgICAgY29udGV4
dCgpLT5zd2FwQnVmZmVycygpOworCisgICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX25lZWRzTmV3
UGl4bWFwQWZ0ZXJSZXNpemUgPSB0cnVlOworfQorCitHTENvbnRleHQqIFJlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93Ojpjb250ZXh0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOworCisgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBtX2Nv
bnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cobV93aW5kb3csIEdMQ29u
dGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7CisgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKK30K
Kwordm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1h
cFN1cmZhY2UoKQoreworICAgIGlmICghbV9waXhtYXApCisgICAgICAgIHJldHVybjsKKworICAg
IFhGcmVlUGl4bWFwKGNhaXJvX3hsaWJfc3VyZmFjZV9nZXRfZGlzcGxheShtX3N1cmZhY2UuZ2V0
KCkpLCBtX3BpeG1hcCk7CisgICAgbV9waXhtYXAgPSAwOworICAgIG1fc3VyZmFjZSA9IG51bGxw
dHI7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNh
aXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIW1fbmVl
ZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSAmJiBtX3N1cmZhY2UpCisgICAgICAgIHJldHVybiBtX3N1
cmZhY2UuZ2V0KCk7CisKKyAgICBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSBmYWxzZTsK
KworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIG5ldyBwaXhtYXAgYmUgY3JlYXRlZCB3
aXRoIHRoZSBzYW1lIERpc3BsYXkgcG9pbnRlciBhcyB0aGUgdGFyZ2V0CisgICAgLy8gd2lkZ2V0
IG9yIGVsc2UgZHJhd2luZyBzcGVlZCBjYW4gYmUgMTAweCBzbG93ZXIuCisgICAgRGlzcGxheSog
bmV3UGl4bWFwRGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGd0a193aWRnZXRfZ2V0X2Rp
c3BsYXkod2lkZ2V0KSk7CisgICAgUGl4bWFwIG5ld1BpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2lu
ZG93UGl4bWFwKG5ld1BpeG1hcERpc3BsYXksIG1fd2luZG93KTsKKyAgICBpZiAoIW5ld1BpeG1h
cCkgeworICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBYV2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVz
OworICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMobmV3UGl4bWFwRGlzcGxheSwgbV93aW5k
b3csICZ3aW5kb3dBdHRyaWJ1dGVzKSkgeworICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFw
U3VyZmFjZSgpOworICAgICAgICBYRnJlZVBpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXht
YXApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShuZXdQ
aXhtYXBEaXNwbGF5LCBuZXdQaXhtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93QXR0cmli
dXRlcy52aXN1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSkpOworCisgICAgLy8gTnZpZGlhIGRyaXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWly
IHJlZGlyZWN0ZWQgd2luZG93IHBpeG1hcCBhc3luY2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZy
YWN0aW9ucworICAgIC8vIG9mIGEgc2Vjb25kIGFmdGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2lu
ZyBjb250aW51b3VzIHJlc2l6aW5nICh3aGljaCBjb25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVh
dGVzCisgICAgLy8gcGl4bWFwIHdpbmRvdy1iYWNraW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlz
IHVuaW5pdGlhbGl6ZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQK
KyAgICAvLyBwaXhtYXAgdG8gdGhlIG5ldyBvbmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4K
KyAgICBpZiAobV9zdXJmYWNlKSB7CisgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0
UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiKGNyLmdldCgpLCAxLCAxLCAxKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0
KCkpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFj
ZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICB9CisK
KyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgIG1fcGl4bWFwID0gbmV3
UGl4bWFwOworICAgIG1fc3VyZmFjZSA9IG5ld1N1cmZhY2U7CisgICAgcmV0dXJuIG1fc3VyZmFj
ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zOWVjN2VkYjI2YjhkZWE0MjZmYmY0ZTY0YTk1ZTI1OWRhNGQ3YTM4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
SWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiAgUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAorI2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3dfaAorCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXht
YXA7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gY3JlYXRlKGNvbnN0IElu
dFNpemUmKTsKKyAgICB2aXJ0dWFsIH5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpOworCisg
ICAgY29uc3QgSW50U2l6ZSYgdXNhYmxlU2l6ZSgpIHsgcmV0dXJuIG1fdXNhYmxlU2l6ZTsgfQor
ICAgIGNvbnN0IEludFNpemUmIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHZvaWQg
cmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpOworICAgIEdMQ29udGV4dCogY29udGV4dCgp
OworICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlRm9yV2lkZ2V0KEd0a1dpZGdldCop
OworCitwcml2YXRlOgorICAgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNp
emUmKTsKKworICAgIHN0YXRpYyBnYm9vbGVhbiByZXNpemVMYXRlckNhbGxiYWNrKFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93Kik7CisgICAgdm9pZCByZXNpemVMYXRlcigpOworICAgIHZvaWQg
Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKworICAgIEludFNpemUgbV9zaXplOwor
ICAgIEludFNpemUgbV91c2FibGVTaXplOworICAgIFdpbmRvdyBtX3dpbmRvdzsKKyAgICBXaW5k
b3cgbV9wYXJlbnRXaW5kb3c7CisgICAgUGl4bWFwIG1fcGl4bWFwOworICAgIE93blB0cjxHTENv
bnRleHQ+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7
CisgICAgdW5zaWduZWQgaW50IG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkOworICAgIGJvb2wgbV9u
ZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0LmgKaW5kZXggMjRhNjE0ZGI0NWY0ZjJmNWNjMzI5ZDQ4OGY0YTE4N2FmOTQx
ZDgxMS4uODJhNGM3MmYxZWVjZjU5NTI4ZDk0YmNkNWU2ZWJjZjllMzExZTc3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCkBAIC0yOCwxMCArMjgsMTIgQEAKICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJMYXllci5oIgorI2VuZGlmCisKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
CiAjaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jZW5kaWYKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgogI2VuZGlm
CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC00NywxMSArNDksOSBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB+QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQoKTsKLSAgICB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKTsKLSAgICB2b2lkIHNjaGVkdWxlUm9vdExheWVyUmVwYWludChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBtYXJrRm9yU3luYygpOwotICAgIHZvaWQgc3luY0xheWVy
c1RpbWVvdXQoKTsKLSAgICB2b2lkIHN5bmNMYXllcnNOb3coKTsKKyAgICB2b2lkIHNldFJvb3RD
b21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
KyAgICB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogICAgIHZvaWQgcmVzaXplUm9vdExheWVy
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKICAgICBib29sIHJlbmRlckxheWVyc1RvV2luZG93
KGNhaXJvX3QqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CiAgICAgYm9vbCBl
bmFibGVkKCk7CkBAIC02MywyMiArNjMsMzUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBz
aG93RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKSBjb25zdDsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgY29tcG9z
aXRlTGF5ZXJzVG9Db250ZXh0KCk7CisgICAgdm9pZCBmbHVzaEFuZFJlbmRlckxheWVycygpOwor
ICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBzY3JvbGxOb25D
b21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKKwogcHJpdmF0ZToKICAgICBXZWJL
aXRXZWJWaWV3KiBtX3dlYlZpZXc7Ci0gICAgdW5zaWduZWQgaW50IG1fc3luY1RpbWVyQ2FsbGJh
Y2tJZDsKKyAgICB1bnNpZ25lZCBpbnQgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkOwogCiAj
aWYgVVNFKENMVVRURVIpCiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9yb290R3JhcGhp
Y3NMYXllcjsKICAgICBHdGtXaWRnZXQqIG1fcm9vdExheWVyRW1iZWRkZXI7CisjZWxpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCisgICAgT3duUHRyPFdlYkNvcmU6OlJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93PiBtX3JlZGlyZWN0ZWRXaW5kb3c7CisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1
cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKyAgICBkb3VibGUgbV9sYXN0Rmx1c2hUaW1lOwor
CisgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZCgpOworICAgIHN0YXRpYyBnYm9vbGVhbiBs
YXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
Kik7CiAjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckxheWVyKiBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI+IG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
CiAgICAgV2ViQ29yZTo6R0xDb250ZXh0KiBnbENvbnRleHQoKTsKICAgICBPd25QdHI8V2ViQ29y
ZTo6R0xDb250ZXh0PiBtX2NvbnRleHQ7CiAjZW5kaWYKLSNlbmRpZgogCiAgICAgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQoV2ViS2l0V2ViVmlldyopOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0R0wuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHRHTC5jcHAKaW5kZXggNjRlYjkwMTc1OGJkNGVhZThhOTQ4N2JhMWRj
MDE5NjcyYTllNWFhNS4uMGY2YTQxYzEyZGI0YWE0Zjg3NjZkZGY4M2VjOWYxYTIyZDQwN2UyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHRHTC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyR0wuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKICNp
bmNsdWRlICJ3ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oIgpAQCAtMzUsMTMgKzM2LDcgQEAKICNpbmNs
dWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCi0jaWYgZGVmaW5lZChHREtf
V0lORE9XSU5HX1gxMSkKLSNkZWZpbmUgUmVnaW9uIFhSZWdpb24KLSNkZWZpbmUgRm9udCBYRm9u
dAotI2RlZmluZSBDdXJzb3IgWEN1cnNvcgotI2RlZmluZSBTY3JlZW4gWFNjcmVlbgotI2luY2x1
ZGUgPGdkay9nZGt4Lmg+Ci0jZW5kaWYKK2NvbnN0IGRvdWJsZSBnRnJhbWVzUGVyU2Vjb25kID0g
NjA7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OSwxNTAgKzQ0LDI0NiBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgOiBt
X3dlYlZpZXcod2ViVmlldykKLSAgICAsIG1fc3luY1RpbWVyQ2FsbGJhY2tJZCgwKQotICAgICwg
bV9yb290VGV4dHVyZU1hcHBlckxheWVyKDApCisgICAgLCBtX2xheWVyRmx1c2hUaW1lckNhbGxi
YWNrSWQoMCkKKyAgICAsIG1fcmVkaXJlY3RlZFdpbmRvdyhSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdzo6Y3JlYXRlKEludFNpemUoMSwgMSkpKQorICAgICwgbV9sYXN0Rmx1c2hUaW1lKDApCiB7
CiB9CiAKK3N0YXRpYyBJbnRTaXplIGdldFdlYlZpZXdTaXplKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCit7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0
X2FsbG9jYXRpb24oR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHJldHVy
biBJbnRTaXplKGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKK30KKwordm9p
ZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYg
KG1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50
KGZhbHNlKTsKKworICAgIEludFNpemUgcGFnZVNpemUgPSBnZXRXZWJWaWV3U2l6ZShtX3dlYlZp
ZXcpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKHBhZ2VTaXplKTsKKworICAgIC8vIFRoZSBu
b24tY29tcG9zaXRlZCBjb250ZW50cyBhcmUgYSBjaGlsZCBvZiB0aGUgcm9vdCBsYXllci4KKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhp
cyk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZSgh
bV93ZWJWaWV3LT5wcml2LT50cmFuc3BhcmVudCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXRTaXplKHBhZ2VTaXplKTsKKyAgICBpZiAoY29yZShtX3dlYlZpZXcpLT5zZXR0
aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpCisgICAgICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHRydWUpOworCisjaWZuZGVm
IE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJSb290IGxheWVyIik7CisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJOb24tY29tcG9zaXRlZCBjb250ZW50
Iik7CisjZW5kaWYKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXIuZ2V0KCkpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmVlZHNEaXNwbGF5KCk7CisKKyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIFRleHR1cmVNYXBw
ZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgIEdMQ29udGV4dCogY29udGV4
dCA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3Jl
YXRlKCk7CisKKyAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNl
dFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6fkFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0KCkKIHsKLSAgICBpZiAobV9zeW5jVGltZXJDYWxsYmFja0lk
KQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9zeW5jVGltZXJDYWxsYmFja0lkKTsKKyAgICBp
ZiAobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUo
bV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKTsKIH0KIAogYm9vbCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6ZW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIG1fcm9vdFRleHR1cmVNYXBw
ZXJMYXllciAmJiBtX3RleHR1cmVNYXBwZXI7CisgICAgcmV0dXJuIG1fcm9vdExheWVyICYmIG1f
dGV4dHVyZU1hcHBlcjsKIH0KIAotR0xDb250ZXh0KiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6Z2xDb250ZXh0KCkKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJl
bmRlckxheWVyc1RvV2luZG93KGNhaXJvX3QqIGNyLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkK
IHsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwor
ICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSNpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfWDExKQotICAgIC8vIEZJWE1FOiBHcmFjZWZ1bGx5IGFjY291bnQgZm9y
IHNpdHVhdGlvbnMgd2hlcmUgd2UgZG8gbm90IGhhdmUgYSByZWFsaXplZCB3aW5kb3cuCi0gICAg
R2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCht
X3dlYlZpZXcpKTsKLSAgICBpZiAoZ2RrV2luZG93ICYmIGdka193aW5kb3dfaGFzX25hdGl2ZShn
ZGtXaW5kb3cpKQotICAgICAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRG
b3JXaW5kb3coR0RLX1dJTkRPV19YSUQoZ2RrV2luZG93KSwgR0xDb250ZXh0OjpzaGFyaW5nQ29u
dGV4dCgpKTsKLSNlbmRpZgorICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIHBhaW50IGEgd2hpdGUg
YmFja2dyb3VuZCAoaWYgdGhlIFdlYlZpZXcgaXNuJ3QgdHJhbnNwYXJlbnQpLCBiZWNhdXNlIHdo
ZW4gZ3Jvd2luZworICAgIC8vIHRoZSByZWRpcmVjdGVkIHdpbmRvdywgdGhlIHVzYWJsZSBzaXpl
IG9mIHRoZSB3aW5kb3cgbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgYWxsb2NhdGlvbiBvZiBvdXIg
d2lkZ2V0LgorICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2hvdyBhcnRpZmFjdHMgaW4gdGhhdCBj
YXNlLgorICAgIEludFNpemUgdXNhYmxlV2luZG93U2l6ZSA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+
dXNhYmxlU2l6ZSgpOworICAgIGlmICh1c2FibGVXaW5kb3dTaXplICE9IG1fcmVkaXJlY3RlZFdp
bmRvdy0+c2l6ZSgpKSB7CisgICAgICAgIGlmICghbV93ZWJWaWV3LT5wcml2LT50cmFuc3BhcmVu
dCkgeworICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDEsIDEsIDEpOworICAg
ICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9f
T1BFUkFUT1JfQ0xFQVIpOworICAgICAgICBjYWlyb19wYWludChjcik7CisgICAgfQorCisKKyAg
ICBjYWlyb19zdXJmYWNlX3QqIHdpbmRvd1N1cmZhY2UgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPmNh
aXJvU3VyZmFjZUZvcldpZGdldChHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgIGlmICghd2lu
ZG93U3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYWlyb19yZWN0YW5nbGUo
Y3IsIDAsIDAsIHVzYWJsZVdpbmRvd1NpemUud2lkdGgoKSwgdXNhYmxlV2luZG93U2l6ZS5oZWln
aHQoKSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCB3aW5kb3dTdXJmYWNlLCAw
LCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7
CisgICAgY2Fpcm9fZmlsbChjcik7CiAKLSAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworICAg
IGlmICghbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkICYmIHRvVGV4dHVyZU1hcHBlckxheWVy
KG1fcm9vdExheWVyLmdldCgpKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlv
bnMoKSkgeworICAgICAgICBkb3VibGUgbmV4dEZsdXNoID0gbWF4KCgxIC8gZ0ZyYW1lc1BlclNl
Y29uZCkgLSAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEZsdXNoVGltZSksIDAuMCk7CisgICAgICAg
IG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJ
T1JJVFlfRVZFTlRTLCAxMDAwICogbmV4dEZsdXNoLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPihsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKSwgdGhpcywgMCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
OnJlbmRlckxheWVyc1RvV2luZG93KGNhaXJvX3QqLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkK
K3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNvbXBvc2l0ZUxheWVyc1RvQ29u
dGV4dCgpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgR0xDb250ZXh0KiBjb250ZXh0ID0gZ2xDb250ZXh0KCk7Cisg
ICAgR0xDb250ZXh0KiBjb250ZXh0ID0gbV9yZWRpcmVjdGVkV2luZG93LT5jb250ZXh0KCk7CiAg
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
OwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAm
YWxsb2NhdGlvbik7Ci0gICAgZ2xWaWV3cG9ydCgwLCAwLCBhbGxvY2F0aW9uLndpZHRoLCBhbGxv
Y2F0aW9uLmhlaWdodCk7CisgICAgY29uc3QgSW50U2l6ZSYgd2luZG93U2l6ZSA9IG1fcmVkaXJl
Y3RlZFdpbmRvdy0+c2l6ZSgpOworICAgIGdsVmlld3BvcnQoMCwgMCwgd2luZG93U2l6ZS53aWR0
aCgpLCB3aW5kb3dTaXplLmhlaWdodCgpKTsKIAogICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5Q
YWludGluZygpOwotICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllci0+cGFpbnQoKTsKKyAgICB0
b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnBhaW50KCk7CiAgICAgbV90
ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwogCiAgICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
cikKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CiAgICAgaWYgKCFncmFwaGlj
c0xheWVyKSB7Ci0gICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIuY2xlYXIoKTsKLSAgICAgICAg
bV9yb290VGV4dHVyZU1hcHBlckxheWVyID0gMDsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7
CisgICAgICAgIGlmIChtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpIHsKKyAgICAgICAgICAg
IGdfc291cmNlX3JlbW92ZShtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpOworICAgICAgICAg
ICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gMDsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFNocmluayB0aGUgb2Zmc2NyZWVuIHdpbmRvdyB0byBzYXZlIG1lbW9yeSB3aGlsZSBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyBpcyB0dXJuZWQgb2ZmLgorICAgICAgICBtX3JlZGlyZWN0ZWRX
aW5kb3ctPnJlc2l6ZShJbnRTaXplKDEsIDEpKTsKKyAgICAgICAgbV9yb290TGF5ZXIgPSBudWxs
cHRyOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBudWxscHRyOworICAg
ICAgICBtX3RleHR1cmVNYXBwZXIgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgbV9yb290R3JhcGhpY3NMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsK
LSAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jv
b3RHcmFwaGljc0xheWVyLmdldCgpKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5hZGRDaGls
ZChncmFwaGljc0xheWVyKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxz
ZSk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgbV9y
b290R3JhcGhpY3NMYXllci0+c2V0U2l6ZShjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52
aWV3KCktPmZyYW1lUmVjdCgpLnNpemUoKSk7Ci0KLSAgICBHTENvbnRleHQqIGNvbnRleHQgPSBn
bENvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFRoZSBjb250ZXh0IG5lZWRzIHRvIGJlIGFjdGl2ZSB3aGVuIGNyZWF0aW5nIHRoZSB0ZXh0dXJl
IG1hcHBlci4gSXQncyBmaW5lIHRvCi0gICAgLy8gYXZvaWQgY2FsbGluZyBzd2FwQnVmZmVycyBo
ZXJlLCBiZWNhdXNlIGl0IHdpbGwganVzdCBpbml0aWFsaXplIHNoYWRlcnMuCi0gICAgaWYgKCFj
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChn
cmFwaGljc0xheWVyICYmICFlbmFibGVkKCkpCisgICAgICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+
cmVzaXplKGdldFdlYlZpZXdTaXplKG1fd2ViVmlldykpOwogCi0gICAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dl
YlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgZ2xWaWV3cG9ydCgwLCAwLCBhbGxvY2F0aW9uLndp
ZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7Ci0KLSAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJl
TWFwcGVyR0w6OmNyZWF0ZSgpOwotICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllci0+c2V0VGV4
dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5
ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIC8vIEFkZCB0
aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHkuCisgICAgaW5pdGlhbGl6ZSgpOwor
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOwor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0OjpzY2hlZHVsZVJvb3RMYXllclJlcGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNldE5vbkNvbXBvc2l0ZWRDb250
ZW50c05lZWREaXNwbGF5KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFtX3Jvb3RH
cmFwaGljc0xheWVyKQorICAgIGlmICghbV9yb290TGF5ZXIpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAocmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0
TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIG1fcm9vdExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQ6OnJlc2l6ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVzaXplUm9vdExheWVyKGNvbnN0IEludFNp
emUmIG5ld1NpemUpCiB7Ci0gICAgaWYgKCFtX3Jvb3RHcmFwaGljc0xheWVyKQorICAgIGlmICgh
ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0
U2l6ZShzaXplKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGlmIChtX3Jvb3RMYXllci0+c2l6ZSgpID09IG5l
d1NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+cmVzaXpl
KG5ld1NpemUpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8g
SWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNv
bnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5
IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0
aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0
PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRT
aXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0
KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgp
KQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdT
aXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOworCisgICAgZmx1c2hBbmRSZW5kZXJM
YXllcnMoKTsKIH0KIAotc3RhdGljIGdib29sZWFuIHN5bmNMYXllcnNUaW1lb3V0Q2FsbGJhY2so
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgSW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQogewotICAgIGNv
bnRleHQtPnN5bmNMYXllcnNUaW1lb3V0KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qoc2Nyb2xsUmVjdCk7CisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Cit9CisKK2dib29sZWFuIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojps
YXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
KiBjb250ZXh0KQoreworICAgIGNvbnRleHQtPmxheWVyRmx1c2hUaW1lckZpcmVkKCk7CiAgICAg
cmV0dXJuIEZBTFNFOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpt
YXJrRm9yU3luYygpCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzY2hlZHVs
ZUxheWVyRmx1c2goKQogewotICAgIGlmIChtX3N5bmNUaW1lckNhbGxiYWNrSWQpCisgICAgaWYg
KCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFdlIHVzZSBhIEdMaWIgdGlt
ZXIgYmVjYXVzZSBvdGhlcndpc2UgR1RLKyBldmVudCBoYW5kbGluZyBkdXJpbmcKLSAgICAvLyBk
cmFnZ2luZyBjYW4gc3RhcnZlIFdlYkNvcmUgdGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIgcHJp
b3JpdHkuCi0gICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdE
S19QUklPUklUWV9FVkVOVFMsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5bmNM
YXllcnNUaW1lb3V0Q2FsbGJhY2spLCB0aGlzLCAwKTsKKyAgICBpZiAobV9sYXllckZsdXNoVGlt
ZXJDYWxsYmFja0lkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSB1c2UgYSBHTGliIHRp
bWVyIGJlY2F1c2Ugb3RoZXJ3aXNlIEdUSysgZXZlbnQgaGFuZGxpbmcgZHVyaW5nIGRyYWdnaW5n
IGNhbiBzdGFydmUgV2ViQ29yZSB0aW1lcnMsIHdoaWNoIGhhdmUgYSBsb3dlciBwcmlvcml0eS4K
KyAgICBkb3VibGUgbmV4dEZsdXNoID0gbWF4KCgxIC8gZ0ZyYW1lc1BlclNlY29uZCkgLSAoY3Vy
cmVudFRpbWUoKSAtIG1fbGFzdEZsdXNoVGltZSksIDAuMCk7CisgICAgbV9sYXllckZsdXNoVGlt
ZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMsIG5l
eHRGbHVzaCAqIDEwMDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGxheWVyRmx1c2hU
aW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6c3luY0xheWVyc05vdygpCitib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQogewotICAgIGlmIChtX3Jvb3RH
cmFwaGljc0xheWVyKQotICAgICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGNvcmUobV93ZWJWaWV3KS0+bWFpbkZy
YW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsK
KyAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKKyAgICByZXR1cm4gY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUo
KS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwogfQog
Ci12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5ZXJzVGltZW91dCgp
Cit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpmbHVzaEFuZFJlbmRlckxheWVy
cygpCiB7Ci0gICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gMDsKLSAgICBzeW5jTGF5ZXJzTm93
KCk7Ci0gICAgaWYgKCFtX3Jvb3RHcmFwaGljc0xheWVyKQorICAgIHsKKyAgICAgICAgRnJhbWUq
IGZyYW1lID0gY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKTsKKyAgICAgICAgaWYgKCFmcmFt
ZSB8fCAhZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpIHx8ICFmcmFtZS0+dmlldygpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBmcmFtZS0+dmlldygpLT51cGRhdGVMYXlvdXRBbmRTdHls
ZUlmTmVlZGVkUmVjdXJzaXZlKCk7CisgICAgfQorCisgICAgR0xDb250ZXh0KiBjb250ZXh0ID0g
bV9yZWRpcmVjdGVkV2luZG93LT5jb250ZXh0KCk7CisgICAgaWYgKGNvbnRleHQgJiYgIWNvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodG9U
ZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSktPmRlc2NlbmRhbnRz
T3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCi0gICAgICAgIG1fc3luY1RpbWVyQ2FsbGJh
Y2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAxMDAwLjAgLyA2
MC4wLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzeW5jTGF5ZXJzVGltZW91dENhbGxi
YWNrKSwgdGhpcywgMCk7CisgICAgaWYgKCFmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9sYXN0Rmx1c2hUaW1lID0gY3VycmVudFRpbWUoKTsKKyAg
ICBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKTsKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXco
R1RLX1dJREdFVChtX3dlYlZpZXcpKTsKK30KIAotICAgIHJlbmRlckxheWVyc1RvV2luZG93KDAs
IEludFJlY3QoKSk7Cit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpsYXllckZs
dXNoVGltZXJGaXJlZCgpCit7CisgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gMDsK
KyAgICBmbHVzaEFuZFJlbmRlckxheWVycygpOwogfQogCiB2b2lkIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
LCBkb3VibGUgdGltZSkKQEAgLTIwNiw5ICsyOTcsMTAgQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQog
CiB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpwYWludENvbnRlbnRzKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiByZWN0VG9QYWludCkKIHsKLSAgICBjYWlyb190
KiBjciA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0gICAgY29weVJlY3RGcm9t
Q2Fpcm9TdXJmYWNlVG9Db250ZXh0KG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLT5jYWly
b1N1cmZhY2UoKSwgY3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
dFNpemUoKSwgcmVjdFRvUGFpbnQpOworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQu
Y2xpcChyZWN0VG9QYWludCk7CisgICAgY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKS0+dmll
dygpLT5wYWludCgmY29udGV4dCwgcmVjdFRvUGFpbnQpOworICAgIGNvbnRleHQucmVzdG9yZSgp
OwogfQogCiBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzaG93RGVidWdCb3Jk
ZXJzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5kZXggM2IzMDlmOGI4ZjNl
NWM1YTc2YTUyNmI3MzEwMmM3YzE5ZDFhMmNjYy4uYWM0MGQ5MDMyMDNjZjFlZjc1ZDFjMTkwZTli
NzJjOWEzMWMzOWQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0xNDIsMTcgKzE0MiwxOCBAQCB2b2lkIENocm9t
ZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgfQogfQog
Ci1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCgpCitzdGF0aWMgSW50UmVjdCBnZXRX
ZWJWaWV3UmVjdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIEd0a0FsbG9jYXRpb24g
YWxsb2NhdGlvbjsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkKLSAgICBndGtfd2lk
Z2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwot
I2Vsc2UKLSAgICBhbGxvY2F0aW9uID0gR1RLX1dJREdFVChtX3dlYlZpZXcpLT5hbGxvY2F0aW9u
OwotI2VuZGlmCisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihHVEtfV0lER0VUKHdlYlZp
ZXcpLCAmYWxsb2NhdGlvbik7CiAgICAgcmV0dXJuIEludFJlY3QoYWxsb2NhdGlvbi54LCBhbGxv
Y2F0aW9uLnksIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKIH0KIAorRmxv
YXRSZWN0IENocm9tZUNsaWVudDo6cGFnZVJlY3QoKQoreworICAgIHJldHVybiBnZXRXZWJWaWV3
UmVjdChtX3dlYlZpZXcpOworfQorCiB2b2lkIENocm9tZUNsaWVudDo6Zm9jdXMoKQogewogICAg
IGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKG1fd2ViVmlldykpOwpAQCAtNDI2LDEw
ICs0MjcsMjAgQEAgc3RhdGljIHZvaWQgY2xlYXJFdmVyeXdoZXJlSW5CYWNraW5nU3RvcmUoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgY2Fpcm9fdCogY3IpCiAKIHZvaWQgQ2hyb21lQ2xpZW50Ojp3
aWRnZXRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJiBvbGRXaWRnZXRTaXplLCBJbnRTaXplIG5l
d1NpemUpCiB7Ci0gICAgV2lkZ2V0QmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBtX3dlYlZp
ZXctPnByaXYtPmJhY2tpbmdTdG9yZS5nZXQoKTsKKyAgICBpZiAob2xkV2lkZ2V0U2l6ZSA9PSBu
ZXdTaXplKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGNvbXBvc2l0aW5nQ29udGV4
dCA9IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7
CisgICAgaWYgKGNvbXBvc2l0aW5nQ29udGV4dC0+ZW5hYmxlZCgpKSB7CisgICAgICAgIG1fd2Vi
Vmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJlc2l6ZVJvb3RMYXll
cihuZXdTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgogCiAgICAgLy8gR3Jv
dyB0aGUgYmFja2luZyBzdG9yZSBieSBhdCBsZWFzdCAxLjUgdGltZXMgdGhlIGN1cnJlbnQgc2l6
ZS4gVGhpcyBwcmV2ZW50cwogICAgIC8vIGxvdHMgb2YgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbnMg
ZHVyaW5nIGFuIG9wYXF1ZSByZXNpemUuCisgICAgV2lkZ2V0QmFja2luZ1N0b3JlKiBiYWNraW5n
U3RvcmUgPSBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS5nZXQoKTsKICAgICBpZiAoYmFj
a2luZ1N0b3JlKSB7CiAgICAgICAgIGNvbnN0IEludFNpemUmIG9sZFNpemUgPSBiYWNraW5nU3Rv
cmUtPnNpemUoKTsKICAgICAgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgo
KSkKQEAgLTUzMywyMCArNTQ0LDYgQEAgc3RhdGljIHZvaWQgcGFpbnRXZWJWaWV3KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIEZyYW1lKiBmcmFtZSwgUmVnaW9uIGRpcnR5UmVnaW8KICAgICBnYy5y
ZXN0b3JlKCk7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlV2lkZ2V0UmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogYWNDb250ZXh0ID0gbV93ZWJWaWV3
LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5nZXQoKTsKLSAgICBpZiAoYWND
b250ZXh0LT5lbmFibGVkKCkpIHsKLSAgICAgICAgYWNDb250ZXh0LT5zY2hlZHVsZVJvb3RMYXll
clJlcGFpbnQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBndGtf
d2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKG1fd2ViVmlldyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0KIHZvaWQg
Q2hyb21lQ2xpZW50OjpwZXJmb3JtQWxsUGVuZGluZ1Njcm9sbHMoKQogewogICAgIGlmICghbV93
ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUpCkBAIC01NTYsNyArNTUzLDcgQEAgdm9pZCBDaHJv
bWVDbGllbnQ6OnBlcmZvcm1BbGxQZW5kaW5nU2Nyb2xscygpCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3JlY3RzVG9TY3JvbGwuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgSW50UmVjdCYg
c2Nyb2xsUmVjdCA9IG1fcmVjdHNUb1Njcm9sbFtpXTsKICAgICAgICAgbV93ZWJWaWV3LT5wcml2
LT5iYWNraW5nU3RvcmUtPnNjcm9sbChzY3JvbGxSZWN0LCBtX3Njcm9sbE9mZnNldHNbaV0pOwot
ICAgICAgICBpbnZhbGlkYXRlV2lkZ2V0UmVjdChzY3JvbGxSZWN0KTsKKyAgICAgICAgZ3RrX3dp
ZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLCBzY3JvbGxSZWN0Lngo
KSwgc2Nyb2xsUmVjdC55KCksIHNjcm9sbFJlY3Qud2lkdGgoKSwgc2Nyb2xsUmVjdC5oZWlnaHQo
KSk7CiAgICAgfQogCiAgICAgbV9yZWN0c1RvU2Nyb2xsLmNsZWFyKCk7CkBAIC01OTIsMTIgKzU4
OSw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpwYWludChXZWJDb3JlOjpUaW1lcjxDaHJvbWVDbGll
bnQ+KikKICAgICB9CiAKICAgICBjb25zdCBJbnRSZWN0JiByZWN0ID0gbV9kaXJ0eVJlZ2lvbi5i
b3VuZHMoKTsKLSAgICBpbnZhbGlkYXRlV2lkZ2V0UmVjdChyZWN0KTsKLQotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0LT5zeW5jTGF5ZXJzTm93KCk7Ci0gICAgbV93ZWJWaWV3LT5wcml2LT5h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVuZGVyTGF5ZXJzVG9XaW5kb3coMCwgcmVj
dCk7Ci0jZW5kaWYKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKG1f
d2ViVmlldyksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KTsKIAogICAgIG1fZGlydHlSZWdpb24gPSBSZWdpb24oKTsKICAgICBtX2xhc3REaXNwbGF5VGlt
ZSA9IGN1cnJlbnRUaW1lKCk7CkBAIC02MTMsNiArNjA1LDExIEBAIHZvaWQgQ2hyb21lQ2xpZW50
OjpwYWludChXZWJDb3JlOjpUaW1lcjxDaHJvbWVDbGllbnQ+KikKIAogdm9pZCBDaHJvbWVDbGll
bnQ6OmZvcmNlUGFpbnQoKQogeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAg
ICBpZiAobV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+ZW5h
YmxlZCgpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIG1fZm9yY2VQYWludCA9IHRy
dWU7CiAgICAgcGFpbnQoMCk7CiAgICAgbV9mb3JjZVBhaW50ID0gZmFsc2U7CkBAIC02MjQsNiAr
NjIxLDE0IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlUm9vdFZpZXcoY29uc3QgSW50
UmVjdCYsIGJvb2wgaW1tZWRpYXRlKQogCiB2b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNv
bnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlh
dGUpCiB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0KiBhY0NvbnRleHQgPSBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOworICAgIGlmIChhY0NvbnRleHQtPmVuYWJsZWQo
KSkgeworICAgICAgICBhY0NvbnRleHQtPnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNw
bGF5KHVwZGF0ZVJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICBp
ZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2RpcnR5UmVn
aW9uLnVuaXRlKHVwZGF0ZVJlY3QpOwpAQCAtNjMyLDEyICs2MzcsMzQgQEAgdm9pZCBDaHJvbWVD
bGllbnQ6OmludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KGNvbnN0IEludFJlY3QmIHVwZGF0
ZVJlY3QsIGJvb2wKIAogdm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVDb250ZW50c0ZvclNs
b3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpCiB7Ci0g
ICAgaW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcodXBkYXRlUmVjdCwgaW1tZWRpYXRlKTsK
ICAgICBtX2FkanVzdG1lbnRXYXRjaGVyLnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnNM
YXRlcigpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0KiBhY0NvbnRleHQgPSBtX3dlYlZpZXctPnByaXYtPmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOworICAgIGlmIChhY0NvbnRleHQtPmVuYWJs
ZWQoKSkgeworICAgICAgICBhY0NvbnRleHQtPnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWRE
aXNwbGF5KHVwZGF0ZVJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAg
ICBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyh1cGRhdGVSZWN0LCBpbW1lZGlhdGUpOwog
fQogCiB2b2lkIENocm9tZUNsaWVudDo6c2Nyb2xsKGNvbnN0IEludFNpemUmIGRlbHRhLCBjb25z
dCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogeworICAg
IG1fYWRqdXN0bWVudFdhdGNoZXIudXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFyc0xhdGVy
KCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQqIGNvbXBvc2l0aW5nQ29udGV4dCA9IG1fd2ViVmlldy0+cHJpdi0+
YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7CisgICAgaWYgKGNvbXBvc2l0aW5n
Q29udGV4dC0+ZW5hYmxlZCgpKSB7CisgICAgICAgIEFTU0VSVChyZWN0VG9TY3JvbGwuaXNFbXB0
eSgpKTsKKyAgICAgICAgQVNTRVJUKGRlbHRhLmlzRW1wdHkoKSk7CisKKyAgICAgICAgY29tcG9z
aXRpbmdDb250ZXh0LT5zY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMocmVjdFRvU2Nyb2xsLCBk
ZWx0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIG1fcmVjdHNUb1Nj
cm9sbC5hcHBlbmQocmVjdFRvU2Nyb2xsKTsKICAgICBtX3Njcm9sbE9mZnNldHMuYXBwZW5kKGRl
bHRhKTsKIApAQCAtNjY0LDggKzY5MSw2IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpzY3JvbGwoY29u
c3QgSW50U2l6ZSYgZGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uCiAKICAg
ICBtX2RpcnR5UmVnaW9uLnVuaXRlKHNjcm9sbFJlcGFpbnRSZWdpb24pOwogICAgIG1fZGlzcGxh
eVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLQotICAgIG1fYWRqdXN0bWVudFdhdGNoZXIudXBkYXRl
QWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFyc0xhdGVyKCk7CiB9CiAKIEludFJlY3QgQ2hyb21lQ2xp
ZW50Ojpyb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CkBAIC05Njgs
MTcgKzk5MywzMiBAQCB2b2lkIENocm9tZUNsaWVudDo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogdm9pZCBDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiBm
cmFtZSwgR3JhcGhpY3NMYXllciogcm9vdExheWVyKQogewotICAgIG1fd2ViVmlldy0+cHJpdi0+
YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKHJv
b3RMYXllcik7CisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGNvbnRleHQgPSBt
X3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOworICAg
IGJvb2wgdHVybmluZ09mZkNvbXBvc2l0aW5nID0gIXJvb3RMYXllciAmJiBjb250ZXh0LT5lbmFi
bGVkKCk7CisgICAgYm9vbCB0dXJuaW5nT25Db21wb3NpdGluZyA9IHJvb3RMYXllciAmJiAhY29u
dGV4dC0+ZW5hYmxlZCgpOworCisgICAgY29udGV4dC0+c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
cm9vdExheWVyKTsKKworICAgIGlmICh0dXJuaW5nT25Db21wb3NpdGluZykgeworICAgICAgICBt
X2Rpc3BsYXlUaW1lci5zdG9wKCk7CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0
b3JlID0gV2ViQ29yZTo6V2lkZ2V0QmFja2luZ1N0b3JlOjpjcmVhdGUoR1RLX1dJREdFVChtX3dl
YlZpZXcpLCBJbnRTaXplKDEsIDEpKTsKKyAgICB9CisKKyAgICBpZiAodHVybmluZ09mZkNvbXBv
c2l0aW5nKSB7CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlID0gV2ViQ29y
ZTo6V2lkZ2V0QmFja2luZ1N0b3JlOjpjcmVhdGUoR1RLX1dJREdFVChtX3dlYlZpZXcpLCBnZXRX
ZWJWaWV3UmVjdChtX3dlYlZpZXcpLnNpemUoKSk7CisgICAgICAgIFJlZlB0cjxjYWlyb190PiBj
ciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS0+
Y2Fpcm9TdXJmYWNlKCkpKTsKKyAgICAgICAgY2xlYXJFdmVyeXdoZXJlSW5CYWNraW5nU3RvcmUo
bV93ZWJWaWV3LCBjci5nZXQoKSk7CisgICAgfQogfQogCiB2b2lkIENocm9tZUNsaWVudDo6c2V0
TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpCiB7Ci0gICAgbV93ZWJWaWV3LT5w
cml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+bWFya0ZvclN5bmMoKTsKKyAgICBt
X3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5zY2hlZHVsZUxh
eWVyRmx1c2goKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllclN5bmMoKQogewotICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQtPm1hcmtGb3JTeW5jKCk7CisgICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dC0+c2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKIENocm9tZUNs
aWVudDo6Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgQ2hyb21lQ2xpZW50OjphbGxvd2VkQ29tcG9z
aXRpbmdUcmlnZ2VycygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCmluZGV4IGFhMDQ0YjdiYzYxZGIwNTMwOTY0ZWNmNzdl
ZjYzZWVjYjNkOGQ4YTcuLjI3ZmI5OTA0MDgzMzliMGM2NWJjMjVjOGYwMzhlN2UyMWE1MjIwODQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5oCkBAIC0xODMsNyArMTgzLDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIGRv
dWJsZSBtX2xhc3REaXNwbGF5VGltZTsKICAgICAgICAgdW5zaWduZWQgaW50IG1fcmVwYWludFNv
b25Tb3VyY2VJZDsKIAotICAgICAgICB2b2lkIGludmFsaWRhdGVXaWRnZXRSZWN0KGNvbnN0IElu
dFJlY3QmKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgICAgIFJlZlB0cjxFbGVt
ZW50PiBtX2Z1bGxTY3JlZW5FbGVtZW50OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggYWFjNDg3ZjIzYmNhZjQzODM1MjgxOTUyZDQzYjRl
YmI3NTkyYTEyMC4uZTQ3NzVhNDc3Y2JkOTU1ZDY2YzhkNzY5NTE0ZjZlMjUzZTNjZTNhMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtNjc5LDggKzY3
OSwxMCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2RyYXcoR3RrV2lkZ2V0KiB3
aWRnZXQsIGNhaXJvX3QqIGNyKQogCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBX
RUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+cHJpdjsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0g
ICAgaWYgKHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZW5kZXJMYXllcnNU
b1dpbmRvdyhjciwgY2xpcFJlY3QpKQorICAgIGlmIChwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dC0+cmVuZGVyTGF5ZXJzVG9XaW5kb3coY3IsIGNsaXBSZWN0KSkgeworICAgICAg
ICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJlbnRfY2xhc3MpLT5kcmF3KHdp
ZGdldCwgY3IpOwogICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQogI2VuZGlmCiAKICAgICBj
YWlyb19yZWN0YW5nbGVfbGlzdF90KiByZWN0TGlzdCA9IGNhaXJvX2NvcHlfY2xpcF9yZWN0YW5n
bGVfbGlzdChjcik7CkBAIC04NzUsMTUgKzg3NywxNiBAQCBzdGF0aWMgdm9pZCByZXNpemVXZWJW
aWV3RnJvbUFsbG9jYXRpb24oV2ViS2l0V2ViVmlldyogd2ViVmlldywgR3RrQWxsb2NhdGlvbiog
YQogICAgIFdlYktpdDo6Q2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQgPSBzdGF0aWNfY2FzdDxX
ZWJLaXQ6OkNocm9tZUNsaWVudCo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKSk7CiAgICAgY2hy
b21lQ2xpZW50LT53aWRnZXRTaXplQ2hhbmdlZChvbGRTaXplLCBJbnRTaXplKGFsbG9jYXRpb24t
PndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpKTsKICAgICBjaHJvbWVDbGllbnQtPmFkanVzdG1l
bnRXYXRjaGVyKCktPnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnMoKTsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB3ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dC0+cmVzaXplUm9vdExheWVyKEludFNpemUoYWxsb2NhdGlvbi0+
d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCkpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfdmlld19zaXplX2FsbG9jYXRlKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtBbGxvY2F0
aW9uKiBhbGxvY2F0aW9uKQogeworICAgIEd0a0FsbG9jYXRpb24gb2xkQWxsb2NhdGlvbjsKKyAg
ICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJm9sZEFsbG9jYXRpb24pOworCiAg
ICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+c2l6ZV9h
bGxvY2F0ZSh3aWRnZXQsIGFsbG9jYXRpb24pOworICAgIGlmIChhbGxvY2F0aW9uLT53aWR0aCA9
PSBvbGRBbGxvY2F0aW9uLndpZHRoICYmIGFsbG9jYXRpb24tPmhlaWdodCA9PSBvbGRBbGxvY2F0
aW9uLmhlaWdodCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOwogICAgIGlmICghZ3RrX3dpZGdldF9nZXRfbWFw
cGVkKHdpZGdldCkpIHsKQEAgLTEwMDMsMTAgKzEwMDYsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3ZpZXdfcmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKICNlbmRpZgogICAgIEdka1dpbmRv
dyogd2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3
aWRnZXQpLCAmYXR0cmlidXRlcywgYXR0cmlidXRlc19tYXNrKTsKIAotI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIFdlYktpdFdl
YlZpZXdQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCktPnByaXY7Ci0gICAg
cHJpdi0+aGFzTmF0aXZlV2luZG93ID0gZ2RrX3dpbmRvd19lbnN1cmVfbmF0aXZlKHdpbmRvdyk7
Ci0jZW5kaWYKICAgICBndGtfd2lkZ2V0X3NldF93aW5kb3cod2lkZ2V0LCB3aW5kb3cpOwogICAg
IGdka193aW5kb3dfc2V0X3VzZXJfZGF0YSh3aW5kb3csIHdpZGdldCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152344</attachid>
            <date>2012-07-13 14:59:37 -0700</date>
            <delta_ts>2012-08-10 10:20:59 -0700</delta_ts>
            <desc>Add xcomposite pkg-config parsing to configuration, fix some assertions, and improve performance on the 2012 beercamp demo</desc>
            <filename>bug-90085-20120713145937.patch</filename>
            <type>text/plain</type>
            <size>48533</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGYzODE1MWY0M2UxZjE3
NzU2M2IwMzU1MDQ2NGZkNDgyMGU2Yzk4Yy4uMTQyMzVhNWY0YmM2NzZkZDg0MjA5YjllYTUxN2Q3
MWQ0MzMzMzVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTEzICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2lu
ZyBhIG5hdGl2ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGhpcyB3aWxsIGJlIGNvdmVyZWQgYnkgcGl4ZWwgdGVzdCBmb3IgYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgd2hlbiB0aGV5IGFyZSBhY3RpdmF0ZWQuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOiBBZGQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZmlsZXMgdG8g
dGhlIHNvdXJjZSBsaXN0LgorICAgICAgICBNYWtlIGEgbmV3IHNlY3Rpb24gZm9yIEdMWCBzcGVj
aWZpYyBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xY
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSk6IEV4
cG9zZSBzaGFyZWREaXNwbGF5IGFzIGEgc3RhdGljIG1ldGhvZAorICAgICAgICBzbyB0aGF0IGl0
IGNhbiBiZSBjYWxsZWQgYnkgb3RoZXIgWDExIHNwZWNpZmljIGNvZGUuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBBZGRlZC4gQW4gaW1wbGVt
ZW50YXRpb24gb2YgYSBHTCBzdXJmYWNlCisgICAgICAgIHRoYXQgcmVuZGVycyB0byBhbiBYLXdp
bmRvdyB3aGljaCByZWRpcmVjdHMgdG8gYSBwaXhtYXAuCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg6IEFkZGVkLgorCiAyMDEyLTA3LTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVw
bGFjZSB1c2Ugb2YgTWFuYWdlZFRleHR1cmUgd2l0aCBDQ1Njb3BlZFRleHR1cmUgZm9yIGltcGwg
dGhyZWFkIGFuZCByZW1vdmUgaW1wbFRleHR1cmVNYW5hZ2VyIGZyb20gTGF5ZXJSZW5kZXJlckNo
cm9taXVtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNjY2ZDM3ZmVkM2EyNjJkNGM4NTBjM2M4ZTM3NDFm
NzMxMTM4Njc2OC4uMTM0ZWRiNzMyMDRhNDE0ODhmMjk2NzEzMTNjMzk0ZTg3NmJmZjI4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA3LTEzICBNYXJ0aW4gUm9iaW5z
b24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2luZyBhIG5hdGl2
ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJld3JpdGUgQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQgZm9yIFRleHR1cmVNYXBwZXJHTCB0byBiZSBtb3JlIHNpbWlsYXIgdG8K
KyAgICAgICAgdGhlIFdlYktpdDIgTGF5ZXJUcmVlSG9zdCBhbmQgc3dpdGNoIGZyb20gcmVuZGVy
aW5nIGRpcmVjdGx5IHRvIHRoZSB3aWRnZXQgd2luZG93CisgICAgICAgIHRvIGEgd2luZG93IHJl
ZGlyZWN0ZWQgdG8gYSBwaXhtYXAgdmlhIFhDb21wb3NpdGUuIFRoZSBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dAorICAgICAgICBub3cgaGFuZGxlcyBwYWludGluZyB0aGUgbm9uLWNvbXBv
c2l0ZWQgY29udGVudCBpdHNlbGYgYW5kIG5vIGxvbmdlciByZWxpZXMgb24gdGhlCisgICAgICAg
IENocm9tZUNsaWVudCBiYWNraW5nIHN0b3JlLgorCisgICAgICAgIFRoaXMgZml4ZXMgaXNzdWVz
IHdpdGggdXNpbmcgR3RrT3ZlcmxheSBXZWJLaXRXZWJWaWV3IGFzIHdlbGwgYXMgbWFraW5nIGl0
IHBvc3NpYmxlCisgICAgICAgIHRvIHJ1biBwaXhlbCB0ZXN0cyB3aXRoIGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nIHR1cm5lZCBvbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0Lmg6CisgICAgICAgIChBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHRHTC5jcHA6CisgICAgICAgIFJlbmFtZSBzb21lIG1ldGhvZHMgdG8gbWFrZSB0aGVt
IG1vcmUgc2ltaWxhciB0byBMYXllclRyZWVIb3N0LiBOb3cgd2Ugd2FpdCB0byByZW5kZXIKKyAg
ICAgICAgdGhlIE9wZW5HTCBjb250ZXh0IHRvIHRoZSB3aW5kb3cgdW50aWwgdGhlIHdpZGdldCdz
IGRyYXcgc2lnbmFsLiBFc2NhcGUgb3V0IG9mIGFsbAorICAgICAgICBtZXRob2RzIGVhcmx5IGlm
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGRpc2FibGVkLgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6IEFsd2F5cyBjaGVjayBpZiBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZyBpcyBvbgorICAgICAgICBiZWZvcmUgY2FsbGluZyBpbnRvIEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0IG1ldGhvZHMuIFdoZW4gQUMgaXMgb24sIG5ldmVyIHBhaW50Cisg
ICAgICAgIHRoZSBiYWNraW5nIHN0b3JlLCBkZWZlcnJpbmcgaW1tZWRpYXRlbHkgdG8gdGhlIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LiBXaGVuCisgICAgICAgIEFDIGlzIHR1cm5lZCBv
biB0aGUgYmFja2luZyBzdG9yZSBub3cgc2hyaW5rcyB0byBhIHNtYWxsIHNpemUgdG8gc2F2ZSBt
ZW1vcnkuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAocmVz
aXplV2ViVmlld0Zyb21BbGxvY2F0aW9uKTogQ2hyb21lQ2xpZW50IGlzIG5vdyByZXNwb25zaWJs
ZSBmb3IgdGFsa2luZyB0byB0aGUKKyAgICAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQgZGlyZWN0bHkuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2l6ZV9hbGxvY2F0ZSk6IEV4
aXQgZWFybHkgaWYgdGhlIGFsbG9jYXRpb24gaXMgbm90IGEgcmVzaXplLiBUaGlzCisgICAgICAg
IG1ha2VzIHNvbWUgZGVlcGVyIGxvZ2ljIGEgYml0IHNpbXBsZXIgYW5kIGF2b2lkcyBhY2NpZGVu
dGFsbHkgZG9pbmcgdG9vIG11Y2ggd29yayBmb3IKKyAgICAgICAgd2lkZ2V0IG1vdmVtZW50Lgor
ICAgICAgICAod2Via2l0X3dlYl92aWV3X3JlYWxpemUpOiBXZSBubyBsb25nZXIgbmVlZCBhIG5h
dGl2ZSB3aW5kb3cuCisKIDIwMTItMDctMTAgIFN1ZGFyc2FuYSBOYWdpbmVuaSAgPHN1ZGFyc2Fu
YS5uYWdpbmVuaUBsaW51eC5pbnRlbC5jb20+CiAKICAgICAgICAgW0dUS10gRml4IG1lbW9yeSBs
ZWFrcyBieSBhZG9wdGluZyBhbGxvY2F0aW9uIG9mIEdka1BpeGJ1ZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQppbmRleCBiODI1ZjBiN2E3YjZjMjQ2YzI0ZTZlMTRiZWM0YmRkNTc3ZmUxYTI3Li4zNGQzMjFl
MTc5NTIwYmQyZjY0NTFlM2RkNWRmMWQwZjZjNzc1NDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtMTAzMSw2ICsxMDMxLDcgQEAgbGliV2ViQ29yZUd0a19sYV9DUFBGTEFHUyA9IFwKIAkkKExJ
QlhTTFRfQ0ZMQUdTKSBcCiAJJChTUUxJVEUzX0NGTEFHUykgXAogCSQoVU5JQ09ERV9DRkxBR1Mp
IFwKKwkkKFhDT01QT1NJVEVfQ0ZMQUdTKSBcCiAJJChYUkVOREVSX0NGTEFHUykgXAogCSQoWFRf
Q0ZMQUdTKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAzNzgxNzI3YWE2YTBl
NGUxNTRlOWViZjc2MTllYTlmMmNlM2M4NDNjLi4wMzAxYWEwNGY2NWJlNzI0MGQ3ODljNGRjOTE4
OTBhZDBjMTdiNWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ4NTgsOCAr
NDg1OCw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAKIGlmIFRBUkdFVF9YMTEKIHdlYmNv
cmVndGtfc291cmNlcyArPSBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4
L0dMQ29udGV4dEdMWC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ds
eC9HTENvbnRleHRHTFguaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR0xDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR0xDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRC
YWNraW5nU3RvcmVYMTEuY3BwIFwKQEAgLTQ4OTYsNiArNDg5NCwxNSBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogZW5kaWYgIyBFTkQgVEFSR0VUX1dJTjMyCiBlbmRpZiAjIEVORCBUQVJHRVRfWDEx
CiAKK2lmIFVTRV9HTFgKK3dlYmNvcmVfc291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAord2ViY29yZWd0a19zb3VyY2VzICs9
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuaAorZW5kaWYgIyBVU0VfR0xYCisKICMgLS0tLQogIyBpY3UgdW5pY29kZSBiYWNr
ZW5kCiAjIC0tLS0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dseC9HTENvbnRleHRHTFguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2x4L0dMQ29udGV4dEdMWC5jcHAKaW5kZXggOTQ5NmZjOTFhZjMxM2QwMWJkNDBlOWJiOWUzNGEw
ODZiMmMxNjE1Mi4uOTU0MGI4NmEwYmFmNDQ2YmZiNmY2OWQwYmQ2ODY5MjdmNWU3OTIxMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdM
WC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4
dEdMWC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gYmVjYXVz
ZSBpdCBtaWdodCBsZWFkIHRvIGNyYXNoZXMgaW4gc29tZSBkcml2ZXJzIChmZ2xyeCkuIFdlIHVz
ZSBhIHNoYXJlZCBkaXNwbGF5CiAvLyBwb2ludGVyIGhlcmUuCiBzdGF0aWMgRGlzcGxheSogZ1No
YXJlZERpc3BsYXkgPSAwOwotc3RhdGljIERpc3BsYXkqIHNoYXJlZERpc3BsYXkoKQorRGlzcGxh
eSogR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCkKIHsKICAgICBpZiAoIWdTaGFyZWREaXNw
bGF5KQogICAgICAgICBnU2hhcmVkRGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAppbmRl
eCA1ZThjNjFjZTRlNDFjNzZiNmM4ZTliNTUwODgzNzVhNWY4NGNjNDNjLi40Zjc5NWY5OWMzNzk1
Y2Y5NjI3NjliNTQwYTU0NDExMWQ2YjVmMTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oCkBAIC00OCw2ICs0OCw4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIoKTsK
ICAgICB2aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpOwogCisgICAgc3Rh
dGljIERpc3BsYXkqIHNoYXJlZERpc3BsYXkoKTsKKwogI2lmIFVTRSgzRF9HUkFQSElDUykKICAg
ICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzMzIwNmYwMTc2YWU1NjE4Yjhk
MzYxYzRjZDY2NmI3ODBiNGZlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCkBAIC0wLDAgKzEsMjEy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdy5oIgorCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5j
bHVkZSA8R0wvZ2x4Lmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgor
I2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUg
PGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3c6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coc2l6ZSkpOworfQorCitSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50
U2l6ZSYgc2l6ZSkKKyAgICA6IG1fd2luZG93KDApCisgICAgLCBtX3BhcmVudFdpbmRvdygwKQor
ICAgICwgbV9waXhtYXAoMCkKKyAgICAsIG1fc3VyZmFjZSgwKQorICAgICwgbV9wZW5kaW5nUmVz
aXplU291cmNlSWQoMCkKKyAgICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZShmYWxzZSkK
K3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCk7
CisKKyAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBDaHJvbWl1bTogc3JjL2NvbnRl
bnQvY29tbW9uL2dwdS9pbWFnZV90cmFuc3BvcnRfc3VyZmFjZV9saW51eC5jYworICAgIFhTZXRX
aW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7CisgICAgd2luZG93QXR0cmlidXRlcy5v
dmVycmlkZV9yZWRpcmVjdCA9IFRydWU7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2lu
ZG93KGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RXaW5k
b3coZGlzcGxheSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtMTAwLCAtMTAwLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
cHlGcm9tUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRP
dXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXT3ZlcnJpZGVSZWRpcmVj
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVz
KTsKKyAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsKKworICAgIHdpbmRv
d0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7CisgICAgd2luZG93
QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNlOworICAgIG1fd2luZG93ID0gWENy
ZWF0ZVdpbmRvdyhkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVu
dFdpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW5wdXRPdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
cHlGcm9tUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV0V2ZW50TWFzaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOworICAgIFhN
YXBXaW5kb3coZGlzcGxheSwgbV93aW5kb3cpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAg
WEV2ZW50IGV2ZW50OworICAgICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0
cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7CisgICAgICAgIGlmIChldmVudC50eXBlID09IE1h
cE5vdGlmeSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBYU2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRN
YXNrKTsKKworICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywg
Q29tcG9zaXRlUmVkaXJlY3RNYW51YWwpOworCisgICAgcmVzaXplKHNpemUpOworICAgIHJlc2l6
ZUxhdGVyKCk7IC8vIEZvcmNlIHVwZGF0ZSBvZiB0aGUgdXNhYmxlIGFyZWEuCit9CisKK1JlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQorewor
ICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKTsKKyAg
ICBpZiAobV93aW5kb3cpCisgICAgICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1fd2luZG93
KTsKKyAgICBpZiAobV9wYXJlbnRXaW5kb3cpCisgICAgICAgIFhEZXN0cm95V2luZG93KGRpc3Bs
YXksIG1fcGFyZW50V2luZG93KTsKKyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgp
OworfQorCitnYm9vbGVhbiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplTGF0ZXJD
YWxsYmFjayhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyogd2luZG93KQoreworICAgIHdpbmRv
dy0+cmVzaXplTGF0ZXIoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZUxhdGVyKCkKK3sKKyAgICBtX3VzYWJsZVNpemUgPSBt
X3NpemU7CisgICAgbV9wZW5kaW5nUmVzaXplU291cmNlSWQgPSAwOworfQorCit2b2lkIFJlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpyZXNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAg
ICAvLyBXaGVuIGVubGFyZ2luZyBhIHJlZGlyZWN0ZWQgd2luZG93LCBmb3IgdGhlIGZpcnN0IHJl
bmRlciwgdGhlIG5ld2x5IGV4cG9zZWQgYXJlYXMgc2VlbQorICAgIC8vIHRvIGNvbnRhaW4gdW5p
bml0aWFsaXplZCBtZW1vcnkgb24gSW50ZWwgZHJpdmVycy4gVG8gYXZvaWQgcmVuZGVyaW5nIGFy
dGlmYWN0cyB3aGlsZQorICAgIC8vIHJlc2l6aW5nLCB3ZSB3YWl0IHRvIHJlbmRlciB0aG9zZSBu
ZXcgYXJlYXMgdW50aWwgYWZ0ZXIgYSBzaG9ydCB0aW1lb3V0LiBUaHVzLCB0aGUKKyAgICAvLyAi
dXNhYmxlIHNpemUiIG9mIHRoZSB3aW5kb3cgaXMgc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgc2l6
ZSBvZiB0aGUgd2luZG93IGZvciB0aGUgZmlyc3QKKyAgICAvLyByZW5kZXIuCisgICAgbV91c2Fi
bGVTaXplID0gc2l6ZS5zaHJ1bmtUbyhtX3VzYWJsZVNpemUpOworICAgIGlmIChtX3VzYWJsZVNp
emUud2lkdGgoKSA8IHNpemUud2lkdGgoKSB8fCBtX3VzYWJsZVNpemUuaGVpZ2h0KCkgPCBzaXpl
LmhlaWdodCgpKSB7IC8vIFRoZSB3aW5kb3cgaXMgZ3Jvd2luZy4KKyAgICAgICAgLy8gV2UncmUg
YmVpbmcgdmVyeSBjb25zZXJ2YXRpdmUgaGVyZS4gSW5zdGVhZCBvZiByaXNraW5nIGRyYXdpbmcg
YXJ0aWZhY3RzIHdoaWxlIGRvaW5nIGNvbnRpbnVvdXMKKyAgICAgICAgLy8gb3BhcXVlIHJlc2l6
aW5nLCB3ZSBlcnIgb24gdGhlIHNpZGUgb2YgaGF2aW5nIG1vcmUgdW5kcmF3biBhcmVhcy4KKyAg
ICAgICAgaWYgKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKQorICAgICAgICAgICAgZ19zb3VyY2Vf
cmVtb3ZlKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKTsKKyAgICAgICAgbV9wZW5kaW5nUmVzaXpl
U291cmNlSWQgPSBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KHJlc2l6ZUxhdGVyQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBEaXNwbGF5KiBkaXNw
bGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCk7CisgICAgWFJlc2l6ZVdpbmRvdyhk
aXNwbGF5LCBtX3dpbmRvdywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBnbFhX
YWl0WCgpOworCisgICAgLy8gVGhpcyBzd2FwIGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0u
IEl0IHRyaWVzIHRvIHdvcmstYXJvdW5kIGEgYnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCisgICAg
Ly8gd2hlcmUgYSBzd2FwIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZyb250IGFuZCBiYWNr
IGJ1ZmZlcnMgYXJlIHByb3Blcmx5IHJlc2l6ZWQuCisgICAgaWYgKGNvbnRleHQoKSA9PSBHTENv
bnRleHQ6OmdldEN1cnJlbnQoKSkKKyAgICAgICAgY29udGV4dCgpLT5zd2FwQnVmZmVycygpOwor
CisgICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSB0
cnVlOworfQorCitHTENvbnRleHQqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojpjb250ZXh0
KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgp
OworCisgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNy
ZWF0ZUNvbnRleHRGb3JXaW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQo
KSk7CisgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKK30KKwordm9pZCBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdzo6Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQoreworICAgIGlm
ICghbV9waXhtYXApCisgICAgICAgIHJldHVybjsKKworICAgIFhGcmVlUGl4bWFwKGNhaXJvX3hs
aWJfc3VyZmFjZV9nZXRfZGlzcGxheShtX3N1cmZhY2UuZ2V0KCkpLCBtX3BpeG1hcCk7CisgICAg
bV9waXhtYXAgPSAwOworICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Cit9CisKK2NhaXJvX3N1cmZh
Y2VfdCogUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZvcldpZGdldChH
dGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6
ZSAmJiBtX3N1cmZhY2UpCisgICAgICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7CisKKyAgICBt
X25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSBmYWxzZTsKKworICAgIC8vIEl0J3MgaW1wb3J0
YW50IHRoYXQgdGhlIG5ldyBwaXhtYXAgYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIERpc3BsYXkg
cG9pbnRlciBhcyB0aGUgdGFyZ2V0CisgICAgLy8gd2lkZ2V0IG9yIGVsc2UgZHJhd2luZyBzcGVl
ZCBjYW4gYmUgMTAweCBzbG93ZXIuCisgICAgRGlzcGxheSogbmV3UGl4bWFwRGlzcGxheSA9IEdE
S19ESVNQTEFZX1hESVNQTEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7CisgICAg
UGl4bWFwIG5ld1BpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG5ld1BpeG1hcERp
c3BsYXksIG1fd2luZG93KTsKKyAgICBpZiAoIW5ld1BpeG1hcCkgeworICAgICAgICBjbGVhbnVw
UGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBYV2luZG93QXR0cmlidXRlcyB3aW5kb3dBdHRyaWJ1dGVzOworICAgIGlmICghWEdldFdpbmRv
d0F0dHJpYnV0ZXMobmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1dGVz
KSkgeworICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgICAgICBY
RnJlZVBpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXApOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9feGxpYl9zdXJmYWNlX2NyZWF0ZShuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXht
YXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93QXR0cmlidXRlcy52aXN1YWwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworCisgICAgLy8g
TnZpZGlhIGRyaXZlcnMgc2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2luZG93IHBp
eG1hcCBhc3luY2hyb25vdXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucworICAgIC8vIG9mIGEg
c2Vjb25kIGFmdGVyIGVhY2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJlc2l6aW5n
ICh3aGljaCBjb25zdGFudGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCisgICAgLy8gcGl4bWFwIHdp
bmRvdy1iYWNraW5ncyksIHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRvIHdv
cmsgYXJvdW5kIHRoaXMgaXNzdWUsIHBhaW50IHRoZSBvbGQKKyAgICAvLyBwaXhtYXAgdG8gdGhl
IG5ldyBvbmUgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4KKyAgICBpZiAobV9zdXJmYWNlKSB7
CisgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdT
dXJmYWNlLmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdldCgpLCAx
LCAxLCAxKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAg
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICB9CisKKyAgICBjbGVhbnVwUGl4bWFwQW5k
UGl4bWFwU3VyZmFjZSgpOworICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOworICAgIG1fc3VyZmFj
ZSA9IG5ld1N1cmZhY2U7CisgICAgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOWVjN2VkYjI2Yjhk
ZWE0MjZmYmY0ZTY0YTk1ZTI1OWRhNGQ3YTM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKQEAgLTAsMCAr
MSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgSWdhbGlhIFMuTC4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3dfaAorI2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAorCisjaW5jbHVkZSAi
R0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJlZlB0ckNh
aXJvLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7Cit0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgV2luZG93OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdz4gY3JlYXRlKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFs
IH5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpOworCisgICAgY29uc3QgSW50U2l6ZSYgdXNh
YmxlU2l6ZSgpIHsgcmV0dXJuIG1fdXNhYmxlU2l6ZTsgfQorICAgIGNvbnN0IEludFNpemUmIHNp
emUoKSB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHZvaWQgcmVzaXplKGNvbnN0IEludFNpemUm
IG5ld1NpemUpOworICAgIEdMQ29udGV4dCogY29udGV4dCgpOworICAgIGNhaXJvX3N1cmZhY2Vf
dCogY2Fpcm9TdXJmYWNlRm9yV2lkZ2V0KEd0a1dpZGdldCopOworCitwcml2YXRlOgorICAgIFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmKTsKKworICAgIHN0YXRpYyBn
Ym9vbGVhbiByZXNpemVMYXRlckNhbGxiYWNrKFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Kik7
CisgICAgdm9pZCByZXNpemVMYXRlcigpOworICAgIHZvaWQgY2xlYW51cFBpeG1hcEFuZFBpeG1h
cFN1cmZhY2UoKTsKKworICAgIEludFNpemUgbV9zaXplOworICAgIEludFNpemUgbV91c2FibGVT
aXplOworICAgIFdpbmRvdyBtX3dpbmRvdzsKKyAgICBXaW5kb3cgbV9wYXJlbnRXaW5kb3c7Cisg
ICAgUGl4bWFwIG1fcGl4bWFwOworICAgIE93blB0cjxHTENvbnRleHQ+IG1fY29udGV4dDsKKyAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgdW5zaWduZWQgaW50IG1f
cGVuZGluZ1Jlc2l6ZVNvdXJjZUlkOworICAgIGJvb2wgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVz
aXplOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBkYjNhZmFk
YTQ3ZDVhMWY3NjZlZjUxODJlNThlZjczZTkzMzc1ZWZkLi4xOTAxY2E1MzFiMGFhODJjNGJjZmIw
ZjIwZjU0ZDM2YjFlMWNkY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtl
ZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMTAxLDYg
KzEwMSw3IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VC
S0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUJBCiAJJChQTkdfTElCUykgXAogCSQoU1FM
SVRFM19MSUJTKSBcCiAJJChVTklDT0RFX0xJQlMpIFwKKwkkKFhDT01QT1NJVEVfTElCUykgXAog
CSQoWFJFTkRFUl9MSUJTKSBcCiAJJChYVF9MSUJTKSBcCiAJJChXSU5NTV9MSUJTKSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAppbmRleCAyNGE2MTRkYjQ1ZjRmMmY1Y2MzMjlkNDg4
ZjRhMTg3YWY5NDFkODExLi44MGU2NWIwODQ4Yzc3NGRiYmJkMzYzZTc3ZDk1OGRiNTIxZDU2NGUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKQEAgLTI4LDEwICsyOCwxMiBAQAog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjZW5kaWYKKwogI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKICNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNlbmRpZgotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJMYXllci5oIgorI2luY2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
LmgiCiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTQ3LDEx
ICs0OSw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIH5BY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dCgpOwotICAgIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgc2NoZWR1bGVSb290TGF5ZXJSZXBhaW50KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2b2lkIG1hcmtGb3JTeW5jKCk7Ci0gICAgdm9p
ZCBzeW5jTGF5ZXJzVGltZW91dCgpOwotICAgIHZvaWQgc3luY0xheWVyc05vdygpOworICAgIHZv
aWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAg
IHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CiAgICAgdm9pZCByZXNp
emVSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAgIGJvb2wgcmVuZGVyTGF5
ZXJzVG9XaW5kb3coY2Fpcm9fdCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsK
ICAgICBib29sIGVuYWJsZWQoKTsKQEAgLTYzLDIyICs2MywzNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwogCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAg
dm9pZCBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKTsKKyAgICB2b2lkIGZsdXNoQW5kUmVuZGVy
TGF5ZXJzKCk7CisgICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICB2b2lk
IHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3Jv
bGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworCiBwcml2YXRl
OgogICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICB1bnNpZ25lZCBpbnQgbV9zeW5j
VGltZXJDYWxsYmFja0lkOworICAgIHVuc2lnbmVkIGludCBtX2xheWVyRmx1c2hUaW1lckNhbGxi
YWNrSWQ7CiAKICNpZiBVU0UoQ0xVVFRFUikKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBt
X3Jvb3RHcmFwaGljc0xheWVyOwogICAgIEd0a1dpZGdldCogbV9yb290TGF5ZXJFbWJlZGRlcjsK
KyNlbGlmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBPd25QdHI8V2ViQ29yZTo6UmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c+IG1fcmVkaXJlY3RlZFdpbmRvdzsKKyAgICBPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKyAgICBPd25QdHI8V2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOworICAgIGRvdWJsZSBtX2xhc3RG
bHVzaFRpbWU7CisgICAgZG91YmxlIG1fcmVkcmF3UGVuZGluZ1RpbWU7CisKKyAgICB2b2lkIGxh
eWVyRmx1c2hUaW1lckZpcmVkKCk7CisgICAgc3RhdGljIGdib29sZWFuIGxheWVyRmx1c2hUaW1l
ckZpcmVkQ2FsbGJhY2soQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqKTsKICNlbGlmIFVT
RShURVhUVVJFX01BUFBFUikKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIG1fcm9v
dFRleHR1cmVNYXBwZXJMYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9yb290R3JhcGhpY3NMYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4g
bV90ZXh0dXJlTWFwcGVyOwotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICBXZWJDb3Jl
OjpHTENvbnRleHQqIGdsQ29udGV4dCgpOwogICAgIE93blB0cjxXZWJDb3JlOjpHTENvbnRleHQ+
IG1fY29udGV4dDsKICNlbmRpZgotI2VuZGlmCiAKICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dChXZWJLaXRXZWJWaWV3Kik7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dEdMLmNwcAppbmRleCA2NGViOTAxNzU4YmQ0ZWFlOGE5NDg3YmExZGMwMTk2NzJhOWU1YWE1
Li4zODRlMTIzOThjMDA1Zjk1MGFjNDllMjRkNzNjMzVhMGIwYWU1YTc5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJHTC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgogI2luY2x1ZGUgIndlYmtp
dHdlYnZpZXdwcml2YXRlLmgiCkBAIC0zNSwxMyArMzYsMTIgQEAKICNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCi0jaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gx
MSkKLSNkZWZpbmUgUmVnaW9uIFhSZWdpb24KLSNkZWZpbmUgRm9udCBYRm9udAotI2RlZmluZSBD
dXJzb3IgWEN1cnNvcgotI2RlZmluZSBTY3JlZW4gWFNjcmVlbgotI2luY2x1ZGUgPGdkay9nZGt4
Lmg+Ci0jZW5kaWYKK2NvbnN0IGRvdWJsZSBnRnJhbWVzUGVyU2Vjb25kID0gNjA7CisKKy8vIFRo
ZXJlIHNlZW1zIHRvIGJlIGEgZGVsaWNhdGUgYmFsYW5jZSBiZXR3ZWVuIHRoZSBtYWluIGxvb3Ag
YmVpbmcgZmxvb2RlZAorLy8gd2l0aCBtb3Rpb24gZXZlbnRzICh0aGF0IGZvcmNlIGZsdXNoZXMp
IGFuZCBzdGFydmluZyB0aGUgbWFpbiBsb29wIG9mIGV2ZW50cworLy8gd2l0aCBmbHVzaCBjYWxs
YmFja3MuIFRoaXMgZGVsYXkgaXMgZW50aXJlbHkgZW1waXJpY2FsLgorY29uc3QgZG91YmxlIGdT
Y2hlZHVsZURlbGF5ID0gKDEuMCAvIChnRnJhbWVzUGVyU2Vjb25kIC8gMy4wKSk7CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OSwxNTAgKzQ5LDI1OSBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OkFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgOiBtX3dlYlZpZXcod2Vi
VmlldykKLSAgICAsIG1fc3luY1RpbWVyQ2FsbGJhY2tJZCgwKQotICAgICwgbV9yb290VGV4dHVy
ZU1hcHBlckxheWVyKDApCisgICAgLCBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQoMCkKKyAg
ICAsIG1fcmVkaXJlY3RlZFdpbmRvdyhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRl
KEludFNpemUoMSwgMSkpKQorICAgICwgbV9sYXN0Rmx1c2hUaW1lKDApCisgICAgLCBtX3JlZHJh
d1BlbmRpbmdUaW1lKDApCit7Cit9CisKK3N0YXRpYyBJbnRTaXplIGdldFdlYlZpZXdTaXplKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwor
ICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9j
YXRpb24pOworICAgIHJldHVybiBJbnRTaXplKGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24u
aGVpZ2h0KTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6aW5pdGlh
bGl6ZSgpCiB7CisgICAgaWYgKG1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX3Jvb3RMYXll
ci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKworICAgIEludFNpemUgcGFnZVNpemUgPSBnZXRX
ZWJWaWV3U2l6ZShtX3dlYlZpZXcpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKHBhZ2VTaXpl
KTsKKworICAgIC8vIFRoZSBub24tY29tcG9zaXRlZCBjb250ZW50cyBhcmUgYSBjaGlsZCBvZiB0
aGUgcm9vdCBsYXllci4KKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXRDb250ZW50c09wYXF1ZSghbV93ZWJWaWV3LT5wcml2LT50cmFuc3BhcmVudCk7CisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKHBhZ2VTaXplKTsKKyAgICBpZiAoY29y
ZShtX3dlYlZpZXcpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpCisg
ICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5n
KHRydWUpOworCisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJSb290
IGxheWVyIik7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJOb24t
Y29tcG9zaXRlZCBjb250ZW50Iik7CisjZW5kaWYKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGls
ZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICAvLyBUaGUgY3JlYXRpb24g
b2YgdGhlIFRleHR1cmVNYXBwZXIgbmVlZHMgYW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAg
IEdMQ29udGV4dCogY29udGV4dCA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y29udGV4dCgpOworICAg
IGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fdGV4dHVyZU1hcHBlciA9IFRl
eHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7CisKKyAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jv
b3RMYXllci5nZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsK
KworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCiBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dDo6fkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KCkKIHsKLSAgICBpZiAobV9z
eW5jVGltZXJDYWxsYmFja0lkKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9zeW5jVGltZXJD
YWxsYmFja0lkKTsKKyAgICBpZiAobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKQorICAgICAg
ICBnX3NvdXJjZV9yZW1vdmUobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKTsKIH0KIAogYm9v
bCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6ZW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJu
IG1fcm9vdFRleHR1cmVNYXBwZXJMYXllciAmJiBtX3RleHR1cmVNYXBwZXI7CisgICAgcmV0dXJu
IG1fcm9vdExheWVyICYmIG1fdGV4dHVyZU1hcHBlcjsKIH0KIAotR0xDb250ZXh0KiBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Z2xDb250ZXh0KCkKK2Jvb2wgQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KGNhaXJvX3QqIGNyLCBjb25zdCBJ
bnRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICByZXR1cm4g
bV9jb250ZXh0LmdldCgpOworICAgIG1fcmVkcmF3UGVuZGluZ1RpbWUgPSAwOwogCi0jaWYgZGVm
aW5lZChHREtfV0lORE9XSU5HX1gxMSkKLSAgICAvLyBGSVhNRTogR3JhY2VmdWxseSBhY2NvdW50
IGZvciBzaXR1YXRpb25zIHdoZXJlIHdlIGRvIG5vdCBoYXZlIGEgcmVhbGl6ZWQgd2luZG93Lgot
ICAgIEdka1dpbmRvdyogZ2RrV2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURH
RVQobV93ZWJWaWV3KSk7Ci0gICAgaWYgKGdka1dpbmRvdyAmJiBnZGtfd2luZG93X2hhc19uYXRp
dmUoZ2RrV2luZG93KSkKLSAgICAgICAgbV9jb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250
ZXh0Rm9yV2luZG93KEdES19XSU5ET1dfWElEKGdka1dpbmRvdyksIEdMQ29udGV4dDo6c2hhcmlu
Z0NvbnRleHQoKSk7Ci0jZW5kaWYKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gcGFpbnQgYSB3aGl0ZSBiYWNrZ3Jv
dW5kIChpZiB0aGUgV2ViVmlldyBpc24ndCB0cmFuc3BhcmVudCksIGJlY2F1c2Ugd2hlbiBncm93
aW5nCisgICAgLy8gdGhlIHJlZGlyZWN0ZWQgd2luZG93LCB0aGUgdXNhYmxlIHNpemUgb2YgdGhl
IHdpbmRvdyBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSBhbGxvY2F0aW9uIG9mIG91ciB3aWRnZXQu
CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaG93IGFydGlmYWN0cyBpbiB0aGF0IGNhc2UuCisg
ICAgSW50U2l6ZSB1c2FibGVXaW5kb3dTaXplID0gbV9yZWRpcmVjdGVkV2luZG93LT51c2FibGVT
aXplKCk7CisgICAgaWYgKHVzYWJsZVdpbmRvd1NpemUgIT0gbV9yZWRpcmVjdGVkV2luZG93LT5z
aXplKCkpIHsKKyAgICAgICAgaWYgKCFtX3dlYlZpZXctPnByaXYtPnRyYW5zcGFyZW50KSB7Cisg
ICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjciwgMSwgMSwgMSk7CisgICAgICAgICAg
ICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRP
Ul9DTEVBUik7CisgICAgICAgIGNhaXJvX3BhaW50KGNyKTsKKyAgICB9CisKKworICAgIGNhaXJv
X3N1cmZhY2VfdCogd2luZG93U3VyZmFjZSA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y2Fpcm9TdXJm
YWNlRm9yV2lkZ2V0KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgaWYgKCF3aW5kb3dTdXJm
YWNlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7
CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCB1c2FibGVXaW5kb3dTaXplLndpZHRoKCks
IHVzYWJsZVdpbmRvd1NpemUuaGVpZ2h0KCkpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFj
ZShjciwgd2luZG93U3VyZmFjZSwgMCwgMCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBD
QUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX2ZpbGwoY3IpOworCisgICAgaWYgKCFt
X2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQgJiYgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290
TGF5ZXIuZ2V0KCkpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKSB7
CisgICAgICAgIGRvdWJsZSBuZXh0Rmx1c2ggPSBtYXgoKDEgLyBnRnJhbWVzUGVyU2Vjb25kKSAt
IChjdXJyZW50VGltZSgpIC0gbV9sYXN0Rmx1c2hUaW1lKSwgMC4wKTsKKyAgICAgICAgbV9sYXll
ckZsdXNoVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklUWV9F
VkVOVFMsIDEwMDAgKiBuZXh0Rmx1c2gsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGxh
eWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVy
TGF5ZXJzVG9XaW5kb3coY2Fpcm9fdCosIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQordm9pZCBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCkK
IHsKICAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm47CiAKLSAgICBHTENvbnRleHQqIGNvbnRleHQgPSBnbENvbnRleHQoKTsKKyAgICBHTENv
bnRleHQqIGNvbnRleHQgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPmNvbnRleHQoKTsKICAgICBpZiAo
IWNvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKCFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm47CiAKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0gICAg
Z3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihHVEtfV0lER0VUKG1fd2ViVmlldyksICZhbGxvY2F0
aW9uKTsKLSAgICBnbFZpZXdwb3J0KDAsIDAsIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24u
aGVpZ2h0KTsKKyAgICBjb25zdCBJbnRTaXplJiB3aW5kb3dTaXplID0gbV9yZWRpcmVjdGVkV2lu
ZG93LT5zaXplKCk7CisgICAgZ2xWaWV3cG9ydCgwLCAwLCB3aW5kb3dTaXplLndpZHRoKCksIHdp
bmRvd1NpemUuaGVpZ2h0KCkpOwogCiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5n
KCk7Ci0gICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyLT5wYWludCgpOworICAgIHRvVGV4dHVy
ZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+cGFpbnQoKTsKICAgICBtX3RleHR1cmVN
YXBwZXItPmVuZFBhaW50aW5nKCk7CiAKICAgICBjb250ZXh0LT5zd2FwQnVmZmVycygpOwotICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojph
dHRhY2hSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQordm9p
ZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKICAgICBpZiAoIWdyYXBoaWNzTGF5ZXIp
IHsKLSAgICAgICAgbV9yb290R3JhcGhpY3NMYXllci5jbGVhcigpOwotICAgICAgICBtX3Jvb3RU
ZXh0dXJlTWFwcGVyTGF5ZXIgPSAwOwotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAg
ICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCkgeworICAgICAgICAgICAgZ19zb3Vy
Y2VfcmVtb3ZlKG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCk7CisgICAgICAgICAgICBtX2xh
eWVyRmx1c2hUaW1lckNhbGxiYWNrSWQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2hy
aW5rIHRoZSBvZmZzY3JlZW4gd2luZG93IHRvIHNhdmUgbWVtb3J5IHdoaWxlIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIGlzIHR1cm5lZCBvZmYuCisgICAgICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+
cmVzaXplKEludFNpemUoMSwgMSkpOworICAgICAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Cisg
ICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IG51bGxwdHI7CisgICAgICAgIG1f
dGV4dHVyZU1hcHBlciA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X3Jvb3RHcmFwaGljc0xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwotICAgIG1f
cm9vdFRleHR1cmVNYXBwZXJMYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdEdyYXBo
aWNzTGF5ZXIuZ2V0KCkpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPmFkZENoaWxkKGdyYXBo
aWNzTGF5ZXIpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVl
KTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKLSAg
ICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBtX3Jvb3RHcmFw
aGljc0xheWVyLT5zZXRTaXplKGNvcmUobV93ZWJWaWV3KS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+
ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLQotICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4
dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGNv
bnRleHQgbmVlZHMgdG8gYmUgYWN0aXZlIHdoZW4gY3JlYXRpbmcgdGhlIHRleHR1cmUgbWFwcGVy
LiBJdCdzIGZpbmUgdG8KLSAgICAvLyBhdm9pZCBjYWxsaW5nIHN3YXBCdWZmZXJzIGhlcmUsIGJl
Y2F1c2UgaXQgd2lsbCBqdXN0IGluaXRpYWxpemUgc2hhZGVycy4KLSAgICBpZiAoIWNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHdGtBbGxvY2F0
aW9uIGFsbG9jYXRpb247Ci0gICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihHVEtfV0lER0VU
KG1fd2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICBnbFZpZXdwb3J0KDAsIDAsIGFsbG9jYXRp
b24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKKyAgICBpZiAoZ3JhcGhpY3NMYXllciAmJiAh
ZW5hYmxlZCgpKQorICAgICAgICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZShnZXRXZWJWaWV3
U2l6ZShtX3dlYlZpZXcpKTsKIAotICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJH
TDo6Y3JlYXRlKCk7Ci0gICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyLT5zZXRUZXh0dXJlTWFw
cGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgLy8gQWRkIHRoZSBhY2Nl
bGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KKyAgICBpbml0aWFsaXplKCk7CisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7CisgICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQ6OnNjaGVkdWxlUm9vdExheWVyUmVwYWludChjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVl
ZERpc3BsYXkoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIW1fcm9vdEdyYXBoaWNz
TGF5ZXIpCisgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChy
ZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXROZWVkc0Rp
c3BsYXkoKTsKKyAgICAgICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxh
eUluUmVjdChyZWN0KTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRz
RGlzcGxheUluUmVjdChyZWN0KTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6cmVzaXplUm9vdExheWVyKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZXNpemVSb290TGF5ZXIoY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSkKIHsKLSAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgaWYgKCFlbmFibGVk
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXRTaXplKHNp
emUpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworCisgICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3U2l6ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWRpcmVjdGVkV2luZG93LT5yZXNpemUobmV3U2l6
ZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0aGUg
bmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBh
IHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3Nl
ZCBhcmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShu
ZXdTaXplKTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsK
KyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1Np
emUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lk
dGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKKyAg
ICB9CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCisgICAg
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZs
b2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVp
Z2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisKKyAgICBmbHVzaEFuZFJlbmRlckxheWVycygp
OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gc3luY0xheWVyc1RpbWVvdXRDYWxsYmFjayhBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQ6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBJbnRSZWN0JiBz
Y3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCiB7Ci0gICAgY29udGV4dC0+
c3luY0xheWVyc1RpbWVvdXQoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dE5lZWRzRGlzcGxheUluUmVjdChzY3JvbGxSZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKK30KKworZ2Jvb2xlYW4gQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmxheWVyRmx1
c2hUaW1lckZpcmVkQ2FsbGJhY2soQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgY29udGV4dC0+bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKICAgICByZXR1cm4g
RkFMU0U7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om1hcmtGb3JT
eW5jKCkKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNjaGVkdWxlTGF5ZXJG
bHVzaCgpCiB7Ci0gICAgaWYgKG1fc3luY1RpbWVyQ2FsbGJhY2tJZCkKKyAgICBpZiAoIWVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJh
Y2tJZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgdXNlIGEgR0xpYiB0aW1lciBiZWNh
dXNlIG90aGVyd2lzZSBHVEsrIGV2ZW50IGhhbmRsaW5nIGR1cmluZwotICAgIC8vIGRyYWdnaW5n
IGNhbiBzdGFydmUgV2ViQ29yZSB0aW1lcnMsIHdoaWNoIGhhdmUgYSBsb3dlciBwcmlvcml0eS4K
LSAgICBtX3N5bmNUaW1lckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9S
SVRZX0VWRU5UUywgMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc3luY0xheWVyc1Rp
bWVvdXRDYWxsYmFjayksIHRoaXMsIDApOworICAgIC8vIFdlIHVzZSBhIEdMaWIgdGltZXIgYmVj
YXVzZSBvdGhlcndpc2UgR1RLKyBldmVudCBoYW5kbGluZyBkdXJpbmcgZHJhZ2dpbmcgY2FuCisg
ICAgLy8gc3RhcnZlIFdlYkNvcmUgdGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHku
CisgICAgZG91YmxlIG5leHRGbHVzaCA9IG1heChnU2NoZWR1bGVEZWxheSAtIChjdXJyZW50VGlt
ZSgpIC0gbV9sYXN0Rmx1c2hUaW1lKSwgMC4wKTsKKyAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxi
YWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgbmV4dEZsdXNo
ICogMTAwMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obGF5ZXJGbHVzaFRpbWVyRmly
ZWRDYWxsYmFjayksIHRoaXMsIDApOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0OjpzeW5jTGF5ZXJzTm93KCkKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCiB7Ci0gICAgaWYgKG1fcm9vdEdyYXBoaWNz
TGF5ZXIpCi0gICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOwotCi0gICAgY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKS0+
dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1f
cm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOworICAgIHJldHVybiBjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52aWV3
KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiB9CiAKLXZvaWQg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnN5bmNMYXllcnNUaW1lb3V0KCkKK3ZvaWQg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkKIHsK
LSAgICBtX3N5bmNUaW1lckNhbGxiYWNrSWQgPSAwOwotICAgIHN5bmNMYXllcnNOb3coKTsKLSAg
ICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgeworICAgICAgICBGcmFtZSogZnJhbWUg
PSBjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpOworICAgICAgICBpZiAoIWZyYW1lIHx8ICFm
cmFtZS0+Y29udGVudFJlbmRlcmVyKCkgfHwgIWZyYW1lLT52aWV3KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGZyYW1lLT52aWV3KCktPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVk
ZWRSZWN1cnNpdmUoKTsKKyAgICB9CisKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBtX3JlZGly
ZWN0ZWRXaW5kb3ctPmNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dCAmJiAhY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0b1RleHR1cmVN
YXBwZXJMYXllcihtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKS0+ZGVzY2VuZGFudHNPclNlbGZI
YXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKLSAgICAgICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0g
Z190aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMsIDEwMDAuMCAvIDYwLjAsIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5bmNMYXllcnNUaW1lb3V0Q2FsbGJhY2spLCB0
aGlzLCAwKTsKKyAgICBtX2xhc3RGbHVzaFRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGNvbXBv
c2l0ZUxheWVyc1RvQ29udGV4dCgpOwogCi0gICAgcmVuZGVyTGF5ZXJzVG9XaW5kb3coMCwgSW50
UmVjdCgpKTsKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChtX3dlYlZpZXcp
KTsKKworICAgIC8vIElmIGl0J3MgYmVlbiBhIGxvbmcgdGltZSBzaW5jZSB3ZSd2ZSBhY3R1YWxs
eSBwYWludGVkLCB3aGljaCBtZWFucyB0aGF0IGV2ZW50cyBtaWdodAorICAgIC8vIGJlIHN0YXJ2
aW5nIHRoZSBtYWluIGxvb3AsIHdlIHNob3VsZCBmb3JjZSBhIGRyYXcgbm93LiBUaGlzIHNlZW1z
IHRvIHByZXZlbnQgZGlzcGxheQorICAgIC8vIGxhZyBvbiBodHRwOi8vMjAxMi5iZWVyY2FtcC5j
b20uCisgICAgaWYgKG1fcmVkcmF3UGVuZGluZ1RpbWUgJiYgY3VycmVudFRpbWUoKSAtIG1fcmVk
cmF3UGVuZGluZ1RpbWUgPiBnU2NoZWR1bGVEZWxheSkKKyAgICAgICAgZ2RrX3dpbmRvd19wcm9j
ZXNzX3VwZGF0ZXMoZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV93ZWJWaWV3KSks
IEZBTFNFKTsKKyAgICBlbHNlIGlmICghbV9yZWRyYXdQZW5kaW5nVGltZSkKKyAgICAgICAgbV9y
ZWRyYXdQZW5kaW5nVGltZSA9IGN1cnJlbnRUaW1lKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQ6OmxheWVyRmx1c2hUaW1lckZpcmVkKCkKK3sKKyAgICBtX2xheWVy
Rmx1c2hUaW1lckNhbGxiYWNrSWQgPSAwOworICAgIGZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7CiB9
CiAKIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKQpAQCAtMjA2LDkgKzMxNSwx
MCBAQCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpub3RpZnlTeW5jUmVxdWly
ZWQoY29uc3QgR3JhcGhpY3NMYXllciopCiAKIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIHJl
Y3RUb1BhaW50KQogewotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKTsKLSAgICBjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQobV93ZWJWaWV3
LT5wcml2LT5iYWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpLCBjciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSgpLCByZWN0VG9QYWludCk7CisgICAgY29u
dGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5jbGlwKHJlY3RUb1BhaW50KTsKKyAgICBjb3JlKG1f
d2ViVmlldyktPm1haW5GcmFtZSgpLT52aWV3KCktPnBhaW50KCZjb250ZXh0LCByZWN0VG9QYWlu
dCk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKIGJvb2wgQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQ6OnNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
R3RrLmNwcAppbmRleCA5MWEyMWU4MTliYmQ3MjJmZjZkZmJjN2MzZWNlMzg2YjNlYTNmMjQzLi5j
NTBmOWM0MzhjMmI3MTE2MDNjYjc1MjA1M2FkMzUxZTA1NGNjM2M3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTE0
MiwxNyArMTQyLDE4IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKICAgICB9CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnQ6OnBhZ2VS
ZWN0KCkKK3N0YXRpYyBJbnRSZWN0IGdldFdlYlZpZXdSZWN0KFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCiB7CiAgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotI2lmIEdUS19DSEVDS19WRVJT
SU9OKDIsIDE4LCAwKQotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVCht
X3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0jZWxzZQotICAgIGFsbG9jYXRpb24gPSBHVEtfV0lE
R0VUKG1fd2ViVmlldyktPmFsbG9jYXRpb247Ci0jZW5kaWYKKyAgICBndGtfd2lkZ2V0X2dldF9h
bGxvY2F0aW9uKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKICAgICByZXR1cm4g
SW50UmVjdChhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSwgYWxsb2NhdGlvbi53aWR0aCwgYWxs
b2NhdGlvbi5oZWlnaHQpOwogfQogCitGbG9hdFJlY3QgQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCgp
Cit7CisgICAgcmV0dXJuIGdldFdlYlZpZXdSZWN0KG1fd2ViVmlldyk7Cit9CisKIHZvaWQgQ2hy
b21lQ2xpZW50Ojpmb2N1cygpCiB7CiAgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURH
RVQobV93ZWJWaWV3KSk7CkBAIC00MjYsMTAgKzQyNywyMCBAQCBzdGF0aWMgdm9pZCBjbGVhckV2
ZXJ5d2hlcmVJbkJhY2tpbmdTdG9yZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjYWlyb190KiBj
cikKIAogdm9pZCBDaHJvbWVDbGllbnQ6OndpZGdldFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUm
IG9sZFdpZGdldFNpemUsIEludFNpemUgbmV3U2l6ZSkKIHsKLSAgICBXaWRnZXRCYWNraW5nU3Rv
cmUqIGJhY2tpbmdTdG9yZSA9IG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLmdldCgpOwor
ICAgIGlmIChvbGRXaWRnZXRTaXplID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dCogY29tcG9zaXRpbmdDb250ZXh0ID0gbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dC5nZXQoKTsKKyAgICBpZiAoY29tcG9zaXRpbmdDb250ZXh0LT5l
bmFibGVkKCkpIHsKKyAgICAgICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dC0+cmVzaXplUm9vdExheWVyKG5ld1NpemUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmCiAKICAgICAvLyBHcm93IHRoZSBiYWNraW5nIHN0b3JlIGJ5IGF0IGxlYXN0
IDEuNSB0aW1lcyB0aGUgY3VycmVudCBzaXplLiBUaGlzIHByZXZlbnRzCiAgICAgLy8gbG90cyBv
ZiB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyBkdXJpbmcgYW4gb3BhcXVlIHJlc2l6ZS4KKyAgICBX
aWRnZXRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IG1fd2ViVmlldy0+cHJpdi0+YmFja2lu
Z1N0b3JlLmdldCgpOwogICAgIGlmIChiYWNraW5nU3RvcmUpIHsKICAgICAgICAgY29uc3QgSW50
U2l6ZSYgb2xkU2l6ZSA9IGJhY2tpbmdTdG9yZS0+c2l6ZSgpOwogICAgICAgICBpZiAobmV3U2l6
ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKQpAQCAtNTMzLDIwICs1NDQsNiBAQCBzdGF0aWMg
dm9pZCBwYWludFdlYlZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldywgRnJhbWUqIGZyYW1lLCBS
ZWdpb24gZGlydHlSZWdpbwogICAgIGdjLnJlc3RvcmUoKTsKIH0KIAotdm9pZCBDaHJvbWVDbGll
bnQ6OmludmFsaWRhdGVXaWRnZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0KiBhY0NvbnRleHQgPSBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0LmdldCgpOwotICAgIGlmIChhY0NvbnRleHQtPmVuYWJsZWQoKSkgewotICAgICAgICBh
Y0NvbnRleHQtPnNjaGVkdWxlUm9vdExheWVyUmVwYWludChyZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURH
RVQobV93ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LngoKSwg
cmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKLX0KLQogdm9pZCBDaHJvbWVDbGllbnQ6OnBlcmZvcm1BbGxQZW5kaW5n
U2Nyb2xscygpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZSkKQEAg
LTU1Niw3ICs1NTMsNyBAQCB2b2lkIENocm9tZUNsaWVudDo6cGVyZm9ybUFsbFBlbmRpbmdTY3Jv
bGxzKCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVjdHNUb1Njcm9sbC5zaXplKCk7
IGkrKykgewogICAgICAgICBJbnRSZWN0JiBzY3JvbGxSZWN0ID0gbV9yZWN0c1RvU2Nyb2xsW2ld
OwogICAgICAgICBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS0+c2Nyb2xsKHNjcm9sbFJl
Y3QsIG1fc2Nyb2xsT2Zmc2V0c1tpXSk7Ci0gICAgICAgIGludmFsaWRhdGVXaWRnZXRSZWN0KHNj
cm9sbFJlY3QpOworICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VU
KG1fd2ViVmlldyksIHNjcm9sbFJlY3QueCgpLCBzY3JvbGxSZWN0LnkoKSwgc2Nyb2xsUmVjdC53
aWR0aCgpLCBzY3JvbGxSZWN0LmhlaWdodCgpKTsKICAgICB9CiAKICAgICBtX3JlY3RzVG9TY3Jv
bGwuY2xlYXIoKTsKQEAgLTU5MiwxMiArNTg5LDcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnBhaW50
KFdlYkNvcmU6OlRpbWVyPENocm9tZUNsaWVudD4qKQogICAgIH0KIAogICAgIGNvbnN0IEludFJl
Y3QmIHJlY3QgPSBtX2RpcnR5UmVnaW9uLmJvdW5kcygpOwotICAgIGludmFsaWRhdGVXaWRnZXRS
ZWN0KHJlY3QpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIG1fd2Vi
Vmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnN5bmNMYXllcnNOb3co
KTsKLSAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5y
ZW5kZXJMYXllcnNUb1dpbmRvdygwLCByZWN0KTsKLSNlbmRpZgorICAgIGd0a193aWRnZXRfcXVl
dWVfZHJhd19hcmVhKEdUS19XSURHRVQobV93ZWJWaWV3KSwgcmVjdC54KCksIHJlY3QueSgpLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgbV9kaXJ0eVJlZ2lvbiA9IFJlZ2lv
bigpOwogICAgIG1fbGFzdERpc3BsYXlUaW1lID0gY3VycmVudFRpbWUoKTsKQEAgLTYxMyw2ICs2
MDUsMTEgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnBhaW50KFdlYkNvcmU6OlRpbWVyPENocm9tZUNs
aWVudD4qKQogCiB2b2lkIENocm9tZUNsaWVudDo6Zm9yY2VQYWludCgpCiB7CisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0LT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyNlbmRp
ZgorCiAgICAgbV9mb3JjZVBhaW50ID0gdHJ1ZTsKICAgICBwYWludCgwKTsKICAgICBtX2ZvcmNl
UGFpbnQgPSBmYWxzZTsKQEAgLTYyNCw2ICs2MjEsMTQgQEAgdm9pZCBDaHJvbWVDbGllbnQ6Omlu
dmFsaWRhdGVSb290Vmlldyhjb25zdCBJbnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUpCiAKIHZvaWQg
Q2hyb21lQ2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRSZWN0
JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0ZSkKIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGFjQ29udGV4dCA9
IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7Cisg
ICAgaWYgKGFjQ29udGV4dC0+ZW5hYmxlZCgpKSB7CisgICAgICAgIGFjQ29udGV4dC0+c2V0Tm9u
Q29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkodXBkYXRlUmVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fZGlydHlSZWdpb24udW5pdGUodXBkYXRlUmVjdCk7CkBAIC02MzIs
MTIgKzYzNywzNCBAQCB2b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9v
dFZpZXcoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbAogCiB2b2lkIENocm9tZUNsaWVu
dDo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVS
ZWN0LCBib29sIGltbWVkaWF0ZSkKIHsKLSAgICBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmll
dyh1cGRhdGVSZWN0LCBpbW1lZGlhdGUpOwogICAgIG1fYWRqdXN0bWVudFdhdGNoZXIudXBkYXRl
QWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFyc0xhdGVyKCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGFjQ29udGV4
dCA9IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7
CisgICAgaWYgKGFjQ29udGV4dC0+ZW5hYmxlZCgpKSB7CisgICAgICAgIGFjQ29udGV4dC0+c2V0
Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkodXBkYXRlUmVjdCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3
KHVwZGF0ZVJlY3QsIGltbWVkaWF0ZSk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpzY3JvbGwo
Y29uc3QgSW50U2l6ZSYgZGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpCiB7CisgICAgbV9hZGp1c3RtZW50V2F0Y2hlci51cGRhdGVBZGp1
c3RtZW50c0Zyb21TY3JvbGxiYXJzTGF0ZXIoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29tcG9zaXRpbmdD
b250ZXh0ID0gbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5n
ZXQoKTsKKyAgICBpZiAoY29tcG9zaXRpbmdDb250ZXh0LT5lbmFibGVkKCkpIHsKKyAgICAgICAg
QVNTRVJUKCFyZWN0VG9TY3JvbGwuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFkZWx0YS5p
c0VtcHR5KCkpOworCisgICAgICAgIGNvbXBvc2l0aW5nQ29udGV4dC0+c2Nyb2xsTm9uQ29tcG9z
aXRlZENvbnRlbnRzKHJlY3RUb1Njcm9sbCwgZGVsdGEpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmCisKICAgICBtX3JlY3RzVG9TY3JvbGwuYXBwZW5kKHJlY3RUb1Njcm9sbCk7CiAg
ICAgbV9zY3JvbGxPZmZzZXRzLmFwcGVuZChkZWx0YSk7CiAKQEAgLTY2NCw4ICs2OTEsNiBAQCB2
b2lkIENocm9tZUNsaWVudDo6c2Nyb2xsKGNvbnN0IEludFNpemUmIGRlbHRhLCBjb25zdCBJbnRS
ZWN0JiByZWN0VG9TY3JvbGwsIGNvbgogCiAgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShzY3JvbGxS
ZXBhaW50UmVnaW9uKTsKICAgICBtX2Rpc3BsYXlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0KLSAg
ICBtX2FkanVzdG1lbnRXYXRjaGVyLnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnNMYXRl
cigpOwogfQogCiBJbnRSZWN0IENocm9tZUNsaWVudDo6cm9vdFZpZXdUb1NjcmVlbihjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdApAQCAtOTczLDE3ICs5OTgsMzIgQEAgdm9pZCBDaHJvbWVDbGll
bnQ6OmV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KikKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIENocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdy
YXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCiB7Ci0g
ICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+YXR0YWNo
Um9vdEdyYXBoaWNzTGF5ZXIocm9vdExheWVyKTsKKyAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dCogY29udGV4dCA9IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQuZ2V0KCk7CisgICAgYm9vbCB0dXJuaW5nT2ZmQ29tcG9zaXRpbmcgPSAhcm9vdExh
eWVyICYmIGNvbnRleHQtPmVuYWJsZWQoKTsKKyAgICBib29sIHR1cm5pbmdPbkNvbXBvc2l0aW5n
ID0gcm9vdExheWVyICYmICFjb250ZXh0LT5lbmFibGVkKCk7CisKKyAgICBjb250ZXh0LT5zZXRS
b290Q29tcG9zaXRpbmdMYXllcihyb290TGF5ZXIpOworCisgICAgaWYgKHR1cm5pbmdPbkNvbXBv
c2l0aW5nKSB7CisgICAgICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKKyAgICAgICAgbV93ZWJW
aWV3LT5wcml2LT5iYWNraW5nU3RvcmUgPSBXZWJDb3JlOjpXaWRnZXRCYWNraW5nU3RvcmU6OmNy
ZWF0ZShHVEtfV0lER0VUKG1fd2ViVmlldyksIEludFNpemUoMSwgMSkpOworICAgIH0KKworICAg
IGlmICh0dXJuaW5nT2ZmQ29tcG9zaXRpbmcpIHsKKyAgICAgICAgbV93ZWJWaWV3LT5wcml2LT5i
YWNraW5nU3RvcmUgPSBXZWJDb3JlOjpXaWRnZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShHVEtfV0lE
R0VUKG1fd2ViVmlldyksIGdldFdlYlZpZXdSZWN0KG1fd2ViVmlldykuc2l6ZSgpKTsKKyAgICAg
ICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fd2ViVmlldy0+
cHJpdi0+YmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSkpOworICAgICAgICBjbGVhckV2ZXJ5
d2hlcmVJbkJhY2tpbmdTdG9yZShtX3dlYlZpZXcsIGNyLmdldCgpKTsKKyAgICB9CiB9CiAKIHZv
aWQgQ2hyb21lQ2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkK
IHsKLSAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5t
YXJrRm9yU3luYygpOworICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQtPnNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCiB2b2lkIENocm9tZUNsaWVudDo6
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpCiB7Ci0gICAgbV93ZWJWaWV3LT5wcml2LT5h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+bWFya0ZvclN5bmMoKTsKKyAgICBtX3dlYlZp
ZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5zY2hlZHVsZUxheWVyRmx1
c2goKTsKIH0KIAogQ2hyb21lQ2xpZW50OjpDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBDaHJvbWVD
bGllbnQ6OmFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKaW5kZXggYWEwNDRi
N2JjNjFkYjA1MzA5NjRlY2Y3N2VmNjNlZWNiM2Q4ZDhhNy4uMjdmYjk5MDQwODMzOWIwYzY1YmMy
NWM4ZjAzOGU3ZTIxYTUyMjA4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKQEAgLTE4Myw3ICsxODMsNiBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKICAgICAgICAgZG91YmxlIG1fbGFzdERpc3BsYXlUaW1lOwogICAgICAgICB1bnNp
Z25lZCBpbnQgbV9yZXBhaW50U29vblNvdXJjZUlkOwogCi0gICAgICAgIHZvaWQgaW52YWxpZGF0
ZVdpZGdldFJlY3QoY29uc3QgSW50UmVjdCYpOwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
ICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZnVsbFNjcmVlbkVsZW1lbnQ7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA0YzBjYmM0MGVh
NWYyZmE5NTU4NTI5ZWJhOWZlZmQ4NjdkN2NhZTQ0Li43YTFlMDQyNGE5ZGE0MGIwZWFmZDg0NTRj
MjljYTlmMjgxMjllYjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCkBAIC02NzksOCArNjc5LDEwIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3Zp
ZXdfZHJhdyhHdGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCogY3IpCiAKICAgICBXZWJLaXRXZWJW
aWV3UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2OwogI2lmIFVT
RShURVhUVVJFX01BUFBFUikKLSAgICBpZiAocHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQtPnJlbmRlckxheWVyc1RvV2luZG93KGNyLCBjbGlwUmVjdCkpCisgICAgaWYgKHByaXYt
PmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZW5kZXJMYXllcnNUb1dpbmRvdyhjciwg
Y2xpcFJlY3QpKSB7CisgICAgICAgIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3Bh
cmVudF9jbGFzcyktPmRyYXcod2lkZ2V0LCBjcik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKKyAg
ICB9CiAjZW5kaWYKIAogICAgIGNhaXJvX3JlY3RhbmdsZV9saXN0X3QqIHJlY3RMaXN0ID0gY2Fp
cm9fY29weV9jbGlwX3JlY3RhbmdsZV9saXN0KGNyKTsKQEAgLTg3NSwxNSArODc3LDE2IEBAIHN0
YXRpYyB2b2lkIHJlc2l6ZVdlYlZpZXdGcm9tQWxsb2NhdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBHdGtBbGxvY2F0aW9uKiBhCiAgICAgV2ViS2l0OjpDaHJvbWVDbGllbnQqIGNocm9tZUNs
aWVudCA9IHN0YXRpY19jYXN0PFdlYktpdDo6Q2hyb21lQ2xpZW50Kj4ocGFnZS0+Y2hyb21lKCkt
PmNsaWVudCgpKTsKICAgICBjaHJvbWVDbGllbnQtPndpZGdldFNpemVDaGFuZ2VkKG9sZFNpemUs
IEludFNpemUoYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCkpOwogICAgIGNo
cm9tZUNsaWVudC0+YWRqdXN0bWVudFdhdGNoZXIoKS0+dXBkYXRlQWRqdXN0bWVudHNGcm9tU2Ny
b2xsYmFycygpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHdlYlZp
ZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZXNpemVSb290TGF5ZXIo
SW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KSk7Ci0jZW5kaWYK
IH0KIAogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3NpemVfYWxsb2NhdGUoR3RrV2lkZ2V0
KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24pCiB7CisgICAgR3RrQWxsb2NhdGlv
biBvbGRBbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAm
b2xkQWxsb2NhdGlvbik7CisKICAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19w
YXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7CisgICAgaWYg
KGFsbG9jYXRpb24tPndpZHRoID09IG9sZEFsbG9jYXRpb24ud2lkdGggJiYgYWxsb2NhdGlvbi0+
aGVpZ2h0ID09IG9sZEFsbG9jYXRpb24uaGVpZ2h0KQorICAgICAgICByZXR1cm47CiAKICAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7CiAgICAgaWYg
KCFndGtfd2lkZ2V0X2dldF9tYXBwZWQod2lkZ2V0KSkgewpAQCAtMTAwMywxMCArMTAwNiw2IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19yZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQog
I2VuZGlmCiAgICAgR2RrV2luZG93KiB3aW5kb3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0
X2dldF9wYXJlbnRfd2luZG93KHdpZGdldCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzX21hc2sp
OwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVJfR0wpCi0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVco
d2lkZ2V0KS0+cHJpdjsKLSAgICBwcml2LT5oYXNOYXRpdmVXaW5kb3cgPSBnZGtfd2luZG93X2Vu
c3VyZV9uYXRpdmUod2luZG93KTsKLSNlbmRpZgogICAgIGd0a193aWRnZXRfc2V0X3dpbmRvdyh3
aWRnZXQsIHdpbmRvdyk7CiAgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpbmRvdywgd2lk
Z2V0KTsKIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGViNzE3MWQ5
M2JhZTA4N2QyN2NmNTVkMDMwYTU1M2EwY2I0OWM5YjQuLjI0OGU3YzU5NjdmMDlkYjY4NmNiNDYx
OTk5N2ExYmU0OTQ1OTg3NjkgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNy0xMyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29u
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXNpbmcgYSBuYXRpdmUgd2luZG93IGZvciB0
aGUgV2ViVmlldyBicmVha3MgR3RrT3ZlcmxheQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAwODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGNvbmZpZ3VyZS5hYzogUGFyc2UgeGNvbXBvc2l0ZSBwa2ct
Y29uZmlnIGZpbGUgZHVyaW5nIGNvbmZpZ3VyYXRpb24uCisKIDIwMTItMDctMTAgIEd5dXlvdW5n
IEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbQ01BS0VdIEFkZCBt
aXNzaW5nIGZlYXR1cmUgbWFjcm9zCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1
cmUuYWMKaW5kZXggYTdlMDk4MmIyYWIwZjNmZDk1MzIzNDI1NzE5YjE5OWE4OWVlOGQ0Yy4uYjQ5
NWFlNzU2NjA0N2IwNTJiYjM3ODgxMGNiYTM0OTAwZTM5ODU0ZCAxMDA2NDQKLS0tIGEvY29uZmln
dXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNTUzLDYgKzU1MywxMCBAQCBBQ19BUkdfV0lU
SChhY2NlbGVyYXRpb25fYmFja2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiBB
Q19NU0dfUkVTVUxUKFskd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZF0pCiAKK2lmIHRlc3QgIiR3
aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5kIiA9ICJvcGVuZ2wiOyB0aGVuCisgICAgUEtHX0NIRUNL
X01PRFVMRVMoW1hDT01QT1NJVEVdLCBbeGNvbXBvc2l0ZV0pOworZmkKKwogIyBPcGVuR0wgaXMg
dHVybmVkIG9uIGJ5IGRlZmF1bHQgKGFsb25nIHdpdGggV2ViR0wgYW5kIGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nKSwgYnV0IGlmCiAjIENsdXR0ZXIgaXMgY2hvc2VuIGFzIHRoZSBhY2NlbGVyYXRl
ZCBkcmF3aW5nIGJhY2tlbmQsIHdlIHdhbnQgdG8gZGlzYWJsZSBpdC4gQ09HTCBkb2VzIAogIyBu
b3QgcGxheSB3ZWxsIHdpdGggT3BlbkdMLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157755</attachid>
            <date>2012-08-10 10:21:06 -0700</date>
            <delta_ts>2012-08-17 10:49:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90085-20120810192036.patch</filename>
            <type>text/plain</type>
            <size>48521</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1Mjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTkxZGRjZTgwN2ViZWVj
NmNkYzEwMWE0ZjBhYjQwYWZiOWVhY2NlMC4uNDY0MzYzMTgwYjFiMGFkMmYyYzA3Nzc3ZmE2ZThj
YjhiMzZmMDc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA3LTEzICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2lu
ZyBhIG5hdGl2ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGhpcyB3aWxsIGJlIGNvdmVyZWQgYnkgcGl4ZWwgdGVzdCBmb3IgYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgd2hlbiB0aGV5IGFyZSBhY3RpdmF0ZWQuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOiBBZGQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZmlsZXMgdG8g
dGhlIHNvdXJjZSBsaXN0LgorICAgICAgICBNYWtlIGEgbmV3IHNlY3Rpb24gZm9yIEdMWCBzcGVj
aWZpYyBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xY
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSk6IEV4
cG9zZSBzaGFyZWREaXNwbGF5IGFzIGEgc3RhdGljIG1ldGhvZAorICAgICAgICBzbyB0aGF0IGl0
IGNhbiBiZSBjYWxsZWQgYnkgb3RoZXIgWDExIHNwZWNpZmljIGNvZGUuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBBZGRlZC4gQW4gaW1wbGVt
ZW50YXRpb24gb2YgYSBHTCBzdXJmYWNlCisgICAgICAgIHRoYXQgcmVuZGVycyB0byBhbiBYLXdp
bmRvdyB3aGljaCByZWRpcmVjdHMgdG8gYSBwaXhtYXAuCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg6IEFkZGVkLgorCiAyMDEyLTA4LTEwICBFcmlr
IEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBFbmFibGUgZXM1
X3JlYWRvbmx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggZDVlMDc5ZjlkNzljZjJlOTkxZTgzYTNmZjE4
NjVhMDJjMDE3MjJmNS4uOTUxNjllZTQ1MDY1YjAwN2E0ZDVmZDI5MTczNjU1ZWUzZGNiYWI0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA3LTEzICBNYXJ0aW4gUm9i
aW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2luZyBhIG5h
dGl2ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJld3JpdGUgQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQgZm9yIFRleHR1cmVNYXBwZXJHTCB0byBiZSBtb3JlIHNpbWlsYXIg
dG8KKyAgICAgICAgdGhlIFdlYktpdDIgTGF5ZXJUcmVlSG9zdCBhbmQgc3dpdGNoIGZyb20gcmVu
ZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSB3aWRnZXQgd2luZG93CisgICAgICAgIHRvIGEgd2luZG93
IHJlZGlyZWN0ZWQgdG8gYSBwaXhtYXAgdmlhIFhDb21wb3NpdGUuIFRoZSBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dAorICAgICAgICBub3cgaGFuZGxlcyBwYWludGluZyB0aGUgbm9uLWNv
bXBvc2l0ZWQgY29udGVudCBpdHNlbGYgYW5kIG5vIGxvbmdlciByZWxpZXMgb24gdGhlCisgICAg
ICAgIENocm9tZUNsaWVudCBiYWNraW5nIHN0b3JlLgorCisgICAgICAgIFRoaXMgZml4ZXMgaXNz
dWVzIHdpdGggdXNpbmcgR3RrT3ZlcmxheSBXZWJLaXRXZWJWaWV3IGFzIHdlbGwgYXMgbWFraW5n
IGl0IHBvc3NpYmxlCisgICAgICAgIHRvIHJ1biBwaXhlbCB0ZXN0cyB3aXRoIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIHR1cm5lZCBvbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Lmg6CisgICAgICAgIChBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHRHTC5jcHA6CisgICAgICAgIFJlbmFtZSBzb21lIG1ldGhvZHMgdG8gbWFrZSB0
aGVtIG1vcmUgc2ltaWxhciB0byBMYXllclRyZWVIb3N0LiBOb3cgd2Ugd2FpdCB0byByZW5kZXIK
KyAgICAgICAgdGhlIE9wZW5HTCBjb250ZXh0IHRvIHRoZSB3aW5kb3cgdW50aWwgdGhlIHdpZGdl
dCdzIGRyYXcgc2lnbmFsLiBFc2NhcGUgb3V0IG9mIGFsbAorICAgICAgICBtZXRob2RzIGVhcmx5
IGlmIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGRpc2FibGVkLgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6IEFsd2F5cyBjaGVjayBpZiBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBpcyBvbgorICAgICAgICBiZWZvcmUgY2FsbGluZyBpbnRvIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0IG1ldGhvZHMuIFdoZW4gQUMgaXMgb24sIG5ldmVyIHBhaW50
CisgICAgICAgIHRoZSBiYWNraW5nIHN0b3JlLCBkZWZlcnJpbmcgaW1tZWRpYXRlbHkgdG8gdGhl
IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LiBXaGVuCisgICAgICAgIEFDIGlzIHR1cm5l
ZCBvbiB0aGUgYmFja2luZyBzdG9yZSBub3cgc2hyaW5rcyB0byBhIHNtYWxsIHNpemUgdG8gc2F2
ZSBtZW1vcnkuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAo
cmVzaXplV2ViVmlld0Zyb21BbGxvY2F0aW9uKTogQ2hyb21lQ2xpZW50IGlzIG5vdyByZXNwb25z
aWJsZSBmb3IgdGFsa2luZyB0byB0aGUKKyAgICAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQgZGlyZWN0bHkuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2l6ZV9hbGxvY2F0ZSk6
IEV4aXQgZWFybHkgaWYgdGhlIGFsbG9jYXRpb24gaXMgbm90IGEgcmVzaXplLiBUaGlzCisgICAg
ICAgIG1ha2VzIHNvbWUgZGVlcGVyIGxvZ2ljIGEgYml0IHNpbXBsZXIgYW5kIGF2b2lkcyBhY2Np
ZGVudGFsbHkgZG9pbmcgdG9vIG11Y2ggd29yayBmb3IKKyAgICAgICAgd2lkZ2V0IG1vdmVtZW50
LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3JlYWxpemUpOiBXZSBubyBsb25nZXIgbmVlZCBh
IG5hdGl2ZSB3aW5kb3cuCisKIDIwMTItMDgtMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIEhhbmRsZSBTU0wgZXJyb3JzIGZvciBTT1VQCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCmluZGV4IGU3MTRjNWFkYWUwZGM0YjJjOGM1M2FhODMzYWUwYmU2YTNj
NTBhMTcuLjU4ZjQ3MDQxMDNhMDAzNzc3NGI5MzFkMTFiOWIwNzI0YTcyNzIyZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC0xMDcyLDYgKzEwNzIsNyBAQCBsaWJXZWJDb3JlR3RrX2xhX0NQUEZM
QUdTID0gXAogCSQoTElCWFNMVF9DRkxBR1MpIFwKIAkkKFNRTElURTNfQ0ZMQUdTKSBcCiAJJChV
TklDT0RFX0NGTEFHUykgXAorCSQoWENPTVBPU0lURV9DRkxBR1MpIFwKIAkkKFhSRU5ERVJfQ0ZM
QUdTKSBcCiAJJChYVF9DRkxBR1MpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IDRkMzIyZDJiOTk4NDBmNGIyNGJlNTgwZjUyYzNlOTU0MjE3ZDJjMTcuLmVjODk3MGIxNWZkN2Zk
NThiYWQ4NmU0MTQ1YjY1MmNjZjBmY2Q2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtNDkxNiw4ICs0OTE2LDYgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAogaWYgVEFS
R0VUX1gxMQogd2ViY29yZWd0a19zb3VyY2VzICs9IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a1dpZGdldEJhY2tpbmdTdG9yZVgxMS5jcHAgXApAQCAtNDk1NCw2ICs0OTUyLDE1IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiBlbmRpZiAjIEVORCBUQVJHRVRfV0lOMzIKIGVuZGlmICMg
RU5EIFRBUkdFVF9YMTEKIAoraWYgVVNFX0dMWAord2ViY29yZV9zb3VyY2VzICs9IFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oCit3ZWJjb3Jl
Z3RrX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCitlbmRpZiAjIFVTRV9HTFgKKwogIyAtLS0tCiAjIGlj
dSB1bmljb2RlIGJhY2tlbmQKICMgLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAppbmRleCA5NDk2ZmM5MWFmMzEzZDAx
YmQ0MGU5YmI5ZTM0YTA4NmIyYzE2MTUyLi45NTQwYjg2YTBiYWY0NDZiZmI2ZjY5ZDBiZDY4Njky
N2Y1ZTc5MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
bHgvR0xDb250ZXh0R0xYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nbHgvR0xDb250ZXh0R0xYLmNwcApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAvLyBiZWNhdXNlIGl0IG1pZ2h0IGxlYWQgdG8gY3Jhc2hlcyBpbiBzb21lIGRyaXZlcnMg
KGZnbHJ4KS4gV2UgdXNlIGEgc2hhcmVkIGRpc3BsYXkKIC8vIHBvaW50ZXIgaGVyZS4KIHN0YXRp
YyBEaXNwbGF5KiBnU2hhcmVkRGlzcGxheSA9IDA7Ci1zdGF0aWMgRGlzcGxheSogc2hhcmVkRGlz
cGxheSgpCitEaXNwbGF5KiBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKQogewogICAgIGlm
ICghZ1NoYXJlZERpc3BsYXkpCiAgICAgICAgIGdTaGFyZWREaXNwbGF5ID0gWE9wZW5EaXNwbGF5
KDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dM
Q29udGV4dEdMWC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29u
dGV4dEdMWC5oCmluZGV4IDVlOGM2MWNlNGU0MWM3NmI2YzhlOWI1NTA4ODM3NWE1Zjg0Y2M0M2Mu
LjRmNzk1Zjk5YzM3OTVjZjk2Mjc2OWI1NDBhNTQ0MTExZDZiNWYxODUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKQEAgLTQ4
LDYgKzQ4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYW5SZW5kZXJUb0RlZmF1bHRG
cmFtZWJ1ZmZlcigpOwogICAgIHZpcnR1YWwgSW50U2l6ZSBkZWZhdWx0RnJhbWVCdWZmZXJTaXpl
KCk7CiAKKyAgICBzdGF0aWMgRGlzcGxheSogc2hhcmVkRGlzcGxheSgpOworCiAjaWYgVVNFKDNE
X0dSQVBISUNTKQogICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9y
bUNvbnRleHQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTMzMjA2
ZjAxNzZhZTU2MThiOGQzNjFjNGNkNjY2Yjc4MGI0ZmU5NAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAK
QEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCisKKyNpbmNsdWRlICJHTENvbnRl
eHRHTFguaCIKKyNpbmNsdWRlIDxHTC9nbHguaD4KKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9Y
Y29tcG9zaXRlLmg+CisjaW5jbHVkZSA8Y2Fpcm8teGxpYi5oPgorI2luY2x1ZGUgPGdkay9nZGt4
Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBSZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyhzaXplKSk7
Cit9CisKK1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdyhjb25zdCBJbnRTaXplJiBzaXplKQorICAgIDogbV93aW5kb3coMCkKKyAgICAsIG1fcGFy
ZW50V2luZG93KDApCisgICAgLCBtX3BpeG1hcCgwKQorICAgICwgbV9zdXJmYWNlKDApCisgICAg
LCBtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCgwKQorICAgICwgbV9uZWVkc05ld1BpeG1hcEFmdGVy
UmVzaXplKGZhbHNlKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHTENvbnRleHRHTFg6OnNo
YXJlZERpc3BsYXkoKTsKKworICAgIC8vIFRoaXMgaXMgYmFzZWQgb24gY29kZSBmcm9tIENocm9t
aXVtOiBzcmMvY29udGVudC9jb21tb24vZ3B1L2ltYWdlX3RyYW5zcG9ydF9zdXJmYWNlX2xpbnV4
LmNjCisgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgd2luZG93QXR0cmlidXRlczsKKyAgICB3aW5k
b3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gVHJ1ZTsKKyAgICBtX3BhcmVudFdpbmRv
dyA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUm9vdFdpbmRvdyhkaXNwbGF5LCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDAsIC0xMDAsIDEsIDEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnB1dE91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvcHlGcm9tUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dP
dmVycmlkZVJlZGlyZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndp
bmRvd0F0dHJpYnV0ZXMpOworICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cp
OworCisgICAgd2luZG93QXR0cmlidXRlcy5ldmVudF9tYXNrID0gU3RydWN0dXJlTm90aWZ5TWFz
azsKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gRmFsc2U7CisgICAg
bV93aW5kb3cgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fcGFyZW50V2luZG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dE91dHB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENXRXZlbnRNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd2luZG93QXR0cmli
dXRlcyk7CisgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7CisKKyAgICB3aGlsZSAo
MSkgeworICAgICAgICBYRXZlbnQgZXZlbnQ7CisgICAgICAgIFhXaW5kb3dFdmVudChkaXNwbGF5
LCBtX3dpbmRvdywgU3RydWN0dXJlTm90aWZ5TWFzaywgJmV2ZW50KTsKKyAgICAgICAgaWYgKGV2
ZW50LnR5cGUgPT0gTWFwTm90aWZ5ICYmIGV2ZW50LnhtYXAud2luZG93ID09IG1fd2luZG93KQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFhTZWxlY3RJbnB1dChkaXNwbGF5LCBtX3dp
bmRvdywgTm9FdmVudE1hc2spOworCisgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3Bs
YXksIG1fd2luZG93LCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisKKyAgICByZXNpemUoc2l6
ZSk7CisgICAgcmVzaXplTGF0ZXIoKTsgLy8gRm9yY2UgdXBkYXRlIG9mIHRoZSB1c2FibGUgYXJl
YS4KK30KKworUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6On5SZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdygpCit7CisgICAgRGlzcGxheSogZGlzcGxheSA9IEdMQ29udGV4dEdMWDo6c2hhcmVk
RGlzcGxheSgpOworICAgIGlmIChtX3dpbmRvdykKKyAgICAgICAgWERlc3Ryb3lXaW5kb3coZGlz
cGxheSwgbV93aW5kb3cpOworICAgIGlmIChtX3BhcmVudFdpbmRvdykKKyAgICAgICAgWERlc3Ry
b3lXaW5kb3coZGlzcGxheSwgbV9wYXJlbnRXaW5kb3cpOworICAgIGNsZWFudXBQaXhtYXBBbmRQ
aXhtYXBTdXJmYWNlKCk7Cit9CisKK2dib29sZWFuIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
OjpyZXNpemVMYXRlckNhbGxiYWNrKFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KiB3aW5kb3cp
Cit7CisgICAgd2luZG93LT5yZXNpemVMYXRlcigpOworICAgIHJldHVybiBGQUxTRTsKK30KKwor
dm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplTGF0ZXIoKQoreworICAgIG1f
dXNhYmxlU2l6ZSA9IG1fc2l6ZTsKKyAgICBtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCA9IDA7Cit9
CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIC8vIFdoZW4gZW5sYXJnaW5nIGEgcmVkaXJlY3RlZCB3aW5kb3csIGZv
ciB0aGUgZmlyc3QgcmVuZGVyLCB0aGUgbmV3bHkgZXhwb3NlZCBhcmVhcyBzZWVtCisgICAgLy8g
dG8gY29udGFpbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvbiBJbnRlbCBkcml2ZXJzLiBUbyBhdm9p
ZCByZW5kZXJpbmcgYXJ0aWZhY3RzIHdoaWxlCisgICAgLy8gcmVzaXppbmcsIHdlIHdhaXQgdG8g
cmVuZGVyIHRob3NlIG5ldyBhcmVhcyB1bnRpbCBhZnRlciBhIHNob3J0IHRpbWVvdXQuIFRodXMs
IHRoZQorICAgIC8vICJ1c2FibGUgc2l6ZSIgb2YgdGhlIHdpbmRvdyBpcyBzbWFsbGVyIHRoYW4g
dGhlIGFjdHVhbCBzaXplIG9mIHRoZSB3aW5kb3cgZm9yIHRoZSBmaXJzdAorICAgIC8vIHJlbmRl
ci4KKyAgICBtX3VzYWJsZVNpemUgPSBzaXplLnNocnVua1RvKG1fdXNhYmxlU2l6ZSk7CisgICAg
aWYgKG1fdXNhYmxlU2l6ZS53aWR0aCgpIDwgc2l6ZS53aWR0aCgpIHx8IG1fdXNhYmxlU2l6ZS5o
ZWlnaHQoKSA8IHNpemUuaGVpZ2h0KCkpIHsgLy8gVGhlIHdpbmRvdyBpcyBncm93aW5nLgorICAg
ICAgICAvLyBXZSdyZSBiZWluZyB2ZXJ5IGNvbnNlcnZhdGl2ZSBoZXJlLiBJbnN0ZWFkIG9mIHJp
c2tpbmcgZHJhd2luZyBhcnRpZmFjdHMgd2hpbGUgZG9pbmcgY29udGludW91cworICAgICAgICAv
LyBvcGFxdWUgcmVzaXppbmcsIHdlIGVyciBvbiB0aGUgc2lkZSBvZiBoYXZpbmcgbW9yZSB1bmRy
YXduIGFyZWFzLgorICAgICAgICBpZiAobV9wZW5kaW5nUmVzaXplU291cmNlSWQpCisgICAgICAg
ICAgICBnX3NvdXJjZV9yZW1vdmUobV9wZW5kaW5nUmVzaXplU291cmNlSWQpOworICAgICAgICBt
X3BlbmRpbmdSZXNpemVTb3VyY2VJZCA9IGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2Fz
dDxHU291cmNlRnVuYz4ocmVzaXplTGF0ZXJDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAg
IERpc3BsYXkqIGRpc3BsYXkgPSBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKTsKKyAgICBY
UmVzaXplV2luZG93KGRpc3BsYXksIG1fd2luZG93LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOworICAgIGdsWFdhaXRYKCk7CisKKyAgICAvLyBUaGlzIHN3YXAgaXMgYmFzZWQgb24gY29k
ZSBpbiBDaHJvbWl1bS4gSXQgdHJpZXMgdG8gd29yay1hcm91bmQgYSBidWcgaW4gdGhlIEludGVs
IGRyaXZlcnMKKyAgICAvLyB3aGVyZSBhIHN3YXAgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUg
ZnJvbnQgYW5kIGJhY2sgYnVmZmVycyBhcmUgcHJvcGVybHkgcmVzaXplZC4KKyAgICBpZiAoY29u
dGV4dCgpID09IEdMQ29udGV4dDo6Z2V0Q3VycmVudCgpKQorICAgICAgICBjb250ZXh0KCktPnN3
YXBCdWZmZXJzKCk7CisKKyAgICBtX3NpemUgPSBzaXplOworICAgIG1fbmVlZHNOZXdQaXhtYXBB
ZnRlclJlc2l6ZSA9IHRydWU7Cit9CisKK0dMQ29udGV4dCogUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3c6OmNvbnRleHQoKQoreworICAgIGlmIChtX2NvbnRleHQpCisgICAgICAgIHJldHVybiBt
X2NvbnRleHQuZ2V0KCk7CisKKyAgICBBU1NFUlQobV93aW5kb3cpOworICAgIG1fY29udGV4dCA9
IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhtX3dpbmRvdywgR0xDb250ZXh0Ojpz
aGFyaW5nQ29udGV4dCgpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworfQorCit2b2lk
IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFj
ZSgpCit7CisgICAgaWYgKCFtX3BpeG1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgWEZyZWVQ
aXhtYXAoY2Fpcm9feGxpYl9zdXJmYWNlX2dldF9kaXNwbGF5KG1fc3VyZmFjZS5nZXQoKSksIG1f
cGl4bWFwKTsKKyAgICBtX3BpeG1hcCA9IDA7CisgICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKK30K
KworY2Fpcm9fc3VyZmFjZV90KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6Y2Fpcm9TdXJm
YWNlRm9yV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghbV9uZWVkc05ld1Bp
eG1hcEFmdGVyUmVzaXplICYmIG1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZS5n
ZXQoKTsKKworICAgIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSA9IGZhbHNlOworCisgICAg
Ly8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgbmV3IHBpeG1hcCBiZSBjcmVhdGVkIHdpdGggdGhl
IHNhbWUgRGlzcGxheSBwb2ludGVyIGFzIHRoZSB0YXJnZXQKKyAgICAvLyB3aWRnZXQgb3IgZWxz
ZSBkcmF3aW5nIHNwZWVkIGNhbiBiZSAxMDB4IHNsb3dlci4KKyAgICBEaXNwbGF5KiBuZXdQaXht
YXBEaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSh3
aWRnZXQpKTsKKyAgICBQaXhtYXAgbmV3UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXht
YXAobmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3cpOworICAgIGlmICghbmV3UGl4bWFwKSB7Cisg
ICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIFhXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7CisgICAg
aWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhuZXdQaXhtYXBEaXNwbGF5LCBtX3dpbmRvdywgJndp
bmRvd0F0dHJpYnV0ZXMpKSB7CisgICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNl
KCk7CisgICAgICAgIFhGcmVlUGl4bWFwKG5ld1BpeG1hcERpc3BsYXksIG5ld1BpeG1hcCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5l
d1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194bGliX3N1cmZhY2VfY3JlYXRlKG5ld1BpeG1hcERp
c3BsYXksIG5ld1BpeG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dBdHRyaWJ1dGVzLnZp
c3VhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KSk7CisKKyAgICAvLyBOdmlkaWEgZHJpdmVycyBzZWVtIHRvIHByZXBhcmUgdGhlaXIgcmVkaXJl
Y3RlZCB3aW5kb3cgcGl4bWFwIGFzeW5jaHJvbm91c2x5LCBzbyBmb3IgYSBmZXcgZnJhY3Rpb25z
CisgICAgLy8gb2YgYSBzZWNvbmQgYWZ0ZXIgZWFjaCByZXNpemUsIHdoaWxlIGRvaW5nIGNvbnRp
bnVvdXMgcmVzaXppbmcgKHdoaWNoIGNvbnN0YW50bHkgZGVzdHJveXMgYW5kIGNyZWF0ZXMKKyAg
ICAvLyBwaXhtYXAgd2luZG93LWJhY2tpbmdzKSwgdGhlIHBpeG1hcCBtZW1vcnkgaXMgdW5pbml0
aWFsaXplZC4gVG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZSwgcGFpbnQgdGhlIG9sZAorICAgIC8v
IHBpeG1hcCB0byB0aGUgbmV3IG9uZSB0byBwcm9wZXJseSBpbml0aWFsaXplIGl0LgorICAgIGlm
IChtX3N1cmZhY2UpIHsKKyAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fp
cm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9y
Z2IoY3IuZ2V0KCksIDEsIDEsIDEpOworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cisg
ICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNlLmdldCgp
LCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgIH0KKworICAgIGNs
ZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CisgICAgbV9waXhtYXAgPSBuZXdQaXhtYXA7
CisgICAgbV9zdXJmYWNlID0gbmV3U3VyZmFjZTsKKyAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjM5ZWM3ZWRiMjZiOGRlYTQyNmZiZjRlNjRhOTVlMjU5ZGE0ZDdhMzgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBJZ2FsaWEg
Uy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmICBSZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvd19oCisjZGVmaW5lICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19o
CisKKyNpbmNsdWRlICJHTENvbnRleHRHTFguaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5j
bHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIFBpeG1hcDsKK3R5
cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYp
OworICAgIHZpcnR1YWwgflJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCk7CisKKyAgICBjb25z
dCBJbnRTaXplJiB1c2FibGVTaXplKCkgeyByZXR1cm4gbV91c2FibGVTaXplOyB9CisgICAgY29u
c3QgSW50U2l6ZSYgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdm9pZCByZXNpemUo
Y29uc3QgSW50U2l6ZSYgbmV3U2l6ZSk7CisgICAgR0xDb250ZXh0KiBjb250ZXh0KCk7CisgICAg
Y2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2VGb3JXaWRnZXQoR3RrV2lkZ2V0Kik7CisKK3By
aXZhdGU6CisgICAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYpOwor
CisgICAgc3RhdGljIGdib29sZWFuIHJlc2l6ZUxhdGVyQ2FsbGJhY2soUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3cqKTsKKyAgICB2b2lkIHJlc2l6ZUxhdGVyKCk7CisgICAgdm9pZCBjbGVhbnVw
UGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworCisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgSW50
U2l6ZSBtX3VzYWJsZVNpemU7CisgICAgV2luZG93IG1fd2luZG93OworICAgIFdpbmRvdyBtX3Bh
cmVudFdpbmRvdzsKKyAgICBQaXhtYXAgbV9waXhtYXA7CisgICAgT3duUHRyPEdMQ29udGV4dD4g
bV9jb250ZXh0OworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICB1
bnNpZ25lZCBpbnQgbV9wZW5kaW5nUmVzaXplU291cmNlSWQ7CisgICAgYm9vbCBtX25lZWRzTmV3
UGl4bWFwQWZ0ZXJSZXNpemU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFt
CmluZGV4IDIxNTU3NmU1MTgxNGNjZjEyY2MwZWZlYjY5MmVkOWRhN2IyNDk0NTIuLjAwNDczZjlk
NTBiNWE3NTdhNTA1MDgxYmZmOGYyYjE0OGQzYTZlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtCkBAIC0xMDEsNiArMTAxLDcgQEAgbGlid2Via2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9S
X1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0xJQkEKIAkkKFBOR19M
SUJTKSBcCiAJJChTUUxJVEUzX0xJQlMpIFwKIAkkKFVOSUNPREVfTElCUykgXAorCSQoWENPTVBP
U0lURV9MSUJTKSBcCiAJJChYUkVOREVSX0xJQlMpIFwKIAkkKFhUX0xJQlMpIFwKIAkkKFdJTk1N
X0xJQlMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCmluZGV4IDI0YTYxNGRiNDVm
NGYyZjVjYzMyOWQ0ODhmNGExODdhZjk0MWQ4MTEuLjgwZTY1YjA4NDhjNzc0ZGJiYmQzNjNlNzdk
OTU4ZGI1MjFkNTY0ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaApAQCAtMjgs
MTAgKzI4LDEyIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogI2lmIFVTRShURVhU
VVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKKyNlbmRpZgorCiAj
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2VuZGlm
Ci0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3cuaCIKICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpAQCAtNDcsMTEgKzQ5LDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgfkFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KCk7Ci0gICAgdm9pZCBhdHRhY2hSb290R3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBzY2hlZHVsZVJvb3RM
YXllclJlcGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZvaWQgbWFya0ZvclN5
bmMoKTsKLSAgICB2b2lkIHN5bmNMYXllcnNUaW1lb3V0KCk7Ci0gICAgdm9pZCBzeW5jTGF5ZXJz
Tm93KCk7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKik7CisgICAgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsK
ICAgICB2b2lkIHJlc2l6ZVJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAg
Ym9vbCByZW5kZXJMYXllcnNUb1dpbmRvdyhjYWlyb190KiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcFJlY3QpOwogICAgIGJvb2wgZW5hYmxlZCgpOwpAQCAtNjMsMjIgKzYzLDM2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRl
cihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7CiAKKyAgICB2b2lkIGluaXRp
YWxpemUoKTsKKyAgICB2b2lkIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpOworICAgIHZvaWQg
Zmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cygpOworICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNl
dCk7CisKIHByaXZhdGU6CiAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwotICAgIHVuc2ln
bmVkIGludCBtX3N5bmNUaW1lckNhbGxiYWNrSWQ7CisgICAgdW5zaWduZWQgaW50IG1fbGF5ZXJG
bHVzaFRpbWVyQ2FsbGJhY2tJZDsKIAogI2lmIFVTRShDTFVUVEVSKQogICAgIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqIG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgR3RrV2lkZ2V0KiBtX3Jvb3RM
YXllckVtYmVkZGVyOworI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIE93blB0cjxX
ZWJDb3JlOjpSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gbV9yZWRpcmVjdGVkV2luZG93Owor
ICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOwor
ICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CisgICAg
ZG91YmxlIG1fbGFzdEZsdXNoVGltZTsKKyAgICBkb3VibGUgbV9yZWRyYXdQZW5kaW5nVGltZTsK
KworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4g
bGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayhBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dCopOwogI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJMYXllciogbV9yb290VGV4dHVyZU1hcHBlckxheWVyOwogICAgIE93blB0cjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyPiBtX3Jvb3RHcmFwaGljc0xheWVyOwogICAgIE93blB0cjxXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQogICAgIFdlYkNvcmU6OkdMQ29udGV4dCogZ2xDb250ZXh0KCk7CiAgICAgT3duUHRyPFdlYkNv
cmU6OkdMQ29udGV4dD4gbV9jb250ZXh0OwogI2VuZGlmCi0jZW5kaWYKIAogICAgIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYktpdFdlYlZpZXcqKTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCmluZGV4IDY0ZWI5MDE3NThiZDRlYWU4YTk0ODdiYTFk
YzAxOTY3MmE5ZTVhYTUuLjg4MjE1NTE3ZTcwYTU4MDY2OTZhYTIzOTdlYmFhMTkyZDE5ZjUyMGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCiAj
aW5jbHVkZSAid2Via2l0d2Vidmlld3ByaXZhdGUuaCIKQEAgLTM1LDEzICszNiwxMiBAQAogI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKLSNpZiBkZWZpbmVkKEdE
S19XSU5ET1dJTkdfWDExKQotI2RlZmluZSBSZWdpb24gWFJlZ2lvbgotI2RlZmluZSBGb250IFhG
b250Ci0jZGVmaW5lIEN1cnNvciBYQ3Vyc29yCi0jZGVmaW5lIFNjcmVlbiBYU2NyZWVuCi0jaW5j
bHVkZSA8Z2RrL2dka3guaD4KLSNlbmRpZgorY29uc3QgZG91YmxlIGdGcmFtZXNQZXJTZWNvbmQg
PSA2MDsKKworLy8gVGhlcmUgc2VlbXMgdG8gYmUgYSBkZWxpY2F0ZSBiYWxhbmNlIGJldHdlZW4g
dGhlIG1haW4gbG9vcCBiZWluZyBmbG9vZGVkCisvLyB3aXRoIG1vdGlvbiBldmVudHMgKHRoYXQg
Zm9yY2UgZmx1c2hlcykgYW5kIHN0YXJ2aW5nIHRoZSBtYWluIGxvb3Agb2YgZXZlbnRzCisvLyB3
aXRoIGZsdXNoIGNhbGxiYWNrcy4gVGhpcyBkZWxheSBpcyBlbnRpcmVseSBlbXBpcmljYWwuCitj
b25zdCBkb3VibGUgZ1NjaGVkdWxlRGVsYXkgPSAoMS4wIC8gKGdGcmFtZXNQZXJTZWNvbmQgLyAz
LjApKTsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ5LDE1MCArNDksMjYxIEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICA6
IG1fd2ViVmlldyh3ZWJWaWV3KQotICAgICwgbV9zeW5jVGltZXJDYWxsYmFja0lkKDApCi0gICAg
LCBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIoMCkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyQ2Fs
bGJhY2tJZCgwKQorICAgICwgbV9yZWRpcmVjdGVkV2luZG93KFJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93OjpjcmVhdGUoSW50U2l6ZSgxLCAxKSkpCisgICAgLCBtX2xhc3RGbHVzaFRpbWUoMCkK
KyAgICAsIG1fcmVkcmF3UGVuZGluZ1RpbWUoMCkKK3sKK30KKworc3RhdGljIEludFNpemUgZ2V0
V2ViVmlld1NpemUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBHdGtBbGxvY2F0aW9u
IGFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihHVEtfV0lER0VUKHdl
YlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgcmV0dXJuIEludFNpemUoYWxsb2NhdGlvbi53aWR0
aCwgYWxsb2NhdGlvbi5oZWlnaHQpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0Ojppbml0aWFsaXplKCkKIHsKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwor
ICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworCisgICAgSW50U2l6ZSBw
YWdlU2l6ZSA9IGdldFdlYlZpZXdTaXplKG1fd2ViVmlldyk7CisgICAgbV9yb290TGF5ZXItPnNl
dFNpemUocGFnZVNpemUpOworCisgICAgLy8gVGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnRzIGFy
ZSBhIGNoaWxkIG9mIHRoZSByb290IGxheWVyLgorICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKCFtX3dlYlZpZXctPnByaXYtPnRyYW5zcGFy
ZW50KTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUocGFnZVNpemUp
OworICAgIGlmIChjb3JlKG1fd2ViVmlldyktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRBY2Nl
bGVyYXRlc0RyYXdpbmcodHJ1ZSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXIt
PnNldE5hbWUoIlJvb3QgbGF5ZXIiKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldE5hbWUoIk5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAgbV9yb290
TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7CisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIC8v
IFRoZSBjcmVhdGlvbiBvZiB0aGUgVGV4dHVyZU1hcHBlciBuZWVkcyBhbiBhY3RpdmUgT3BlbkdM
IGNvbnRleHQuCisgICAgR0xDb250ZXh0KiBjb250ZXh0ID0gbV9yZWRpcmVjdGVkV2luZG93LT5j
b250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV90ZXh0
dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKworICAgIHRvVGV4dHVyZU1h
cHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVN
YXBwZXIuZ2V0KCkpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0Ojp+QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoKQog
ewotICAgIGlmIChtX3N5bmNUaW1lckNhbGxiYWNrSWQpCi0gICAgICAgIGdfc291cmNlX3JlbW92
ZShtX3N5bmNUaW1lckNhbGxiYWNrSWQpOworICAgIGlmIChtX2xheWVyRmx1c2hUaW1lckNhbGxi
YWNrSWQpCisgICAgICAgIGdfc291cmNlX3JlbW92ZShtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNr
SWQpOwogfQogCiBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjplbmFibGVkKCkK
IHsKLSAgICByZXR1cm4gbV9yb290VGV4dHVyZU1hcHBlckxheWVyICYmIG1fdGV4dHVyZU1hcHBl
cjsKKyAgICByZXR1cm4gbV9yb290TGF5ZXIgJiYgbV90ZXh0dXJlTWFwcGVyOwogfQogCi1HTENv
bnRleHQqIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpnbENvbnRleHQoKQorYm9vbCBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3coY2Fpcm9f
dCogY3IsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewotICAgIGlmIChtX2NvbnRleHQpCi0g
ICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CisgICAgbV9yZWRyYXdQZW5kaW5nVGltZSA9
IDA7CiAKLSNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQotICAgIC8vIEZJWE1FOiBHcmFj
ZWZ1bGx5IGFjY291bnQgZm9yIHNpdHVhdGlvbnMgd2hlcmUgd2UgZG8gbm90IGhhdmUgYSByZWFs
aXplZCB3aW5kb3cuCi0gICAgR2RrV2luZG93KiBnZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dldF93
aW5kb3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKLSAgICBpZiAoZ2RrV2luZG93ICYmIGdka193
aW5kb3dfaGFzX25hdGl2ZShnZGtXaW5kb3cpKQotICAgICAgICBtX2NvbnRleHQgPSBHTENvbnRl
eHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3coR0RLX1dJTkRPV19YSUQoZ2RrV2luZG93KSwgR0xD
b250ZXh0OjpzaGFyaW5nQ29udGV4dCgpKTsKLSNlbmRpZgorICAgIGlmICghZW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBwYWludCBh
IHdoaXRlIGJhY2tncm91bmQgKGlmIHRoZSBXZWJWaWV3IGlzbid0IHRyYW5zcGFyZW50KSwgYmVj
YXVzZSB3aGVuIGdyb3dpbmcKKyAgICAvLyB0aGUgcmVkaXJlY3RlZCB3aW5kb3csIHRoZSB1c2Fi
bGUgc2l6ZSBvZiB0aGUgd2luZG93IG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIGFsbG9jYXRpb24g
b2Ygb3VyIHdpZGdldC4KKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNob3cgYXJ0aWZhY3RzIGlu
IHRoYXQgY2FzZS4KKyAgICBJbnRTaXplIHVzYWJsZVdpbmRvd1NpemUgPSBtX3JlZGlyZWN0ZWRX
aW5kb3ctPnVzYWJsZVNpemUoKTsKKyAgICBpZiAodXNhYmxlV2luZG93U2l6ZSAhPSBtX3JlZGly
ZWN0ZWRXaW5kb3ctPnNpemUoKSkgeworICAgICAgICBpZiAoIW1fd2ViVmlldy0+cHJpdi0+dHJh
bnNwYXJlbnQpIHsKKyAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAxLCAxLCAx
KTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3Is
IENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IpOworICAgIH0K
KworCisgICAgY2Fpcm9fc3VyZmFjZV90KiB3aW5kb3dTdXJmYWNlID0gbV9yZWRpcmVjdGVkV2lu
ZG93LT5jYWlyb1N1cmZhY2VGb3JXaWRnZXQoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBp
ZiAoIXdpbmRvd1N1cmZhY2UpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIHVzYWJsZVdpbmRv
d1NpemUud2lkdGgoKSwgdXNhYmxlV2luZG93U2l6ZS5oZWlnaHQoKSk7CisgICAgY2Fpcm9fc2V0
X3NvdXJjZV9zdXJmYWNlKGNyLCB3aW5kb3dTdXJmYWNlLCAwLCAwKTsKKyAgICBjYWlyb19zZXRf
b3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fZmlsbChjcik7
CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCAmJiB0b1RleHR1cmVNYXBw
ZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdB
bmltYXRpb25zKCkpIHsKKyAgICAgICAgZG91YmxlIG5leHRGbHVzaCA9IG1heCgoMSAvIGdGcmFt
ZXNQZXJTZWNvbmQpIC0gKGN1cnJlbnRUaW1lKCkgLSBtX2xhc3RGbHVzaFRpbWUpLCAwLjApOwor
ICAgICAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwo
R0RLX1BSSU9SSVRZX0VWRU5UUywgMTAwMCAqIG5leHRGbHVzaCwgcmVpbnRlcnByZXRfY2FzdDxH
U291cmNlRnVuYz4obGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayksIHRoaXMsIDApOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0OjpyZW5kZXJMYXllcnNUb1dpbmRvdyhjYWlyb190KiwgY29uc3QgSW50UmVjdCYgY2xp
cFJlY3QpCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpjb21wb3NpdGVMYXll
cnNUb0NvbnRleHQoKQogewogICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybjsKIAotICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4
dCgpOworICAgIEdMQ29udGV4dCogY29udGV4dCA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y29udGV4
dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsKIAotICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQobV93ZWJW
aWV3KSwgJmFsbG9jYXRpb24pOwotICAgIGdsVmlld3BvcnQoMCwgMCwgYWxsb2NhdGlvbi53aWR0
aCwgYWxsb2NhdGlvbi5oZWlnaHQpOworICAgIGNvbnN0IEludFNpemUmIHdpbmRvd1NpemUgPSBt
X3JlZGlyZWN0ZWRXaW5kb3ctPnNpemUoKTsKKyAgICBnbFZpZXdwb3J0KDAsIDAsIHdpbmRvd1Np
emUud2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7CiAKICAgICBtX3RleHR1cmVNYXBwZXIt
PmJlZ2luUGFpbnRpbmcoKTsKLSAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXItPnBhaW50KCk7
CisgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5wYWludCgpOwog
ICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKIAogICAgIGNvbnRleHQtPnN3YXBC
dWZmZXJzKCk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIpCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzZXRSb290Q29t
cG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewogICAgIGlmICgh
Z3JhcGhpY3NMYXllcikgewotICAgICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLmNsZWFyKCk7Ci0g
ICAgICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllciA9IDA7Ci0gICAgICAgIG1fY29udGV4dC5j
bGVhcigpOworICAgICAgICBpZiAobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKSB7CisgICAg
ICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKTsKKyAg
ICAgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IDA7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBTaHJpbmsgdGhlIG9mZnNjcmVlbiB3aW5kb3cgdG8gc2F2ZSBtZW1vcnkgd2hp
bGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgdHVybmVkIG9mZi4KKyAgICAgICAgbV9yZWRp
cmVjdGVkV2luZG93LT5yZXNpemUoSW50U2l6ZSgxLCAxKSk7CisgICAgICAgIG1fcm9vdExheWVy
ID0gbnVsbHB0cjsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gbnVsbHB0
cjsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUo
dGhpcyk7Ci0gICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5
ZXIobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+
YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0RHJh
d3NDb250ZW50KHRydWUpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE1hc2tzVG9Cb3Vu
ZHMoZmFsc2UpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwot
ICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldFNpemUoY29yZShtX3dlYlZpZXcpLT5tYWluRnJh
bWUoKS0+dmlldygpLT5mcmFtZVJlY3QoKS5zaXplKCkpOwotCi0gICAgR0xDb250ZXh0KiBjb250
ZXh0ID0gZ2xDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBUaGUgY29udGV4dCBuZWVkcyB0byBiZSBhY3RpdmUgd2hlbiBjcmVhdGluZyB0aGUg
dGV4dHVyZSBtYXBwZXIuIEl0J3MgZmluZSB0bwotICAgIC8vIGF2b2lkIGNhbGxpbmcgc3dhcEJ1
ZmZlcnMgaGVyZSwgYmVjYXVzZSBpdCB3aWxsIGp1c3QgaW5pdGlhbGl6ZSBzaGFkZXJzLgotICAg
IGlmICghY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0
aW9uKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIGdsVmlld3BvcnQo
MCwgMCwgYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOworICAgIGlmIChncmFw
aGljc0xheWVyICYmICFlbmFibGVkKCkpCisgICAgICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+cmVz
aXplKGdldFdlYlZpZXdTaXplKG1fd2ViVmlldykpOwogCi0gICAgbV90ZXh0dXJlTWFwcGVyID0g
VGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKLSAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIt
PnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLSAgICBtX3Jvb3RHcmFw
aGljc0xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICAv
LyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGluaXRpYWxp
emUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVu
KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xh
eWVyKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6c2NoZWR1bGVSb290TGF5ZXJSZXBhaW50KGNvbnN0IEludFJlY3Qm
IHJlY3QpCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzZXROb25Db21wb3Np
dGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICgh
bV9yb290R3JhcGhpY3NMYXllcikKKyAgICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5
ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNw
bGF5KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZXNpemVSb290
TGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6OnJlc2l6ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBuZXdTaXplKQogewotICAgIGlm
ICghbV9yb290R3JhcGhpY3NMYXllcikKKyAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldFNpemUoc2l6ZSk7Ci0gICAgbV9yb290
R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisK
KyAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZShuZXdTaXplKTsKKyAgICBtX3Jvb3RM
YXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMg
bmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5
IGlzIG5lZWRlZAorICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZs
b2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7Cisg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAg
aWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgeworICAgICAgICBmbG9hdCBo
ZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9s
ZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXpl
LndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOworICAgIH0KKworICAgIGlmIChu
ZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNp
emUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUu
aGVpZ2h0KCkpKTsKKworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbmV3U2l6ZSkpOworICAgIGZsdXNoQW5k
UmVuZGVyTGF5ZXJzKCk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBzeW5jTGF5ZXJzVGltZW91dENh
bGxiYWNrKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNv
bnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKIHsK
LSAgICBjb250ZXh0LT5zeW5jTGF5ZXJzVGltZW91dCgpOworICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHNjcm9sbFJlY3QpOworICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworfQorCitnYm9vbGVhbiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayhBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5sYXllckZsdXNoVGltZXJGaXJlZCgp
OwogICAgIHJldHVybiBGQUxTRTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6bWFya0ZvclN5bmMoKQordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6
c2NoZWR1bGVMYXllckZsdXNoKCkKIHsKLSAgICBpZiAobV9zeW5jVGltZXJDYWxsYmFja0lkKQor
ICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9sYXllckZs
dXNoVGltZXJDYWxsYmFja0lkKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSB1c2UgYSBH
TGliIHRpbWVyIGJlY2F1c2Ugb3RoZXJ3aXNlIEdUSysgZXZlbnQgaGFuZGxpbmcgZHVyaW5nCi0g
ICAgLy8gZHJhZ2dpbmcgY2FuIHN0YXJ2ZSBXZWJDb3JlIHRpbWVycywgd2hpY2ggaGF2ZSBhIGxv
d2VyIHByaW9yaXR5LgotICAgIG1fc3luY1RpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRf
ZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PihzeW5jTGF5ZXJzVGltZW91dENhbGxiYWNrKSwgdGhpcywgMCk7CisgICAgLy8gV2UgdXNlIGEg
R0xpYiB0aW1lciBiZWNhdXNlIG90aGVyd2lzZSBHVEsrIGV2ZW50IGhhbmRsaW5nIGR1cmluZyBk
cmFnZ2luZyBjYW4KKyAgICAvLyBzdGFydmUgV2ViQ29yZSB0aW1lcnMsIHdoaWNoIGhhdmUgYSBs
b3dlciBwcmlvcml0eS4KKyAgICBkb3VibGUgbmV4dEZsdXNoID0gbWF4KGdTY2hlZHVsZURlbGF5
IC0gKGN1cnJlbnRUaW1lKCkgLSBtX2xhc3RGbHVzaFRpbWUpLCAwLjApOworICAgIG1fbGF5ZXJG
bHVzaFRpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZF
TlRTLCBuZXh0Rmx1c2ggKiAxMDAwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihsYXll
ckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKSwgdGhpcywgMCk7CiB9CiAKLXZvaWQgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnN5bmNMYXllcnNOb3coKQorYm9vbCBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKIHsKLSAgICBpZiAo
bV9yb290R3JhcGhpY3NMYXllcikKLSAgICAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBjb3JlKG1fd2ViVmlldykt
Pm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJh
bWVzKCk7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgcmV0dXJuIGNvcmUobV93ZWJWaWV3KS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMo
KTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c3luY0xheWVyc1Rp
bWVvdXQoKQordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Zmx1c2hBbmRSZW5k
ZXJMYXllcnMoKQogewotICAgIG1fc3luY1RpbWVyQ2FsbGJhY2tJZCA9IDA7Ci0gICAgc3luY0xh
eWVyc05vdygpOwotICAgIGlmICghbV9yb290R3JhcGhpY3NMYXllcikKKyAgICB7CisgICAgICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUobV93ZWJWaWV3KS0+bWFpbkZyYW1lKCk7CisgICAgICAgIGlm
ICghZnJhbWUgfHwgIWZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSB8fCAhZnJhbWUtPnZpZXcoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+dXBkYXRlTGF5b3V0
QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOworICAgIH0KKworICAgIEdMQ29udGV4dCogY29u
dGV4dCA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y29udGV4dCgpOworICAgIGlmIChjb250ZXh0ICYm
ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdEdyYXBoaWNzTGF5ZXIuZ2V0KCkpLT5kZXNj
ZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQotICAgICAgICBtX3N5bmNUaW1l
ckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgMTAw
MC4wIC8gNjAuMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc3luY0xheWVyc1RpbWVv
dXRDYWxsYmFjayksIHRoaXMsIDApOworICAgIG1fbGFzdEZsdXNoVGltZSA9IGN1cnJlbnRUaW1l
KCk7CisgICAgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7CiAKLSAgICByZW5kZXJMYXllcnNU
b1dpbmRvdygwLCBJbnRSZWN0KCkpOworICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhHVEtfV0lE
R0VUKG1fd2ViVmlldykpOworCisgICAgLy8gSWYgaXQncyBiZWVuIGEgbG9uZyB0aW1lIHNpbmNl
IHdlJ3ZlIGFjdHVhbGx5IHBhaW50ZWQsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbnRzIG1pZ2h0Cisg
ICAgLy8gYmUgc3RhcnZpbmcgdGhlIG1haW4gbG9vcCwgd2Ugc2hvdWxkIGZvcmNlIGEgZHJhdyBu
b3cuIFRoaXMgc2VlbXMgdG8gcHJldmVudCBkaXNwbGF5CisgICAgLy8gbGFnIG9uIGh0dHA6Ly8y
MDEyLmJlZXJjYW1wLmNvbS4KKyAgICBpZiAobV9yZWRyYXdQZW5kaW5nVGltZSAmJiBjdXJyZW50
VGltZSgpIC0gbV9yZWRyYXdQZW5kaW5nVGltZSA+IGdTY2hlZHVsZURlbGF5KQorICAgICAgICBn
ZGtfd2luZG93X3Byb2Nlc3NfdXBkYXRlcyhndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdF
VChtX3dlYlZpZXcpKSwgRkFMU0UpOworICAgIGVsc2UgaWYgKCFtX3JlZHJhd1BlbmRpbmdUaW1l
KQorICAgICAgICBtX3JlZHJhd1BlbmRpbmdUaW1lID0gY3VycmVudFRpbWUoKTsKK30KKwordm9p
ZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQor
eworICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IDA7CisgICAgZmx1c2hBbmRSZW5k
ZXJMYXllcnMoKTsKIH0KIAogdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCkBA
IC0yMDYsOSArMzE3LDEwIEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5v
dGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikKIAogdm9pZCBBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dDo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29u
c3QgSW50UmVjdCYgcmVjdFRvUGFpbnQpCiB7Ci0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIGNvcHlSZWN0RnJvbUNhaXJvU3VyZmFjZVRvQ29u
dGV4dChtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNlKCksIGNyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplKCksIHJlY3RUb1Bh
aW50KTsKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250ZXh0LmNsaXAocmVjdFRvUGFpbnQp
OworICAgIGNvcmUobV93ZWJWaWV3KS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+cGFpbnQoJmNvbnRl
eHQsIHJlY3RUb1BhaW50KTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KIAogYm9vbCBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBHcmFwaGlj
c0xheWVyKikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwCmluZGV4IDQxYzg0MDkyNDE4OWQ3YzhjNzAyOGQwMjQ3ZWY4
ZjkyYWI4YjE5ZmQuLjc0MGUzYmJjYTUxNTFkMGRiYzIzNDlmZjUyYWY0YWU5NWE3YTdmNTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
R3RrLmNwcApAQCAtMTQyLDE3ICsxNDIsMTggQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnNldFdpbmRv
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIH0KIH0KIAotRmxvYXRSZWN0IENocm9t
ZUNsaWVudDo6cGFnZVJlY3QoKQorc3RhdGljIEludFJlY3QgZ2V0V2ViVmlld1JlY3QoV2ViS2l0
V2ViVmlldyogd2ViVmlldykKIHsKICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0jaWYg
R1RLX0NIRUNLX1ZFUlNJT04oMiwgMTgsIDApCi0gICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlv
bihHVEtfV0lER0VUKG1fd2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSNlbHNlCi0gICAgYWxsb2Nh
dGlvbiA9IEdUS19XSURHRVQobV93ZWJWaWV3KS0+YWxsb2NhdGlvbjsKLSNlbmRpZgorICAgIGd0
a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24p
OwogICAgIHJldHVybiBJbnRSZWN0KGFsbG9jYXRpb24ueCwgYWxsb2NhdGlvbi55LCBhbGxvY2F0
aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7CiB9CiAKK0Zsb2F0UmVjdCBDaHJvbWVDbGll
bnQ6OnBhZ2VSZWN0KCkKK3sKKyAgICByZXR1cm4gZ2V0V2ViVmlld1JlY3QobV93ZWJWaWV3KTsK
K30KKwogdm9pZCBDaHJvbWVDbGllbnQ6OmZvY3VzKCkKIHsKICAgICBndGtfd2lkZ2V0X2dyYWJf
Zm9jdXMoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKQEAgLTQxOSwxMCArNDIwLDIwIEBAIHN0YXRp
YyB2b2lkIGNsZWFyRXZlcnl3aGVyZUluQmFja2luZ1N0b3JlKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIGNhaXJvX3QqIGNyKQogCiB2b2lkIENocm9tZUNsaWVudDo6d2lkZ2V0U2l6ZUNoYW5nZWQo
Y29uc3QgSW50U2l6ZSYgb2xkV2lkZ2V0U2l6ZSwgSW50U2l6ZSBuZXdTaXplKQogewotICAgIFdp
ZGdldEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlID0gbV93ZWJWaWV3LT5wcml2LT5iYWNraW5n
U3RvcmUuZ2V0KCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBjb21wb3NpdGluZ0NvbnRleHQgPSBtX3dlYlZpZXct
PnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOworICAgIGlmIChjb21w
b3NpdGluZ0NvbnRleHQtPmVuYWJsZWQoKSkgeworICAgICAgICBtX3dlYlZpZXctPnByaXYtPmFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZXNpemVSb290TGF5ZXIobmV3U2l6ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKIAogICAgIC8vIEdyb3cgdGhlIGJhY2tpbmcg
c3RvcmUgYnkgYXQgbGVhc3QgMS41IHRpbWVzIHRoZSBjdXJyZW50IHNpemUuIFRoaXMgcHJldmVu
dHMKICAgICAvLyBsb3RzIG9mIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zIGR1cmluZyBhbiBvcGFx
dWUgcmVzaXplLgorICAgIFdpZGdldEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlID0gbV93ZWJW
aWV3LT5wcml2LT5iYWNraW5nU3RvcmUuZ2V0KCk7CisgICAgaWYgKGJhY2tpbmdTdG9yZSAmJiBv
bGRXaWRnZXRTaXplID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChiYWNr
aW5nU3RvcmUpIHsKICAgICAgICAgY29uc3QgSW50U2l6ZSYgb2xkU2l6ZSA9IGJhY2tpbmdTdG9y
ZS0+c2l6ZSgpOwogICAgICAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgp
KQpAQCAtNTI2LDIwICs1MzcsNiBAQCBzdGF0aWMgdm9pZCBwYWludFdlYlZpZXcoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgRnJhbWUqIGZyYW1lLCBSZWdpb24gZGlydHlSZWdpbwogICAgIGdjLnJl
c3RvcmUoKTsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVXaWRnZXRSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
ICAgIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBhY0NvbnRleHQgPSBtX3dlYlZpZXct
PnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOwotICAgIGlmIChhY0Nv
bnRleHQtPmVuYWJsZWQoKSkgewotICAgICAgICBhY0NvbnRleHQtPnNjaGVkdWxlUm9vdExheWVy
UmVwYWludChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGd0a193
aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQobV93ZWJWaWV3KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWN0LngoKSwgcmVjdC55KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0KLQogdm9pZCBD
aHJvbWVDbGllbnQ6OnBlcmZvcm1BbGxQZW5kaW5nU2Nyb2xscygpCiB7CiAgICAgaWYgKCFtX3dl
YlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZSkKQEAgLTU0OSw3ICs1NDYsNyBAQCB2b2lkIENocm9t
ZUNsaWVudDo6cGVyZm9ybUFsbFBlbmRpbmdTY3JvbGxzKCkKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fcmVjdHNUb1Njcm9sbC5zaXplKCk7IGkrKykgewogICAgICAgICBJbnRSZWN0JiBz
Y3JvbGxSZWN0ID0gbV9yZWN0c1RvU2Nyb2xsW2ldOwogICAgICAgICBtX3dlYlZpZXctPnByaXYt
PmJhY2tpbmdTdG9yZS0+c2Nyb2xsKHNjcm9sbFJlY3QsIG1fc2Nyb2xsT2Zmc2V0c1tpXSk7Ci0g
ICAgICAgIGludmFsaWRhdGVXaWRnZXRSZWN0KHNjcm9sbFJlY3QpOworICAgICAgICBndGtfd2lk
Z2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKG1fd2ViVmlldyksIHNjcm9sbFJlY3QueCgp
LCBzY3JvbGxSZWN0LnkoKSwgc2Nyb2xsUmVjdC53aWR0aCgpLCBzY3JvbGxSZWN0LmhlaWdodCgp
KTsKICAgICB9CiAKICAgICBtX3JlY3RzVG9TY3JvbGwuY2xlYXIoKTsKQEAgLTU4NSwxMiArNTgy
LDcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnBhaW50KFdlYkNvcmU6OlRpbWVyPENocm9tZUNsaWVu
dD4qKQogICAgIH0KIAogICAgIGNvbnN0IEludFJlY3QmIHJlY3QgPSBtX2RpcnR5UmVnaW9uLmJv
dW5kcygpOwotICAgIGludmFsaWRhdGVXaWRnZXRSZWN0KHJlY3QpOwotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQtPnN5bmNMYXllcnNOb3coKTsKLSAgICBtX3dlYlZpZXctPnByaXYtPmFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZW5kZXJMYXllcnNUb1dpbmRvdygwLCByZWN0
KTsKLSNlbmRpZgorICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQobV93
ZWJWaWV3KSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwogCiAgICAgbV9kaXJ0eVJlZ2lvbiA9IFJlZ2lvbigpOwogICAgIG1fbGFzdERpc3BsYXlUaW1l
ID0gY3VycmVudFRpbWUoKTsKQEAgLTYwNiw2ICs1OTgsMTEgQEAgdm9pZCBDaHJvbWVDbGllbnQ6
OnBhaW50KFdlYkNvcmU6OlRpbWVyPENocm9tZUNsaWVudD4qKQogCiB2b2lkIENocm9tZUNsaWVu
dDo6Zm9yY2VQYWludCgpCiB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IGlmIChtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5lbmFi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgbV9mb3JjZVBhaW50ID0gdHJ1
ZTsKICAgICBwYWludCgwKTsKICAgICBtX2ZvcmNlUGFpbnQgPSBmYWxzZTsKQEAgLTYxNyw2ICs2
MTQsMTQgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVSb290Vmlldyhjb25zdCBJbnRS
ZWN0JiwgYm9vbCBpbW1lZGlhdGUpCiAKIHZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlQ29u
dGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0
ZSkKIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQqIGFjQ29udGV4dCA9IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7CisgICAgaWYgKGFjQ29udGV4dC0+ZW5hYmxlZCgp
KSB7CisgICAgICAgIGFjQ29udGV4dC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3Bs
YXkodXBkYXRlUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIGlm
ICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fZGlydHlSZWdp
b24udW5pdGUodXBkYXRlUmVjdCk7CkBAIC02MjUsMTIgKzYzMCwzNCBAQCB2b2lkIENocm9tZUNs
aWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgdXBkYXRl
UmVjdCwgYm9vbAogCiB2b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xv
d1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIGltbWVkaWF0ZSkKIHsKLSAg
ICBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyh1cGRhdGVSZWN0LCBpbW1lZGlhdGUpOwog
ICAgIG1fYWRqdXN0bWVudFdhdGNoZXIudXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFyc0xh
dGVyKCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQqIGFjQ29udGV4dCA9IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7CisgICAgaWYgKGFjQ29udGV4dC0+ZW5hYmxl
ZCgpKSB7CisgICAgICAgIGFjQ29udGV4dC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERp
c3BsYXkodXBkYXRlUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAg
IGludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KHVwZGF0ZVJlY3QsIGltbWVkaWF0ZSk7CiB9
CiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgZGVsdGEsIGNvbnN0
IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CisgICAg
bV9hZGp1c3RtZW50V2F0Y2hlci51cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzTGF0ZXIo
KTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dCogY29tcG9zaXRpbmdDb250ZXh0ID0gbV93ZWJWaWV3LT5wcml2LT5h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5nZXQoKTsKKyAgICBpZiAoY29tcG9zaXRpbmdD
b250ZXh0LT5lbmFibGVkKCkpIHsKKyAgICAgICAgQVNTRVJUKCFyZWN0VG9TY3JvbGwuaXNFbXB0
eSgpKTsKKyAgICAgICAgQVNTRVJUKCFkZWx0YS5pc0VtcHR5KCkpOworCisgICAgICAgIGNvbXBv
c2l0aW5nQ29udGV4dC0+c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKHJlY3RUb1Njcm9sbCwg
ZGVsdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICBtX3JlY3RzVG9T
Y3JvbGwuYXBwZW5kKHJlY3RUb1Njcm9sbCk7CiAgICAgbV9zY3JvbGxPZmZzZXRzLmFwcGVuZChk
ZWx0YSk7CiAKQEAgLTY1Nyw4ICs2ODQsNiBAQCB2b2lkIENocm9tZUNsaWVudDo6c2Nyb2xsKGNv
bnN0IEludFNpemUmIGRlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbgogCiAg
ICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShzY3JvbGxSZXBhaW50UmVnaW9uKTsKICAgICBtX2Rpc3Bs
YXlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0KLSAgICBtX2FkanVzdG1lbnRXYXRjaGVyLnVwZGF0
ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnNMYXRlcigpOwogfQogCiBJbnRSZWN0IENocm9tZUNs
aWVudDo6cm9vdFZpZXdUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdApAQCAtOTY2
LDE3ICs5OTEsMzIgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmV4aXRGdWxsU2NyZWVuRm9yRWxlbWVu
dChXZWJDb3JlOjpFbGVtZW50KikKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2
b2lkIENocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBH
cmFwaGljc0xheWVyKiByb290TGF5ZXIpCiB7Ci0gICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dC0+YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIocm9vdExheWVy
KTsKKyAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29udGV4dCA9IG1fd2ViVmll
dy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7CisgICAgYm9vbCB0
dXJuaW5nT2ZmQ29tcG9zaXRpbmcgPSAhcm9vdExheWVyICYmIGNvbnRleHQtPmVuYWJsZWQoKTsK
KyAgICBib29sIHR1cm5pbmdPbkNvbXBvc2l0aW5nID0gcm9vdExheWVyICYmICFjb250ZXh0LT5l
bmFibGVkKCk7CisKKyAgICBjb250ZXh0LT5zZXRSb290Q29tcG9zaXRpbmdMYXllcihyb290TGF5
ZXIpOworCisgICAgaWYgKHR1cm5pbmdPbkNvbXBvc2l0aW5nKSB7CisgICAgICAgIG1fZGlzcGxh
eVRpbWVyLnN0b3AoKTsKKyAgICAgICAgbV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUgPSBX
ZWJDb3JlOjpXaWRnZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShHVEtfV0lER0VUKG1fd2ViVmlldyks
IEludFNpemUoMSwgMSkpOworICAgIH0KKworICAgIGlmICh0dXJuaW5nT2ZmQ29tcG9zaXRpbmcp
IHsKKyAgICAgICAgbV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUgPSBXZWJDb3JlOjpXaWRn
ZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShHVEtfV0lER0VUKG1fd2ViVmlldyksIGdldFdlYlZpZXdS
ZWN0KG1fd2ViVmlldykuc2l6ZSgpKTsKKyAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRv
cHRSZWYoY2Fpcm9fY3JlYXRlKG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLT5jYWlyb1N1
cmZhY2UoKSkpOworICAgICAgICBjbGVhckV2ZXJ5d2hlcmVJbkJhY2tpbmdTdG9yZShtX3dlYlZp
ZXcsIGNyLmdldCgpKTsKKyAgICB9CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpzZXROZWVkc09u
ZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkKIHsKLSAgICBtX3dlYlZpZXctPnByaXYtPmFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5tYXJrRm9yU3luYygpOworICAgIG1fd2ViVmll
dy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnNjaGVkdWxlTGF5ZXJGbHVz
aCgpOwogfQogCiB2b2lkIENocm9tZUNsaWVudDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3lu
YygpCiB7Ci0gICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dC0+bWFya0ZvclN5bmMoKTsKKyAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0LT5zY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAogQ2hyb21lQ2xpZW50OjpD
b21wb3NpdGluZ1RyaWdnZXJGbGFncyBDaHJvbWVDbGllbnQ6OmFsbG93ZWRDb21wb3NpdGluZ1Ry
aWdnZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50R3RrLmgKaW5kZXggZTVlMmZhMWViMDIyZmI2NDFkZjM2ZDJhY2ViMTJiZDBi
Y2U0MzQ3YS4uMjg0YmRhYTM2NjA2YWUxNWFiYmMxNTZiM2VlOGUyMTVkNzJjMWUxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgK
QEAgLTE3OSw3ICsxNzksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAgICAgZG91YmxlIG1f
bGFzdERpc3BsYXlUaW1lOwogICAgICAgICB1bnNpZ25lZCBpbnQgbV9yZXBhaW50U29vblNvdXJj
ZUlkOwogCi0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVdpZGdldFJlY3QoY29uc3QgSW50UmVjdCYp
OwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1f
ZnVsbFNjcmVlbkVsZW1lbnQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcAppbmRleCA4ODcwNzIxMTYxOTlmNzc3OGRhNzRlNTI0MTI2MGIwZWNhZDVi
NWNmLi5lNzhhMTk2Zjc5NzY2YjExMTc5NTQzMzAzNmExMzZmNDViMWZjOTg5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC02NzksOCArNjc5LDEwIEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhdyhHdGtXaWRnZXQqIHdpZGdldCwg
Y2Fpcm9fdCogY3IpCiAKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9X
RUJfVklFVyh3aWRnZXQpLT5wcml2OwogI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBpZiAo
cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJlbmRlckxheWVyc1RvV2luZG93
KGNyLCBjbGlwUmVjdCkpCisgICAgaWYgKHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0LT5yZW5kZXJMYXllcnNUb1dpbmRvdyhjciwgY2xpcFJlY3QpKSB7CisgICAgICAgIEdUS19X
SURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmRyYXcod2lkZ2V0LCBj
cik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGNhaXJvX3Jl
Y3RhbmdsZV9saXN0X3QqIHJlY3RMaXN0ID0gY2Fpcm9fY29weV9jbGlwX3JlY3RhbmdsZV9saXN0
KGNyKTsKQEAgLTg3NSwxNSArODc3LDE2IEBAIHN0YXRpYyB2b2lkIHJlc2l6ZVdlYlZpZXdGcm9t
QWxsb2NhdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtBbGxvY2F0aW9uKiBhCiAgICAg
V2ViS2l0OjpDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCA9IHN0YXRpY19jYXN0PFdlYktpdDo6
Q2hyb21lQ2xpZW50Kj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKTsKICAgICBjaHJvbWVDbGll
bnQtPndpZGdldFNpemVDaGFuZ2VkKG9sZFNpemUsIEludFNpemUoYWxsb2NhdGlvbi0+d2lkdGgs
IGFsbG9jYXRpb24tPmhlaWdodCkpOwogICAgIGNocm9tZUNsaWVudC0+YWRqdXN0bWVudFdhdGNo
ZXIoKS0+dXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFycygpOwotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHdlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0LT5yZXNpemVSb290TGF5ZXIoSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwg
YWxsb2NhdGlvbi0+aGVpZ2h0KSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl92aWV3X3NpemVfYWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24qIGFs
bG9jYXRpb24pCiB7CisgICAgR3RrQWxsb2NhdGlvbiBvbGRBbGxvY2F0aW9uOworICAgIGd0a193
aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmb2xkQWxsb2NhdGlvbik7CisKICAgICBHVEtf
V0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRl
KHdpZGdldCwgYWxsb2NhdGlvbik7CisgICAgaWYgKGFsbG9jYXRpb24tPndpZHRoID09IG9sZEFs
bG9jYXRpb24ud2lkdGggJiYgYWxsb2NhdGlvbi0+aGVpZ2h0ID09IG9sZEFsbG9jYXRpb24uaGVp
Z2h0KQorICAgICAgICByZXR1cm47CiAKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdpZGdldCk7CiAgICAgaWYgKCFndGtfd2lkZ2V0X2dldF9tYXBwZWQod2lk
Z2V0KSkgewpAQCAtMTAwMywxMCArMTAwNiw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d19yZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQogI2VuZGlmCiAgICAgR2RrV2luZG93KiB3aW5k
b3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0X2dldF9wYXJlbnRfd2luZG93KHdpZGdldCks
ICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzX21hc2spOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgV2ViS2l0V2ViVmlld1By
aXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+cHJpdjsKLSAgICBwcml2LT5o
YXNOYXRpdmVXaW5kb3cgPSBnZGtfd2luZG93X2Vuc3VyZV9uYXRpdmUod2luZG93KTsKLSNlbmRp
ZgogICAgIGd0a193aWRnZXRfc2V0X3dpbmRvdyh3aWRnZXQsIHdpbmRvdyk7CiAgICAgZ2RrX3dp
bmRvd19zZXRfdXNlcl9kYXRhKHdpbmRvdywgd2lkZ2V0KTsKIApkaWZmIC0tZ2l0IGEvQ2hhbmdl
TG9nIGIvQ2hhbmdlTG9nCmluZGV4IDRjNmMzZTk3M2FiNTY4YTgzNDcwODAxNzc1MGI0MWQ1OTgw
MWRmYjIuLmEyMzAzODFlYWFhMjUwY2RmYjAzZjNmMjI3NjI1NjYyMTc3YjZjOTkgMTAwNjQ0Ci0t
LSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNy0x
MyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gVXNpbmcgYSBuYXRpdmUgd2luZG93IGZvciB0aGUgV2ViVmlldyBicmVha3MgR3RrT3Zlcmxh
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAwODUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbmZp
Z3VyZS5hYzogUGFyc2UgeGNvbXBvc2l0ZSBwa2ctY29uZmlnIGZpbGUgZHVyaW5nIGNvbmZpZ3Vy
YXRpb24uCisKIDIwMTItMDgtMDkgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAgPHJha3Vjb0B3ZWJr
aXQub3JnPgogCiAgICAgICAgIFtDTWFrZV0gQnVtcCBtaW5pbXVtIHJlcXVpcmVkIHZlcnNpb24g
dG8gMi44LjMuCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXgg
N2VhNWI5NWVlYmY3NDIwZWM4OThhMzU1OWYzMTFjMjAyOGM0NWNmMS4uMmY4NTg0YTBkYzFkYmY5
ZDA4N2Y0MzE5OTljZWVlZjg3YzE5YWRmZSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBi
L2NvbmZpZ3VyZS5hYwpAQCAtNTY1LDYgKzU2NSwxMCBAQCBBQ19BUkdfV0lUSChhY2NlbGVyYXRp
b25fYmFja2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiBBQ19NU0dfUkVTVUxU
KFskd2l0aF9hY2NlbGVyYXRpb25fYmFja2VuZF0pCiAKK2lmIHRlc3QgIiR3aXRoX2FjY2VsZXJh
dGlvbl9iYWNrZW5kIiA9ICJvcGVuZ2wiOyB0aGVuCisgICAgUEtHX0NIRUNLX01PRFVMRVMoW1hD
T01QT1NJVEVdLCBbeGNvbXBvc2l0ZV0pOworZmkKKwogIyBPcGVuR0wgaXMgdHVybmVkIG9uIGJ5
IGRlZmF1bHQgKGFsb25nIHdpdGggV2ViR0wgYW5kIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nKSwg
YnV0IGlmCiAjIENsdXR0ZXIgaXMgY2hvc2VuIGFzIHRoZSBhY2NlbGVyYXRlZCBkcmF3aW5nIGJh
Y2tlbmQsIHdlIHdhbnQgdG8gZGlzYWJsZSBpdC4gQ09HTCBkb2VzIAogIyBub3QgcGxheSB3ZWxs
IHdpdGggT3BlbkdMLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159158</attachid>
            <date>2012-08-17 10:49:45 -0700</date>
            <delta_ts>2012-08-19 23:38:16 -0700</delta_ts>
            <desc>Patch fixing issues with scrolling</desc>
            <filename>bug-90085-20120817104909.patch</filename>
            <type>text/plain</type>
            <size>55913</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWVhMTBkY2I4OWMxNTg5
NTBkYTQwOTA0ZDE0NTgwYWE1NThkMGVhYy4uYzExYTIxMjBhNzE0OGNiOTY0M2QxZTZlMmI5YjY1
Yjk0YzM3Nzk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2lu
ZyBhIG5hdGl2ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGhpcyB3aWxsIGJlIGNvdmVyZWQgYnkgcGl4ZWwgdGVzdCBmb3IgYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgd2hlbiB0aGV5IGFyZSBhY3RpdmF0ZWQuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOiBBZGQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZmlsZXMgdG8g
dGhlIHNvdXJjZSBsaXN0LgorICAgICAgICBNYWtlIGEgbmV3IHNlY3Rpb24gZm9yIEdMWCBzcGVj
aWZpYyBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xY
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSk6IEV4
cG9zZSBzaGFyZWREaXNwbGF5IGFzIGEgc3RhdGljIG1ldGhvZAorICAgICAgICBzbyB0aGF0IGl0
IGNhbiBiZSBjYWxsZWQgYnkgb3RoZXIgWDExIHNwZWNpZmljIGNvZGUuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBBZGRlZC4gQW4gaW1wbGVt
ZW50YXRpb24gb2YgYSBHTCBzdXJmYWNlCisgICAgICAgIHRoYXQgcmVuZGVycyB0byBhbiBYLXdp
bmRvdyB3aGljaCByZWRpcmVjdHMgdG8gYSBwaXhtYXAuCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg6IEFkZGVkLgorCiAyMDEyLTA4LTEzICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBJ
bXBsZW1lbnRhdGlvbiBvZiBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dCBpZ25vcmVzICds
ZW5ndGgnIHBhcmFtZXRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDQ5MmVlYmYwYmU4MDdjOTYxZjQy
NmM1NzYzYjYyYTM1Mzg2NjA5NzQuLjU1MmVmMjYyN2FhM2JhMzIyZDMwN2NiMDhkZWYzM2E2MjQ1
ZTcwMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMi0wOC0xNiAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXNp
bmcgYSBuYXRpdmUgd2luZG93IGZvciB0aGUgV2ViVmlldyBicmVha3MgR3RrT3ZlcmxheQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAwODUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXdyaXRlIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0IGZvciBUZXh0dXJlTWFwcGVyR0wgdG8gYmUgbW9yZSBz
aW1pbGFyIHRvCisgICAgICAgIHRoZSBXZWJLaXQyIExheWVyVHJlZUhvc3QgYW5kIHN3aXRjaCBm
cm9tIHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgd2lkZ2V0IHdpbmRvdworICAgICAgICB0byBh
IHdpbmRvdyByZWRpcmVjdGVkIHRvIGEgcGl4bWFwIHZpYSBYQ29tcG9zaXRlLiBUaGUgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQKKyAgICAgICAgbm93IGhhbmRsZXMgcGFpbnRpbmcgdGhl
IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgaXRzZWxmIGFuZCBubyBsb25nZXIgcmVsaWVzIG9uIHRo
ZQorICAgICAgICBDaHJvbWVDbGllbnQgYmFja2luZyBzdG9yZS4KKworICAgICAgICBUaGlzIGZp
eGVzIGlzc3VlcyB3aXRoIHVzaW5nIEd0a092ZXJsYXkgV2ViS2l0V2ViVmlldyBhcyB3ZWxsIGFz
IG1ha2luZyBpdCBwb3NzaWJsZQorICAgICAgICB0byBydW4gcGl4ZWwgdGVzdHMgd2l0aCBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyB0dXJuZWQgb24uCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oOgorICAgICAgICAoQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0R0wuY3BwOgorICAgICAgICBSZW5hbWUgc29tZSBtZXRob2RzIHRv
IG1ha2UgdGhlbSBtb3JlIHNpbWlsYXIgdG8gTGF5ZXJUcmVlSG9zdC4gTm93IHdlIHdhaXQgdG8g
cmVuZGVyCisgICAgICAgIHRoZSBPcGVuR0wgY29udGV4dCB0byB0aGUgd2luZG93IHVudGlsIHRo
ZSB3aWRnZXQncyBkcmF3IHNpZ25hbC4gRXNjYXBlIG91dCBvZiBhbGwKKyAgICAgICAgbWV0aG9k
cyBlYXJseSBpZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBkaXNhYmxlZC4KKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOiBBbHdheXMgY2hlY2sgaWYgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgb24KKyAgICAgICAgYmVmb3JlIGNhbGxpbmcgaW50byBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCBtZXRob2RzLiBXaGVuIEFDIGlzIG9uLCBuZXZl
ciBwYWludAorICAgICAgICB0aGUgYmFja2luZyBzdG9yZSwgZGVmZXJyaW5nIGltbWVkaWF0ZWx5
IHRvIHRoZSBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC4gV2hlbgorICAgICAgICBBQyBp
cyB0dXJuZWQgb24gdGhlIGJhY2tpbmcgc3RvcmUgbm93IHNocmlua3MgdG8gYSBzbWFsbCBzaXpl
IHRvIHNhdmUgbWVtb3J5LgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAg
ICAgICAgKHJlc2l6ZVdlYlZpZXdGcm9tQWxsb2NhdGlvbik6IENocm9tZUNsaWVudCBpcyBub3cg
cmVzcG9uc2libGUgZm9yIHRhbGtpbmcgdG8gdGhlCisgICAgICAgIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0IGRpcmVjdGx5LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NpemVfYWxs
b2NhdGUpOiBFeGl0IGVhcmx5IGlmIHRoZSBhbGxvY2F0aW9uIGlzIG5vdCBhIHJlc2l6ZS4gVGhp
cworICAgICAgICBtYWtlcyBzb21lIGRlZXBlciBsb2dpYyBhIGJpdCBzaW1wbGVyIGFuZCBhdm9p
ZHMgYWNjaWRlbnRhbGx5IGRvaW5nIHRvbyBtdWNoIHdvcmsgZm9yCisgICAgICAgIHdpZGdldCBt
b3ZlbWVudC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsaXplKTogV2Ugbm8gbG9uZ2Vy
IG5lZWQgYSBuYXRpdmUgd2luZG93LgorCiAyMDEyLTA4LTEzICBNYXJ0aW4gUm9iaW5zb24gIDxt
cm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBEZWZhdWx0IHNpZ25hbCBoYW5k
bGVyIGZvciBXZWJLaXRXZWJWaWV3OjpzaG91bGQtc2hvdy1kZWxldGUtaW50ZXJmYWNlLWZvci1l
bGVtZW50IG92ZXJyaWRlcyBkZWZhdWx0IHJlc3VsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBl
NzE0YzVhZGFlMGRjNGIyYzhjNTNhYTgzM2FlMGJlNmEzYzUwYTE3Li41OGY0NzA0MTAzYTAwMzc3
NzRiOTMxZDExYjliMDcyNGE3MjcyMmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTA3Miw2
ICsxMDcyLDcgQEAgbGliV2ViQ29yZUd0a19sYV9DUFBGTEFHUyA9IFwKIAkkKExJQlhTTFRfQ0ZM
QUdTKSBcCiAJJChTUUxJVEUzX0NGTEFHUykgXAogCSQoVU5JQ09ERV9DRkxBR1MpIFwKKwkkKFhD
T01QT1NJVEVfQ0ZMQUdTKSBcCiAJJChYUkVOREVSX0NGTEFHUykgXAogCSQoWFRfQ0ZMQUdTKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA3ZjUyYWYxNzNkNTI1NjFkMjgyZWFm
OWQ2ZjkxMzM4YzQyNzExOWFjLi4wZmM3ZWVkODA3YmU0MTU2MjhjMTZkYmI5MGZlYTMzNGY4NWMw
MGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ5MjEsNiArNDkyMSw4IEBA
IHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR0xDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR0xDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtX
aWRnZXRCYWNraW5nU3RvcmVYMTEuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ndGsvZ3RrMnh0YmluLmMgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
TENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xD
b250ZXh0LmNwcAppbmRleCA2ZWI5OTA0ZWNiMmEyNmQwNzlhMDFiZWE3ZGNiZmRlMzY1ZmI5NzQ3
Li43MzA0NjNhY2UxOThlODZiMDc4ZWVhNDZiYTI0ZjYzYTU2ZmFiZTE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAKQEAg
LTM2LDEwICszNiwxMCBAQCBHTENvbnRleHQqIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKQog
ICAgIHJldHVybiBzaGFyaW5nLmdldCgpOwogfQogCi1QYXNzT3duUHRyPEdMQ29udGV4dD4gR0xD
b250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHVpbnQ2NF90IHdpbmRvd0hhbmRsZSwgR0xD
b250ZXh0KiBzaGFyaW5nQ29udGV4dCkKK1Bhc3NPd25QdHI8R0xDb250ZXh0PiBHTENvbnRleHQ6
OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3codWludDY0X3Qgd2luZG93SGFuZGxlLCBHTENvbnRleHQq
IHNoYXJpbmdDb250ZXh0LCBCdWZmZXJpbmdUeXBlIGJ1ZmZlcmluZ1R5cGUpCiB7CiAjaWYgVVNF
KEdMWCkKLSAgICByZXR1cm4gR0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KHdpbmRvd0hhbmRs
ZSwgc2hhcmluZ0NvbnRleHQpOworICAgIHJldHVybiBHTENvbnRleHRHTFg6OmNyZWF0ZUNvbnRl
eHQod2luZG93SGFuZGxlLCBzaGFyaW5nQ29udGV4dCwgYnVmZmVyaW5nVHlwZSk7CiAjZW5kaWYK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTUxLDcgKzUxLDcgQEAgR0xDb250ZXh0OjpHTENv
bnRleHQoKQogUGFzc093blB0cjxHTENvbnRleHQ+IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVu
Q29udGV4dChHTENvbnRleHQqIHNoYXJpbmcpCiB7CiAjaWYgVVNFKEdMWCkKLSAgICByZXR1cm4g
R0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KDAsIHNoYXJpbmcpOworICAgIHJldHVybiBHTENv
bnRleHRHTFg6OmNyZWF0ZUNvbnRleHQoMCwgc2hhcmluZywgU2luZ2xlQnVmZmVyKTsKICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HTENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dM
Q29udGV4dC5oCmluZGV4IGMyM2E0NmNmMTMzMDJjNDhlZDBjYmUwM2IzNWNiNTVhNjFlOTQ4MmMu
LmY2NmIwNzI3YmJiYTVjMzQ5NTQyZTBlNzE4MmY3MmMwODM0YWE1YWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCkBAIC0zMCw3
ICszMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdMQ29udGV4dCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoR0xDb250ZXh0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxHTENvbnRleHQ+IGNyZWF0ZUNvbnRleHRGb3JXaW5kb3codWludDY0X3Qgd2luZG93SGFu
ZGxlLCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KTsKKyAgICBlbnVtIEJ1ZmZlcmluZ1R5cGUg
eyBEb3VibGVCdWZmZXIsIFNpbmdsZUJ1ZmZlciB9OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8
R0xDb250ZXh0PiBjcmVhdGVDb250ZXh0Rm9yV2luZG93KHVpbnQ2NF90IHdpbmRvd0hhbmRsZSwg
R0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCwgQnVmZmVyaW5nVHlwZSk7CiAgICAgc3RhdGljIFBh
c3NPd25QdHI8R0xDb250ZXh0PiBjcmVhdGVPZmZzY3JlZW5Db250ZXh0KEdMQ29udGV4dCogc2hh
cmluZyA9IDApOwogICAgIHN0YXRpYyBHTENvbnRleHQqIGdldEN1cnJlbnQoKTsKICAgICBzdGF0
aWMgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAppbmRleCA5NDk2ZmM5MWFm
MzEzZDAxYmQ0MGU5YmI5ZTM0YTA4NmIyYzE2MTUyLi4yMDI4Y2VhNmQyNDU1M2ZmNzNlMTQxMzU3
MGZlNDRkMTQ4ZDE4OTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBiZWNhdXNlIGl0IG1pZ2h0IGxlYWQgdG8gY3Jhc2hlcyBpbiBzb21lIGRy
aXZlcnMgKGZnbHJ4KS4gV2UgdXNlIGEgc2hhcmVkIGRpc3BsYXkKIC8vIHBvaW50ZXIgaGVyZS4K
IHN0YXRpYyBEaXNwbGF5KiBnU2hhcmVkRGlzcGxheSA9IDA7Ci1zdGF0aWMgRGlzcGxheSogc2hh
cmVkRGlzcGxheSgpCitEaXNwbGF5KiBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKQogewog
ICAgIGlmICghZ1NoYXJlZERpc3BsYXkpCiAgICAgICAgIGdTaGFyZWREaXNwbGF5ID0gWE9wZW5E
aXNwbGF5KDApOwpAQCAtODksMjIgKzg5LDMzIEBAIHZvaWQgR0xDb250ZXh0R0xYOjpjbGVhbnVw
QWN0aXZlQ29udGV4dHNBdEV4aXQoKQogICAgIGdTaGFyZWREaXNwbGF5ID0gMDsKIH0KIAotUGFz
c093blB0cjxHTENvbnRleHRHTFg+IEdMQ29udGV4dEdMWDo6Y3JlYXRlV2luZG93Q29udGV4dChY
SUQgd2luZG93LCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KQorUGFzc093blB0cjxHTENvbnRl
eHRHTFg+IEdMQ29udGV4dEdMWDo6Y3JlYXRlV2luZG93Q29udGV4dChYSUQgd2luZG93LCBHTENv
bnRleHQqIHNoYXJpbmdDb250ZXh0LCBCdWZmZXJpbmdUeXBlIGJ1ZmZlcmluZ1R5cGUpCiB7CiAg
ICAgRGlzcGxheSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKICAgICBYV2luZG93QXR0cmli
dXRlcyBhdHRyaWJ1dGVzOwogICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMoZGlzcGxheSwg
d2luZG93LCAmYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgWFZp
c3VhbEluZm8gdmlzdWFsSW5mbzsKLSAgICB2aXN1YWxJbmZvLnZpc3VhbGlkID0gWFZpc3VhbElE
RnJvbVZpc3VhbChhdHRyaWJ1dGVzLnZpc3VhbCk7CisgICAgc3RhdGljIGludCBmcmFtZWJ1ZmZl
ckF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1df
QklULAorICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCBidWZmZXJpbmdUeXBlID09IERvdWJsZUJ1
ZmZlciA/IFRydWUgOiBGYWxzZSwKKyAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCBHTFhfUkdCQV9C
SVQsCisgICAgICAgIEdMWF9SRURfU0laRSwgMSwKKyAgICAgICAgR0xYX0dSRUVOX1NJWkUsIDEs
CisgICAgICAgIEdMWF9CTFVFX1NJWkUsIDEsCisgICAgICAgIEdMWF9TVEVOQ0lMX1NJWkUsIDEs
CisgICAgICAgIE5vbmUKKyAgICB9OwogCi0gICAgaW50IG51bVJldHVybmVkID0gMDsKLSAgICBY
VmlzdWFsSW5mbyogdmlzdWFsSW5mb0xpc3QgPSBYR2V0VmlzdWFsSW5mbyhkaXNwbGF5LCBWaXN1
YWxJRE1hc2ssICZ2aXN1YWxJbmZvLCAmbnVtUmV0dXJuZWQpOworICAgIGludCBudW1iZXJSZXR1
cm5lZCA9IDA7CisgICAgR0xYRkJDb25maWcqIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhk
aXNwbGF5LCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLCBmcmFtZWJ1ZmZlckF0dHJpYnV0ZXMsICZu
dW1iZXJSZXR1cm5lZCk7CisKKyAgICBpZiAoIW51bWJlclJldHVybmVkIHx8ICFjb25maWdzKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEdMWENvbnRleHQgZ2x4U2hhcmluZ0NvbnRl
eHQgPSBzaGFyaW5nQ29udGV4dCA/IHN0YXRpY19jYXN0PEdMQ29udGV4dEdMWCo+KHNoYXJpbmdD
b250ZXh0KS0+bV9jb250ZXh0IDogMDsKLSAgICBHTFhDb250ZXh0IGNvbnRleHQgPSBnbFhDcmVh
dGVDb250ZXh0KGRpc3BsYXksIHZpc3VhbEluZm9MaXN0LCBnbHhTaGFyaW5nQ29udGV4dCwgVHJ1
ZSk7Ci0gICAgWEZyZWUodmlzdWFsSW5mb0xpc3QpOworICAgIEdMWENvbnRleHQgY29udGV4dCA9
IGdsWENyZWF0ZU5ld0NvbnRleHQoZGlzcGxheSwgY29uZmlnc1swXSwgR0xYX1JHQkFfVFlQRSwg
Z2x4U2hhcmluZ0NvbnRleHQsIFRydWUpOworICAgIFhGcmVlKGNvbmZpZ3MpOwogCiAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE5OCw3ICsyMDksNyBAQCBQ
YXNzT3duUHRyPEdMQ29udGV4dEdMWD4gR0xDb250ZXh0R0xYOjpjcmVhdGVQaXhtYXBDb250ZXh0
KEdMWENvbnRleHQgc2hhcmluZ0NvbgogICAgIHJldHVybiBhZG9wdFB0cihuZXcgR0xDb250ZXh0
R0xYKGNvbnRleHQsIHBpeG1hcCwgZ2x4UGl4bWFwKSk7CiB9CiAKLVBhc3NPd25QdHI8R0xDb250
ZXh0R0xYPiBHTENvbnRleHRHTFg6OmNyZWF0ZUNvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0
KiBzaGFyaW5nQ29udGV4dCkKK1Bhc3NPd25QdHI8R0xDb250ZXh0R0xYPiBHTENvbnRleHRHTFg6
OmNyZWF0ZUNvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCwgQnVm
ZmVyaW5nVHlwZSBidWZmZXJpbmdUeXBlKQogewogICAgIGlmICghc2hhcmVkRGlzcGxheSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIxMyw3ICsyMjQsOSBAQCBQYXNzT3duUHRyPEdM
Q29udGV4dEdMWD4gR0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KFhJRCB3aW5kb3csIEdMQ29u
dGV4dCogc2hhcgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEdMWENvbnRleHQgZ2x4
U2hhcmluZ0NvbnRleHQgPSBzaGFyaW5nQ29udGV4dCA/IHN0YXRpY19jYXN0PEdMQ29udGV4dEdM
WCo+KHNoYXJpbmdDb250ZXh0KS0+bV9jb250ZXh0IDogMDsKLSAgICBPd25QdHI8R0xDb250ZXh0
R0xYPiBjb250ZXh0ID0gd2luZG93ID8gY3JlYXRlV2luZG93Q29udGV4dCh3aW5kb3csIHNoYXJp
bmdDb250ZXh0KSA6IG51bGxwdHI7CisgICAgT3duUHRyPEdMQ29udGV4dEdMWD4gY29udGV4dCA9
IHdpbmRvdyA/IGNyZWF0ZVdpbmRvd0NvbnRleHQod2luZG93LCBzaGFyaW5nQ29udGV4dCwgYnVm
ZmVyaW5nVHlwZSkgOiBudWxscHRyOworCisgICAgLy8gV2UgZG9uJ3QgdXNlIGV2ZXIgZG91Ymxl
LWJ1ZmZlciBhdCB0aGUgbW9tZW50IHdpdGggb2Zmc2NyZWVuIGNvbnRleHRzLCBzbyB3ZSBhcmUg
aWdub3JpbmcgYnVmZmVyaW5nVHlwZS4KICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIGNvbnRl
eHQgPSBjcmVhdGVQYnVmZmVyQ29udGV4dChnbHhTaGFyaW5nQ29udGV4dCk7CiAgICAgaWYgKCFj
b250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4
L0dMQ29udGV4dEdMWC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dM
Q29udGV4dEdMWC5oCmluZGV4IDVlOGM2MWNlNGU0MWM3NmI2YzhlOWI1NTA4ODM3NWE1Zjg0Y2M0
M2MuLmQ0MDc5NDAxZjE1NDY5YTg1M2U4OWJmYWVhNGVhZTYzNzM0ZWE0N2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKQEAg
LTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xDb250ZXh0R0xYIDog
cHVibGljIEdMQ29udGV4dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xDb250ZXh0R0xY
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHTENvbnRleHRHTFg+IGNyZWF0ZUNv
bnRleHQoWElELCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0ID0gMCk7Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8R0xDb250ZXh0R0xYPiBjcmVhdGVXaW5kb3dDb250ZXh0KFhJRCB3aW5kb3csIEdM
Q29udGV4dCogc2hhcmluZ0NvbnRleHQpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMQ29udGV4
dEdMWD4gY3JlYXRlQ29udGV4dChYSUQgd2luZG93LCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0
LCBCdWZmZXJpbmdUeXBlKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxHTENvbnRleHRHTFg+IGNy
ZWF0ZVdpbmRvd0NvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCwg
QnVmZmVyaW5nVHlwZSk7CiAKICAgICB2aXJ0dWFsIH5HTENvbnRleHRHTFgoKTsKICAgICB2aXJ0
dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIoKTsKICAgICB2
aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpOwogCisgICAgc3RhdGljIERp
c3BsYXkqIHNoYXJlZERpc3BsYXkoKTsKKwogI2lmIFVTRSgzRF9HUkFQSElDUykKICAgICB2aXJ0
dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCk7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiZTZhNTJhMGQ4MzI4OTRmNTRjNjM0NTkz
OGE3NDQ2Y2U5OWE3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCkBAIC0wLDAgKzEsMjEzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5oIgorCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSA8
R0wvZ2x4Lmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2luY2x1
ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIu
aD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093
blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coc2l6ZSkpOworfQorCitSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYg
c2l6ZSkKKyAgICA6IG1fd2luZG93KDApCisgICAgLCBtX3BhcmVudFdpbmRvdygwKQorICAgICwg
bV9waXhtYXAoMCkKKyAgICAsIG1fc3VyZmFjZSgwKQorICAgICwgbV9wZW5kaW5nUmVzaXplU291
cmNlSWQoMCkKKyAgICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZShmYWxzZSkKK3sKKyAg
ICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCk7CisKKyAg
ICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29t
bW9uL2dwdS9pbWFnZV90cmFuc3BvcnRfc3VyZmFjZV9saW51eC5jYworICAgIFhTZXRXaW5kb3dB
dHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlk
ZV9yZWRpcmVjdCA9IFRydWU7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRp
c3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RXaW5kb3coZGlz
cGxheSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtMTAwLCAtMTAwLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9t
UGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXT3ZlcnJpZGVSZWRpcmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKKyAg
ICBYTWFwV2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsKKworICAgIHdpbmRvd0F0dHJp
YnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7CisgICAgd2luZG93QXR0cmli
dXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNlOworICAgIG1fd2luZG93ID0gWENyZWF0ZVdp
bmRvdyhkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRv
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW5wdXRPdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9t
UGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOworICAgIFhNYXBXaW5k
b3coZGlzcGxheSwgbV93aW5kb3cpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgWEV2ZW50
IGV2ZW50OworICAgICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVy
ZU5vdGlmeU1hc2ssICZldmVudCk7CisgICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlm
eSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBYU2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsK
KworICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgQ29tcG9z
aXRlUmVkaXJlY3RNYW51YWwpOworCisgICAgcmVzaXplKHNpemUpOworICAgIHJlc2l6ZUxhdGVy
KCk7IC8vIEZvcmNlIHVwZGF0ZSBvZiB0aGUgdXNhYmxlIGFyZWEuCit9CisKK1JlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQoreworICAgIERp
c3BsYXkqIGRpc3BsYXkgPSBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKTsKKyAgICBpZiAo
bV93aW5kb3cpCisgICAgICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1fd2luZG93KTsKKyAg
ICBpZiAobV9wYXJlbnRXaW5kb3cpCisgICAgICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1f
cGFyZW50V2luZG93KTsKKyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworfQor
CitnYm9vbGVhbiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplTGF0ZXJDYWxsYmFj
ayhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyogd2luZG93KQoreworICAgIHdpbmRvdy0+cmVz
aXplTGF0ZXIoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3c6OnJlc2l6ZUxhdGVyKCkKK3sKKyAgICBtX3VzYWJsZVNpemUgPSBtX3NpemU7
CisgICAgbV9wZW5kaW5nUmVzaXplU291cmNlSWQgPSAwOworfQorCit2b2lkIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93OjpyZXNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBX
aGVuIGVubGFyZ2luZyBhIHJlZGlyZWN0ZWQgd2luZG93LCBmb3IgdGhlIGZpcnN0IHJlbmRlciwg
dGhlIG5ld2x5IGV4cG9zZWQgYXJlYXMgc2VlbQorICAgIC8vIHRvIGNvbnRhaW4gdW5pbml0aWFs
aXplZCBtZW1vcnkgb24gSW50ZWwgZHJpdmVycy4gVG8gYXZvaWQgcmVuZGVyaW5nIGFydGlmYWN0
cyB3aGlsZQorICAgIC8vIHJlc2l6aW5nLCB3ZSB3YWl0IHRvIHJlbmRlciB0aG9zZSBuZXcgYXJl
YXMgdW50aWwgYWZ0ZXIgYSBzaG9ydCB0aW1lb3V0LiBUaHVzLCB0aGUKKyAgICAvLyAidXNhYmxl
IHNpemUiIG9mIHRoZSB3aW5kb3cgaXMgc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0
aGUgd2luZG93IGZvciB0aGUgZmlyc3QKKyAgICAvLyByZW5kZXIuCisgICAgbV91c2FibGVTaXpl
ID0gc2l6ZS5zaHJ1bmtUbyhtX3VzYWJsZVNpemUpOworICAgIGlmIChtX3VzYWJsZVNpemUud2lk
dGgoKSA8IHNpemUud2lkdGgoKSB8fCBtX3VzYWJsZVNpemUuaGVpZ2h0KCkgPCBzaXplLmhlaWdo
dCgpKSB7IC8vIFRoZSB3aW5kb3cgaXMgZ3Jvd2luZy4KKyAgICAgICAgLy8gV2UncmUgYmVpbmcg
dmVyeSBjb25zZXJ2YXRpdmUgaGVyZS4gSW5zdGVhZCBvZiByaXNraW5nIGRyYXdpbmcgYXJ0aWZh
Y3RzIHdoaWxlIGRvaW5nIGNvbnRpbnVvdXMKKyAgICAgICAgLy8gb3BhcXVlIHJlc2l6aW5nLCB3
ZSBlcnIgb24gdGhlIHNpZGUgb2YgaGF2aW5nIG1vcmUgdW5kcmF3biBhcmVhcy4KKyAgICAgICAg
aWYgKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKQorICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3Zl
KG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKTsKKyAgICAgICAgbV9wZW5kaW5nUmVzaXplU291cmNl
SWQgPSBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlc2l6
ZUxhdGVyQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0g
R0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCk7CisgICAgWFJlc2l6ZVdpbmRvdyhkaXNwbGF5
LCBtX3dpbmRvdywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBnbFhXYWl0WCgp
OworCisgICAgLy8gVGhpcyBzd2FwIGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRy
aWVzIHRvIHdvcmstYXJvdW5kIGEgYnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCisgICAgLy8gd2hl
cmUgYSBzd2FwIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZyb250IGFuZCBiYWNrIGJ1ZmZl
cnMgYXJlIHByb3Blcmx5IHJlc2l6ZWQuCisgICAgaWYgKGNvbnRleHQoKSA9PSBHTENvbnRleHQ6
OmdldEN1cnJlbnQoKSkKKyAgICAgICAgY29udGV4dCgpLT5zd2FwQnVmZmVycygpOworCisgICAg
bV9zaXplID0gc2l6ZTsKKyAgICBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSB0cnVlOwor
fQorCitHTENvbnRleHQqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojpjb250ZXh0KCkKK3sK
KyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworCisg
ICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNv
bnRleHRGb3JXaW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSwgR0xD
b250ZXh0OjpTaW5nbGVCdWZmZXIpOworICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cit9CisK
K3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNsZWFudXBQaXhtYXBBbmRQaXhtYXBT
dXJmYWNlKCkKK3sKKyAgICBpZiAoIW1fcGl4bWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBY
RnJlZVBpeG1hcChjYWlyb194bGliX3N1cmZhY2VfZ2V0X2Rpc3BsYXkobV9zdXJmYWNlLmdldCgp
KSwgbV9waXhtYXApOworICAgIG1fcGl4bWFwID0gMDsKKyAgICBtX3N1cmZhY2UgPSBudWxscHRy
OworfQorCitjYWlyb19zdXJmYWNlX3QqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWly
b1N1cmZhY2VGb3JXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCFtX25lZWRz
TmV3UGl4bWFwQWZ0ZXJSZXNpemUgJiYgbV9zdXJmYWNlKQorICAgICAgICByZXR1cm4gbV9zdXJm
YWNlLmdldCgpOworCisgICAgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplID0gZmFsc2U7CisK
KyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoZSBuZXcgcGl4bWFwIGJlIGNyZWF0ZWQgd2l0
aCB0aGUgc2FtZSBEaXNwbGF5IHBvaW50ZXIgYXMgdGhlIHRhcmdldAorICAgIC8vIHdpZGdldCBv
ciBlbHNlIGRyYXdpbmcgc3BlZWQgY2FuIGJlIDEwMHggc2xvd2VyLgorICAgIERpc3BsYXkqIG5l
d1BpeG1hcERpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShndGtfd2lkZ2V0X2dldF9kaXNw
bGF5KHdpZGdldCkpOworICAgIFBpeG1hcCBuZXdQaXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRv
d1BpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgaWYgKCFuZXdQaXhtYXAp
IHsKKyAgICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgWFdpbmRvd0F0dHJpYnV0ZXMgd2luZG93QXR0cmlidXRlczsK
KyAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1dGVzKG5ld1BpeG1hcERpc3BsYXksIG1fd2luZG93
LCAmd2luZG93QXR0cmlidXRlcykpIHsKKyAgICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1
cmZhY2UoKTsKKyAgICAgICAgWEZyZWVQaXhtYXAobmV3UGl4bWFwRGlzcGxheSwgbmV3UGl4bWFw
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUobmV3UGl4
bWFwRGlzcGxheSwgbmV3UGl4bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd0F0dHJpYnV0
ZXMudmlzdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCkpKTsKKworICAgIC8vIE52aWRpYSBkcml2ZXJzIHNlZW0gdG8gcHJlcGFyZSB0aGVpciBy
ZWRpcmVjdGVkIHdpbmRvdyBwaXhtYXAgYXN5bmNocm9ub3VzbHksIHNvIGZvciBhIGZldyBmcmFj
dGlvbnMKKyAgICAvLyBvZiBhIHNlY29uZCBhZnRlciBlYWNoIHJlc2l6ZSwgd2hpbGUgZG9pbmcg
Y29udGludW91cyByZXNpemluZyAod2hpY2ggY29uc3RhbnRseSBkZXN0cm95cyBhbmQgY3JlYXRl
cworICAgIC8vIHBpeG1hcCB3aW5kb3ctYmFja2luZ3MpLCB0aGUgcGl4bWFwIG1lbW9yeSBpcyB1
bmluaXRpYWxpemVkLiBUbyB3b3JrIGFyb3VuZCB0aGlzIGlzc3VlLCBwYWludCB0aGUgb2xkCisg
ICAgLy8gcGl4bWFwIHRvIHRoZSBuZXcgb25lIHRvIHByb3Blcmx5IGluaXRpYWxpemUgaXQuCisg
ICAgaWYgKG1fc3VyZmFjZSkgeworICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJl
ZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5nZXQoKSkpOworICAgICAgICBjYWlyb19zZXRfc291
cmNlX3JnYihjci5nZXQoKSwgMSwgMSwgMSk7CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgp
KTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZhY2Uu
Z2V0KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisgICAgfQorCisg
ICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKyAgICBtX3BpeG1hcCA9IG5ld1Bp
eG1hcDsKKyAgICBtX3N1cmZhY2UgPSBuZXdTdXJmYWNlOworCisgICAgcmV0dXJuIG1fc3VyZmFj
ZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zOWVjN2VkYjI2YjhkZWE0MjZmYmY0ZTY0YTk1ZTI1OWRhNGQ3YTM4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
SWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiAgUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAorI2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3dfaAorCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXht
YXA7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gY3JlYXRlKGNvbnN0IElu
dFNpemUmKTsKKyAgICB2aXJ0dWFsIH5SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpOworCisg
ICAgY29uc3QgSW50U2l6ZSYgdXNhYmxlU2l6ZSgpIHsgcmV0dXJuIG1fdXNhYmxlU2l6ZTsgfQor
ICAgIGNvbnN0IEludFNpemUmIHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHZvaWQg
cmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpOworICAgIEdMQ29udGV4dCogY29udGV4dCgp
OworICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlRm9yV2lkZ2V0KEd0a1dpZGdldCop
OworCitwcml2YXRlOgorICAgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNp
emUmKTsKKworICAgIHN0YXRpYyBnYm9vbGVhbiByZXNpemVMYXRlckNhbGxiYWNrKFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93Kik7CisgICAgdm9pZCByZXNpemVMYXRlcigpOworICAgIHZvaWQg
Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKworICAgIEludFNpemUgbV9zaXplOwor
ICAgIEludFNpemUgbV91c2FibGVTaXplOworICAgIFdpbmRvdyBtX3dpbmRvdzsKKyAgICBXaW5k
b3cgbV9wYXJlbnRXaW5kb3c7CisgICAgUGl4bWFwIG1fcGl4bWFwOworICAgIE93blB0cjxHTENv
bnRleHQ+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7
CisgICAgdW5zaWduZWQgaW50IG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkOworICAgIGJvb2wgbV9u
ZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtl
ZmlsZS5hbQppbmRleCAyMTU1NzZlNTE4MTRjY2YxMmNjMGVmZWI2OTJlZDlkYTdiMjQ5NDUyLi4w
MDQ3M2Y5ZDUwYjVhNzU3YTUwNTA4MWJmZjhmMmIxNDhkM2E2ZWEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVt
YWtlZmlsZS5hbQpAQCAtMTAxLDYgKzEwMSw3IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQ
SV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUJBCiAJ
JChQTkdfTElCUykgXAogCSQoU1FMSVRFM19MSUJTKSBcCiAJJChVTklDT0RFX0xJQlMpIFwKKwkk
KFhDT01QT1NJVEVfTElCUykgXAogCSQoWFJFTkRFUl9MSUJTKSBcCiAJJChYVF9MSUJTKSBcCiAJ
JChXSU5NTV9MSUJTKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAppbmRleCAyNGE2
MTRkYjQ1ZjRmMmY1Y2MzMjlkNDg4ZjRhMTg3YWY5NDFkODExLi44NTYwMGRmMDBjZmY2ZjM1NGNm
MDYzMDdiYWFiY2E2Njg2OGM5MDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgK
QEAgLTI4LDEwICsyOCwxMiBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKICNpZiBV
U0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjZW5k
aWYKKwogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICNpbmNsdWRlICJHTENvbnRleHQuaCIK
LSNlbmRpZgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgorI2luY2x1ZGUgIlJlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKQEAgLTQ3LDExICs0OSw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0
dWFsIH5BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCgpOwotICAgIHZvaWQgYXR0YWNoUm9v
dEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgc2NoZWR1
bGVSb290TGF5ZXJSZXBhaW50KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2b2lkIG1h
cmtGb3JTeW5jKCk7Ci0gICAgdm9pZCBzeW5jTGF5ZXJzVGltZW91dCgpOwotICAgIHZvaWQgc3lu
Y0xheWVyc05vdygpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERp
c3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgc2NoZWR1bGVMYXllckZs
dXNoKCk7CiAgICAgdm9pZCByZXNpemVSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
OwogICAgIGJvb2wgcmVuZGVyTGF5ZXJzVG9XaW5kb3coY2Fpcm9fdCosIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGNsaXBSZWN0KTsKICAgICBib29sIGVuYWJsZWQoKTsKQEAgLTYzLDIyICs2Mywz
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWlu
dENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwogCisgICAgdm9p
ZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKTsKKyAg
ICB2b2lkIGZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7CisgICAgYm9vbCBmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXMoKTsKKyAgICB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3Jv
bGxPZmZzZXQpOworCiBwcml2YXRlOgogICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKLSAg
ICB1bnNpZ25lZCBpbnQgbV9zeW5jVGltZXJDYWxsYmFja0lkOworICAgIHVuc2lnbmVkIGludCBt
X2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQ7CiAKICNpZiBVU0UoQ0xVVFRFUikKICAgICBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiBtX3Jvb3RHcmFwaGljc0xheWVyOwogICAgIEd0a1dpZGdldCog
bV9yb290TGF5ZXJFbWJlZGRlcjsKKyNlbGlmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBP
d25QdHI8V2ViQ29yZTo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c+IG1fcmVkaXJlY3RlZFdp
bmRvdzsKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Cisg
ICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllcjsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVy
OworICAgIGRvdWJsZSBtX2xhc3RGbHVzaFRpbWU7CisgICAgZG91YmxlIG1fcmVkcmF3UGVuZGlu
Z1RpbWU7CisgICAgYm9vbCBtX25lZWRzRXh0cmFGbHVzaDsKKworICAgIHZvaWQgbGF5ZXJGbHVz
aFRpbWVyRmlyZWQoKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gbGF5ZXJGbHVzaFRpbWVyRmlyZWRD
YWxsYmFjayhBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCopOworICAgIGJvb2wgcHJlcGFy
ZUZvclJlbmRlcmluZygpOworICAgIHZvaWQgY2xlYXJFdmVyeXdoZXJlKCk7CiAjZWxpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBtX3Jvb3RU
ZXh0dXJlTWFwcGVyTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1f
cm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1f
dGV4dHVyZU1hcHBlcjsKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAgICAgV2ViQ29yZTo6
R0xDb250ZXh0KiBnbENvbnRleHQoKTsKICAgICBPd25QdHI8V2ViQ29yZTo6R0xDb250ZXh0PiBt
X2NvbnRleHQ7CiAjZW5kaWYKLSNlbmRpZgogCiAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQoV2ViS2l0V2ViVmlldyopOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwIGIvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHRHTC5jcHAKaW5kZXggNjRlYjkwMTc1OGJkNGVhZThhOTQ4N2JhMWRjMDE5NjcyYTllNWFhNS4u
NTliZDIzMjJjMDFjZDg0YjI2YjI1ZmE1NTQ5N2QzZjM4NWU1NmQ0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHRHTC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dENhaXJvLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
R0wuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKICNpbmNsdWRlICJ3ZWJraXR3
ZWJ2aWV3cHJpdmF0ZS5oIgpAQCAtMzUsMTMgKzM2LDEyIEBACiAjaW5jbHVkZSA8Z2RrL2dkay5o
PgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAotI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEp
Ci0jZGVmaW5lIFJlZ2lvbiBYUmVnaW9uCi0jZGVmaW5lIEZvbnQgWEZvbnQKLSNkZWZpbmUgQ3Vy
c29yIFhDdXJzb3IKLSNkZWZpbmUgU2NyZWVuIFhTY3JlZW4KLSNpbmNsdWRlIDxnZGsvZ2RreC5o
PgotI2VuZGlmCitjb25zdCBkb3VibGUgZ0ZyYW1lc1BlclNlY29uZCA9IDYwOworCisvLyBUaGVy
ZSBzZWVtcyB0byBiZSBhIGRlbGljYXRlIGJhbGFuY2UgYmV0d2VlbiB0aGUgbWFpbiBsb29wIGJl
aW5nIGZsb29kZWQKKy8vIHdpdGggbW90aW9uIGV2ZW50cyAodGhhdCBmb3JjZSBmbHVzaGVzKSBh
bmQgc3RhcnZpbmcgdGhlIG1haW4gbG9vcCBvZiBldmVudHMKKy8vIHdpdGggZmx1c2ggY2FsbGJh
Y2tzLiBUaGlzIGRlbGF5IGlzIGVudGlyZWx5IGVtcGlyaWNhbC4KK2NvbnN0IGRvdWJsZSBnU2No
ZWR1bGVEZWxheSA9ICgxLjAgLyAoZ0ZyYW1lc1BlclNlY29uZCAvIDMuMCkpOwogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDksMTUwICs0OSwzMDIgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIDogbV93ZWJWaWV3KHdlYlZp
ZXcpCi0gICAgLCBtX3N5bmNUaW1lckNhbGxiYWNrSWQoMCkKLSAgICAsIG1fcm9vdFRleHR1cmVN
YXBwZXJMYXllcigwKQorICAgICwgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKDApCisgICAg
LCBtX3JlZGlyZWN0ZWRXaW5kb3coUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShJ
bnRTaXplKDEsIDEpKSkKKyAgICAsIG1fbGFzdEZsdXNoVGltZSgwKQorICAgICwgbV9yZWRyYXdQ
ZW5kaW5nVGltZSgwKQorICAgICwgbV9uZWVkc0V4dHJhRmx1c2goZmFsc2UpCit7Cit9CisKK3N0
YXRpYyBJbnRTaXplIGdldFdlYlZpZXdTaXplKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7Cisg
ICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRp
b24oR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHJldHVybiBJbnRTaXpl
KGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKK30KKwordm9pZCBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKG1fcm9vdExh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZSh0aGlzKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsK
KworICAgIEludFNpemUgcGFnZVNpemUgPSBnZXRXZWJWaWV3U2l6ZShtX3dlYlZpZXcpOworICAg
IG1fcm9vdExheWVyLT5zZXRTaXplKHBhZ2VTaXplKTsKKworICAgIC8vIFRoZSBub24tY29tcG9z
aXRlZCBjb250ZW50cyBhcmUgYSBjaGlsZCBvZiB0aGUgcm9vdCBsYXllci4KKyAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZSghbV93ZWJWaWV3
LT5wcml2LT50cmFuc3BhcmVudCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXRTaXplKHBhZ2VTaXplKTsKKyAgICBpZiAoY29yZShtX3dlYlZpZXcpLT5zZXR0aW5ncygpLT5h
Y2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHRydWUpOworCisjaWZuZGVmIE5ERUJVRwor
ICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJSb290IGxheWVyIik7CisgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zZXROYW1lKCJOb24tY29tcG9zaXRlZCBjb250ZW50Iik7CisjZW5k
aWYKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXIuZ2V0KCkpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNw
bGF5KCk7CisKKyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIFRleHR1cmVNYXBwZXIgbmVlZHMg
YW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgIEdMQ29udGV4dCogY29udGV4dCA9IG1fcmVk
aXJlY3RlZFdpbmRvdy0+Y29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7CisK
KyAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1cmVN
YXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OwogfQogCiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6fkFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0KCkKIHsKLSAgICBpZiAobV9zeW5jVGltZXJDYWxsYmFja0lkKQotICAgICAg
ICBnX3NvdXJjZV9yZW1vdmUobV9zeW5jVGltZXJDYWxsYmFja0lkKTsKKyAgICBpZiAobV9sYXll
ckZsdXNoVGltZXJDYWxsYmFja0lkKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9sYXllckZs
dXNoVGltZXJDYWxsYmFja0lkKTsKIH0KIAogYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6ZW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllciAm
JiBtX3RleHR1cmVNYXBwZXI7CisgICAgcmV0dXJuIG1fcm9vdExheWVyICYmIG1fdGV4dHVyZU1h
cHBlcjsKIH0KIAotR0xDb250ZXh0KiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Z2xD
b250ZXh0KCkKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVy
c1RvV2luZG93KGNhaXJvX3QqIGNyLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBp
ZiAobV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworICAgIG1fcmVk
cmF3UGVuZGluZ1RpbWUgPSAwOwogCi0jaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKLSAg
ICAvLyBGSVhNRTogR3JhY2VmdWxseSBhY2NvdW50IGZvciBzaXR1YXRpb25zIHdoZXJlIHdlIGRv
IG5vdCBoYXZlIGEgcmVhbGl6ZWQgd2luZG93LgotICAgIEdka1dpbmRvdyogZ2RrV2luZG93ID0g
Z3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgaWYgKGdk
a1dpbmRvdyAmJiBnZGtfd2luZG93X2hhc19uYXRpdmUoZ2RrV2luZG93KSkKLSAgICAgICAgbV9j
b250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KEdES19XSU5ET1dfWElE
KGdka1dpbmRvdyksIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7Ci0jZW5kaWYKKyAgICBp
ZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSXQncyBpbXBv
cnRhbnQgdG8gcGFpbnQgYSB3aGl0ZSBiYWNrZ3JvdW5kIChpZiB0aGUgV2ViVmlldyBpc24ndCB0
cmFuc3BhcmVudCksIGJlY2F1c2Ugd2hlbiBncm93aW5nCisgICAgLy8gdGhlIHJlZGlyZWN0ZWQg
d2luZG93LCB0aGUgdXNhYmxlIHNpemUgb2YgdGhlIHdpbmRvdyBtYXkgYmUgc21hbGxlciB0aGFu
IHRoZSBhbGxvY2F0aW9uIG9mIG91ciB3aWRnZXQuCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBz
aG93IGFydGlmYWN0cyBpbiB0aGF0IGNhc2UuCisgICAgSW50U2l6ZSB1c2FibGVXaW5kb3dTaXpl
ID0gbV9yZWRpcmVjdGVkV2luZG93LT51c2FibGVTaXplKCk7CisgICAgaWYgKHVzYWJsZVdpbmRv
d1NpemUgIT0gbV9yZWRpcmVjdGVkV2luZG93LT5zaXplKCkpIHsKKyAgICAgICAgaWYgKCFtX3dl
YlZpZXctPnByaXYtPnRyYW5zcGFyZW50KSB7CisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNl
X3JnYihjciwgMSwgMSwgMSk7CisgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENB
SVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2Fpcm9f
c2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisgICAgICAgIGNhaXJvX3Bh
aW50KGNyKTsKKyAgICB9CisKKworICAgIGNhaXJvX3N1cmZhY2VfdCogd2luZG93U3VyZmFjZSA9
IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y2Fpcm9TdXJmYWNlRm9yV2lkZ2V0KEdUS19XSURHRVQobV93
ZWJWaWV3KSk7CisgICAgaWYgKCF3aW5kb3dTdXJmYWNlKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgdXNhYmxlV2luZG93U2l6ZS53aWR0aCgp
LCB1c2FibGVXaW5kb3dTaXplLmhlaWdodCgpKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZh
Y2UoY3IsIHdpbmRvd1N1cmZhY2UsIDAsIDApOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwg
Q0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb19maWxsKGNyKTsKKworICAgIGlmICgh
bV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkICYmIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9v
dExheWVyLmdldCgpKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSB8
fCBtX25lZWRzRXh0cmFGbHVzaCkgeworICAgICAgICBtX25lZWRzRXh0cmFGbHVzaCA9IGZhbHNl
OworICAgICAgICBkb3VibGUgbmV4dEZsdXNoID0gbWF4KCgxIC8gZ0ZyYW1lc1BlclNlY29uZCkg
LSAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEZsdXNoVGltZSksIDAuMCk7CisgICAgICAgIG1fbGF5
ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlf
RVZFTlRTLCAxMDAwICogbmV4dEZsdXNoLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihs
YXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKSwgdGhpcywgMCk7CisgICAgfQogCi0gICAgcmV0
dXJuIG1fY29udGV4dC5nZXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3coY2Fpcm9fdCosIGNv
bnN0IEludFJlY3QmIGNsaXBSZWN0KQorYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dDo6cHJlcGFyZUZvclJlbmRlcmluZygpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4dCgpOwor
ICAgIEdMQ29udGV4dCogY29udGV4dCA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y29udGV4dCgpOwog
ICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFjb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24o
R1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgZ2xWaWV3cG9ydCgwLCAw
LCBhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNvbXBvc2l0ZUxheWVy
c1RvQ29udGV4dCgpCit7CisgICAgaWYgKCFwcmVwYXJlRm9yUmVuZGVyaW5nKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbnN0IEludFNpemUmIHdpbmRvd1NpemUgPSBtX3JlZGlyZWN0ZWRX
aW5kb3ctPnNpemUoKTsKKyAgICBnbFZpZXdwb3J0KDAsIDAsIHdpbmRvd1NpemUud2lkdGgoKSwg
d2luZG93U2l6ZS5oZWlnaHQoKSk7CiAKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRp
bmcoKTsKLSAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXItPnBhaW50KCk7CisgICAgdG9UZXh0
dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5wYWludCgpOwogICAgIG1fdGV4dHVy
ZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKIAotICAgIGNvbnRleHQtPnN3YXBCdWZmZXJzKCk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgZ2xGbHVzaCgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0OjpjbGVhckV2ZXJ5d2hlcmUoKQoreworICAgIGlmICghcHJlcGFyZUZv
clJlbmRlcmluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBJbnRTaXplJiB3aW5k
b3dTaXplID0gbV9yZWRpcmVjdGVkV2luZG93LT5zaXplKCk7CisgICAgZ2xWaWV3cG9ydCgwLCAw
LCB3aW5kb3dTaXplLndpZHRoKCksIHdpbmRvd1NpemUuaGVpZ2h0KCkpOworICAgIGdsQ2xlYXJD
b2xvcigxLCAxLCAxLCAxKTsKKyAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOworCisg
ICAgZ2xGbHVzaCgpOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojph
dHRhY2hSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQordm9p
ZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKKyAgICAvLyBDbGVhcmluZyBldmVyeXdo
ZXJlIHdoZW4gdHVybmluZyBvbiBvciBvZmYgdGhlIGxheWVyIHRyZWUgcHJldmVudHMgdXMgZnJv
bSBmbGFzaGluZworICAgIC8vIG9sZCBjb250ZW50IGJlZm9yZSB0aGUgZmlyc3QgZmx1c2guCisg
ICAgY2xlYXJFdmVyeXdoZXJlKCk7CisKICAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpIHsKLSAgICAg
ICAgbV9yb290R3JhcGhpY3NMYXllci5jbGVhcigpOwotICAgICAgICBtX3Jvb3RUZXh0dXJlTWFw
cGVyTGF5ZXIgPSAwOwotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgaWYgKG1f
bGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCkgeworICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3Zl
KG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCk7CisgICAgICAgICAgICBtX2xheWVyRmx1c2hU
aW1lckNhbGxiYWNrSWQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2hyaW5rIHRoZSBv
ZmZzY3JlZW4gd2luZG93IHRvIHNhdmUgbWVtb3J5IHdoaWxlIGFjY2VsZXJhdGVkIGNvbXBvc2l0
aW5nIGlzIHR1cm5lZCBvZmYuCisgICAgICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKElu
dFNpemUoMSwgMSkpOworICAgICAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CisgICAgICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IG51bGxwdHI7CisgICAgICAgIG1fdGV4dHVyZU1h
cHBlciA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3Jvb3RHcmFw
aGljc0xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwotICAgIG1fcm9vdFRleHR1
cmVNYXBwZXJMYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdEdyYXBoaWNzTGF5ZXIu
Z2V0KCkpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIp
OwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBt
X3Jvb3RHcmFwaGljc0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKLSAgICBtX3Jvb3RH
cmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVy
LT5zZXRTaXplKGNvcmUobV93ZWJWaWV3KS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJhbWVSZWN0
KCkuc2l6ZSgpKTsKKyAgICBpZiAoZ3JhcGhpY3NMYXllciAmJiAhZW5hYmxlZCgpKQorICAgICAg
ICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZShnZXRXZWJWaWV3U2l6ZShtX3dlYlZpZXcpKTsK
IAotICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4dCgpOwotICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgcmV0dXJuOworICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJl
ZSBoaWVyYXJjaHkuCisgICAgaW5pdGlhbGl6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOwogCi0gICAgLy8gVGhlIGNvbnRleHQgbmVl
ZHMgdG8gYmUgYWN0aXZlIHdoZW4gY3JlYXRpbmcgdGhlIHRleHR1cmUgbWFwcGVyLiBJdCdzIGZp
bmUgdG8KLSAgICAvLyBhdm9pZCBjYWxsaW5nIHN3YXBCdWZmZXJzIGhlcmUsIGJlY2F1c2UgaXQg
d2lsbCBqdXN0IGluaXRpYWxpemUgc2hhZGVycy4KLSAgICBpZiAoIWNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVy
Q2FsbGJhY2tJZCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9sYXllckZsdXNoVGltZXJD
YWxsYmFja0lkKTsKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gMDsKKyAg
ICB9CiAKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0gICAgZ3RrX3dpZGdldF9nZXRf
YWxsb2NhdGlvbihHVEtfV0lER0VUKG1fd2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICBnbFZp
ZXdwb3J0KDAsIDAsIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKKyAgICAv
LyBGSVhNRTogVHdvIGZsdXNoZXMgc2VlbSBuZWNlc3NhcnkgdG8gZ2V0IHRoZSBwcm9wZXIgcmVu
ZGVyaW5nIGluIHNvbWUgY2FzZXMuIEl0J3MgdW5jbGVhcgorICAgIC8vIGlmIHRoaXMgaXMgYSBi
dWcgd2l0aCB0aGUgUmVkaXJlY3RlZFhDb21wb3NpdGUgd2luZG93IG9yIHdpdGggdGhpcyBjbGFz
cy4KKyAgICBtX25lZWRzRXh0cmFGbHVzaCA9IHRydWU7CisgICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7CiAKLSAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOwot
ICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVN
YXBwZXIuZ2V0KCkpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9
IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCA1MDAsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KGxheWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAw
KTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2NoZWR1bGVSb290
TGF5ZXJSZXBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIGlmICghbV9yb290R3JhcGhpY3NMYXllcikKKyAgICBpZiAo
IW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgICAg
ICBtX3Jvb3RMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwor
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJl
Y3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0OjpyZXNpemVSb290TGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3Zv
aWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlc2l6ZVJvb3RMYXllcihjb25zdCBJ
bnRTaXplJiBuZXdTaXplKQogewotICAgIGlmICghbV9yb290R3JhcGhpY3NMYXllcikKKyAgICBp
ZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcm9vdExheWVyLT5z
aXplKCkgPT0gbmV3U2l6ZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5
ZXItPnNldFNpemUoc2l6ZSk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnJl
c2l6ZShuZXdTaXplKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAg
IC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRl
ZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAorICAgIC8vIGZvciB0aG9zZSBu
ZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXRTaXplKG5ld1NpemUpOworCisgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUu
d2lkdGgoKSkgeworICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxm
bG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qo
b2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhl
aWdodCkpOworICAgIH0KKworICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwg
bmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKworICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgbmV3U2l6ZSkpOworICAgIGZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7Cit9CisKK3ZvaWQgQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhj
b25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCit7
CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
c2Nyb2xsUmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKLXN0YXRpYyBnYm9v
bGVhbiBzeW5jTGF5ZXJzVGltZW91dENhbGxiYWNrKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0KiBjb250ZXh0KQorZ2Jvb2xlYW4gQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Omxh
eWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2soQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgY29udGV4dC0+c3luY0xheWVyc1RpbWVvdXQoKTsKKyAgICBjb250
ZXh0LT5sYXllckZsdXNoVGltZXJGaXJlZCgpOwogICAgIHJldHVybiBGQUxTRTsKIH0KIAotdm9p
ZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bWFya0ZvclN5bmMoKQordm9pZCBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2NoZWR1bGVMYXllckZsdXNoKCkKIHsKLSAgICBp
ZiAobV9zeW5jVGltZXJDYWxsYmFja0lkKQorICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyBXZSB1c2UgYSBHTGliIHRpbWVyIGJlY2F1c2Ugb3RoZXJ3aXNlIEdU
SysgZXZlbnQgaGFuZGxpbmcgZHVyaW5nCi0gICAgLy8gZHJhZ2dpbmcgY2FuIHN0YXJ2ZSBXZWJD
b3JlIHRpbWVycywgd2hpY2ggaGF2ZSBhIGxvd2VyIHByaW9yaXR5LgotICAgIG1fc3luY1RpbWVy
Q2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAwLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzeW5jTGF5ZXJzVGltZW91dENhbGxiYWNrKSwg
dGhpcywgMCk7CisgICAgLy8gV2UgdXNlIGEgR0xpYiB0aW1lciBiZWNhdXNlIG90aGVyd2lzZSBH
VEsrIGV2ZW50IGhhbmRsaW5nIGR1cmluZyBkcmFnZ2luZyBjYW4KKyAgICAvLyBzdGFydmUgV2Vi
Q29yZSB0aW1lcnMsIHdoaWNoIGhhdmUgYSBsb3dlciBwcmlvcml0eS4KKyAgICBkb3VibGUgbmV4
dEZsdXNoID0gbWF4KGdTY2hlZHVsZURlbGF5IC0gKGN1cnJlbnRUaW1lKCkgLSBtX2xhc3RGbHVz
aFRpbWUpLCAwLjApOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91
dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCBuZXh0Rmx1c2ggKiAxMDAwLCByZWludGVy
cHJldF9jYXN0PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKSwgdGhp
cywgMCk7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnN5bmNMYXll
cnNOb3coKQorYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Zmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCkKIHsKLSAgICBpZiAobV9yb290R3JhcGhpY3NMYXllcikKLSAgICAgICAg
bV9yb290R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7Ci0KLSAgICBjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21w
b3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgbV9yb290TGF5ZXItPnN5bmND
b21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAg
cmV0dXJuIGNvcmUobV93ZWJWaWV3KS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0
aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6c3luY0xheWVyc1RpbWVvdXQoKQordm9pZCBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6Zmx1c2hBbmRSZW5kZXJMYXllcnMoKQogewotICAgIG1fc3luY1RpbWVy
Q2FsbGJhY2tJZCA9IDA7Ci0gICAgc3luY0xheWVyc05vdygpOwotICAgIGlmICghbV9yb290R3Jh
cGhpY3NMYXllcikKKyAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdEdyYXBoaWNzTGF5ZXIuZ2V0KCkpLT5kZXNj
ZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQotICAgICAgICBtX3N5bmNUaW1l
ckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgMTAw
MC4wIC8gNjAuMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc3luY0xheWVyc1RpbWVv
dXRDYWxsYmFjayksIHRoaXMsIDApOworICAgIHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gY29y
ZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKTsKKyAgICAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpIHx8ICFmcmFtZS0+dmlldygpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBmcmFtZS0+dmlldygpLT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVj
dXJzaXZlKCk7CisgICAgfQorCisgICAgR0xDb250ZXh0KiBjb250ZXh0ID0gbV9yZWRpcmVjdGVk
V2luZG93LT5jb250ZXh0KCk7CisgICAgaWYgKGNvbnRleHQgJiYgIWNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcygpKQorICAgICAgICByZXR1cm47CiAKLSAgICByZW5kZXJMYXllcnNUb1dpbmRv
dygwLCBJbnRSZWN0KCkpOworICAgIG1fbGFzdEZsdXNoVGltZSA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7CisKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2Ry
YXcoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKworICAgIC8vIElmIGl0J3MgYmVlbiBhIGxvbmcg
dGltZSBzaW5jZSB3ZSd2ZSBhY3R1YWxseSBwYWludGVkLCB3aGljaCBtZWFucyB0aGF0IGV2ZW50
cyBtaWdodAorICAgIC8vIGJlIHN0YXJ2aW5nIHRoZSBtYWluIGxvb3AsIHdlIHNob3VsZCBmb3Jj
ZSBhIGRyYXcgbm93LiBUaGlzIHNlZW1zIHRvIHByZXZlbnQgZGlzcGxheQorICAgIC8vIGxhZyBv
biBodHRwOi8vMjAxMi5iZWVyY2FtcC5jb20uCisgICAgaWYgKG1fcmVkcmF3UGVuZGluZ1RpbWUg
JiYgY3VycmVudFRpbWUoKSAtIG1fcmVkcmF3UGVuZGluZ1RpbWUgPiBnU2NoZWR1bGVEZWxheSkK
KyAgICAgICAgZ2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMoZ3RrX3dpZGdldF9nZXRfd2luZG93
KEdUS19XSURHRVQobV93ZWJWaWV3KSksIEZBTFNFKTsKKyAgICBlbHNlIGlmICghbV9yZWRyYXdQ
ZW5kaW5nVGltZSkKKyAgICAgICAgbV9yZWRyYXdQZW5kaW5nVGltZSA9IGN1cnJlbnRUaW1lKCk7
Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmxheWVyRmx1c2hUaW1l
ckZpcmVkKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQgPSAwOworICAgIGZs
dXNoQW5kUmVuZGVyTGF5ZXJzKCk7CiB9CiAKIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJs
ZSB0aW1lKQpAQCAtMjA2LDkgKzM1OCwxMCBAQCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0Ojpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCiAKIHZvaWQg
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UsIGNvbnN0IEludFJlY3QmIHJlY3RUb1BhaW50KQogewotICAgIGNhaXJvX3QqIGNyID0g
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKLSAgICBjb3B5UmVjdEZyb21DYWlyb1N1
cmZhY2VUb0NvbnRleHQobV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUtPmNhaXJvU3VyZmFj
ZSgpLCBjciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSgp
LCByZWN0VG9QYWludCk7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgY29udGV4dC5jbGlwKHJl
Y3RUb1BhaW50KTsKKyAgICBjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52aWV3KCktPnBh
aW50KCZjb250ZXh0LCByZWN0VG9QYWludCk7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAK
IGJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNob3dEZWJ1Z0JvcmRlcnMoY29u
c3QgR3JhcGhpY3NMYXllciopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAppbmRleCA0MWM4NDA5MjQxODlkN2M4Yzcw
MjhkMDI0N2VmOGY5MmFiOGIxOWZkLi4zY2UwMjdmNzQzYjE3ODUwYjQ5YmY0MDZmYThkM2Q2MGNm
NDM5MTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5jcHAKQEAgLTE0MiwxNyArMTQyLDE4IEBAIHZvaWQgQ2hyb21lQ2xpZW50
OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICB9CiB9CiAKLUZsb2F0
UmVjdCBDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKK3N0YXRpYyBJbnRSZWN0IGdldFdlYlZpZXdS
ZWN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0
aW9uOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDE4LCAwKQotICAgIGd0a193aWRnZXRfZ2V0
X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0jZWxzZQot
ICAgIGFsbG9jYXRpb24gPSBHVEtfV0lER0VUKG1fd2ViVmlldyktPmFsbG9jYXRpb247Ci0jZW5k
aWYKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQod2ViVmlldyksICZh
bGxvY2F0aW9uKTsKICAgICByZXR1cm4gSW50UmVjdChhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24u
eSwgYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOwogfQogCitGbG9hdFJlY3Qg
Q2hyb21lQ2xpZW50OjpwYWdlUmVjdCgpCit7CisgICAgcmV0dXJuIGdldFdlYlZpZXdSZWN0KG1f
d2ViVmlldyk7Cit9CisKIHZvaWQgQ2hyb21lQ2xpZW50Ojpmb2N1cygpCiB7CiAgICAgZ3RrX3dp
ZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQobV93ZWJWaWV3KSk7CkBAIC00MTksMTAgKzQyMCwy
MCBAQCBzdGF0aWMgdm9pZCBjbGVhckV2ZXJ5d2hlcmVJbkJhY2tpbmdTdG9yZShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBjYWlyb190KiBjcikKIAogdm9pZCBDaHJvbWVDbGllbnQ6OndpZGdldFNp
emVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG9sZFdpZGdldFNpemUsIEludFNpemUgbmV3U2l6ZSkK
IHsKLSAgICBXaWRnZXRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IG1fd2ViVmlldy0+cHJp
di0+YmFja2luZ1N0b3JlLmdldCgpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29tcG9zaXRpbmdDb250ZXh0ID0g
bV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5nZXQoKTsKKyAg
ICBpZiAoY29tcG9zaXRpbmdDb250ZXh0LT5lbmFibGVkKCkpIHsKKyAgICAgICAgbV93ZWJWaWV3
LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVzaXplUm9vdExheWVyKG5l
d1NpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAKICAgICAvLyBHcm93IHRo
ZSBiYWNraW5nIHN0b3JlIGJ5IGF0IGxlYXN0IDEuNSB0aW1lcyB0aGUgY3VycmVudCBzaXplLiBU
aGlzIHByZXZlbnRzCiAgICAgLy8gbG90cyBvZiB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyBkdXJp
bmcgYW4gb3BhcXVlIHJlc2l6ZS4KKyAgICBXaWRnZXRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9y
ZSA9IG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLmdldCgpOworICAgIGlmIChiYWNraW5n
U3RvcmUgJiYgb2xkV2lkZ2V0U2l6ZSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm47CisKICAg
ICBpZiAoYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGNvbnN0IEludFNpemUmIG9sZFNpemUgPSBi
YWNraW5nU3RvcmUtPnNpemUoKTsKICAgICAgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNp
emUud2lkdGgoKSkKQEAgLTUyNiwyMCArNTM3LDYgQEAgc3RhdGljIHZvaWQgcGFpbnRXZWJWaWV3
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEZyYW1lKiBmcmFtZSwgUmVnaW9uIGRpcnR5UmVnaW8K
ICAgICBnYy5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlV2lk
Z2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogYWNDb250ZXh0ID0g
bV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5nZXQoKTsKLSAg
ICBpZiAoYWNDb250ZXh0LT5lbmFibGVkKCkpIHsKLSAgICAgICAgYWNDb250ZXh0LT5zY2hlZHVs
ZVJvb3RMYXllclJlcGFpbnQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
LSAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKG1fd2ViVmlldyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19
Ci0KIHZvaWQgQ2hyb21lQ2xpZW50OjpwZXJmb3JtQWxsUGVuZGluZ1Njcm9sbHMoKQogewogICAg
IGlmICghbV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUpCkBAIC01NDksNyArNTQ2LDcgQEAg
dm9pZCBDaHJvbWVDbGllbnQ6OnBlcmZvcm1BbGxQZW5kaW5nU2Nyb2xscygpCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3JlY3RzVG9TY3JvbGwuc2l6ZSgpOyBpKyspIHsKICAgICAgICAg
SW50UmVjdCYgc2Nyb2xsUmVjdCA9IG1fcmVjdHNUb1Njcm9sbFtpXTsKICAgICAgICAgbV93ZWJW
aWV3LT5wcml2LT5iYWNraW5nU3RvcmUtPnNjcm9sbChzY3JvbGxSZWN0LCBtX3Njcm9sbE9mZnNl
dHNbaV0pOwotICAgICAgICBpbnZhbGlkYXRlV2lkZ2V0UmVjdChzY3JvbGxSZWN0KTsKKyAgICAg
ICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLCBzY3Jv
bGxSZWN0LngoKSwgc2Nyb2xsUmVjdC55KCksIHNjcm9sbFJlY3Qud2lkdGgoKSwgc2Nyb2xsUmVj
dC5oZWlnaHQoKSk7CiAgICAgfQogCiAgICAgbV9yZWN0c1RvU2Nyb2xsLmNsZWFyKCk7CkBAIC01
ODUsMTIgKzU4Miw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpwYWludChXZWJDb3JlOjpUaW1lcjxD
aHJvbWVDbGllbnQ+KikKICAgICB9CiAKICAgICBjb25zdCBJbnRSZWN0JiByZWN0ID0gbV9kaXJ0
eVJlZ2lvbi5ib3VuZHMoKTsKLSAgICBpbnZhbGlkYXRlV2lkZ2V0UmVjdChyZWN0KTsKLQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBtX3dlYlZpZXctPnByaXYtPmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5zeW5jTGF5ZXJzTm93KCk7Ci0gICAgbV93ZWJWaWV3
LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVuZGVyTGF5ZXJzVG9XaW5k
b3coMCwgcmVjdCk7Ci0jZW5kaWYKKyAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtf
V0lER0VUKG1fd2ViVmlldyksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKIAogICAgIG1fZGlydHlSZWdpb24gPSBSZWdpb24oKTsKICAgICBtX2xhc3RE
aXNwbGF5VGltZSA9IGN1cnJlbnRUaW1lKCk7CkBAIC02MDYsNiArNTk4LDExIEBAIHZvaWQgQ2hy
b21lQ2xpZW50OjpwYWludChXZWJDb3JlOjpUaW1lcjxDaHJvbWVDbGllbnQ+KikKIAogdm9pZCBD
aHJvbWVDbGllbnQ6OmZvcmNlUGFpbnQoKQogeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICBpZiAobV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIG1fZm9yY2VQ
YWludCA9IHRydWU7CiAgICAgcGFpbnQoMCk7CiAgICAgbV9mb3JjZVBhaW50ID0gZmFsc2U7CkBA
IC02MTcsNiArNjE0LDE0IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlUm9vdFZpZXco
Y29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRlKQogCiB2b2lkIENocm9tZUNsaWVudDo6aW52
YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9v
bCBpbW1lZGlhdGUpCiB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBhY0NvbnRleHQgPSBtX3dlYlZpZXctPnByaXYt
PmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOworICAgIGlmIChhY0NvbnRleHQt
PmVuYWJsZWQoKSkgeworICAgICAgICBhY0NvbnRleHQtPnNldE5vbkNvbXBvc2l0ZWRDb250ZW50
c05lZWREaXNwbGF5KHVwZGF0ZVJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKICAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBt
X2RpcnR5UmVnaW9uLnVuaXRlKHVwZGF0ZVJlY3QpOwpAQCAtNjI1LDEyICs2MzAsMzQgQEAgdm9p
ZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QsIGJvb2wKIAogdm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVDb250
ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlh
dGUpCiB7Ci0gICAgaW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcodXBkYXRlUmVjdCwgaW1t
ZWRpYXRlKTsKICAgICBtX2FkanVzdG1lbnRXYXRjaGVyLnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNj
cm9sbGJhcnNMYXRlcigpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBhY0NvbnRleHQgPSBtX3dlYlZpZXctPnBy
aXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOworICAgIGlmIChhY0NvbnRl
eHQtPmVuYWJsZWQoKSkgeworICAgICAgICBhY0NvbnRleHQtPnNldE5vbkNvbXBvc2l0ZWRDb250
ZW50c05lZWREaXNwbGF5KHVwZGF0ZVJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKKyAgICBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyh1cGRhdGVSZWN0LCBpbW1l
ZGlhdGUpOwogfQogCiB2b2lkIENocm9tZUNsaWVudDo6c2Nyb2xsKGNvbnN0IEludFNpemUmIGRl
bHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KQogeworICAgIG1fYWRqdXN0bWVudFdhdGNoZXIudXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xs
YmFyc0xhdGVyKCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGNvbXBvc2l0aW5nQ29udGV4dCA9IG1fd2ViVmll
dy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7CisgICAgaWYgKGNv
bXBvc2l0aW5nQ29udGV4dC0+ZW5hYmxlZCgpKSB7CisgICAgICAgIEFTU0VSVCghcmVjdFRvU2Ny
b2xsLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVCghZGVsdGEuaXNFbXB0eSgpKTsKKworICAg
ICAgICBjb21wb3NpdGluZ0NvbnRleHQtPnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhyZWN0
VG9TY3JvbGwsIGRlbHRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAgICAg
bV9yZWN0c1RvU2Nyb2xsLmFwcGVuZChyZWN0VG9TY3JvbGwpOwogICAgIG1fc2Nyb2xsT2Zmc2V0
cy5hcHBlbmQoZGVsdGEpOwogCkBAIC02NTcsOCArNjg0LDYgQEAgdm9pZCBDaHJvbWVDbGllbnQ6
OnNjcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xs
LCBjb24KIAogICAgIG1fZGlydHlSZWdpb24udW5pdGUoc2Nyb2xsUmVwYWludFJlZ2lvbik7CiAg
ICAgbV9kaXNwbGF5VGltZXIuc3RhcnRPbmVTaG90KDApOwotCi0gICAgbV9hZGp1c3RtZW50V2F0
Y2hlci51cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzTGF0ZXIoKTsKIH0KIAogSW50UmVj
dCBDaHJvbWVDbGllbnQ6OnJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29u
c3QKQEAgLTk2NiwxNyArOTkxLDMzIEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpleGl0RnVsbFNjcmVl
bkZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCopCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogdm9pZCBDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1l
KiBmcmFtZSwgR3JhcGhpY3NMYXllciogcm9vdExheWVyKQogewotICAgIG1fd2ViVmlldy0+cHJp
di0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPmF0dGFjaFJvb3RHcmFwaGljc0xheWVy
KHJvb3RMYXllcik7CisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGNvbnRleHQg
PSBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOwor
ICAgIGJvb2wgdHVybmluZ09mZkNvbXBvc2l0aW5nID0gIXJvb3RMYXllciAmJiBjb250ZXh0LT5l
bmFibGVkKCk7CisgICAgYm9vbCB0dXJuaW5nT25Db21wb3NpdGluZyA9IHJvb3RMYXllciAmJiAh
Y29udGV4dC0+ZW5hYmxlZCgpOworCisgICAgY29udGV4dC0+c2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIocm9vdExheWVyKTsKKworICAgIEludFJlY3Qgd2ViVmlld1JlY3QgPSBnZXRXZWJWaWV3UmVj
dChtX3dlYlZpZXcpOworICAgIGlmICh0dXJuaW5nT25Db21wb3NpdGluZykgeworICAgICAgICBt
X2Rpc3BsYXlUaW1lci5zdG9wKCk7CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0
b3JlID0gV2ViQ29yZTo6V2lkZ2V0QmFja2luZ1N0b3JlOjpjcmVhdGUoR1RLX1dJREdFVChtX3dl
YlZpZXcpLCBJbnRTaXplKDEsIDEpKTsKKyAgICB9CisKKyAgICBpZiAodHVybmluZ09mZkNvbXBv
c2l0aW5nKSB7CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlID0gV2ViQ29y
ZTo6V2lkZ2V0QmFja2luZ1N0b3JlOjpjcmVhdGUoR1RLX1dJREdFVChtX3dlYlZpZXcpLCB3ZWJW
aWV3UmVjdC5zaXplKCkpOworICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihj
YWlyb19jcmVhdGUobV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgp
KSk7CisgICAgICAgIGNsZWFyRXZlcnl3aGVyZUluQmFja2luZ1N0b3JlKG1fd2ViVmlldywgY3Iu
Z2V0KCkpOworICAgIH0KIH0KIAogdm9pZCBDaHJvbWVDbGllbnQ6OnNldE5lZWRzT25lU2hvdERy
YXdpbmdTeW5jaHJvbml6YXRpb24oKQogewotICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQtPm1hcmtGb3JTeW5jKCk7CisgICAgbV93ZWJWaWV3LT5wcml2
LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+c2NoZWR1bGVMYXllckZsdXNoKCk7CiB9
CiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkKIHsK
LSAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5tYXJr
Rm9yU3luYygpOworICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQtPnNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCiBDaHJvbWVDbGllbnQ6OkNvbXBvc2l0
aW5nVHJpZ2dlckZsYWdzIENocm9tZUNsaWVudDo6YWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRHdGsuaAppbmRleCBlNWUyZmExZWIwMjJmYjY0MWRmMzZkMmFjZWIxMmJkMGJjZTQzNDdh
Li4yODRiZGFhMzY2MDZhZTE1YWJiYzE1NmIzZWU4ZTIxNWQ3MmMxZTFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaApAQCAtMTc5
LDcgKzE3OSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBkb3VibGUgbV9sYXN0RGlz
cGxheVRpbWU7CiAgICAgICAgIHVuc2lnbmVkIGludCBtX3JlcGFpbnRTb29uU291cmNlSWQ7CiAK
LSAgICAgICAgdm9pZCBpbnZhbGlkYXRlV2lkZ2V0UmVjdChjb25zdCBJbnRSZWN0Jik7CiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9mdWxsU2Ny
ZWVuRWxlbWVudDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCmluZGV4IDk3MTc4MDYzN2FmMjdhNDAxNGIwNDVhN2I1ZGZkNzQzN2Q4ZDIwMWMuLmE1
MzY4OTQ0ZDNmZmZmMmNjNmYzYTEzNDM5MTQ3NDdjN2EzZmNhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTY3OSw4ICs2NzksMTAgQEAgc3RhdGlj
IGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19kcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190
KiBjcikKIAogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVX
KHdpZGdldCktPnByaXY7CiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGlmIChwcml2LT5h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVuZGVyTGF5ZXJzVG9XaW5kb3coY3IsIGNs
aXBSZWN0KSkKKyAgICBpZiAocHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJl
bmRlckxheWVyc1RvV2luZG93KGNyLCBjbGlwUmVjdCkpIHsKKyAgICAgICAgR1RLX1dJREdFVF9D
TEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+ZHJhdyh3aWRnZXQsIGNyKTsKICAg
ICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KICNlbmRpZgogCiAgICAgY2Fpcm9fcmVjdGFuZ2xl
X2xpc3RfdCogcmVjdExpc3QgPSBjYWlyb19jb3B5X2NsaXBfcmVjdGFuZ2xlX2xpc3QoY3IpOwpA
QCAtODc1LDE1ICs4NzcsMTYgQEAgc3RhdGljIHZvaWQgcmVzaXplV2ViVmlld0Zyb21BbGxvY2F0
aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEd0a0FsbG9jYXRpb24qIGEKICAgICBXZWJLaXQ6
OkNocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpDaHJvbWVD
bGllbnQqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwogICAgIGNocm9tZUNsaWVudC0+d2lk
Z2V0U2l6ZUNoYW5nZWQob2xkU2l6ZSwgSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2Nh
dGlvbi0+aGVpZ2h0KSk7CiAgICAgY2hyb21lQ2xpZW50LT5hZGp1c3RtZW50V2F0Y2hlcigpLT51
cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQtPnJlc2l6ZVJvb3RMYXllcihJbnRTaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0
aW9uLT5oZWlnaHQpKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
c2l6ZV9hbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlv
bikKIHsKKyAgICBHdGtBbGxvY2F0aW9uIG9sZEFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9n
ZXRfYWxsb2NhdGlvbih3aWRnZXQsICZvbGRBbGxvY2F0aW9uKTsKKwogICAgIEdUS19XSURHRVRf
Q0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPnNpemVfYWxsb2NhdGUod2lkZ2V0
LCBhbGxvY2F0aW9uKTsKKyAgICBpZiAoYWxsb2NhdGlvbi0+d2lkdGggPT0gb2xkQWxsb2NhdGlv
bi53aWR0aCAmJiBhbGxvY2F0aW9uLT5oZWlnaHQgPT0gb2xkQWxsb2NhdGlvbi5oZWlnaHQpCisg
ICAgICAgIHJldHVybjsKIAogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2lkZ2V0KTsKICAgICBpZiAoIWd0a193aWRnZXRfZ2V0X21hcHBlZCh3aWRnZXQpKSB7
CkBAIC0xMDAzLDEwICsxMDA2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3JlYWxp
emUoR3RrV2lkZ2V0KiB3aWRnZXQpCiAjZW5kaWYKICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGdk
a193aW5kb3dfbmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cod2lkZ2V0KSwgJmF0dHJp
YnV0ZXMsIGF0dHJpYnV0ZXNfbWFzayk7CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2OwotICAgIHByaXYtPmhhc05hdGl2
ZVdpbmRvdyA9IGdka193aW5kb3dfZW5zdXJlX25hdGl2ZSh3aW5kb3cpOwotI2VuZGlmCiAgICAg
Z3RrX3dpZGdldF9zZXRfd2luZG93KHdpZGdldCwgd2luZG93KTsKICAgICBnZGtfd2luZG93X3Nl
dF91c2VyX2RhdGEod2luZG93LCB3aWRnZXQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcAppbmRleCAx
YjkxZGU4NGYxMmIzN2M3NWRlYjZkZjA0NjNhYmExODQxZGQ1NzkxLi5hNDEyYTg1MDA5ZmM5M2Q4
NzA3NGM3YjMyNjVkYmQ5ZDBkMWQ5ZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKQEAgLTc4LDcg
Kzc4LDcgQEAgR0xDb250ZXh0KiBMYXllclRyZWVIb3N0R3RrOjpnbENvbnRleHQoKQogICAgIGlm
ICghd2luZG93SGFuZGxlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fY29udGV4dCA9IEdM
Q29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyh3aW5kb3dIYW5kbGUsIEdMQ29udGV4dDo6
c2hhcmluZ0NvbnRleHQoKSk7CisgICAgbV9jb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250
ZXh0Rm9yV2luZG93KHdpbmRvd0hhbmRsZSwgR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4dCgpLCBH
TENvbnRleHQ6OlNpbmdsZUJ1ZmZlcik7CiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDg3N2JiNTY2ZWFlMmY0
NDFhNGIzOTMzZGU1NjY1NmVhN2M1YmI4MTYuLjZlZWFiZjBmOGU0ZjI4OTU4NTI3ZDQyMzc0MDUx
MTUyNjFkNjRhN2UgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxMi0wOC0xNiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gVXNpbmcgYSBuYXRpdmUgd2luZG93IGZvciB0aGUgV2Vi
VmlldyBicmVha3MgR3RrT3ZlcmxheQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTAwODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGNvbmZpZ3VyZS5hYzogUGFyc2UgeGNvbXBvc2l0ZSBwa2ctY29uZmln
IGZpbGUgZHVyaW5nIGNvbmZpZ3VyYXRpb24uCisKIDIwMTItMDgtMTIgIExvw69jIFlodWVsICA8
bG9pYy55aHVlbEBzb2Z0YXRob21lLmNvbT4KIAogICAgICAgICBbUXRdIE1ha2UgaXQgcG9zc2li
bGUgdG8gYnVpbGQgd2l0aG91dCBRdFRlc3QvUXRQcmludFN1cHBvcnQKZGlmZiAtLWdpdCBhL2Nv
bmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA3ZWE1Yjk1ZWViZjc0MjBlYzg5OGEzNTU5
ZjMxMWMyMDI4YzQ1Y2YxLi5mOTQxZDU3NzY4ZWU3YTQwZjVmY2FiYmIwMjkyZTMxZDE5MTZlNmIy
IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC01NjUsNiAr
NTY1LDEyIEBAIEFDX0FSR19XSVRIKGFjY2VsZXJhdGlvbl9iYWNrZW5kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXSkKIEFDX01TR19SRVNVTFQoWyR3aXRoX2FjY2VsZXJhdGlvbl9iYWNr
ZW5kXSkKIAoraWYgdGVzdCAiJHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tlbmQiID0gIm9wZW5nbCI7
IHRoZW4KKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbWENPTVBPU0lURV0sIFt4Y29tcG9zaXRlXSk7
CisgICAgQUNfU1VCU1QoWENPTVBPU0lURV9DRkxBR1MpCisgICAgQUNfU1VCU1QoWENPTVBPU0lU
RV9MSUJTKQorZmkKKwogIyBPcGVuR0wgaXMgdHVybmVkIG9uIGJ5IGRlZmF1bHQgKGFsb25nIHdp
dGggV2ViR0wgYW5kIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nKSwgYnV0IGlmCiAjIENsdXR0ZXIg
aXMgY2hvc2VuIGFzIHRoZSBhY2NlbGVyYXRlZCBkcmF3aW5nIGJhY2tlbmQsIHdlIHdhbnQgdG8g
ZGlzYWJsZSBpdC4gQ09HTCBkb2VzIAogIyBub3QgcGxheSB3ZWxsIHdpdGggT3BlbkdMLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159341</attachid>
            <date>2012-08-19 23:38:20 -0700</date>
            <delta_ts>2012-08-20 07:46:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90085-20120819233741.patch</filename>
            <type>text/plain</type>
            <size>55862</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWVhMTBkY2I4OWMxNTg5
NTBkYTQwOTA0ZDE0NTgwYWE1NThkMGVhYy4uYzExYTIxMjBhNzE0OGNiOTY0M2QxZTZlMmI5YjY1
Yjk0YzM3Nzk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2lu
ZyBhIG5hdGl2ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGhpcyB3aWxsIGJlIGNvdmVyZWQgYnkgcGl4ZWwgdGVzdCBmb3IgYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgd2hlbiB0aGV5IGFyZSBhY3RpdmF0ZWQuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOiBBZGQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZmlsZXMgdG8g
dGhlIHNvdXJjZSBsaXN0LgorICAgICAgICBNYWtlIGEgbmV3IHNlY3Rpb24gZm9yIEdMWCBzcGVj
aWZpYyBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xY
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSk6IEV4
cG9zZSBzaGFyZWREaXNwbGF5IGFzIGEgc3RhdGljIG1ldGhvZAorICAgICAgICBzbyB0aGF0IGl0
IGNhbiBiZSBjYWxsZWQgYnkgb3RoZXIgWDExIHNwZWNpZmljIGNvZGUuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBBZGRlZC4gQW4gaW1wbGVt
ZW50YXRpb24gb2YgYSBHTCBzdXJmYWNlCisgICAgICAgIHRoYXQgcmVuZGVycyB0byBhbiBYLXdp
bmRvdyB3aGljaCByZWRpcmVjdHMgdG8gYSBwaXhtYXAuCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg6IEFkZGVkLgorCiAyMDEyLTA4LTEzICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBJ
bXBsZW1lbnRhdGlvbiBvZiBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dCBpZ25vcmVzICds
ZW5ndGgnIHBhcmFtZXRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDQ5MmVlYmYwYmU4MDdjOTYxZjQy
NmM1NzYzYjYyYTM1Mzg2NjA5NzQuLjU1MmVmMjYyN2FhM2JhMzIyZDMwN2NiMDhkZWYzM2E2MjQ1
ZTcwMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMi0wOC0xNiAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXNp
bmcgYSBuYXRpdmUgd2luZG93IGZvciB0aGUgV2ViVmlldyBicmVha3MgR3RrT3ZlcmxheQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAwODUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXdyaXRlIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0IGZvciBUZXh0dXJlTWFwcGVyR0wgdG8gYmUgbW9yZSBz
aW1pbGFyIHRvCisgICAgICAgIHRoZSBXZWJLaXQyIExheWVyVHJlZUhvc3QgYW5kIHN3aXRjaCBm
cm9tIHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgd2lkZ2V0IHdpbmRvdworICAgICAgICB0byBh
IHdpbmRvdyByZWRpcmVjdGVkIHRvIGEgcGl4bWFwIHZpYSBYQ29tcG9zaXRlLiBUaGUgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQKKyAgICAgICAgbm93IGhhbmRsZXMgcGFpbnRpbmcgdGhl
IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgaXRzZWxmIGFuZCBubyBsb25nZXIgcmVsaWVzIG9uIHRo
ZQorICAgICAgICBDaHJvbWVDbGllbnQgYmFja2luZyBzdG9yZS4KKworICAgICAgICBUaGlzIGZp
eGVzIGlzc3VlcyB3aXRoIHVzaW5nIEd0a092ZXJsYXkgV2ViS2l0V2ViVmlldyBhcyB3ZWxsIGFz
IG1ha2luZyBpdCBwb3NzaWJsZQorICAgICAgICB0byBydW4gcGl4ZWwgdGVzdHMgd2l0aCBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyB0dXJuZWQgb24uCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oOgorICAgICAgICAoQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0R0wuY3BwOgorICAgICAgICBSZW5hbWUgc29tZSBtZXRob2RzIHRv
IG1ha2UgdGhlbSBtb3JlIHNpbWlsYXIgdG8gTGF5ZXJUcmVlSG9zdC4gTm93IHdlIHdhaXQgdG8g
cmVuZGVyCisgICAgICAgIHRoZSBPcGVuR0wgY29udGV4dCB0byB0aGUgd2luZG93IHVudGlsIHRo
ZSB3aWRnZXQncyBkcmF3IHNpZ25hbC4gRXNjYXBlIG91dCBvZiBhbGwKKyAgICAgICAgbWV0aG9k
cyBlYXJseSBpZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBkaXNhYmxlZC4KKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOiBBbHdheXMgY2hlY2sgaWYgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgb24KKyAgICAgICAgYmVmb3JlIGNhbGxpbmcgaW50byBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCBtZXRob2RzLiBXaGVuIEFDIGlzIG9uLCBuZXZl
ciBwYWludAorICAgICAgICB0aGUgYmFja2luZyBzdG9yZSwgZGVmZXJyaW5nIGltbWVkaWF0ZWx5
IHRvIHRoZSBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC4gV2hlbgorICAgICAgICBBQyBp
cyB0dXJuZWQgb24gdGhlIGJhY2tpbmcgc3RvcmUgbm93IHNocmlua3MgdG8gYSBzbWFsbCBzaXpl
IHRvIHNhdmUgbWVtb3J5LgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAg
ICAgICAgKHJlc2l6ZVdlYlZpZXdGcm9tQWxsb2NhdGlvbik6IENocm9tZUNsaWVudCBpcyBub3cg
cmVzcG9uc2libGUgZm9yIHRhbGtpbmcgdG8gdGhlCisgICAgICAgIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0IGRpcmVjdGx5LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NpemVfYWxs
b2NhdGUpOiBFeGl0IGVhcmx5IGlmIHRoZSBhbGxvY2F0aW9uIGlzIG5vdCBhIHJlc2l6ZS4gVGhp
cworICAgICAgICBtYWtlcyBzb21lIGRlZXBlciBsb2dpYyBhIGJpdCBzaW1wbGVyIGFuZCBhdm9p
ZHMgYWNjaWRlbnRhbGx5IGRvaW5nIHRvbyBtdWNoIHdvcmsgZm9yCisgICAgICAgIHdpZGdldCBt
b3ZlbWVudC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsaXplKTogV2Ugbm8gbG9uZ2Vy
IG5lZWQgYSBuYXRpdmUgd2luZG93LgorCiAyMDEyLTA4LTEzICBNYXJ0aW4gUm9iaW5zb24gIDxt
cm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBEZWZhdWx0IHNpZ25hbCBoYW5k
bGVyIGZvciBXZWJLaXRXZWJWaWV3OjpzaG91bGQtc2hvdy1kZWxldGUtaW50ZXJmYWNlLWZvci1l
bGVtZW50IG92ZXJyaWRlcyBkZWZhdWx0IHJlc3VsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBl
NzE0YzVhZGFlMGRjNGIyYzhjNTNhYTgzM2FlMGJlNmEzYzUwYTE3Li41OGY0NzA0MTAzYTAwMzc3
NzRiOTMxZDExYjliMDcyNGE3MjcyMmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTA3Miw2
ICsxMDcyLDcgQEAgbGliV2ViQ29yZUd0a19sYV9DUFBGTEFHUyA9IFwKIAkkKExJQlhTTFRfQ0ZM
QUdTKSBcCiAJJChTUUxJVEUzX0NGTEFHUykgXAogCSQoVU5JQ09ERV9DRkxBR1MpIFwKKwkkKFhD
T01QT1NJVEVfQ0ZMQUdTKSBcCiAJJChYUkVOREVSX0NGTEFHUykgXAogCSQoWFRfQ0ZMQUdTKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA3ZjUyYWYxNzNkNTI1NjFkMjgyZWFm
OWQ2ZjkxMzM4YzQyNzExOWFjLi4wZmM3ZWVkODA3YmU0MTU2MjhjMTZkYmI5MGZlYTMzNGY4NWMw
MGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ5MjEsNiArNDkyMSw4IEBA
IHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR0xDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR0xDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtX
aWRnZXRCYWNraW5nU3RvcmVYMTEuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ndGsvZ3RrMnh0YmluLmMgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
TENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xD
b250ZXh0LmNwcAppbmRleCA2ZWI5OTA0ZWNiMmEyNmQwNzlhMDFiZWE3ZGNiZmRlMzY1ZmI5NzQ3
Li43MzA0NjNhY2UxOThlODZiMDc4ZWVhNDZiYTI0ZjYzYTU2ZmFiZTE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAKQEAg
LTM2LDEwICszNiwxMCBAQCBHTENvbnRleHQqIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKQog
ICAgIHJldHVybiBzaGFyaW5nLmdldCgpOwogfQogCi1QYXNzT3duUHRyPEdMQ29udGV4dD4gR0xD
b250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHVpbnQ2NF90IHdpbmRvd0hhbmRsZSwgR0xD
b250ZXh0KiBzaGFyaW5nQ29udGV4dCkKK1Bhc3NPd25QdHI8R0xDb250ZXh0PiBHTENvbnRleHQ6
OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3codWludDY0X3Qgd2luZG93SGFuZGxlLCBHTENvbnRleHQq
IHNoYXJpbmdDb250ZXh0LCBCdWZmZXJpbmdUeXBlIGJ1ZmZlcmluZ1R5cGUpCiB7CiAjaWYgVVNF
KEdMWCkKLSAgICByZXR1cm4gR0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KHdpbmRvd0hhbmRs
ZSwgc2hhcmluZ0NvbnRleHQpOworICAgIHJldHVybiBHTENvbnRleHRHTFg6OmNyZWF0ZUNvbnRl
eHQod2luZG93SGFuZGxlLCBzaGFyaW5nQ29udGV4dCwgYnVmZmVyaW5nVHlwZSk7CiAjZW5kaWYK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTUxLDcgKzUxLDcgQEAgR0xDb250ZXh0OjpHTENv
bnRleHQoKQogUGFzc093blB0cjxHTENvbnRleHQ+IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVu
Q29udGV4dChHTENvbnRleHQqIHNoYXJpbmcpCiB7CiAjaWYgVVNFKEdMWCkKLSAgICByZXR1cm4g
R0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KDAsIHNoYXJpbmcpOworICAgIHJldHVybiBHTENv
bnRleHRHTFg6OmNyZWF0ZUNvbnRleHQoMCwgc2hhcmluZywgU2luZ2xlQnVmZmVyKTsKICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HTENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dM
Q29udGV4dC5oCmluZGV4IGMyM2E0NmNmMTMzMDJjNDhlZDBjYmUwM2IzNWNiNTVhNjFlOTQ4MmMu
LmY2NmIwNzI3YmJiYTVjMzQ5NTQyZTBlNzE4MmY3MmMwODM0YWE1YWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCkBAIC0zMCw3
ICszMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdMQ29udGV4dCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoR0xDb250ZXh0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxHTENvbnRleHQ+IGNyZWF0ZUNvbnRleHRGb3JXaW5kb3codWludDY0X3Qgd2luZG93SGFu
ZGxlLCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KTsKKyAgICBlbnVtIEJ1ZmZlcmluZ1R5cGUg
eyBEb3VibGVCdWZmZXIsIFNpbmdsZUJ1ZmZlciB9OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8
R0xDb250ZXh0PiBjcmVhdGVDb250ZXh0Rm9yV2luZG93KHVpbnQ2NF90IHdpbmRvd0hhbmRsZSwg
R0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCwgQnVmZmVyaW5nVHlwZSk7CiAgICAgc3RhdGljIFBh
c3NPd25QdHI8R0xDb250ZXh0PiBjcmVhdGVPZmZzY3JlZW5Db250ZXh0KEdMQ29udGV4dCogc2hh
cmluZyA9IDApOwogICAgIHN0YXRpYyBHTENvbnRleHQqIGdldEN1cnJlbnQoKTsKICAgICBzdGF0
aWMgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAppbmRleCA5NDk2ZmM5MWFm
MzEzZDAxYmQ0MGU5YmI5ZTM0YTA4NmIyYzE2MTUyLi4yMDI4Y2VhNmQyNDU1M2ZmNzNlMTQxMzU3
MGZlNDRkMTQ4ZDE4OTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBiZWNhdXNlIGl0IG1pZ2h0IGxlYWQgdG8gY3Jhc2hlcyBpbiBzb21lIGRy
aXZlcnMgKGZnbHJ4KS4gV2UgdXNlIGEgc2hhcmVkIGRpc3BsYXkKIC8vIHBvaW50ZXIgaGVyZS4K
IHN0YXRpYyBEaXNwbGF5KiBnU2hhcmVkRGlzcGxheSA9IDA7Ci1zdGF0aWMgRGlzcGxheSogc2hh
cmVkRGlzcGxheSgpCitEaXNwbGF5KiBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKQogewog
ICAgIGlmICghZ1NoYXJlZERpc3BsYXkpCiAgICAgICAgIGdTaGFyZWREaXNwbGF5ID0gWE9wZW5E
aXNwbGF5KDApOwpAQCAtODksMjIgKzg5LDMzIEBAIHZvaWQgR0xDb250ZXh0R0xYOjpjbGVhbnVw
QWN0aXZlQ29udGV4dHNBdEV4aXQoKQogICAgIGdTaGFyZWREaXNwbGF5ID0gMDsKIH0KIAotUGFz
c093blB0cjxHTENvbnRleHRHTFg+IEdMQ29udGV4dEdMWDo6Y3JlYXRlV2luZG93Q29udGV4dChY
SUQgd2luZG93LCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KQorUGFzc093blB0cjxHTENvbnRl
eHRHTFg+IEdMQ29udGV4dEdMWDo6Y3JlYXRlV2luZG93Q29udGV4dChYSUQgd2luZG93LCBHTENv
bnRleHQqIHNoYXJpbmdDb250ZXh0LCBCdWZmZXJpbmdUeXBlIGJ1ZmZlcmluZ1R5cGUpCiB7CiAg
ICAgRGlzcGxheSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKICAgICBYV2luZG93QXR0cmli
dXRlcyBhdHRyaWJ1dGVzOwogICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMoZGlzcGxheSwg
d2luZG93LCAmYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgWFZp
c3VhbEluZm8gdmlzdWFsSW5mbzsKLSAgICB2aXN1YWxJbmZvLnZpc3VhbGlkID0gWFZpc3VhbElE
RnJvbVZpc3VhbChhdHRyaWJ1dGVzLnZpc3VhbCk7CisgICAgc3RhdGljIGludCBmcmFtZWJ1ZmZl
ckF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1df
QklULAorICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCBidWZmZXJpbmdUeXBlID09IERvdWJsZUJ1
ZmZlciA/IFRydWUgOiBGYWxzZSwKKyAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCBHTFhfUkdCQV9C
SVQsCisgICAgICAgIEdMWF9SRURfU0laRSwgMSwKKyAgICAgICAgR0xYX0dSRUVOX1NJWkUsIDEs
CisgICAgICAgIEdMWF9CTFVFX1NJWkUsIDEsCisgICAgICAgIEdMWF9TVEVOQ0lMX1NJWkUsIDEs
CisgICAgICAgIE5vbmUKKyAgICB9OwogCi0gICAgaW50IG51bVJldHVybmVkID0gMDsKLSAgICBY
VmlzdWFsSW5mbyogdmlzdWFsSW5mb0xpc3QgPSBYR2V0VmlzdWFsSW5mbyhkaXNwbGF5LCBWaXN1
YWxJRE1hc2ssICZ2aXN1YWxJbmZvLCAmbnVtUmV0dXJuZWQpOworICAgIGludCBudW1iZXJSZXR1
cm5lZCA9IDA7CisgICAgR0xYRkJDb25maWcqIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhk
aXNwbGF5LCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLCBmcmFtZWJ1ZmZlckF0dHJpYnV0ZXMsICZu
dW1iZXJSZXR1cm5lZCk7CisKKyAgICBpZiAoIW51bWJlclJldHVybmVkIHx8ICFjb25maWdzKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEdMWENvbnRleHQgZ2x4U2hhcmluZ0NvbnRl
eHQgPSBzaGFyaW5nQ29udGV4dCA/IHN0YXRpY19jYXN0PEdMQ29udGV4dEdMWCo+KHNoYXJpbmdD
b250ZXh0KS0+bV9jb250ZXh0IDogMDsKLSAgICBHTFhDb250ZXh0IGNvbnRleHQgPSBnbFhDcmVh
dGVDb250ZXh0KGRpc3BsYXksIHZpc3VhbEluZm9MaXN0LCBnbHhTaGFyaW5nQ29udGV4dCwgVHJ1
ZSk7Ci0gICAgWEZyZWUodmlzdWFsSW5mb0xpc3QpOworICAgIEdMWENvbnRleHQgY29udGV4dCA9
IGdsWENyZWF0ZU5ld0NvbnRleHQoZGlzcGxheSwgY29uZmlnc1swXSwgR0xYX1JHQkFfVFlQRSwg
Z2x4U2hhcmluZ0NvbnRleHQsIFRydWUpOworICAgIFhGcmVlKGNvbmZpZ3MpOwogCiAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE5OCw3ICsyMDksNyBAQCBQ
YXNzT3duUHRyPEdMQ29udGV4dEdMWD4gR0xDb250ZXh0R0xYOjpjcmVhdGVQaXhtYXBDb250ZXh0
KEdMWENvbnRleHQgc2hhcmluZ0NvbgogICAgIHJldHVybiBhZG9wdFB0cihuZXcgR0xDb250ZXh0
R0xYKGNvbnRleHQsIHBpeG1hcCwgZ2x4UGl4bWFwKSk7CiB9CiAKLVBhc3NPd25QdHI8R0xDb250
ZXh0R0xYPiBHTENvbnRleHRHTFg6OmNyZWF0ZUNvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0
KiBzaGFyaW5nQ29udGV4dCkKK1Bhc3NPd25QdHI8R0xDb250ZXh0R0xYPiBHTENvbnRleHRHTFg6
OmNyZWF0ZUNvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCwgQnVm
ZmVyaW5nVHlwZSBidWZmZXJpbmdUeXBlKQogewogICAgIGlmICghc2hhcmVkRGlzcGxheSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIxMyw3ICsyMjQsOSBAQCBQYXNzT3duUHRyPEdM
Q29udGV4dEdMWD4gR0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KFhJRCB3aW5kb3csIEdMQ29u
dGV4dCogc2hhcgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEdMWENvbnRleHQgZ2x4
U2hhcmluZ0NvbnRleHQgPSBzaGFyaW5nQ29udGV4dCA/IHN0YXRpY19jYXN0PEdMQ29udGV4dEdM
WCo+KHNoYXJpbmdDb250ZXh0KS0+bV9jb250ZXh0IDogMDsKLSAgICBPd25QdHI8R0xDb250ZXh0
R0xYPiBjb250ZXh0ID0gd2luZG93ID8gY3JlYXRlV2luZG93Q29udGV4dCh3aW5kb3csIHNoYXJp
bmdDb250ZXh0KSA6IG51bGxwdHI7CisgICAgT3duUHRyPEdMQ29udGV4dEdMWD4gY29udGV4dCA9
IHdpbmRvdyA/IGNyZWF0ZVdpbmRvd0NvbnRleHQod2luZG93LCBzaGFyaW5nQ29udGV4dCwgYnVm
ZmVyaW5nVHlwZSkgOiBudWxscHRyOworCisgICAgLy8gV2UgZG9uJ3QgdXNlIGV2ZXIgZG91Ymxl
LWJ1ZmZlciBhdCB0aGUgbW9tZW50IHdpdGggb2Zmc2NyZWVuIGNvbnRleHRzLCBzbyB3ZSBhcmUg
aWdub3JpbmcgYnVmZmVyaW5nVHlwZS4KICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIGNvbnRl
eHQgPSBjcmVhdGVQYnVmZmVyQ29udGV4dChnbHhTaGFyaW5nQ29udGV4dCk7CiAgICAgaWYgKCFj
b250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4
L0dMQ29udGV4dEdMWC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dM
Q29udGV4dEdMWC5oCmluZGV4IDVlOGM2MWNlNGU0MWM3NmI2YzhlOWI1NTA4ODM3NWE1Zjg0Y2M0
M2MuLmQ0MDc5NDAxZjE1NDY5YTg1M2U4OWJmYWVhNGVhZTYzNzM0ZWE0N2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKQEAg
LTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xDb250ZXh0R0xYIDog
cHVibGljIEdMQ29udGV4dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xDb250ZXh0R0xY
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHTENvbnRleHRHTFg+IGNyZWF0ZUNv
bnRleHQoWElELCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0ID0gMCk7Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8R0xDb250ZXh0R0xYPiBjcmVhdGVXaW5kb3dDb250ZXh0KFhJRCB3aW5kb3csIEdM
Q29udGV4dCogc2hhcmluZ0NvbnRleHQpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMQ29udGV4
dEdMWD4gY3JlYXRlQ29udGV4dChYSUQgd2luZG93LCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0
LCBCdWZmZXJpbmdUeXBlKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxHTENvbnRleHRHTFg+IGNy
ZWF0ZVdpbmRvd0NvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCwg
QnVmZmVyaW5nVHlwZSk7CiAKICAgICB2aXJ0dWFsIH5HTENvbnRleHRHTFgoKTsKICAgICB2aXJ0
dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIoKTsKICAgICB2
aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpOwogCisgICAgc3RhdGljIERp
c3BsYXkqIHNoYXJlZERpc3BsYXkoKTsKKwogI2lmIFVTRSgzRF9HUkFQSElDUykKICAgICB2aXJ0
dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCk7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlZWM3ZTg0YTAyOWFlZGM0MGZjNTFmZDkw
MDlmODcwODNiYmE0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCkBAIC0wLDAgKzEsMjE2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5oIgorCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSA8
R0wvZ2x4Lmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2luY2x1
ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIu
aD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093
blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coc2l6ZSkpOworfQorCitSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYg
c2l6ZSkKKyAgICA6IG1fd2luZG93KDApCisgICAgLCBtX3BhcmVudFdpbmRvdygwKQorICAgICwg
bV9waXhtYXAoMCkKKyAgICAsIG1fc3VyZmFjZSgwKQorICAgICwgbV9wZW5kaW5nUmVzaXplU291
cmNlSWQoMCkKKyAgICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZShmYWxzZSkKK3sKKyAg
ICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCk7CisKKyAg
ICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29t
bW9uL2dwdS9pbWFnZV90cmFuc3BvcnRfc3VyZmFjZV9saW51eC5jYworICAgIFhTZXRXaW5kb3dB
dHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlk
ZV9yZWRpcmVjdCA9IFRydWU7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRp
c3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RXaW5kb3coZGlz
cGxheSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtMTAwLCAtMTAwLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9t
UGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXT3ZlcnJpZGVSZWRpcmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKKyAg
ICBYTWFwV2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsKKworICAgIHdpbmRvd0F0dHJp
YnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7CisgICAgd2luZG93QXR0cmli
dXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNlOworICAgIG1fd2luZG93ID0gWENyZWF0ZVdp
bmRvdyhkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRv
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW5wdXRPdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9t
UGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOworICAgIFhNYXBXaW5k
b3coZGlzcGxheSwgbV93aW5kb3cpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgWEV2ZW50
IGV2ZW50OworICAgICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVy
ZU5vdGlmeU1hc2ssICZldmVudCk7CisgICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlm
eSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBYU2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsK
KworICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgQ29tcG9z
aXRlUmVkaXJlY3RNYW51YWwpOworCisgICAgcmVzaXplKHNpemUpOworICAgIHJlc2l6ZUxhdGVy
KCk7IC8vIEZvcmNlIHVwZGF0ZSBvZiB0aGUgdXNhYmxlIGFyZWEuCit9CisKK1JlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQoreworICAgIERp
c3BsYXkqIGRpc3BsYXkgPSBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKTsKKyAgICBpZiAo
bV93aW5kb3cpCisgICAgICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1fd2luZG93KTsKKyAg
ICBpZiAobV9wYXJlbnRXaW5kb3cpCisgICAgICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1f
cGFyZW50V2luZG93KTsKKyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworCisg
ICAgaWYgKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUo
bV9wZW5kaW5nUmVzaXplU291cmNlSWQpOworfQorCitnYm9vbGVhbiBSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdzo6cmVzaXplTGF0ZXJDYWxsYmFjayhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dyogd2luZG93KQoreworICAgIHdpbmRvdy0+cmVzaXplTGF0ZXIoKTsKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZUxhdGVyKCkK
K3sKKyAgICBtX3VzYWJsZVNpemUgPSBtX3NpemU7CisgICAgbV9wZW5kaW5nUmVzaXplU291cmNl
SWQgPSAwOworfQorCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpyZXNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBXaGVuIGVubGFyZ2luZyBhIHJlZGlyZWN0ZWQg
d2luZG93LCBmb3IgdGhlIGZpcnN0IHJlbmRlciwgdGhlIG5ld2x5IGV4cG9zZWQgYXJlYXMgc2Vl
bQorICAgIC8vIHRvIGNvbnRhaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb24gSW50ZWwgZHJpdmVy
cy4gVG8gYXZvaWQgcmVuZGVyaW5nIGFydGlmYWN0cyB3aGlsZQorICAgIC8vIHJlc2l6aW5nLCB3
ZSB3YWl0IHRvIHJlbmRlciB0aG9zZSBuZXcgYXJlYXMgdW50aWwgYWZ0ZXIgYSBzaG9ydCB0aW1l
b3V0LiBUaHVzLCB0aGUKKyAgICAvLyAidXNhYmxlIHNpemUiIG9mIHRoZSB3aW5kb3cgaXMgc21h
bGxlciB0aGFuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgd2luZG93IGZvciB0aGUgZmlyc3QKKyAg
ICAvLyByZW5kZXIuCisgICAgbV91c2FibGVTaXplID0gc2l6ZS5zaHJ1bmtUbyhtX3VzYWJsZVNp
emUpOworICAgIGlmIChtX3VzYWJsZVNpemUud2lkdGgoKSA8IHNpemUud2lkdGgoKSB8fCBtX3Vz
YWJsZVNpemUuaGVpZ2h0KCkgPCBzaXplLmhlaWdodCgpKSB7IC8vIFRoZSB3aW5kb3cgaXMgZ3Jv
d2luZy4KKyAgICAgICAgLy8gV2UncmUgYmVpbmcgdmVyeSBjb25zZXJ2YXRpdmUgaGVyZS4gSW5z
dGVhZCBvZiByaXNraW5nIGRyYXdpbmcgYXJ0aWZhY3RzIHdoaWxlIGRvaW5nIGNvbnRpbnVvdXMK
KyAgICAgICAgLy8gb3BhcXVlIHJlc2l6aW5nLCB3ZSBlcnIgb24gdGhlIHNpZGUgb2YgaGF2aW5n
IG1vcmUgdW5kcmF3biBhcmVhcy4KKyAgICAgICAgaWYgKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlk
KQorICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKTsK
KyAgICAgICAgbV9wZW5kaW5nUmVzaXplU291cmNlSWQgPSBnX3RpbWVvdXRfYWRkKDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlc2l6ZUxhdGVyQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICB9CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5
KCk7CisgICAgWFJlc2l6ZVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKKyAgICBnbFhXYWl0WCgpOworCisgICAgLy8gVGhpcyBzd2FwIGlzIGJh
c2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRvIHdvcmstYXJvdW5kIGEgYnVnIGlu
IHRoZSBJbnRlbCBkcml2ZXJzCisgICAgLy8gd2hlcmUgYSBzd2FwIGlzIG5lY2Vzc2FyeSB0byBl
bnN1cmUgdGhlIGZyb250IGFuZCBiYWNrIGJ1ZmZlcnMgYXJlIHByb3Blcmx5IHJlc2l6ZWQuCisg
ICAgaWYgKGNvbnRleHQoKSA9PSBHTENvbnRleHQ6OmdldEN1cnJlbnQoKSkKKyAgICAgICAgY29u
dGV4dCgpLT5zd2FwQnVmZmVycygpOworCisgICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX25lZWRz
TmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSB0cnVlOworfQorCitHTENvbnRleHQqIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93Ojpjb250ZXh0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAg
ICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworCisgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBt
X2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cobV93aW5kb3csIEdM
Q29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSwgR0xDb250ZXh0OjpTaW5nbGVCdWZmZXIpOworICAg
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3c6OmNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCkKK3sKKyAgICBpZiAoIW1fcGl4
bWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBYRnJlZVBpeG1hcChjYWlyb194bGliX3N1cmZh
Y2VfZ2V0X2Rpc3BsYXkobV9zdXJmYWNlLmdldCgpKSwgbV9waXhtYXApOworICAgIG1fcGl4bWFw
ID0gMDsKKyAgICBtX3N1cmZhY2UgPSBudWxscHRyOworfQorCitjYWlyb19zdXJmYWNlX3QqIFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWlyb1N1cmZhY2VGb3JXaWRnZXQoR3RrV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgaWYgKCFtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgJiYgbV9z
dXJmYWNlKQorICAgICAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOworCisgICAgbV9uZWVkc05l
d1BpeG1hcEFmdGVyUmVzaXplID0gZmFsc2U7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0
IHRoZSBuZXcgcGl4bWFwIGJlIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBEaXNwbGF5IHBvaW50ZXIg
YXMgdGhlIHRhcmdldAorICAgIC8vIHdpZGdldCBvciBlbHNlIGRyYXdpbmcgc3BlZWQgY2FuIGJl
IDEwMHggc2xvd2VyLgorICAgIERpc3BsYXkqIG5ld1BpeG1hcERpc3BsYXkgPSBHREtfRElTUExB
WV9YRElTUExBWShndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkpOworICAgIFBpeG1hcCBu
ZXdQaXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBt
X3dpbmRvdyk7CisgICAgaWYgKCFuZXdQaXhtYXApIHsKKyAgICAgICAgY2xlYW51cFBpeG1hcEFu
ZFBpeG1hcFN1cmZhY2UoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgWFdpbmRv
d0F0dHJpYnV0ZXMgd2luZG93QXR0cmlidXRlczsKKyAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1
dGVzKG5ld1BpeG1hcERpc3BsYXksIG1fd2luZG93LCAmd2luZG93QXR0cmlidXRlcykpIHsKKyAg
ICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKyAgICAgICAgWEZyZWVQaXht
YXAobmV3UGl4bWFwRGlzcGxheSwgbmV3UGl4bWFwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNh
aXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUobmV3UGl4bWFwRGlzcGxheSwgbmV3UGl4bWFwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbmRvd0F0dHJpYnV0ZXMudmlzdWFsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKKworICAgIC8vIE52aWRpYSBk
cml2ZXJzIHNlZW0gdG8gcHJlcGFyZSB0aGVpciByZWRpcmVjdGVkIHdpbmRvdyBwaXhtYXAgYXN5
bmNocm9ub3VzbHksIHNvIGZvciBhIGZldyBmcmFjdGlvbnMKKyAgICAvLyBvZiBhIHNlY29uZCBh
ZnRlciBlYWNoIHJlc2l6ZSwgd2hpbGUgZG9pbmcgY29udGludW91cyByZXNpemluZyAod2hpY2gg
Y29uc3RhbnRseSBkZXN0cm95cyBhbmQgY3JlYXRlcworICAgIC8vIHBpeG1hcCB3aW5kb3ctYmFj
a2luZ3MpLCB0aGUgcGl4bWFwIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUbyB3b3JrIGFyb3Vu
ZCB0aGlzIGlzc3VlLCBwYWludCB0aGUgb2xkCisgICAgLy8gcGl4bWFwIHRvIHRoZSBuZXcgb25l
IHRvIHByb3Blcmx5IGluaXRpYWxpemUgaXQuCisgICAgaWYgKG1fc3VyZmFjZSkgeworICAgICAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5n
ZXQoKSkpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjci5nZXQoKSwgMSwgMSwgMSk7
CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWly
b19wYWludChjci5nZXQoKSk7CisgICAgfQorCisgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1
cmZhY2UoKTsKKyAgICBtX3BpeG1hcCA9IG5ld1BpeG1hcDsKKyAgICBtX3N1cmZhY2UgPSBuZXdT
dXJmYWNlOworCisgICAgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOWVjN2VkYjI2YjhkZWE0MjZm
YmY0ZTY0YTk1ZTI1OWRhNGQ3YTM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKQEAgLTAsMCArMSw3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgSWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAor
I2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAorCisjaW5jbHVkZSAiR0xDb250
ZXh0R0xYLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgi
CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
V2luZG93OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdz4gY3JlYXRlKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIH5SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpOworCisgICAgY29uc3QgSW50U2l6ZSYgdXNhYmxlU2l6
ZSgpIHsgcmV0dXJuIG1fdXNhYmxlU2l6ZTsgfQorICAgIGNvbnN0IEludFNpemUmIHNpemUoKSB7
IHJldHVybiBtX3NpemU7IH0KKworICAgIHZvaWQgcmVzaXplKGNvbnN0IEludFNpemUmIG5ld1Np
emUpOworICAgIEdMQ29udGV4dCogY29udGV4dCgpOworICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fp
cm9TdXJmYWNlRm9yV2lkZ2V0KEd0a1dpZGdldCopOworCitwcml2YXRlOgorICAgIFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmKTsKKworICAgIHN0YXRpYyBnYm9vbGVh
biByZXNpemVMYXRlckNhbGxiYWNrKFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Kik7CisgICAg
dm9pZCByZXNpemVMYXRlcigpOworICAgIHZvaWQgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZh
Y2UoKTsKKworICAgIEludFNpemUgbV9zaXplOworICAgIEludFNpemUgbV91c2FibGVTaXplOwor
ICAgIFdpbmRvdyBtX3dpbmRvdzsKKyAgICBXaW5kb3cgbV9wYXJlbnRXaW5kb3c7CisgICAgUGl4
bWFwIG1fcGl4bWFwOworICAgIE93blB0cjxHTENvbnRleHQ+IG1fY29udGV4dDsKKyAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgdW5zaWduZWQgaW50IG1fcGVuZGlu
Z1Jlc2l6ZVNvdXJjZUlkOworICAgIGJvb2wgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUu
YW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCAyMTU1NzZlNTE4MTRj
Y2YxMmNjMGVmZWI2OTJlZDlkYTdiMjQ5NDUyLi4wMDQ3M2Y5ZDUwYjVhNzU3YTUwNTA4MWJmZjhm
MmIxNDhkM2E2ZWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5h
bQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMTAxLDYgKzEwMSw3
IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RL
X0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUJBCiAJJChQTkdfTElCUykgXAogCSQoU1FMSVRFM19M
SUJTKSBcCiAJJChVTklDT0RFX0xJQlMpIFwKKwkkKFhDT01QT1NJVEVfTElCUykgXAogCSQoWFJF
TkRFUl9MSUJTKSBcCiAJJChYVF9MSUJTKSBcCiAJJChXSU5NTV9MSUJTKSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dC5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQuaAppbmRleCAyNGE2MTRkYjQ1ZjRmMmY1Y2MzMjlkNDg4ZjRhMTg3
YWY5NDFkODExLi5kYWM2N2NhZDMwZGFkNTY3YTI2NjJlMzNhYjBjYWU1MmU5NTQyYzkwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKQEAgLTI4LDEwICsyOCwxMiBAQAogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjZW5kaWYKKwogI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKICNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNlbmRpZgotI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJMYXllci5oIgorI2luY2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCiAj
ZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTQ3LDExICs0OSw5
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIH5BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dCgpOwotICAgIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopOwotICAgIHZvaWQgc2NoZWR1bGVSb290TGF5ZXJSZXBhaW50KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKLSAgICB2b2lkIG1hcmtGb3JTeW5jKCk7Ci0gICAgdm9pZCBzeW5j
TGF5ZXJzVGltZW91dCgpOwotICAgIHZvaWQgc3luY0xheWVyc05vdygpOworICAgIHZvaWQgc2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQg
c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CiAgICAgdm9pZCByZXNpemVSb290
TGF5ZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAgIGJvb2wgcmVuZGVyTGF5ZXJzVG9X
aW5kb3coY2Fpcm9fdCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKICAgICBi
b29sIGVuYWJsZWQoKTsKQEAgLTYzLDIyICs2Myw0MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopIGNvbnN0OwogCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBj
b21wb3NpdGVMYXllcnNUb0NvbnRleHQoKTsKKyAgICB2b2lkIGZsdXNoQW5kUmVuZGVyTGF5ZXJz
KCk7CisgICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIHNjcm9s
bE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworCiBwcml2YXRlOgogICAg
IFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICB1bnNpZ25lZCBpbnQgbV9zeW5jVGltZXJD
YWxsYmFja0lkOworICAgIHVuc2lnbmVkIGludCBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQ7
CiAKICNpZiBVU0UoQ0xVVFRFUikKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3Jvb3RH
cmFwaGljc0xheWVyOwogICAgIEd0a1dpZGdldCogbV9yb290TGF5ZXJFbWJlZGRlcjsKKyNlbGlm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBPd25QdHI8V2ViQ29yZTo6UmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3c+IG1fcmVkaXJlY3RlZFdpbmRvdzsKKyAgICBPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKyAgICBPd25QdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOworICAgIGRvdWJsZSBtX2xhc3RGbHVzaFRp
bWU7CisgICAgZG91YmxlIG1fcmVkcmF3UGVuZGluZ1RpbWU7CisgICAgYm9vbCBtX25lZWRzRXh0
cmFGbHVzaDsKKworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHN0
b3BBbnlQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAgIHN0YXRpYyBnYm9vbGVhbiBsYXllckZsdXNo
VGltZXJGaXJlZENhbGxiYWNrKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Kik7CisgICAg
Ym9vbCBwcmVwYXJlRm9yUmVuZGVyaW5nKCk7CisgICAgdm9pZCBjbGVhckV2ZXJ5d2hlcmUoKTsK
ICNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5
ZXIqIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9yb290R3JhcGhpY3NMYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVy
ZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAg
ICBXZWJDb3JlOjpHTENvbnRleHQqIGdsQ29udGV4dCgpOwogICAgIE93blB0cjxXZWJDb3JlOjpH
TENvbnRleHQ+IG1fY29udGV4dDsKICNlbmRpZgotI2VuZGlmCiAKICAgICBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dChXZWJLaXRXZWJWaWV3Kik7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRH
TC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dEdMLmNwcAppbmRleCA2NGViOTAxNzU4YmQ0ZWFlOGE5NDg3YmExZGMwMTk2
NzJhOWU1YWE1Li44YTg3NWEyNDFkOGVkMmNlNjRhZDY0YjllMTdiNDNkNWZhM2U5ZjNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcApAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJHTC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgogI2luY2x1
ZGUgIndlYmtpdHdlYnZpZXdwcml2YXRlLmgiCkBAIC0zNSwxMyArMzYsMTIgQEAKICNpbmNsdWRl
IDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCi0jaWYgZGVmaW5lZChHREtfV0lO
RE9XSU5HX1gxMSkKLSNkZWZpbmUgUmVnaW9uIFhSZWdpb24KLSNkZWZpbmUgRm9udCBYRm9udAot
I2RlZmluZSBDdXJzb3IgWEN1cnNvcgotI2RlZmluZSBTY3JlZW4gWFNjcmVlbgotI2luY2x1ZGUg
PGdkay9nZGt4Lmg+Ci0jZW5kaWYKK2NvbnN0IGRvdWJsZSBnRnJhbWVzUGVyU2Vjb25kID0gNjA7
CisKKy8vIFRoZXJlIHNlZW1zIHRvIGJlIGEgZGVsaWNhdGUgYmFsYW5jZSBiZXR3ZWVuIHRoZSBt
YWluIGxvb3AgYmVpbmcgZmxvb2RlZAorLy8gd2l0aCBtb3Rpb24gZXZlbnRzICh0aGF0IGZvcmNl
IGZsdXNoZXMpIGFuZCBzdGFydmluZyB0aGUgbWFpbiBsb29wIG9mIGV2ZW50cworLy8gd2l0aCBm
bHVzaCBjYWxsYmFja3MuIFRoaXMgZGVsYXkgaXMgZW50aXJlbHkgZW1waXJpY2FsLgorY29uc3Qg
ZG91YmxlIGdTY2hlZHVsZURlbGF5ID0gKDEuMCAvIChnRnJhbWVzUGVyU2Vjb25kIC8gMy4wKSk7
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OSwxNTAgKzQ5LDI5OSBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OkFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgOiBtX3dl
YlZpZXcod2ViVmlldykKLSAgICAsIG1fc3luY1RpbWVyQ2FsbGJhY2tJZCgwKQotICAgICwgbV9y
b290VGV4dHVyZU1hcHBlckxheWVyKDApCisgICAgLCBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNr
SWQoMCkKKyAgICAsIG1fcmVkaXJlY3RlZFdpbmRvdyhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dzo6Y3JlYXRlKEludFNpemUoMSwgMSkpKQorICAgICwgbV9sYXN0Rmx1c2hUaW1lKDApCisgICAg
LCBtX3JlZHJhd1BlbmRpbmdUaW1lKDApCisgICAgLCBtX25lZWRzRXh0cmFGbHVzaChmYWxzZSkK
K3sKK30KKworc3RhdGljIEludFNpemUgZ2V0V2ViVmlld1NpemUoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKIHsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9n
ZXRfYWxsb2NhdGlvbihHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgcmV0
dXJuIEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOworfQorCit2
b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojppbml0aWFsaXplKCkKK3sKKyAgICBp
ZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVyID0gR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRl
bnQoZmFsc2UpOworCisgICAgSW50U2l6ZSBwYWdlU2l6ZSA9IGdldFdlYlZpZXdTaXplKG1fd2Vi
Vmlldyk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUocGFnZVNpemUpOworCisgICAgLy8gVGhl
IG5vbi1jb21wb3NpdGVkIGNvbnRlbnRzIGFyZSBhIGNoaWxkIG9mIHRoZSByb290IGxheWVyLgor
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0
aGlzKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0
cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVl
KCFtX3dlYlZpZXctPnByaXYtPnRyYW5zcGFyZW50KTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnNldFNpemUocGFnZVNpemUpOworICAgIGlmIChjb3JlKG1fd2ViVmlldyktPnNl
dHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkKKyAgICAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcodHJ1ZSk7CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIlJvb3QgbGF5ZXIiKTsKKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIk5vbi1jb21wb3NpdGVkIGNvbnRl
bnQiKTsKKyNlbmRpZgorCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci5nZXQoKSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgVGV4dHVyZU1h
cHBlciBuZWVkcyBhbiBhY3RpdmUgT3BlbkdMIGNvbnRleHQuCisgICAgR0xDb250ZXh0KiBjb250
ZXh0ID0gbV9yZWRpcmVjdGVkV2luZG93LT5jb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpj
cmVhdGUoKTsKKworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworCisgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7CiB9CiAKIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojp+QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoKQogewotICAgIGlmIChtX3N5bmNUaW1lckNhbGxiYWNr
SWQpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX3N5bmNUaW1lckNhbGxiYWNrSWQpOworfQor
Cit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzdG9wQW55UGVuZGluZ0xheWVy
Rmx1c2goKQoreworICAgIGlmICghbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKQorICAgICAg
ICByZXR1cm47CisgICAgZ19zb3VyY2VfcmVtb3ZlKG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJ
ZCk7CisgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gMDsKIH0KIAogYm9vbCBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6ZW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIG1fcm9v
dFRleHR1cmVNYXBwZXJMYXllciAmJiBtX3RleHR1cmVNYXBwZXI7CisgICAgcmV0dXJuIG1fcm9v
dExheWVyICYmIG1fdGV4dHVyZU1hcHBlcjsKIH0KIAotR0xDb250ZXh0KiBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6Z2xDb250ZXh0KCkKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KGNhaXJvX3QqIGNyLCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbV9jb250
ZXh0LmdldCgpOworICAgIG1fcmVkcmF3UGVuZGluZ1RpbWUgPSAwOwogCi0jaWYgZGVmaW5lZChH
REtfV0lORE9XSU5HX1gxMSkKLSAgICAvLyBGSVhNRTogR3JhY2VmdWxseSBhY2NvdW50IGZvciBz
aXR1YXRpb25zIHdoZXJlIHdlIGRvIG5vdCBoYXZlIGEgcmVhbGl6ZWQgd2luZG93LgotICAgIEdk
a1dpbmRvdyogZ2RrV2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV93
ZWJWaWV3KSk7Ci0gICAgaWYgKGdka1dpbmRvdyAmJiBnZGtfd2luZG93X2hhc19uYXRpdmUoZ2Rr
V2luZG93KSkKLSAgICAgICAgbV9jb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9y
V2luZG93KEdES19XSU5ET1dfWElEKGdka1dpbmRvdyksIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRl
eHQoKSk7Ci0jZW5kaWYKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0
byBwYWludCBhIHdoaXRlIGJhY2tncm91bmQgKGlmIHRoZSBXZWJWaWV3IGlzbid0IHRyYW5zcGFy
ZW50KSwgYmVjYXVzZSB3aGVuIGdyb3dpbmcKKyAgICAvLyB0aGUgcmVkaXJlY3RlZCB3aW5kb3cs
IHRoZSB1c2FibGUgc2l6ZSBvZiB0aGUgd2luZG93IG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIGFs
bG9jYXRpb24gb2Ygb3VyIHdpZGdldC4KKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNob3cgYXJ0
aWZhY3RzIGluIHRoYXQgY2FzZS4KKyAgICBJbnRTaXplIHVzYWJsZVdpbmRvd1NpemUgPSBtX3Jl
ZGlyZWN0ZWRXaW5kb3ctPnVzYWJsZVNpemUoKTsKKyAgICBpZiAodXNhYmxlV2luZG93U2l6ZSAh
PSBtX3JlZGlyZWN0ZWRXaW5kb3ctPnNpemUoKSkgeworICAgICAgICBpZiAoIW1fd2ViVmlldy0+
cHJpdi0+dHJhbnNwYXJlbnQpIHsKKyAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNy
LCAxLCAxLCAxKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BF
UkFUT1JfU09VUkNFKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYWlyb19zZXRfb3Bl
cmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3Ip
OworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfdCogd2luZG93U3VyZmFjZSA9IG1fcmVkaXJl
Y3RlZFdpbmRvdy0+Y2Fpcm9TdXJmYWNlRm9yV2lkZ2V0KEdUS19XSURHRVQobV93ZWJWaWV3KSk7
CisgICAgaWYgKCF3aW5kb3dTdXJmYWNlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNh
aXJvX3JlY3RhbmdsZShjciwgY2xpcFJlY3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0Lndp
ZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2Uo
Y3IsIHdpbmRvd1N1cmZhY2UsIDAsIDApOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJ
Uk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb19maWxsKGNyKTsKKworICAgIGlmICghbV9s
YXllckZsdXNoVGltZXJDYWxsYmFja0lkICYmIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExh
eWVyLmdldCgpKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSB8fCBt
X25lZWRzRXh0cmFGbHVzaCkgeworICAgICAgICBtX25lZWRzRXh0cmFGbHVzaCA9IGZhbHNlOwor
ICAgICAgICBkb3VibGUgbmV4dEZsdXNoID0gbWF4KCgxIC8gZ0ZyYW1lc1BlclNlY29uZCkgLSAo
Y3VycmVudFRpbWUoKSAtIG1fbGFzdEZsdXNoVGltZSksIDAuMCk7CisgICAgICAgIG1fbGF5ZXJG
bHVzaFRpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZF
TlRTLCAxMDAwICogbmV4dEZsdXNoLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihsYXll
ckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKSwgdGhpcywgMCk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxh
eWVyc1RvV2luZG93KGNhaXJvX3QqLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK2Jvb2wgQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnByZXBhcmVGb3JSZW5kZXJpbmcoKQogewogICAg
IGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHTENvbnRleHQq
IGNvbnRleHQgPSBnbENvbnRleHQoKTsKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBtX3JlZGly
ZWN0ZWRXaW5kb3ctPmNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmICghY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKLSAgICBn
dGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRp
b24pOwotICAgIGdsVmlld3BvcnQoMCwgMCwgYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5o
ZWlnaHQpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0Ojpjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKQoreworICAgIGlmICghcHJlcGFy
ZUZvclJlbmRlcmluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBJbnRTaXplJiB3
aW5kb3dTaXplID0gbV9yZWRpcmVjdGVkV2luZG93LT5zaXplKCk7CisgICAgZ2xWaWV3cG9ydCgw
LCAwLCB3aW5kb3dTaXplLndpZHRoKCksIHdpbmRvd1NpemUuaGVpZ2h0KCkpOwogCiAgICAgbV90
ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7Ci0gICAgbV9yb290VGV4dHVyZU1hcHBlckxh
eWVyLT5wYWludCgpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgp
KS0+cGFpbnQoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CiAKLSAgICBj
b250ZXh0LT5zd2FwQnVmZmVycygpOwotICAgIHJldHVybiB0cnVlOworICAgIGdsRmx1c2goKTsK
IH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6YXR0YWNoUm9vdEdyYXBo
aWNzTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3ZvaWQgQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQ6OmNsZWFyRXZlcnl3aGVyZSgpCiB7CisgICAgaWYgKCFwcmVwYXJl
Rm9yUmVuZGVyaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFNpemUmIHdp
bmRvd1NpemUgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPnNpemUoKTsKKyAgICBnbFZpZXdwb3J0KDAs
IDAsIHdpbmRvd1NpemUud2lkdGgoKSwgd2luZG93U2l6ZS5oZWlnaHQoKSk7CisgICAgZ2xDbGVh
ckNvbG9yKDEsIDEsIDEsIDEpOworICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisK
KyAgICBnbEZsdXNoKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7
CisgICAgLy8gQ2xlYXJpbmcgZXZlcnl3aGVyZSB3aGVuIHR1cm5pbmcgb24gb3Igb2ZmIHRoZSBs
YXllciB0cmVlIHByZXZlbnRzIHVzIGZyb20gZmxhc2hpbmcKKyAgICAvLyBvbGQgY29udGVudCBi
ZWZvcmUgdGhlIGZpcnN0IGZsdXNoLgorICAgIGNsZWFyRXZlcnl3aGVyZSgpOworCiAgICAgaWYg
KCFncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIuY2xlYXIoKTsK
LSAgICAgICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyID0gMDsKLSAgICAgICAgbV9jb250ZXh0
LmNsZWFyKCk7CisgICAgICAgIHN0b3BBbnlQZW5kaW5nTGF5ZXJGbHVzaCgpOworCisgICAgICAg
IC8vIFNocmluayB0aGUgb2Zmc2NyZWVuIHdpbmRvdyB0byBzYXZlIG1lbW9yeSB3aGlsZSBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyBpcyB0dXJuZWQgb2ZmLgorICAgICAgICBtX3JlZGlyZWN0ZWRX
aW5kb3ctPnJlc2l6ZShJbnRTaXplKDEsIDEpKTsKKyAgICAgICAgbV9yb290TGF5ZXIgPSBudWxs
cHRyOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBudWxscHRyOworICAg
ICAgICBtX3RleHR1cmVNYXBwZXIgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgbV9yb290R3JhcGhpY3NMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsK
LSAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jv
b3RHcmFwaGljc0xheWVyLmdldCgpKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5hZGRDaGls
ZChncmFwaGljc0xheWVyKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxz
ZSk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgbV9y
b290R3JhcGhpY3NMYXllci0+c2V0U2l6ZShjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52
aWV3KCktPmZyYW1lUmVjdCgpLnNpemUoKSk7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgJiYgIWVu
YWJsZWQoKSkKKyAgICAgICAgbV9yZWRpcmVjdGVkV2luZG93LT5yZXNpemUoZ2V0V2ViVmlld1Np
emUobV93ZWJWaWV3KSk7CiAKLSAgICBHTENvbnRleHQqIGNvbnRleHQgPSBnbENvbnRleHQoKTsK
LSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBBZGQgdGhlIGFjY2Vs
ZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGluaXRpYWxpemUoKTsKKyAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKIAotICAgIC8v
IFRoZSBjb250ZXh0IG5lZWRzIHRvIGJlIGFjdGl2ZSB3aGVuIGNyZWF0aW5nIHRoZSB0ZXh0dXJl
IG1hcHBlci4gSXQncyBmaW5lIHRvCi0gICAgLy8gYXZvaWQgY2FsbGluZyBzd2FwQnVmZmVycyBo
ZXJlLCBiZWNhdXNlIGl0IHdpbGwganVzdCBpbml0aWFsaXplIHNoYWRlcnMuCi0gICAgaWYgKCFj
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIHN0b3BB
bnlQZW5kaW5nTGF5ZXJGbHVzaCgpOwogCi0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwot
ICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxs
b2NhdGlvbik7Ci0gICAgZ2xWaWV3cG9ydCgwLCAwLCBhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0
aW9uLmhlaWdodCk7CisgICAgLy8gRklYTUU6IFR3byBmbHVzaGVzIHNlZW0gbmVjZXNzYXJ5IHRv
IGdldCB0aGUgcHJvcGVyIHJlbmRlcmluZyBpbiBzb21lIGNhc2VzLiBJdCdzIHVuY2xlYXIKKyAg
ICAvLyBpZiB0aGlzIGlzIGEgYnVnIHdpdGggdGhlIFJlZGlyZWN0ZWRYQ29tcG9zaXRlIHdpbmRv
dyBvciB3aXRoIHRoaXMgY2xhc3MuCisgICAgbV9uZWVkc0V4dHJhRmx1c2ggPSB0cnVlOworICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogCi0gICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1h
cHBlckdMOjpjcmVhdGUoKTsKLSAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXItPnNldFRleHR1
cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVy
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX2xheWVyRmx1
c2hUaW1lckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5U
UywgNTAwLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGltZXJGaXJl
ZENhbGxiYWNrKSwgdGhpcywgMCk7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6OnNjaGVkdWxlUm9vdExheWVyUmVwYWludChjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRz
TmVlZERpc3BsYXkoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIW1fcm9vdEdyYXBo
aWNzTGF5ZXIpCisgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogICAgIGlm
IChyZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXROZWVk
c0Rpc3BsYXkoKTsKKyAgICAgICAgbV9yb290TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChyZWN0KTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAot
dm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVzaXplUm9vdExheWVyKGNvbnN0
IEludFNpemUmIHNpemUpCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZXNp
emVSb290TGF5ZXIoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKIHsKLSAgICBpZiAoIW1fcm9vdEdy
YXBoaWNzTGF5ZXIpCisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX3Jvb3RMYXllci0+c2l6ZSgpID09IG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXRTaXplKHNpemUpOwotICAgIG1fcm9vdEdyYXBoaWNz
TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgbV9y
ZWRpcmVjdGVkV2luZG93LT5yZXNpemUobmV3U2l6ZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNp
emUobmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBv
ZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQK
KyAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KKyAgICBGbG9hdFNpemUgb2xk
U2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOworICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIGlmIChuZXdTaXpl
LndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3Rk
OjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0g
b2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBpZiAobmV3U2l6ZS5oZWln
aHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgp
LCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7
CisKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChJbnRSZWN0KEludFBvaW50KCksIG5ld1NpemUpKTsKKyAgICBmbHVzaEFuZFJlbmRlckxheWVy
cygpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzY3JvbGxOb25D
b21wb3NpdGVkQ29udGVudHMoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6
ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHNjcm9sbFJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gc3luY0xheWVyc1RpbWVvdXRDYWxsYmFjayhBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29udGV4dCkKK2dib29sZWFuIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0OjpsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIGNvbnRleHQtPnN5bmNMYXllcnNU
aW1lb3V0KCk7CisgICAgY29udGV4dC0+bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKICAgICByZXR1
cm4gRkFMU0U7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om1hcmtG
b3JTeW5jKCkKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNjaGVkdWxlTGF5
ZXJGbHVzaCgpCiB7Ci0gICAgaWYgKG1fc3luY1RpbWVyQ2FsbGJhY2tJZCkKKyAgICBpZiAoIWVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyQ2Fs
bGJhY2tJZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgdXNlIGEgR0xpYiB0aW1lciBi
ZWNhdXNlIG90aGVyd2lzZSBHVEsrIGV2ZW50IGhhbmRsaW5nIGR1cmluZwotICAgIC8vIGRyYWdn
aW5nIGNhbiBzdGFydmUgV2ViQ29yZSB0aW1lcnMsIHdoaWNoIGhhdmUgYSBsb3dlciBwcmlvcml0
eS4KLSAgICBtX3N5bmNUaW1lckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BS
SU9SSVRZX0VWRU5UUywgMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc3luY0xheWVy
c1RpbWVvdXRDYWxsYmFjayksIHRoaXMsIDApOworICAgIC8vIFdlIHVzZSBhIEdMaWIgdGltZXIg
YmVjYXVzZSBvdGhlcndpc2UgR1RLKyBldmVudCBoYW5kbGluZyBkdXJpbmcgZHJhZ2dpbmcgY2Fu
CisgICAgLy8gc3RhcnZlIFdlYkNvcmUgdGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3Jp
dHkuCisgICAgZG91YmxlIG5leHRGbHVzaCA9IG1heChnU2NoZWR1bGVEZWxheSAtIChjdXJyZW50
VGltZSgpIC0gbV9sYXN0Rmx1c2hUaW1lKSwgMC4wKTsKKyAgICBtX2xheWVyRmx1c2hUaW1lckNh
bGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgbmV4dEZs
dXNoICogMTAwMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4obGF5ZXJGbHVzaFRpbWVy
RmlyZWRDYWxsYmFjayksIHRoaXMsIDApOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0OjpzeW5jTGF5ZXJzTm93KCkKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCiB7Ci0gICAgaWYgKG1fcm9vdEdyYXBo
aWNzTGF5ZXIpCi0gICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAgY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUo
KS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAg
IG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworICAgIHJldHVybiBjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52
aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiB9CiAKLXZv
aWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnN5bmNMYXllcnNUaW1lb3V0KCkKK3Zv
aWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkK
IHsKLSAgICBtX3N5bmNUaW1lckNhbGxiYWNrSWQgPSAwOwotICAgIHN5bmNMYXllcnNOb3coKTsK
LSAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgaWYgKCFlbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICh0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RHcmFwaGlj
c0xheWVyLmdldCgpKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkK
LSAgICAgICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19Q
UklPUklUWV9FVkVOVFMsIDEwMDAuMCAvIDYwLjAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1
bmM+KHN5bmNMYXllcnNUaW1lb3V0Q2FsbGJhY2spLCB0aGlzLCAwKTsKKyAgICBGcmFtZSogZnJh
bWUgPSBjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZy
YW1lLT5jb250ZW50UmVuZGVyZXIoKSB8fCAhZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGZyYW1lLT52aWV3KCktPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNp
dmUoKTsKKworICAgIEdMQ29udGV4dCogY29udGV4dCA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y29u
dGV4dCgpOworICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMo
KSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmVuZGVyTGF5ZXJzVG9XaW5kb3coMCwgSW50UmVj
dCgpKTsKKyAgICBtX2xhc3RGbHVzaFRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGNvbXBvc2l0
ZUxheWVyc1RvQ29udGV4dCgpOworCisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURH
RVQobV93ZWJWaWV3KSk7CisKKyAgICAvLyBJZiBpdCdzIGJlZW4gYSBsb25nIHRpbWUgc2luY2Ug
d2UndmUgYWN0dWFsbHkgcGFpbnRlZCwgd2hpY2ggbWVhbnMgdGhhdCBldmVudHMgbWlnaHQKKyAg
ICAvLyBiZSBzdGFydmluZyB0aGUgbWFpbiBsb29wLCB3ZSBzaG91bGQgZm9yY2UgYSBkcmF3IG5v
dy4gVGhpcyBzZWVtcyB0byBwcmV2ZW50IGRpc3BsYXkKKyAgICAvLyBsYWcgb24gaHR0cDovLzIw
MTIuYmVlcmNhbXAuY29tLgorICAgIGlmIChtX3JlZHJhd1BlbmRpbmdUaW1lICYmIGN1cnJlbnRU
aW1lKCkgLSBtX3JlZHJhd1BlbmRpbmdUaW1lID4gZ1NjaGVkdWxlRGVsYXkpCisgICAgICAgIGdk
a193aW5kb3dfcHJvY2Vzc191cGRhdGVzKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VU
KG1fd2ViVmlldykpLCBGQUxTRSk7CisgICAgZWxzZSBpZiAoIW1fcmVkcmF3UGVuZGluZ1RpbWUp
CisgICAgICAgIG1fcmVkcmF3UGVuZGluZ1RpbWUgPSBjdXJyZW50VGltZSgpOworfQorCit2b2lk
IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpsYXllckZsdXNoVGltZXJGaXJlZCgpCit7
CisgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gMDsKKyAgICBmbHVzaEFuZFJlbmRl
ckxheWVycygpOwogfQogCiB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKQEAg
LTIwNiw5ICszNTUsMTAgQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bm90
aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQogCiB2b2lkIEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25z
dCBJbnRSZWN0JiByZWN0VG9QYWludCkKIHsKLSAgICBjYWlyb190KiBjciA9IGNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCktPmNyKCk7Ci0gICAgY29weVJlY3RGcm9tQ2Fpcm9TdXJmYWNlVG9Db250
ZXh0KG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSwgY3IsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFNpemUoKSwgcmVjdFRvUGFp
bnQpOworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIGNvbnRleHQuY2xpcChyZWN0VG9QYWludCk7
CisgICAgY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKS0+dmlldygpLT5wYWludCgmY29udGV4
dCwgcmVjdFRvUGFpbnQpOworICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQogCiBib29sIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzaG93RGVidWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5kZXggNDFjODQwOTI0MTg5ZDdjOGM3MDI4ZDAyNDdlZjhm
OTJhYjhiMTlmZC4uNzQwZTNiYmNhNTE1MWQwZGJjMjM0OWZmNTJhZjRhZTk1YTdhN2Y1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuY3BwCkBAIC0xNDIsMTcgKzE0MiwxOCBAQCB2b2lkIENocm9tZUNsaWVudDo6c2V0V2luZG93
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgfQogfQogCi1GbG9hdFJlY3QgQ2hyb21l
Q2xpZW50OjpwYWdlUmVjdCgpCitzdGF0aWMgSW50UmVjdCBnZXRXZWJWaWV3UmVjdChXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKLSNpZiBH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9u
KEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotI2Vsc2UKLSAgICBhbGxvY2F0
aW9uID0gR1RLX1dJREdFVChtX3dlYlZpZXcpLT5hbGxvY2F0aW9uOwotI2VuZGlmCisgICAgZ3Rr
X3dpZGdldF9nZXRfYWxsb2NhdGlvbihHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7
CiAgICAgcmV0dXJuIEludFJlY3QoYWxsb2NhdGlvbi54LCBhbGxvY2F0aW9uLnksIGFsbG9jYXRp
b24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKIH0KIAorRmxvYXRSZWN0IENocm9tZUNsaWVu
dDo6cGFnZVJlY3QoKQoreworICAgIHJldHVybiBnZXRXZWJWaWV3UmVjdChtX3dlYlZpZXcpOwor
fQorCiB2b2lkIENocm9tZUNsaWVudDo6Zm9jdXMoKQogewogICAgIGd0a193aWRnZXRfZ3JhYl9m
b2N1cyhHVEtfV0lER0VUKG1fd2ViVmlldykpOwpAQCAtNDE5LDEwICs0MjAsMjAgQEAgc3RhdGlj
IHZvaWQgY2xlYXJFdmVyeXdoZXJlSW5CYWNraW5nU3RvcmUoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgY2Fpcm9fdCogY3IpCiAKIHZvaWQgQ2hyb21lQ2xpZW50Ojp3aWRnZXRTaXplQ2hhbmdlZChj
b25zdCBJbnRTaXplJiBvbGRXaWRnZXRTaXplLCBJbnRTaXplIG5ld1NpemUpCiB7Ci0gICAgV2lk
Z2V0QmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdT
dG9yZS5nZXQoKTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGNvbXBvc2l0aW5nQ29udGV4dCA9IG1fd2ViVmlldy0+
cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7CisgICAgaWYgKGNvbXBv
c2l0aW5nQ29udGV4dC0+ZW5hYmxlZCgpKSB7CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJlc2l6ZVJvb3RMYXllcihuZXdTaXplKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgogCiAgICAgLy8gR3JvdyB0aGUgYmFja2luZyBz
dG9yZSBieSBhdCBsZWFzdCAxLjUgdGltZXMgdGhlIGN1cnJlbnQgc2l6ZS4gVGhpcyBwcmV2ZW50
cwogICAgIC8vIGxvdHMgb2YgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbnMgZHVyaW5nIGFuIG9wYXF1
ZSByZXNpemUuCisgICAgV2lkZ2V0QmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBtX3dlYlZp
ZXctPnByaXYtPmJhY2tpbmdTdG9yZS5nZXQoKTsKKyAgICBpZiAoYmFja2luZ1N0b3JlICYmIG9s
ZFdpZGdldFNpemUgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGJhY2tp
bmdTdG9yZSkgewogICAgICAgICBjb25zdCBJbnRTaXplJiBvbGRTaXplID0gYmFja2luZ1N0b3Jl
LT5zaXplKCk7CiAgICAgICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkp
CkBAIC01MjYsMjAgKzUzNyw2IEBAIHN0YXRpYyB2b2lkIHBhaW50V2ViVmlldyhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBGcmFtZSogZnJhbWUsIFJlZ2lvbiBkaXJ0eVJlZ2lvCiAgICAgZ2MucmVz
dG9yZSgpOwogfQogCi12b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZVdpZGdldFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0g
ICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGFjQ29udGV4dCA9IG1fd2ViVmlldy0+
cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7Ci0gICAgaWYgKGFjQ29u
dGV4dC0+ZW5hYmxlZCgpKSB7Ci0gICAgICAgIGFjQ29udGV4dC0+c2NoZWR1bGVSb290TGF5ZXJS
ZXBhaW50KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgZ3RrX3dp
ZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCiB2b2lkIENo
cm9tZUNsaWVudDo6cGVyZm9ybUFsbFBlbmRpbmdTY3JvbGxzKCkKIHsKICAgICBpZiAoIW1fd2Vi
Vmlldy0+cHJpdi0+YmFja2luZ1N0b3JlKQpAQCAtNTQ5LDcgKzU0Niw3IEBAIHZvaWQgQ2hyb21l
Q2xpZW50OjpwZXJmb3JtQWxsUGVuZGluZ1Njcm9sbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9yZWN0c1RvU2Nyb2xsLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIEludFJlY3QmIHNj
cm9sbFJlY3QgPSBtX3JlY3RzVG9TY3JvbGxbaV07CiAgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+
YmFja2luZ1N0b3JlLT5zY3JvbGwoc2Nyb2xsUmVjdCwgbV9zY3JvbGxPZmZzZXRzW2ldKTsKLSAg
ICAgICAgaW52YWxpZGF0ZVdpZGdldFJlY3Qoc2Nyb2xsUmVjdCk7CisgICAgICAgIGd0a193aWRn
ZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQobV93ZWJWaWV3KSwgc2Nyb2xsUmVjdC54KCks
IHNjcm9sbFJlY3QueSgpLCBzY3JvbGxSZWN0LndpZHRoKCksIHNjcm9sbFJlY3QuaGVpZ2h0KCkp
OwogICAgIH0KIAogICAgIG1fcmVjdHNUb1Njcm9sbC5jbGVhcigpOwpAQCAtNTg1LDEyICs1ODIs
NyBAQCB2b2lkIENocm9tZUNsaWVudDo6cGFpbnQoV2ViQ29yZTo6VGltZXI8Q2hyb21lQ2xpZW50
PiopCiAgICAgfQogCiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCA9IG1fZGlydHlSZWdpb24uYm91
bmRzKCk7Ci0gICAgaW52YWxpZGF0ZVdpZGdldFJlY3QocmVjdCk7Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dC0+c3luY0xheWVyc05vdygpOwotICAgIG1fd2ViVmlldy0+cHJpdi0+YWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJlbmRlckxheWVyc1RvV2luZG93KDAsIHJlY3Qp
OwotI2VuZGlmCisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChtX3dl
YlZpZXcpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CiAKICAgICBtX2RpcnR5UmVnaW9uID0gUmVnaW9uKCk7CiAgICAgbV9sYXN0RGlzcGxheVRpbWUg
PSBjdXJyZW50VGltZSgpOwpAQCAtNjA2LDYgKzU5OCwxMSBAQCB2b2lkIENocm9tZUNsaWVudDo6
cGFpbnQoV2ViQ29yZTo6VGltZXI8Q2hyb21lQ2xpZW50PiopCiAKIHZvaWQgQ2hyb21lQ2xpZW50
Ojpmb3JjZVBhaW50KCkKIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
aWYgKG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPmVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKICAgICBtX2ZvcmNlUGFpbnQgPSB0cnVl
OwogICAgIHBhaW50KDApOwogICAgIG1fZm9yY2VQYWludCA9IGZhbHNlOwpAQCAtNjE3LDYgKzYx
NCwxNCBAQCB2b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZVJvb3RWaWV3KGNvbnN0IEludFJl
Y3QmLCBib29sIGltbWVkaWF0ZSkKIAogdm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVDb250
ZW50c0FuZFJvb3RWaWV3KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRl
KQogeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dCogYWNDb250ZXh0ID0gbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dC5nZXQoKTsKKyAgICBpZiAoYWNDb250ZXh0LT5lbmFibGVkKCkp
IHsKKyAgICAgICAgYWNDb250ZXh0LT5zZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxh
eSh1cGRhdGVSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYg
KHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9kaXJ0eVJlZ2lv
bi51bml0ZSh1cGRhdGVSZWN0KTsKQEAgLTYyNSwxMiArNjMwLDM0IEBAIHZvaWQgQ2hyb21lQ2xp
ZW50OjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRSZWN0JiB1cGRhdGVS
ZWN0LCBib29sCiAKIHZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93
U2Nyb2xsKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQogewotICAg
IGludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KHVwZGF0ZVJlY3QsIGltbWVkaWF0ZSk7CiAg
ICAgbV9hZGp1c3RtZW50V2F0Y2hlci51cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzTGF0
ZXIoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dCogYWNDb250ZXh0ID0gbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dC5nZXQoKTsKKyAgICBpZiAoYWNDb250ZXh0LT5lbmFibGVk
KCkpIHsKKyAgICAgICAgYWNDb250ZXh0LT5zZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlz
cGxheSh1cGRhdGVSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAg
aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcodXBkYXRlUmVjdCwgaW1tZWRpYXRlKTsKIH0K
IAogdm9pZCBDaHJvbWVDbGllbnQ6OnNjcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3Qg
SW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKKyAgICBt
X2FkanVzdG1lbnRXYXRjaGVyLnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnNMYXRlcigp
OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0KiBjb21wb3NpdGluZ0NvbnRleHQgPSBtX3dlYlZpZXctPnByaXYtPmFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOworICAgIGlmIChjb21wb3NpdGluZ0Nv
bnRleHQtPmVuYWJsZWQoKSkgeworICAgICAgICBBU1NFUlQoIXJlY3RUb1Njcm9sbC5pc0VtcHR5
KCkpOworICAgICAgICBBU1NFUlQoIWRlbHRhLmlzRW1wdHkoKSk7CisKKyAgICAgICAgY29tcG9z
aXRpbmdDb250ZXh0LT5zY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMocmVjdFRvU2Nyb2xsLCBk
ZWx0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIG1fcmVjdHNUb1Nj
cm9sbC5hcHBlbmQocmVjdFRvU2Nyb2xsKTsKICAgICBtX3Njcm9sbE9mZnNldHMuYXBwZW5kKGRl
bHRhKTsKIApAQCAtNjU3LDggKzY4NCw2IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpzY3JvbGwoY29u
c3QgSW50U2l6ZSYgZGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uCiAKICAg
ICBtX2RpcnR5UmVnaW9uLnVuaXRlKHNjcm9sbFJlcGFpbnRSZWdpb24pOwogICAgIG1fZGlzcGxh
eVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLQotICAgIG1fYWRqdXN0bWVudFdhdGNoZXIudXBkYXRl
QWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFyc0xhdGVyKCk7CiB9CiAKIEludFJlY3QgQ2hyb21lQ2xp
ZW50Ojpyb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CkBAIC05NjYs
MTcgKzk5MSwzMiBAQCB2b2lkIENocm9tZUNsaWVudDo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KFdlYkNvcmU6OkVsZW1lbnQqKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZv
aWQgQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdy
YXBoaWNzTGF5ZXIqIHJvb3RMYXllcikKIHsKLSAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0LT5hdHRhY2hSb290R3JhcGhpY3NMYXllcihyb290TGF5ZXIp
OworICAgIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBjb250ZXh0ID0gbV93ZWJWaWV3
LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5nZXQoKTsKKyAgICBib29sIHR1
cm5pbmdPZmZDb21wb3NpdGluZyA9ICFyb290TGF5ZXIgJiYgY29udGV4dC0+ZW5hYmxlZCgpOwor
ICAgIGJvb2wgdHVybmluZ09uQ29tcG9zaXRpbmcgPSByb290TGF5ZXIgJiYgIWNvbnRleHQtPmVu
YWJsZWQoKTsKKworICAgIGNvbnRleHQtPnNldFJvb3RDb21wb3NpdGluZ0xheWVyKHJvb3RMYXll
cik7CisKKyAgICBpZiAodHVybmluZ09uQ29tcG9zaXRpbmcpIHsKKyAgICAgICAgbV9kaXNwbGF5
VGltZXIuc3RvcCgpOworICAgICAgICBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZSA9IFdl
YkNvcmU6OldpZGdldEJhY2tpbmdTdG9yZTo6Y3JlYXRlKEdUS19XSURHRVQobV93ZWJWaWV3KSwg
SW50U2l6ZSgxLCAxKSk7CisgICAgfQorCisgICAgaWYgKHR1cm5pbmdPZmZDb21wb3NpdGluZykg
eworICAgICAgICBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZSA9IFdlYkNvcmU6OldpZGdl
dEJhY2tpbmdTdG9yZTo6Y3JlYXRlKEdUS19XSURHRVQobV93ZWJWaWV3KSwgZ2V0V2ViVmlld1Jl
Y3QobV93ZWJWaWV3KS5zaXplKCkpOworICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9w
dFJlZihjYWlyb19jcmVhdGUobV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUtPmNhaXJvU3Vy
ZmFjZSgpKSk7CisgICAgICAgIGNsZWFyRXZlcnl3aGVyZUluQmFja2luZ1N0b3JlKG1fd2ViVmll
dywgY3IuZ2V0KCkpOworICAgIH0KIH0KIAogdm9pZCBDaHJvbWVDbGllbnQ6OnNldE5lZWRzT25l
U2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKQogewotICAgIG1fd2ViVmlldy0+cHJpdi0+YWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPm1hcmtGb3JTeW5jKCk7CisgICAgbV93ZWJWaWV3
LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+c2NoZWR1bGVMYXllckZsdXNo
KCk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5j
KCkKIHsKLSAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
LT5tYXJrRm9yU3luYygpOworICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQtPnNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCiBDaHJvbWVDbGllbnQ6OkNv
bXBvc2l0aW5nVHJpZ2dlckZsYWdzIENocm9tZUNsaWVudDo6YWxsb3dlZENvbXBvc2l0aW5nVHJp
Z2dlcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRHdGsuaAppbmRleCBlNWUyZmExZWIwMjJmYjY0MWRmMzZkMmFjZWIxMmJkMGJj
ZTQzNDdhLi4yODRiZGFhMzY2MDZhZTE1YWJiYzE1NmIzZWU4ZTIxNWQ3MmMxZTFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaApA
QCAtMTc5LDcgKzE3OSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBkb3VibGUgbV9s
YXN0RGlzcGxheVRpbWU7CiAgICAgICAgIHVuc2lnbmVkIGludCBtX3JlcGFpbnRTb29uU291cmNl
SWQ7CiAKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlV2lkZ2V0UmVjdChjb25zdCBJbnRSZWN0Jik7
CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9m
dWxsU2NyZWVuRWxlbWVudDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCmluZGV4IDk3MTc4MDYzN2FmMjdhNDAxNGIwNDVhN2I1ZGZkNzQzN2Q4ZDIw
MWMuLmE1MzY4OTQ0ZDNmZmZmMmNjNmYzYTEzNDM5MTQ3NDdjN2EzZmNhZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTY3OSw4ICs2NzksMTAgQEAg
c3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19kcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBj
YWlyb190KiBjcikKIAogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dF
Ql9WSUVXKHdpZGdldCktPnByaXY7CiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGlmIChw
cml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVuZGVyTGF5ZXJzVG9XaW5kb3co
Y3IsIGNsaXBSZWN0KSkKKyAgICBpZiAocHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQtPnJlbmRlckxheWVyc1RvV2luZG93KGNyLCBjbGlwUmVjdCkpIHsKKyAgICAgICAgR1RLX1dJ
REdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+ZHJhdyh3aWRnZXQsIGNy
KTsKICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KICNlbmRpZgogCiAgICAgY2Fpcm9fcmVj
dGFuZ2xlX2xpc3RfdCogcmVjdExpc3QgPSBjYWlyb19jb3B5X2NsaXBfcmVjdGFuZ2xlX2xpc3Qo
Y3IpOwpAQCAtODc1LDE1ICs4NzcsMTYgQEAgc3RhdGljIHZvaWQgcmVzaXplV2ViVmlld0Zyb21B
bGxvY2F0aW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEd0a0FsbG9jYXRpb24qIGEKICAgICBX
ZWJLaXQ6OkNocm9tZUNsaWVudCogY2hyb21lQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpD
aHJvbWVDbGllbnQqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwogICAgIGNocm9tZUNsaWVu
dC0+d2lkZ2V0U2l6ZUNoYW5nZWQob2xkU2l6ZSwgSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwg
YWxsb2NhdGlvbi0+aGVpZ2h0KSk7CiAgICAgY2hyb21lQ2xpZW50LT5hZGp1c3RtZW50V2F0Y2hl
cigpLT51cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzKCk7Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQtPnJlc2l6ZVJvb3RMYXllcihJbnRTaXplKGFsbG9jYXRpb24tPndpZHRoLCBh
bGxvY2F0aW9uLT5oZWlnaHQpKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfc2l6ZV9hbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxs
b2NhdGlvbikKIHsKKyAgICBHdGtBbGxvY2F0aW9uIG9sZEFsbG9jYXRpb247CisgICAgZ3RrX3dp
ZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZvbGRBbGxvY2F0aW9uKTsKKwogICAgIEdUS19X
SURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPnNpemVfYWxsb2NhdGUo
d2lkZ2V0LCBhbGxvY2F0aW9uKTsKKyAgICBpZiAoYWxsb2NhdGlvbi0+d2lkdGggPT0gb2xkQWxs
b2NhdGlvbi53aWR0aCAmJiBhbGxvY2F0aW9uLT5oZWlnaHQgPT0gb2xkQWxsb2NhdGlvbi5oZWln
aHQpCisgICAgICAgIHJldHVybjsKIAogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcod2lkZ2V0KTsKICAgICBpZiAoIWd0a193aWRnZXRfZ2V0X21hcHBlZCh3aWRn
ZXQpKSB7CkBAIC0xMDAzLDEwICsxMDA2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3
X3JlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCiAjZW5kaWYKICAgICBHZGtXaW5kb3cqIHdpbmRv
dyA9IGdka193aW5kb3dfbmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cod2lkZ2V0KSwg
JmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNfbWFzayk7CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2OwotICAgIHByaXYtPmhh
c05hdGl2ZVdpbmRvdyA9IGdka193aW5kb3dfZW5zdXJlX25hdGl2ZSh3aW5kb3cpOwotI2VuZGlm
CiAgICAgZ3RrX3dpZGdldF9zZXRfd2luZG93KHdpZGdldCwgd2luZG93KTsKICAgICBnZGtfd2lu
ZG93X3NldF91c2VyX2RhdGEod2luZG93LCB3aWRnZXQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcApp
bmRleCAxYjkxZGU4NGYxMmIzN2M3NWRlYjZkZjA0NjNhYmExODQxZGQ1NzkxLi5hNDEyYTg1MDA5
ZmM5M2Q4NzA3NGM3YjMyNjVkYmQ5ZDBkMWQ5ZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKQEAg
LTc4LDcgKzc4LDcgQEAgR0xDb250ZXh0KiBMYXllclRyZWVIb3N0R3RrOjpnbENvbnRleHQoKQog
ICAgIGlmICghd2luZG93SGFuZGxlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fY29udGV4
dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyh3aW5kb3dIYW5kbGUsIEdMQ29u
dGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7CisgICAgbV9jb250ZXh0ID0gR0xDb250ZXh0OjpjcmVh
dGVDb250ZXh0Rm9yV2luZG93KHdpbmRvd0hhbmRsZSwgR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4
dCgpLCBHTENvbnRleHQ6OlNpbmdsZUJ1ZmZlcik7CiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDg3N2JiNTY2
ZWFlMmY0NDFhNGIzOTMzZGU1NjY1NmVhN2M1YmI4MTYuLjZlZWFiZjBmOGU0ZjI4OTU4NTI3ZDQy
Mzc0MDUxMTUyNjFkNjRhN2UgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMiBAQAorMjAxMi0wOC0xNiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29u
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXNpbmcgYSBuYXRpdmUgd2luZG93IGZvciB0
aGUgV2ViVmlldyBicmVha3MgR3RrT3ZlcmxheQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAwODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGNvbmZpZ3VyZS5hYzogUGFyc2UgeGNvbXBvc2l0ZSBwa2ct
Y29uZmlnIGZpbGUgZHVyaW5nIGNvbmZpZ3VyYXRpb24uCisKIDIwMTItMDgtMTIgIExvw69jIFlo
dWVsICA8bG9pYy55aHVlbEBzb2Z0YXRob21lLmNvbT4KIAogICAgICAgICBbUXRdIE1ha2UgaXQg
cG9zc2libGUgdG8gYnVpbGQgd2l0aG91dCBRdFRlc3QvUXRQcmludFN1cHBvcnQKZGlmZiAtLWdp
dCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA3ZWE1Yjk1ZWViZjc0MjBlYzg5
OGEzNTU5ZjMxMWMyMDI4YzQ1Y2YxLi5mOTQxZDU3NzY4ZWU3YTQwZjVmY2FiYmIwMjkyZTMxZDE5
MTZlNmIyIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC01
NjUsNiArNTY1LDEyIEBAIEFDX0FSR19XSVRIKGFjY2VsZXJhdGlvbl9iYWNrZW5kLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXSkKIEFDX01TR19SRVNVTFQoWyR3aXRoX2FjY2VsZXJhdGlv
bl9iYWNrZW5kXSkKIAoraWYgdGVzdCAiJHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tlbmQiID0gIm9w
ZW5nbCI7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbWENPTVBPU0lURV0sIFt4Y29tcG9z
aXRlXSk7CisgICAgQUNfU1VCU1QoWENPTVBPU0lURV9DRkxBR1MpCisgICAgQUNfU1VCU1QoWENP
TVBPU0lURV9MSUJTKQorZmkKKwogIyBPcGVuR0wgaXMgdHVybmVkIG9uIGJ5IGRlZmF1bHQgKGFs
b25nIHdpdGggV2ViR0wgYW5kIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nKSwgYnV0IGlmCiAjIENs
dXR0ZXIgaXMgY2hvc2VuIGFzIHRoZSBhY2NlbGVyYXRlZCBkcmF3aW5nIGJhY2tlbmQsIHdlIHdh
bnQgdG8gZGlzYWJsZSBpdC4gQ09HTCBkb2VzIAogIyBub3QgcGxheSB3ZWxsIHdpdGggT3BlbkdM
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159426</attachid>
            <date>2012-08-20 07:46:45 -0700</date>
            <delta_ts>2012-08-21 08:20:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90085-20120820074606.patch</filename>
            <type>text/plain</type>
            <size>55895</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWVhMTBkY2I4OWMxNTg5
NTBkYTQwOTA0ZDE0NTgwYWE1NThkMGVhYy4uYzExYTIxMjBhNzE0OGNiOTY0M2QxZTZlMmI5YjY1
Yjk0YzM3Nzk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2lu
ZyBhIG5hdGl2ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGhpcyB3aWxsIGJlIGNvdmVyZWQgYnkgcGl4ZWwgdGVzdCBmb3IgYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgd2hlbiB0aGV5IGFyZSBhY3RpdmF0ZWQuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOiBBZGQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZmlsZXMgdG8g
dGhlIHNvdXJjZSBsaXN0LgorICAgICAgICBNYWtlIGEgbmV3IHNlY3Rpb24gZm9yIEdMWCBzcGVj
aWZpYyBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xY
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSk6IEV4
cG9zZSBzaGFyZWREaXNwbGF5IGFzIGEgc3RhdGljIG1ldGhvZAorICAgICAgICBzbyB0aGF0IGl0
IGNhbiBiZSBjYWxsZWQgYnkgb3RoZXIgWDExIHNwZWNpZmljIGNvZGUuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBBZGRlZC4gQW4gaW1wbGVt
ZW50YXRpb24gb2YgYSBHTCBzdXJmYWNlCisgICAgICAgIHRoYXQgcmVuZGVycyB0byBhbiBYLXdp
bmRvdyB3aGljaCByZWRpcmVjdHMgdG8gYSBwaXhtYXAuCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg6IEFkZGVkLgorCiAyMDEyLTA4LTEzICBNYXJp
byBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBJ
bXBsZW1lbnRhdGlvbiBvZiBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dCBpZ25vcmVzICds
ZW5ndGgnIHBhcmFtZXRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDQ5MmVlYmYwYmU4MDdjOTYxZjQy
NmM1NzYzYjYyYTM1Mzg2NjA5NzQuLjU1MmVmMjYyN2FhM2JhMzIyZDMwN2NiMDhkZWYzM2E2MjQ1
ZTcwMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMi0wOC0xNiAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXNp
bmcgYSBuYXRpdmUgd2luZG93IGZvciB0aGUgV2ViVmlldyBicmVha3MgR3RrT3ZlcmxheQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAwODUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXdyaXRlIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0IGZvciBUZXh0dXJlTWFwcGVyR0wgdG8gYmUgbW9yZSBz
aW1pbGFyIHRvCisgICAgICAgIHRoZSBXZWJLaXQyIExheWVyVHJlZUhvc3QgYW5kIHN3aXRjaCBm
cm9tIHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgd2lkZ2V0IHdpbmRvdworICAgICAgICB0byBh
IHdpbmRvdyByZWRpcmVjdGVkIHRvIGEgcGl4bWFwIHZpYSBYQ29tcG9zaXRlLiBUaGUgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQKKyAgICAgICAgbm93IGhhbmRsZXMgcGFpbnRpbmcgdGhl
IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgaXRzZWxmIGFuZCBubyBsb25nZXIgcmVsaWVzIG9uIHRo
ZQorICAgICAgICBDaHJvbWVDbGllbnQgYmFja2luZyBzdG9yZS4KKworICAgICAgICBUaGlzIGZp
eGVzIGlzc3VlcyB3aXRoIHVzaW5nIEd0a092ZXJsYXkgV2ViS2l0V2ViVmlldyBhcyB3ZWxsIGFz
IG1ha2luZyBpdCBwb3NzaWJsZQorICAgICAgICB0byBydW4gcGl4ZWwgdGVzdHMgd2l0aCBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyB0dXJuZWQgb24uCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oOgorICAgICAgICAoQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0R0wuY3BwOgorICAgICAgICBSZW5hbWUgc29tZSBtZXRob2RzIHRv
IG1ha2UgdGhlbSBtb3JlIHNpbWlsYXIgdG8gTGF5ZXJUcmVlSG9zdC4gTm93IHdlIHdhaXQgdG8g
cmVuZGVyCisgICAgICAgIHRoZSBPcGVuR0wgY29udGV4dCB0byB0aGUgd2luZG93IHVudGlsIHRo
ZSB3aWRnZXQncyBkcmF3IHNpZ25hbC4gRXNjYXBlIG91dCBvZiBhbGwKKyAgICAgICAgbWV0aG9k
cyBlYXJseSBpZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBkaXNhYmxlZC4KKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOiBBbHdheXMgY2hlY2sgaWYgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgb24KKyAgICAgICAgYmVmb3JlIGNhbGxpbmcgaW50byBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCBtZXRob2RzLiBXaGVuIEFDIGlzIG9uLCBuZXZl
ciBwYWludAorICAgICAgICB0aGUgYmFja2luZyBzdG9yZSwgZGVmZXJyaW5nIGltbWVkaWF0ZWx5
IHRvIHRoZSBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC4gV2hlbgorICAgICAgICBBQyBp
cyB0dXJuZWQgb24gdGhlIGJhY2tpbmcgc3RvcmUgbm93IHNocmlua3MgdG8gYSBzbWFsbCBzaXpl
IHRvIHNhdmUgbWVtb3J5LgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAg
ICAgICAgKHJlc2l6ZVdlYlZpZXdGcm9tQWxsb2NhdGlvbik6IENocm9tZUNsaWVudCBpcyBub3cg
cmVzcG9uc2libGUgZm9yIHRhbGtpbmcgdG8gdGhlCisgICAgICAgIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0IGRpcmVjdGx5LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NpemVfYWxs
b2NhdGUpOiBFeGl0IGVhcmx5IGlmIHRoZSBhbGxvY2F0aW9uIGlzIG5vdCBhIHJlc2l6ZS4gVGhp
cworICAgICAgICBtYWtlcyBzb21lIGRlZXBlciBsb2dpYyBhIGJpdCBzaW1wbGVyIGFuZCBhdm9p
ZHMgYWNjaWRlbnRhbGx5IGRvaW5nIHRvbyBtdWNoIHdvcmsgZm9yCisgICAgICAgIHdpZGdldCBt
b3ZlbWVudC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsaXplKTogV2Ugbm8gbG9uZ2Vy
IG5lZWQgYSBuYXRpdmUgd2luZG93LgorCiAyMDEyLTA4LTEzICBNYXJ0aW4gUm9iaW5zb24gIDxt
cm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBEZWZhdWx0IHNpZ25hbCBoYW5k
bGVyIGZvciBXZWJLaXRXZWJWaWV3OjpzaG91bGQtc2hvdy1kZWxldGUtaW50ZXJmYWNlLWZvci1l
bGVtZW50IG92ZXJyaWRlcyBkZWZhdWx0IHJlc3VsdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBl
NzE0YzVhZGFlMGRjNGIyYzhjNTNhYTgzM2FlMGJlNmEzYzUwYTE3Li41OGY0NzA0MTAzYTAwMzc3
NzRiOTMxZDExYjliMDcyNGE3MjcyMmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTA3Miw2
ICsxMDcyLDcgQEAgbGliV2ViQ29yZUd0a19sYV9DUFBGTEFHUyA9IFwKIAkkKExJQlhTTFRfQ0ZM
QUdTKSBcCiAJJChTUUxJVEUzX0NGTEFHUykgXAogCSQoVU5JQ09ERV9DRkxBR1MpIFwKKwkkKFhD
T01QT1NJVEVfQ0ZMQUdTKSBcCiAJJChYUkVOREVSX0NGTEFHUykgXAogCSQoWFRfQ0ZMQUdTKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA3ZjUyYWYxNzNkNTI1NjFkMjgyZWFm
OWQ2ZjkxMzM4YzQyNzExOWFjLi4wZmM3ZWVkODA3YmU0MTU2MjhjMTZkYmI5MGZlYTMzNGY4NWMw
MGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ5MjEsNiArNDkyMSw4IEBA
IHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR0xDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR0xDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtX
aWRnZXRCYWNraW5nU3RvcmVYMTEuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ndGsvZ3RrMnh0YmluLmMgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
TENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xD
b250ZXh0LmNwcAppbmRleCA2ZWI5OTA0ZWNiMmEyNmQwNzlhMDFiZWE3ZGNiZmRlMzY1ZmI5NzQ3
Li43MzA0NjNhY2UxOThlODZiMDc4ZWVhNDZiYTI0ZjYzYTU2ZmFiZTE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAKQEAg
LTM2LDEwICszNiwxMCBAQCBHTENvbnRleHQqIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKQog
ICAgIHJldHVybiBzaGFyaW5nLmdldCgpOwogfQogCi1QYXNzT3duUHRyPEdMQ29udGV4dD4gR0xD
b250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHVpbnQ2NF90IHdpbmRvd0hhbmRsZSwgR0xD
b250ZXh0KiBzaGFyaW5nQ29udGV4dCkKK1Bhc3NPd25QdHI8R0xDb250ZXh0PiBHTENvbnRleHQ6
OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3codWludDY0X3Qgd2luZG93SGFuZGxlLCBHTENvbnRleHQq
IHNoYXJpbmdDb250ZXh0LCBCdWZmZXJpbmdUeXBlIGJ1ZmZlcmluZ1R5cGUpCiB7CiAjaWYgVVNF
KEdMWCkKLSAgICByZXR1cm4gR0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KHdpbmRvd0hhbmRs
ZSwgc2hhcmluZ0NvbnRleHQpOworICAgIHJldHVybiBHTENvbnRleHRHTFg6OmNyZWF0ZUNvbnRl
eHQod2luZG93SGFuZGxlLCBzaGFyaW5nQ29udGV4dCwgYnVmZmVyaW5nVHlwZSk7CiAjZW5kaWYK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTUxLDcgKzUxLDcgQEAgR0xDb250ZXh0OjpHTENv
bnRleHQoKQogUGFzc093blB0cjxHTENvbnRleHQ+IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVu
Q29udGV4dChHTENvbnRleHQqIHNoYXJpbmcpCiB7CiAjaWYgVVNFKEdMWCkKLSAgICByZXR1cm4g
R0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KDAsIHNoYXJpbmcpOworICAgIHJldHVybiBHTENv
bnRleHRHTFg6OmNyZWF0ZUNvbnRleHQoMCwgc2hhcmluZywgU2luZ2xlQnVmZmVyKTsKICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HTENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dM
Q29udGV4dC5oCmluZGV4IGMyM2E0NmNmMTMzMDJjNDhlZDBjYmUwM2IzNWNiNTVhNjFlOTQ4MmMu
LmY2NmIwNzI3YmJiYTVjMzQ5NTQyZTBlNzE4MmY3MmMwODM0YWE1YWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCkBAIC0zMCw3
ICszMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdMQ29udGV4dCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoR0xDb250ZXh0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxHTENvbnRleHQ+IGNyZWF0ZUNvbnRleHRGb3JXaW5kb3codWludDY0X3Qgd2luZG93SGFu
ZGxlLCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KTsKKyAgICBlbnVtIEJ1ZmZlcmluZ1R5cGUg
eyBEb3VibGVCdWZmZXIsIFNpbmdsZUJ1ZmZlciB9OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8
R0xDb250ZXh0PiBjcmVhdGVDb250ZXh0Rm9yV2luZG93KHVpbnQ2NF90IHdpbmRvd0hhbmRsZSwg
R0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCwgQnVmZmVyaW5nVHlwZSk7CiAgICAgc3RhdGljIFBh
c3NPd25QdHI8R0xDb250ZXh0PiBjcmVhdGVPZmZzY3JlZW5Db250ZXh0KEdMQ29udGV4dCogc2hh
cmluZyA9IDApOwogICAgIHN0YXRpYyBHTENvbnRleHQqIGdldEN1cnJlbnQoKTsKICAgICBzdGF0
aWMgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAppbmRleCA5NDk2ZmM5MWFm
MzEzZDAxYmQ0MGU5YmI5ZTM0YTA4NmIyYzE2MTUyLi4yMDI4Y2VhNmQyNDU1M2ZmNzNlMTQxMzU3
MGZlNDRkMTQ4ZDE4OTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBiZWNhdXNlIGl0IG1pZ2h0IGxlYWQgdG8gY3Jhc2hlcyBpbiBzb21lIGRy
aXZlcnMgKGZnbHJ4KS4gV2UgdXNlIGEgc2hhcmVkIGRpc3BsYXkKIC8vIHBvaW50ZXIgaGVyZS4K
IHN0YXRpYyBEaXNwbGF5KiBnU2hhcmVkRGlzcGxheSA9IDA7Ci1zdGF0aWMgRGlzcGxheSogc2hh
cmVkRGlzcGxheSgpCitEaXNwbGF5KiBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKQogewog
ICAgIGlmICghZ1NoYXJlZERpc3BsYXkpCiAgICAgICAgIGdTaGFyZWREaXNwbGF5ID0gWE9wZW5E
aXNwbGF5KDApOwpAQCAtODksMjIgKzg5LDMzIEBAIHZvaWQgR0xDb250ZXh0R0xYOjpjbGVhbnVw
QWN0aXZlQ29udGV4dHNBdEV4aXQoKQogICAgIGdTaGFyZWREaXNwbGF5ID0gMDsKIH0KIAotUGFz
c093blB0cjxHTENvbnRleHRHTFg+IEdMQ29udGV4dEdMWDo6Y3JlYXRlV2luZG93Q29udGV4dChY
SUQgd2luZG93LCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KQorUGFzc093blB0cjxHTENvbnRl
eHRHTFg+IEdMQ29udGV4dEdMWDo6Y3JlYXRlV2luZG93Q29udGV4dChYSUQgd2luZG93LCBHTENv
bnRleHQqIHNoYXJpbmdDb250ZXh0LCBCdWZmZXJpbmdUeXBlIGJ1ZmZlcmluZ1R5cGUpCiB7CiAg
ICAgRGlzcGxheSogZGlzcGxheSA9IHNoYXJlZERpc3BsYXkoKTsKICAgICBYV2luZG93QXR0cmli
dXRlcyBhdHRyaWJ1dGVzOwogICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMoZGlzcGxheSwg
d2luZG93LCAmYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgWFZp
c3VhbEluZm8gdmlzdWFsSW5mbzsKLSAgICB2aXN1YWxJbmZvLnZpc3VhbGlkID0gWFZpc3VhbElE
RnJvbVZpc3VhbChhdHRyaWJ1dGVzLnZpc3VhbCk7CisgICAgc3RhdGljIGludCBmcmFtZWJ1ZmZl
ckF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1df
QklULAorICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCBidWZmZXJpbmdUeXBlID09IERvdWJsZUJ1
ZmZlciA/IFRydWUgOiBGYWxzZSwKKyAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCBHTFhfUkdCQV9C
SVQsCisgICAgICAgIEdMWF9SRURfU0laRSwgMSwKKyAgICAgICAgR0xYX0dSRUVOX1NJWkUsIDEs
CisgICAgICAgIEdMWF9CTFVFX1NJWkUsIDEsCisgICAgICAgIEdMWF9TVEVOQ0lMX1NJWkUsIDEs
CisgICAgICAgIE5vbmUKKyAgICB9OwogCi0gICAgaW50IG51bVJldHVybmVkID0gMDsKLSAgICBY
VmlzdWFsSW5mbyogdmlzdWFsSW5mb0xpc3QgPSBYR2V0VmlzdWFsSW5mbyhkaXNwbGF5LCBWaXN1
YWxJRE1hc2ssICZ2aXN1YWxJbmZvLCAmbnVtUmV0dXJuZWQpOworICAgIGludCBudW1iZXJSZXR1
cm5lZCA9IDA7CisgICAgR0xYRkJDb25maWcqIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhk
aXNwbGF5LCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLCBmcmFtZWJ1ZmZlckF0dHJpYnV0ZXMsICZu
dW1iZXJSZXR1cm5lZCk7CisKKyAgICBpZiAoIW51bWJlclJldHVybmVkIHx8ICFjb25maWdzKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEdMWENvbnRleHQgZ2x4U2hhcmluZ0NvbnRl
eHQgPSBzaGFyaW5nQ29udGV4dCA/IHN0YXRpY19jYXN0PEdMQ29udGV4dEdMWCo+KHNoYXJpbmdD
b250ZXh0KS0+bV9jb250ZXh0IDogMDsKLSAgICBHTFhDb250ZXh0IGNvbnRleHQgPSBnbFhDcmVh
dGVDb250ZXh0KGRpc3BsYXksIHZpc3VhbEluZm9MaXN0LCBnbHhTaGFyaW5nQ29udGV4dCwgVHJ1
ZSk7Ci0gICAgWEZyZWUodmlzdWFsSW5mb0xpc3QpOworICAgIEdMWENvbnRleHQgY29udGV4dCA9
IGdsWENyZWF0ZU5ld0NvbnRleHQoZGlzcGxheSwgY29uZmlnc1swXSwgR0xYX1JHQkFfVFlQRSwg
Z2x4U2hhcmluZ0NvbnRleHQsIFRydWUpOworICAgIFhGcmVlKGNvbmZpZ3MpOwogCiAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE5OCw3ICsyMDksNyBAQCBQ
YXNzT3duUHRyPEdMQ29udGV4dEdMWD4gR0xDb250ZXh0R0xYOjpjcmVhdGVQaXhtYXBDb250ZXh0
KEdMWENvbnRleHQgc2hhcmluZ0NvbgogICAgIHJldHVybiBhZG9wdFB0cihuZXcgR0xDb250ZXh0
R0xYKGNvbnRleHQsIHBpeG1hcCwgZ2x4UGl4bWFwKSk7CiB9CiAKLVBhc3NPd25QdHI8R0xDb250
ZXh0R0xYPiBHTENvbnRleHRHTFg6OmNyZWF0ZUNvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0
KiBzaGFyaW5nQ29udGV4dCkKK1Bhc3NPd25QdHI8R0xDb250ZXh0R0xYPiBHTENvbnRleHRHTFg6
OmNyZWF0ZUNvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCwgQnVm
ZmVyaW5nVHlwZSBidWZmZXJpbmdUeXBlKQogewogICAgIGlmICghc2hhcmVkRGlzcGxheSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIxMyw3ICsyMjQsOSBAQCBQYXNzT3duUHRyPEdM
Q29udGV4dEdMWD4gR0xDb250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KFhJRCB3aW5kb3csIEdMQ29u
dGV4dCogc2hhcgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEdMWENvbnRleHQgZ2x4
U2hhcmluZ0NvbnRleHQgPSBzaGFyaW5nQ29udGV4dCA/IHN0YXRpY19jYXN0PEdMQ29udGV4dEdM
WCo+KHNoYXJpbmdDb250ZXh0KS0+bV9jb250ZXh0IDogMDsKLSAgICBPd25QdHI8R0xDb250ZXh0
R0xYPiBjb250ZXh0ID0gd2luZG93ID8gY3JlYXRlV2luZG93Q29udGV4dCh3aW5kb3csIHNoYXJp
bmdDb250ZXh0KSA6IG51bGxwdHI7CisgICAgT3duUHRyPEdMQ29udGV4dEdMWD4gY29udGV4dCA9
IHdpbmRvdyA/IGNyZWF0ZVdpbmRvd0NvbnRleHQod2luZG93LCBzaGFyaW5nQ29udGV4dCwgYnVm
ZmVyaW5nVHlwZSkgOiBudWxscHRyOworCisgICAgLy8gV2UgZG9uJ3QgdXNlIGV2ZXIgZG91Ymxl
LWJ1ZmZlciBhdCB0aGUgbW9tZW50IHdpdGggb2Zmc2NyZWVuIGNvbnRleHRzLCBzbyB3ZSBhcmUg
aWdub3JpbmcgYnVmZmVyaW5nVHlwZS4KICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIGNvbnRl
eHQgPSBjcmVhdGVQYnVmZmVyQ29udGV4dChnbHhTaGFyaW5nQ29udGV4dCk7CiAgICAgaWYgKCFj
b250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4
L0dMQ29udGV4dEdMWC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dM
Q29udGV4dEdMWC5oCmluZGV4IDVlOGM2MWNlNGU0MWM3NmI2YzhlOWI1NTA4ODM3NWE1Zjg0Y2M0
M2MuLmQ0MDc5NDAxZjE1NDY5YTg1M2U4OWJmYWVhNGVhZTYzNzM0ZWE0N2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKQEAg
LTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xDb250ZXh0R0xYIDog
cHVibGljIEdMQ29udGV4dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xDb250ZXh0R0xY
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHTENvbnRleHRHTFg+IGNyZWF0ZUNv
bnRleHQoWElELCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0ID0gMCk7Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8R0xDb250ZXh0R0xYPiBjcmVhdGVXaW5kb3dDb250ZXh0KFhJRCB3aW5kb3csIEdM
Q29udGV4dCogc2hhcmluZ0NvbnRleHQpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMQ29udGV4
dEdMWD4gY3JlYXRlQ29udGV4dChYSUQgd2luZG93LCBHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0
LCBCdWZmZXJpbmdUeXBlKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxHTENvbnRleHRHTFg+IGNy
ZWF0ZVdpbmRvd0NvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCwg
QnVmZmVyaW5nVHlwZSk7CiAKICAgICB2aXJ0dWFsIH5HTENvbnRleHRHTFgoKTsKICAgICB2aXJ0
dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9EZWZhdWx0RnJhbWVidWZmZXIoKTsKICAgICB2
aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgpOwogCisgICAgc3RhdGljIERp
c3BsYXkqIHNoYXJlZERpc3BsYXkoKTsKKwogI2lmIFVTRSgzRF9HUkFQSElDUykKICAgICB2aXJ0
dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCk7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlZWM3ZTg0YTAyOWFlZGM0MGZjNTFmZDkw
MDlmODcwODNiYmE0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCkBAIC0wLDAgKzEsMjE2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdy5oIgorCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSA8
R0wvZ2x4Lmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2luY2x1
ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIu
aD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093
blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coc2l6ZSkpOworfQorCitSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYg
c2l6ZSkKKyAgICA6IG1fd2luZG93KDApCisgICAgLCBtX3BhcmVudFdpbmRvdygwKQorICAgICwg
bV9waXhtYXAoMCkKKyAgICAsIG1fc3VyZmFjZSgwKQorICAgICwgbV9wZW5kaW5nUmVzaXplU291
cmNlSWQoMCkKKyAgICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZShmYWxzZSkKK3sKKyAg
ICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCk7CisKKyAg
ICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBDaHJvbWl1bTogc3JjL2NvbnRlbnQvY29t
bW9uL2dwdS9pbWFnZV90cmFuc3BvcnRfc3VyZmFjZV9saW51eC5jYworICAgIFhTZXRXaW5kb3dB
dHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlk
ZV9yZWRpcmVjdCA9IFRydWU7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBYQ3JlYXRlV2luZG93KGRp
c3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RXaW5kb3coZGlz
cGxheSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtMTAwLCAtMTAwLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9t
UGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXT3ZlcnJpZGVSZWRpcmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKKyAg
ICBYTWFwV2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsKKworICAgIHdpbmRvd0F0dHJp
YnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7CisgICAgd2luZG93QXR0cmli
dXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNlOworICAgIG1fd2luZG93ID0gWENyZWF0ZVdp
bmRvdyhkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudFdpbmRv
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW5wdXRPdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlGcm9t
UGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV0V2ZW50TWFzaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0ZXMpOworICAgIFhNYXBXaW5k
b3coZGlzcGxheSwgbV93aW5kb3cpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgWEV2ZW50
IGV2ZW50OworICAgICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwgbV93aW5kb3csIFN0cnVjdHVy
ZU5vdGlmeU1hc2ssICZldmVudCk7CisgICAgICAgIGlmIChldmVudC50eXBlID09IE1hcE5vdGlm
eSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBYU2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5kb3csIE5vRXZlbnRNYXNrKTsK
KworICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgQ29tcG9z
aXRlUmVkaXJlY3RNYW51YWwpOworCisgICAgcmVzaXplKHNpemUpOworICAgIHJlc2l6ZUxhdGVy
KCk7IC8vIEZvcmNlIHVwZGF0ZSBvZiB0aGUgdXNhYmxlIGFyZWEuCit9CisKK1JlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coKQoreworICAgIERp
c3BsYXkqIGRpc3BsYXkgPSBHTENvbnRleHRHTFg6OnNoYXJlZERpc3BsYXkoKTsKKyAgICBpZiAo
bV93aW5kb3cpCisgICAgICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1fd2luZG93KTsKKyAg
ICBpZiAobV9wYXJlbnRXaW5kb3cpCisgICAgICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIG1f
cGFyZW50V2luZG93KTsKKyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworCisg
ICAgaWYgKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUo
bV9wZW5kaW5nUmVzaXplU291cmNlSWQpOworfQorCitnYm9vbGVhbiBSZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdzo6cmVzaXplTGF0ZXJDYWxsYmFjayhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dyogd2luZG93KQoreworICAgIHdpbmRvdy0+cmVzaXplTGF0ZXIoKTsKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OnJlc2l6ZUxhdGVyKCkK
K3sKKyAgICBtX3VzYWJsZVNpemUgPSBtX3NpemU7CisgICAgbV9wZW5kaW5nUmVzaXplU291cmNl
SWQgPSAwOworfQorCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpyZXNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBXaGVuIGVubGFyZ2luZyBhIHJlZGlyZWN0ZWQg
d2luZG93LCBmb3IgdGhlIGZpcnN0IHJlbmRlciwgdGhlIG5ld2x5IGV4cG9zZWQgYXJlYXMgc2Vl
bQorICAgIC8vIHRvIGNvbnRhaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb24gSW50ZWwgZHJpdmVy
cy4gVG8gYXZvaWQgcmVuZGVyaW5nIGFydGlmYWN0cyB3aGlsZQorICAgIC8vIHJlc2l6aW5nLCB3
ZSB3YWl0IHRvIHJlbmRlciB0aG9zZSBuZXcgYXJlYXMgdW50aWwgYWZ0ZXIgYSBzaG9ydCB0aW1l
b3V0LiBUaHVzLCB0aGUKKyAgICAvLyAidXNhYmxlIHNpemUiIG9mIHRoZSB3aW5kb3cgaXMgc21h
bGxlciB0aGFuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgd2luZG93IGZvciB0aGUgZmlyc3QKKyAg
ICAvLyByZW5kZXIuCisgICAgbV91c2FibGVTaXplID0gc2l6ZS5zaHJ1bmtUbyhtX3VzYWJsZVNp
emUpOworICAgIGlmIChtX3VzYWJsZVNpemUud2lkdGgoKSA8IHNpemUud2lkdGgoKSB8fCBtX3Vz
YWJsZVNpemUuaGVpZ2h0KCkgPCBzaXplLmhlaWdodCgpKSB7IC8vIFRoZSB3aW5kb3cgaXMgZ3Jv
d2luZy4KKyAgICAgICAgLy8gV2UncmUgYmVpbmcgdmVyeSBjb25zZXJ2YXRpdmUgaGVyZS4gSW5z
dGVhZCBvZiByaXNraW5nIGRyYXdpbmcgYXJ0aWZhY3RzIHdoaWxlIGRvaW5nIGNvbnRpbnVvdXMK
KyAgICAgICAgLy8gb3BhcXVlIHJlc2l6aW5nLCB3ZSBlcnIgb24gdGhlIHNpZGUgb2YgaGF2aW5n
IG1vcmUgdW5kcmF3biBhcmVhcy4KKyAgICAgICAgaWYgKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlk
KQorICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKTsK
KyAgICAgICAgbV9wZW5kaW5nUmVzaXplU291cmNlSWQgPSBnX3RpbWVvdXRfYWRkKDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlc2l6ZUxhdGVyQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICB9CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5
KCk7CisgICAgWFJlc2l6ZVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdywgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKKyAgICBnbFhXYWl0WCgpOworCisgICAgLy8gVGhpcyBzd2FwIGlzIGJh
c2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRvIHdvcmstYXJvdW5kIGEgYnVnIGlu
IHRoZSBJbnRlbCBkcml2ZXJzCisgICAgLy8gd2hlcmUgYSBzd2FwIGlzIG5lY2Vzc2FyeSB0byBl
bnN1cmUgdGhlIGZyb250IGFuZCBiYWNrIGJ1ZmZlcnMgYXJlIHByb3Blcmx5IHJlc2l6ZWQuCisg
ICAgaWYgKGNvbnRleHQoKSA9PSBHTENvbnRleHQ6OmdldEN1cnJlbnQoKSkKKyAgICAgICAgY29u
dGV4dCgpLT5zd2FwQnVmZmVycygpOworCisgICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX25lZWRz
TmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSB0cnVlOworfQorCitHTENvbnRleHQqIFJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93Ojpjb250ZXh0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAg
ICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworCisgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICBt
X2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cobV93aW5kb3csIEdM
Q29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSwgR0xDb250ZXh0OjpTaW5nbGVCdWZmZXIpOworICAg
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3c6OmNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCkKK3sKKyAgICBpZiAoIW1fcGl4
bWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBYRnJlZVBpeG1hcChjYWlyb194bGliX3N1cmZh
Y2VfZ2V0X2Rpc3BsYXkobV9zdXJmYWNlLmdldCgpKSwgbV9waXhtYXApOworICAgIG1fcGl4bWFw
ID0gMDsKKyAgICBtX3N1cmZhY2UgPSBudWxscHRyOworfQorCitjYWlyb19zdXJmYWNlX3QqIFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjYWlyb1N1cmZhY2VGb3JXaWRnZXQoR3RrV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgaWYgKCFtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgJiYgbV9z
dXJmYWNlKQorICAgICAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOworCisgICAgbV9uZWVkc05l
d1BpeG1hcEFmdGVyUmVzaXplID0gZmFsc2U7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0
IHRoZSBuZXcgcGl4bWFwIGJlIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBEaXNwbGF5IHBvaW50ZXIg
YXMgdGhlIHRhcmdldAorICAgIC8vIHdpZGdldCBvciBlbHNlIGRyYXdpbmcgc3BlZWQgY2FuIGJl
IDEwMHggc2xvd2VyLgorICAgIERpc3BsYXkqIG5ld1BpeG1hcERpc3BsYXkgPSBHREtfRElTUExB
WV9YRElTUExBWShndGtfd2lkZ2V0X2dldF9kaXNwbGF5KHdpZGdldCkpOworICAgIFBpeG1hcCBu
ZXdQaXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcChuZXdQaXhtYXBEaXNwbGF5LCBt
X3dpbmRvdyk7CisgICAgaWYgKCFuZXdQaXhtYXApIHsKKyAgICAgICAgY2xlYW51cFBpeG1hcEFu
ZFBpeG1hcFN1cmZhY2UoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgWFdpbmRv
d0F0dHJpYnV0ZXMgd2luZG93QXR0cmlidXRlczsKKyAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1
dGVzKG5ld1BpeG1hcERpc3BsYXksIG1fd2luZG93LCAmd2luZG93QXR0cmlidXRlcykpIHsKKyAg
ICAgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKyAgICAgICAgWEZyZWVQaXht
YXAobmV3UGl4bWFwRGlzcGxheSwgbmV3UGl4bWFwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNh
aXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUobmV3UGl4bWFwRGlzcGxheSwgbmV3UGl4bWFwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbmRvd0F0dHJpYnV0ZXMudmlzdWFsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKKworICAgIC8vIE52aWRpYSBk
cml2ZXJzIHNlZW0gdG8gcHJlcGFyZSB0aGVpciByZWRpcmVjdGVkIHdpbmRvdyBwaXhtYXAgYXN5
bmNocm9ub3VzbHksIHNvIGZvciBhIGZldyBmcmFjdGlvbnMKKyAgICAvLyBvZiBhIHNlY29uZCBh
ZnRlciBlYWNoIHJlc2l6ZSwgd2hpbGUgZG9pbmcgY29udGludW91cyByZXNpemluZyAod2hpY2gg
Y29uc3RhbnRseSBkZXN0cm95cyBhbmQgY3JlYXRlcworICAgIC8vIHBpeG1hcCB3aW5kb3ctYmFj
a2luZ3MpLCB0aGUgcGl4bWFwIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBUbyB3b3JrIGFyb3Vu
ZCB0aGlzIGlzc3VlLCBwYWludCB0aGUgb2xkCisgICAgLy8gcGl4bWFwIHRvIHRoZSBuZXcgb25l
IHRvIHByb3Blcmx5IGluaXRpYWxpemUgaXQuCisgICAgaWYgKG1fc3VyZmFjZSkgeworICAgICAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5n
ZXQoKSkpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjci5nZXQoKSwgMSwgMSwgMSk7
CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWly
b19wYWludChjci5nZXQoKSk7CisgICAgfQorCisgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1
cmZhY2UoKTsKKyAgICBtX3BpeG1hcCA9IG5ld1BpeG1hcDsKKyAgICBtX3N1cmZhY2UgPSBuZXdT
dXJmYWNlOworCisgICAgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVk
aXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOWVjN2VkYjI2YjhkZWE0MjZm
YmY0ZTY0YTk1ZTI1OWRhNGQ3YTM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgKQEAgLTAsMCArMSw3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgSWdhbGlhIFMuTC4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAor
I2RlZmluZSAgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3dfaAorCisjaW5jbHVkZSAiR0xDb250
ZXh0R0xYLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgi
CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBQaXhtYXA7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
V2luZG93OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdz4gY3JlYXRlKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIH5SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdygpOworCisgICAgY29uc3QgSW50U2l6ZSYgdXNhYmxlU2l6
ZSgpIHsgcmV0dXJuIG1fdXNhYmxlU2l6ZTsgfQorICAgIGNvbnN0IEludFNpemUmIHNpemUoKSB7
IHJldHVybiBtX3NpemU7IH0KKworICAgIHZvaWQgcmVzaXplKGNvbnN0IEludFNpemUmIG5ld1Np
emUpOworICAgIEdMQ29udGV4dCogY29udGV4dCgpOworICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fp
cm9TdXJmYWNlRm9yV2lkZ2V0KEd0a1dpZGdldCopOworCitwcml2YXRlOgorICAgIFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmKTsKKworICAgIHN0YXRpYyBnYm9vbGVh
biByZXNpemVMYXRlckNhbGxiYWNrKFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Kik7CisgICAg
dm9pZCByZXNpemVMYXRlcigpOworICAgIHZvaWQgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZh
Y2UoKTsKKworICAgIEludFNpemUgbV9zaXplOworICAgIEludFNpemUgbV91c2FibGVTaXplOwor
ICAgIFdpbmRvdyBtX3dpbmRvdzsKKyAgICBXaW5kb3cgbV9wYXJlbnRXaW5kb3c7CisgICAgUGl4
bWFwIG1fcGl4bWFwOworICAgIE93blB0cjxHTENvbnRleHQ+IG1fY29udGV4dDsKKyAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgdW5zaWduZWQgaW50IG1fcGVuZGlu
Z1Jlc2l6ZVNvdXJjZUlkOworICAgIGJvb2wgbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUu
YW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCAyMTU1NzZlNTE4MTRj
Y2YxMmNjMGVmZWI2OTJlZDlkYTdiMjQ5NDUyLi4wMDQ3M2Y5ZDUwYjVhNzU3YTUwNTA4MWJmZjhm
MmIxNDhkM2E2ZWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5h
bQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMTAxLDYgKzEwMSw3
IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RL
X0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUJBCiAJJChQTkdfTElCUykgXAogCSQoU1FMSVRFM19M
SUJTKSBcCiAJJChVTklDT0RFX0xJQlMpIFwKKwkkKFhDT01QT1NJVEVfTElCUykgXAogCSQoWFJF
TkRFUl9MSUJTKSBcCiAJJChYVF9MSUJTKSBcCiAJJChXSU5NTV9MSUJTKSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dC5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQuaAppbmRleCAyNGE2MTRkYjQ1ZjRmMmY1Y2MzMjlkNDg4ZjRhMTg3
YWY5NDFkODExLi5kYWM2N2NhZDMwZGFkNTY3YTI2NjJlMzNhYjBjYWU1MmU5NTQyYzkwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKQEAgLTI4LDEwICsyOCwxMiBAQAogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjZW5kaWYKKwogI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKICNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNlbmRpZgotI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJMYXllci5oIgorI2luY2x1ZGUgIlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93LmgiCiAj
ZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTQ3LDExICs0OSw5
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIH5BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dCgpOwotICAgIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopOwotICAgIHZvaWQgc2NoZWR1bGVSb290TGF5ZXJSZXBhaW50KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKLSAgICB2b2lkIG1hcmtGb3JTeW5jKCk7Ci0gICAgdm9pZCBzeW5j
TGF5ZXJzVGltZW91dCgpOwotICAgIHZvaWQgc3luY0xheWVyc05vdygpOworICAgIHZvaWQgc2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQg
c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CiAgICAgdm9pZCByZXNpemVSb290
TGF5ZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAgIGJvb2wgcmVuZGVyTGF5ZXJzVG9X
aW5kb3coY2Fpcm9fdCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKICAgICBi
b29sIGVuYWJsZWQoKTsKQEAgLTYzLDIyICs2Myw0MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopIGNvbnN0OwogCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBj
b21wb3NpdGVMYXllcnNUb0NvbnRleHQoKTsKKyAgICB2b2lkIGZsdXNoQW5kUmVuZGVyTGF5ZXJz
KCk7CisgICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIHNjcm9s
bE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworCiBwcml2YXRlOgogICAg
IFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICB1bnNpZ25lZCBpbnQgbV9zeW5jVGltZXJD
YWxsYmFja0lkOworICAgIHVuc2lnbmVkIGludCBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQ7
CiAKICNpZiBVU0UoQ0xVVFRFUikKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3Jvb3RH
cmFwaGljc0xheWVyOwogICAgIEd0a1dpZGdldCogbV9yb290TGF5ZXJFbWJlZGRlcjsKKyNlbGlm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBPd25QdHI8V2ViQ29yZTo6UmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3c+IG1fcmVkaXJlY3RlZFdpbmRvdzsKKyAgICBPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKyAgICBPd25QdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOworICAgIGRvdWJsZSBtX2xhc3RGbHVzaFRp
bWU7CisgICAgZG91YmxlIG1fcmVkcmF3UGVuZGluZ1RpbWU7CisgICAgYm9vbCBtX25lZWRzRXh0
cmFGbHVzaDsKKworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHN0
b3BBbnlQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAgIHN0YXRpYyBnYm9vbGVhbiBsYXllckZsdXNo
VGltZXJGaXJlZENhbGxiYWNrKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Kik7CisgICAg
Ym9vbCBwcmVwYXJlRm9yUmVuZGVyaW5nKCk7CisgICAgdm9pZCBjbGVhckV2ZXJ5d2hlcmUoKTsK
ICNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5
ZXIqIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9yb290R3JhcGhpY3NMYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVy
ZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAg
ICBXZWJDb3JlOjpHTENvbnRleHQqIGdsQ29udGV4dCgpOwogICAgIE93blB0cjxXZWJDb3JlOjpH
TENvbnRleHQ+IG1fY29udGV4dDsKICNlbmRpZgotI2VuZGlmCiAKICAgICBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dChXZWJLaXRXZWJWaWV3Kik7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRH
TC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dEdMLmNwcAppbmRleCA2NGViOTAxNzU4YmQ0ZWFlOGE5NDg3YmExZGMwMTk2
NzJhOWU1YWE1Li5lYzBlMWE2NGQ3YWJmNTk3ZmZhM2JiZDEwMWM2YmM0M2I2ODUxNDVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcApAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJHTC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgogI2luY2x1
ZGUgIndlYmtpdHdlYnZpZXdwcml2YXRlLmgiCkBAIC0zNSwxMyArMzYsMTIgQEAKICNpbmNsdWRl
IDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCi0jaWYgZGVmaW5lZChHREtfV0lO
RE9XSU5HX1gxMSkKLSNkZWZpbmUgUmVnaW9uIFhSZWdpb24KLSNkZWZpbmUgRm9udCBYRm9udAot
I2RlZmluZSBDdXJzb3IgWEN1cnNvcgotI2RlZmluZSBTY3JlZW4gWFNjcmVlbgotI2luY2x1ZGUg
PGdkay9nZGt4Lmg+Ci0jZW5kaWYKK2NvbnN0IGRvdWJsZSBnRnJhbWVzUGVyU2Vjb25kID0gNjA7
CisKKy8vIFRoZXJlIHNlZW1zIHRvIGJlIGEgZGVsaWNhdGUgYmFsYW5jZSBiZXR3ZWVuIHRoZSBt
YWluIGxvb3AgYmVpbmcgZmxvb2RlZAorLy8gd2l0aCBtb3Rpb24gZXZlbnRzICh0aGF0IGZvcmNl
IGZsdXNoZXMpIGFuZCBzdGFydmluZyB0aGUgbWFpbiBsb29wIG9mIGV2ZW50cworLy8gd2l0aCBm
bHVzaCBjYWxsYmFja3MuIFRoaXMgZGVsYXkgaXMgZW50aXJlbHkgZW1waXJpY2FsLgorY29uc3Qg
ZG91YmxlIGdTY2hlZHVsZURlbGF5ID0gKDEuMCAvIChnRnJhbWVzUGVyU2Vjb25kIC8gMy4wKSk7
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OSwxNTAgKzQ5LDMwMCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OkFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgOiBtX3dl
YlZpZXcod2ViVmlldykKLSAgICAsIG1fc3luY1RpbWVyQ2FsbGJhY2tJZCgwKQotICAgICwgbV9y
b290VGV4dHVyZU1hcHBlckxheWVyKDApCisgICAgLCBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNr
SWQoMCkKKyAgICAsIG1fcmVkaXJlY3RlZFdpbmRvdyhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRv
dzo6Y3JlYXRlKEludFNpemUoMSwgMSkpKQorICAgICwgbV9sYXN0Rmx1c2hUaW1lKDApCisgICAg
LCBtX3JlZHJhd1BlbmRpbmdUaW1lKDApCisgICAgLCBtX25lZWRzRXh0cmFGbHVzaChmYWxzZSkK
K3sKK30KKworc3RhdGljIEludFNpemUgZ2V0V2ViVmlld1NpemUoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKIHsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9n
ZXRfYWxsb2NhdGlvbihHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgcmV0
dXJuIEludFNpemUoYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOworfQorCit2
b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojppbml0aWFsaXplKCkKK3sKKyAgICBp
ZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVyID0gR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRl
bnQoZmFsc2UpOworCisgICAgSW50U2l6ZSBwYWdlU2l6ZSA9IGdldFdlYlZpZXdTaXplKG1fd2Vi
Vmlldyk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUocGFnZVNpemUpOworCisgICAgLy8gVGhl
IG5vbi1jb21wb3NpdGVkIGNvbnRlbnRzIGFyZSBhIGNoaWxkIG9mIHRoZSByb290IGxheWVyLgor
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0
aGlzKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0
cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVl
KCFtX3dlYlZpZXctPnByaXYtPnRyYW5zcGFyZW50KTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnNldFNpemUocGFnZVNpemUpOworICAgIGlmIChjb3JlKG1fd2ViVmlldyktPnNl
dHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkKKyAgICAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcodHJ1ZSk7CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIlJvb3QgbGF5ZXIiKTsKKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIk5vbi1jb21wb3NpdGVkIGNvbnRl
bnQiKTsKKyNlbmRpZgorCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci5nZXQoKSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgVGV4dHVyZU1h
cHBlciBuZWVkcyBhbiBhY3RpdmUgT3BlbkdMIGNvbnRleHQuCisgICAgR0xDb250ZXh0KiBjb250
ZXh0ID0gbV9yZWRpcmVjdGVkV2luZG93LT5jb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpj
cmVhdGUoKTsKKworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworCisgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7CiB9CiAKIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojp+QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoKQogewotICAgIGlmIChtX3N5bmNUaW1lckNhbGxiYWNr
SWQpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShtX3N5bmNUaW1lckNhbGxiYWNrSWQpOworICAg
IHN0b3BBbnlQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0OjpzdG9wQW55UGVuZGluZ0xheWVyRmx1c2goKQoreworICAgIGlmICghbV9s
YXllckZsdXNoVGltZXJDYWxsYmFja0lkKQorICAgICAgICByZXR1cm47CisgICAgZ19zb3VyY2Vf
cmVtb3ZlKG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCk7CisgICAgbV9sYXllckZsdXNoVGlt
ZXJDYWxsYmFja0lkID0gMDsKIH0KIAogYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dDo6ZW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllciAmJiBt
X3RleHR1cmVNYXBwZXI7CisgICAgcmV0dXJuIG1fcm9vdExheWVyICYmIG1fdGV4dHVyZU1hcHBl
cjsKIH0KIAotR0xDb250ZXh0KiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Z2xDb250
ZXh0KCkKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1Rv
V2luZG93KGNhaXJvX3QqIGNyLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBpZiAo
bV9jb250ZXh0KQotICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworICAgIG1fcmVkcmF3
UGVuZGluZ1RpbWUgPSAwOwogCi0jaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKLSAgICAv
LyBGSVhNRTogR3JhY2VmdWxseSBhY2NvdW50IGZvciBzaXR1YXRpb25zIHdoZXJlIHdlIGRvIG5v
dCBoYXZlIGEgcmVhbGl6ZWQgd2luZG93LgotICAgIEdka1dpbmRvdyogZ2RrV2luZG93ID0gZ3Rr
X3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Ci0gICAgaWYgKGdka1dp
bmRvdyAmJiBnZGtfd2luZG93X2hhc19uYXRpdmUoZ2RrV2luZG93KSkKLSAgICAgICAgbV9jb250
ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KEdES19XSU5ET1dfWElEKGdk
a1dpbmRvdyksIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7Ci0jZW5kaWYKKyAgICBpZiAo
IWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fY29udGV4
dC5nZXQoKTsKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0byBwYWludCBhIHdoaXRlIGJhY2tncm91
bmQgKGlmIHRoZSBXZWJWaWV3IGlzbid0IHRyYW5zcGFyZW50KSwgYmVjYXVzZSB3aGVuIGdyb3dp
bmcKKyAgICAvLyB0aGUgcmVkaXJlY3RlZCB3aW5kb3csIHRoZSB1c2FibGUgc2l6ZSBvZiB0aGUg
d2luZG93IG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIGFsbG9jYXRpb24gb2Ygb3VyIHdpZGdldC4K
KyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNob3cgYXJ0aWZhY3RzIGluIHRoYXQgY2FzZS4KKyAg
ICBJbnRTaXplIHVzYWJsZVdpbmRvd1NpemUgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPnVzYWJsZVNp
emUoKTsKKyAgICBpZiAodXNhYmxlV2luZG93U2l6ZSAhPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPnNp
emUoKSkgeworICAgICAgICBpZiAoIW1fd2ViVmlldy0+cHJpdi0+dHJhbnNwYXJlbnQpIHsKKyAg
ICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAxLCAxLCAxKTsKKyAgICAgICAgICAg
IGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9S
X0NMRUFSKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IpOworICAgIH0KKworICAgIGNhaXJvX3N1
cmZhY2VfdCogd2luZG93U3VyZmFjZSA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y2Fpcm9TdXJmYWNl
Rm9yV2lkZ2V0KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgaWYgKCF3aW5kb3dTdXJmYWNl
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgY2xpcFJl
Y3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdodCgp
KTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHdpbmRvd1N1cmZhY2UsIDAsIDAp
OworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAg
ICBjYWlyb19maWxsKGNyKTsKKworICAgIGlmICghbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lk
ICYmIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+ZGVzY2VuZGFudHNP
clNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSB8fCBtX25lZWRzRXh0cmFGbHVzaCkgeworICAg
ICAgICBtX25lZWRzRXh0cmFGbHVzaCA9IGZhbHNlOworICAgICAgICBkb3VibGUgbmV4dEZsdXNo
ID0gbWF4KCgxIC8gZ0ZyYW1lc1BlclNlY29uZCkgLSAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEZs
dXNoVGltZSksIDAuMCk7CisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IGdf
dGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAxMDAwICogbmV4dEZsdXNoLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNr
KSwgdGhpcywgMCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KGNhaXJvX3QqLCBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQ6OnByZXBhcmVGb3JSZW5kZXJpbmcoKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBHTENvbnRleHQqIGNvbnRleHQgPSBnbENvbnRleHQoKTsK
KyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPmNvbnRleHQoKTsK
ICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9u
KEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIGdsVmlld3BvcnQoMCwg
MCwgYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpjb21wb3NpdGVMYXll
cnNUb0NvbnRleHQoKQoreworICAgIGlmICghcHJlcGFyZUZvclJlbmRlcmluZygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjb25zdCBJbnRTaXplJiB3aW5kb3dTaXplID0gbV9yZWRpcmVjdGVk
V2luZG93LT5zaXplKCk7CisgICAgZ2xWaWV3cG9ydCgwLCAwLCB3aW5kb3dTaXplLndpZHRoKCks
IHdpbmRvd1NpemUuaGVpZ2h0KCkpOwogCiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50
aW5nKCk7Ci0gICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyLT5wYWludCgpOworICAgIHRvVGV4
dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+cGFpbnQoKTsKICAgICBtX3RleHR1
cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CiAKLSAgICBjb250ZXh0LT5zd2FwQnVmZmVycygpOwot
ICAgIHJldHVybiB0cnVlOworICAgIGdsRmx1c2goKTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllcikKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmNsZWFy
RXZlcnl3aGVyZSgpCiB7CisgICAgaWYgKCFwcmVwYXJlRm9yUmVuZGVyaW5nKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbnN0IEludFNpemUmIHdpbmRvd1NpemUgPSBtX3JlZGlyZWN0ZWRX
aW5kb3ctPnNpemUoKTsKKyAgICBnbFZpZXdwb3J0KDAsIDAsIHdpbmRvd1NpemUud2lkdGgoKSwg
d2luZG93U2l6ZS5oZWlnaHQoKSk7CisgICAgZ2xDbGVhckNvbG9yKDEsIDEsIDEsIDEpOworICAg
IGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisKKyAgICBnbEZsdXNoKCk7Cit9CisKK3Zv
aWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVy
KEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgLy8gQ2xlYXJpbmcgZXZlcnl3
aGVyZSB3aGVuIHR1cm5pbmcgb24gb3Igb2ZmIHRoZSBsYXllciB0cmVlIHByZXZlbnRzIHVzIGZy
b20gZmxhc2hpbmcKKyAgICAvLyBvbGQgY29udGVudCBiZWZvcmUgdGhlIGZpcnN0IGZsdXNoLgor
ICAgIGNsZWFyRXZlcnl3aGVyZSgpOworCiAgICAgaWYgKCFncmFwaGljc0xheWVyKSB7Ci0gICAg
ICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIuY2xlYXIoKTsKLSAgICAgICAgbV9yb290VGV4dHVyZU1h
cHBlckxheWVyID0gMDsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgICAgIHN0b3BB
bnlQZW5kaW5nTGF5ZXJGbHVzaCgpOworCisgICAgICAgIC8vIFNocmluayB0aGUgb2Zmc2NyZWVu
IHdpbmRvdyB0byBzYXZlIG1lbW9yeSB3aGlsZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyB0
dXJuZWQgb2ZmLgorICAgICAgICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZShJbnRTaXplKDEs
IDEpKTsKKyAgICAgICAgbV9yb290TGF5ZXIgPSBudWxscHRyOworICAgICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXIgPSBudWxscHRyOworICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBu
dWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9yb290R3JhcGhpY3NMYXll
ciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBtX3Jvb3RUZXh0dXJlTWFwcGVy
TGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKTsK
LSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKLSAgICBt
X3Jvb3RHcmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9yb290R3Jh
cGhpY3NMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7Ci0gICAgbV9yb290R3JhcGhpY3NM
YXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0U2l6
ZShjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lUmVjdCgpLnNpemUo
KSk7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgJiYgIWVuYWJsZWQoKSkKKyAgICAgICAgbV9yZWRp
cmVjdGVkV2luZG93LT5yZXNpemUoZ2V0V2ViVmlld1NpemUobV93ZWJWaWV3KSk7CiAKLSAgICBH
TENvbnRleHQqIGNvbnRleHQgPSBnbENvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAg
ICAgIHJldHVybjsKKyAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFy
Y2h5LgorICAgIGluaXRpYWxpemUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5h
ZGRDaGlsZChncmFwaGljc0xheWVyKTsKIAotICAgIC8vIFRoZSBjb250ZXh0IG5lZWRzIHRvIGJl
IGFjdGl2ZSB3aGVuIGNyZWF0aW5nIHRoZSB0ZXh0dXJlIG1hcHBlci4gSXQncyBmaW5lIHRvCi0g
ICAgLy8gYXZvaWQgY2FsbGluZyBzd2FwQnVmZmVycyBoZXJlLCBiZWNhdXNlIGl0IHdpbGwganVz
dCBpbml0aWFsaXplIHNoYWRlcnMuCi0gICAgaWYgKCFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIHN0b3BBbnlQZW5kaW5nTGF5ZXJGbHVzaCgpOwog
Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRfZ2V0X2FsbG9j
YXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAgZ2xWaWV3cG9y
dCgwLCAwLCBhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7CisgICAgLy8gRklY
TUU6IFR3byBmbHVzaGVzIHNlZW0gbmVjZXNzYXJ5IHRvIGdldCB0aGUgcHJvcGVyIHJlbmRlcmlu
ZyBpbiBzb21lIGNhc2VzLiBJdCdzIHVuY2xlYXIKKyAgICAvLyBpZiB0aGlzIGlzIGEgYnVnIHdp
dGggdGhlIFJlZGlyZWN0ZWRYQ29tcG9zaXRlIHdpbmRvdyBvciB3aXRoIHRoaXMgY2xhc3MuCisg
ICAgbV9uZWVkc0V4dHJhRmx1c2ggPSB0cnVlOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwog
Ci0gICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKLSAgICBt
X3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVy
LmdldCgpKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKKyAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQgPSBnX3Rp
bWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgNTAwLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKSwgdGhpcywgMCk7CiB9
CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNjaGVkdWxlUm9vdExheWVy
UmVwYWludChjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKLSAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgaWYgKCFtX3Jv
b3RMYXllcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkgewotICAg
ICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9y
b290TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsK
KyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6cmVzaXplUm9vdExheWVyKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZXNpemVSb290TGF5ZXIoY29uc3QgSW50U2l6
ZSYgbmV3U2l6ZSkKIHsKLSAgICBpZiAoIW1fcm9vdEdyYXBoaWNzTGF5ZXIpCisgICAgaWYgKCFl
bmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Jvb3RMYXllci0+c2l6ZSgp
ID09IG5ld1NpemUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5z
ZXRTaXplKHNpemUpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgbV9yZWRpcmVjdGVkV2luZG93LT5yZXNpemUo
bmV3U2l6ZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICAvLyBJ
ZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29u
dGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3bHkg
ZXhwb3NlZCBhcmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
U2l6ZShuZXdTaXplKTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRo
KCkpIHsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNp
emUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQp
KTsKKyAgICB9CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkp
CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1Np
emUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisKKyAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KEludFBvaW50KCksIG5l
d1NpemUpKTsKKyAgICBmbHVzaEFuZFJlbmRlckxheWVycygpOworfQorCit2b2lkIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3Qg
SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHNjcm9s
bFJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4g
c3luY0xheWVyc1RpbWVvdXRDYWxsYmFjayhBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCog
Y29udGV4dCkKK2dib29sZWFuIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpsYXllckZs
dXNoVGltZXJGaXJlZENhbGxiYWNrKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBjb250
ZXh0KQogewotICAgIGNvbnRleHQtPnN5bmNMYXllcnNUaW1lb3V0KCk7CisgICAgY29udGV4dC0+
bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKLXZvaWQgQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om1hcmtGb3JTeW5jKCkKK3ZvaWQgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCiB7Ci0gICAgaWYgKG1f
c3luY1RpbWVyQ2FsbGJhY2tJZCkKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgLy8gV2UgdXNlIGEgR0xpYiB0aW1lciBiZWNhdXNlIG90aGVyd2lzZSBHVEsrIGV2
ZW50IGhhbmRsaW5nIGR1cmluZwotICAgIC8vIGRyYWdnaW5nIGNhbiBzdGFydmUgV2ViQ29yZSB0
aW1lcnMsIHdoaWNoIGhhdmUgYSBsb3dlciBwcmlvcml0eS4KLSAgICBtX3N5bmNUaW1lckNhbGxi
YWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgMCwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4oc3luY0xheWVyc1RpbWVvdXRDYWxsYmFjayksIHRoaXMs
IDApOworICAgIC8vIFdlIHVzZSBhIEdMaWIgdGltZXIgYmVjYXVzZSBvdGhlcndpc2UgR1RLKyBl
dmVudCBoYW5kbGluZyBkdXJpbmcgZHJhZ2dpbmcgY2FuCisgICAgLy8gc3RhcnZlIFdlYkNvcmUg
dGltZXJzLCB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuCisgICAgZG91YmxlIG5leHRGbHVz
aCA9IG1heChnU2NoZWR1bGVEZWxheSAtIChjdXJyZW50VGltZSgpIC0gbV9sYXN0Rmx1c2hUaW1l
KSwgMC4wKTsKKyAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRk
X2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgbmV4dEZsdXNoICogMTAwMCwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4obGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayksIHRoaXMsIDAp
OwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5ZXJzTm93
KCkKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmZsdXNoUGVuZGluZ0xheWVy
Q2hhbmdlcygpCiB7Ci0gICAgaWYgKG1fcm9vdEdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIG1fcm9v
dEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwot
Ci0gICAgY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHJldHVy
biBjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0
YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OnN5bmNMYXllcnNUaW1lb3V0KCkKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OmZsdXNoQW5kUmVuZGVyTGF5ZXJzKCkKIHsKLSAgICBtX3N5bmNUaW1lckNhbGxi
YWNrSWQgPSAwOwotICAgIHN5bmNMYXllcnNOb3coKTsKLSAgICBpZiAoIW1fcm9vdEdyYXBoaWNz
TGF5ZXIpCisgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0
b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKS0+ZGVzY2VuZGFu
dHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKLSAgICAgICAgbV9zeW5jVGltZXJDYWxs
YmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMsIDEwMDAuMCAv
IDYwLjAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHN5bmNMYXllcnNUaW1lb3V0Q2Fs
bGJhY2spLCB0aGlzLCAwKTsKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKG1fd2ViVmlldyktPm1h
aW5GcmFtZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSB8
fCAhZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZyYW1lLT52aWV3KCktPnVw
ZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKKworICAgIEdMQ29udGV4dCog
Y29udGV4dCA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+Y29udGV4dCgpOworICAgIGlmIChjb250ZXh0
ICYmICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgcmVuZGVyTGF5ZXJzVG9XaW5kb3coMCwgSW50UmVjdCgpKTsKKyAgICBtX2xhc3RGbHVzaFRp
bWUgPSBjdXJyZW50VGltZSgpOworICAgIGNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpOworCisg
ICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisKKyAgICAv
LyBJZiBpdCdzIGJlZW4gYSBsb25nIHRpbWUgc2luY2Ugd2UndmUgYWN0dWFsbHkgcGFpbnRlZCwg
d2hpY2ggbWVhbnMgdGhhdCBldmVudHMgbWlnaHQKKyAgICAvLyBiZSBzdGFydmluZyB0aGUgbWFp
biBsb29wLCB3ZSBzaG91bGQgZm9yY2UgYSBkcmF3IG5vdy4gVGhpcyBzZWVtcyB0byBwcmV2ZW50
IGRpc3BsYXkKKyAgICAvLyBsYWcgb24gaHR0cDovLzIwMTIuYmVlcmNhbXAuY29tLgorICAgIGlm
IChtX3JlZHJhd1BlbmRpbmdUaW1lICYmIGN1cnJlbnRUaW1lKCkgLSBtX3JlZHJhd1BlbmRpbmdU
aW1lID4gZ1NjaGVkdWxlRGVsYXkpCisgICAgICAgIGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVz
KGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKG1fd2ViVmlldykpLCBGQUxTRSk7Cisg
ICAgZWxzZSBpZiAoIW1fcmVkcmF3UGVuZGluZ1RpbWUpCisgICAgICAgIG1fcmVkcmF3UGVuZGlu
Z1RpbWUgPSBjdXJyZW50VGltZSgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0OjpsYXllckZsdXNoVGltZXJGaXJlZCgpCit7CisgICAgbV9sYXllckZsdXNoVGltZXJD
YWxsYmFja0lkID0gMDsKKyAgICBmbHVzaEFuZFJlbmRlckxheWVycygpOwogfQogCiB2b2lkIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKQEAgLTIwNiw5ICszNTYsMTAgQEAgdm9pZCBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqKQogCiB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpwYWlu
dENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiByZWN0VG9QYWludCkK
IHsKLSAgICBjYWlyb190KiBjciA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCk7Ci0g
ICAgY29weVJlY3RGcm9tQ2Fpcm9TdXJmYWNlVG9Db250ZXh0KG1fd2ViVmlldy0+cHJpdi0+YmFj
a2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSwgY3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludFNpemUoKSwgcmVjdFRvUGFpbnQpOworICAgIGNvbnRleHQuc2F2ZSgp
OworICAgIGNvbnRleHQuY2xpcChyZWN0VG9QYWludCk7CisgICAgY29yZShtX3dlYlZpZXcpLT5t
YWluRnJhbWUoKS0+dmlldygpLT5wYWludCgmY29udGV4dCwgcmVjdFRvUGFpbnQpOworICAgIGNv
bnRleHQucmVzdG9yZSgpOwogfQogCiBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
OjpzaG93RGVidWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5k
ZXggNDFjODQwOTI0MTg5ZDdjOGM3MDI4ZDAyNDdlZjhmOTJhYjhiMTlmZC4uNzQwZTNiYmNhNTE1
MWQwZGJjMjM0OWZmNTJhZjRhZTk1YTdhN2Y1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0xNDIsMTcgKzE0Miwx
OCBAQCB2b2lkIENocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgfQogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCgpCitzdGF0
aWMgSW50UmVjdCBnZXRXZWJWaWV3UmVjdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAg
IEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxOCwg
MCkKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQobV93ZWJWaWV3KSwg
JmFsbG9jYXRpb24pOwotI2Vsc2UKLSAgICBhbGxvY2F0aW9uID0gR1RLX1dJREdFVChtX3dlYlZp
ZXcpLT5hbGxvY2F0aW9uOwotI2VuZGlmCisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihH
VEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CiAgICAgcmV0dXJuIEludFJlY3QoYWxs
b2NhdGlvbi54LCBhbGxvY2F0aW9uLnksIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVp
Z2h0KTsKIH0KIAorRmxvYXRSZWN0IENocm9tZUNsaWVudDo6cGFnZVJlY3QoKQoreworICAgIHJl
dHVybiBnZXRXZWJWaWV3UmVjdChtX3dlYlZpZXcpOworfQorCiB2b2lkIENocm9tZUNsaWVudDo6
Zm9jdXMoKQogewogICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKG1fd2ViVmll
dykpOwpAQCAtNDE5LDEwICs0MjAsMjAgQEAgc3RhdGljIHZvaWQgY2xlYXJFdmVyeXdoZXJlSW5C
YWNraW5nU3RvcmUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY2Fpcm9fdCogY3IpCiAKIHZvaWQg
Q2hyb21lQ2xpZW50Ojp3aWRnZXRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJiBvbGRXaWRnZXRT
aXplLCBJbnRTaXplIG5ld1NpemUpCiB7Ci0gICAgV2lkZ2V0QmFja2luZ1N0b3JlKiBiYWNraW5n
U3RvcmUgPSBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS5nZXQoKTsKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQq
IGNvbXBvc2l0aW5nQ29udGV4dCA9IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQuZ2V0KCk7CisgICAgaWYgKGNvbXBvc2l0aW5nQ29udGV4dC0+ZW5hYmxlZCgp
KSB7CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQtPnJlc2l6ZVJvb3RMYXllcihuZXdTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgogCiAgICAgLy8gR3JvdyB0aGUgYmFja2luZyBzdG9yZSBieSBhdCBsZWFzdCAxLjUgdGlt
ZXMgdGhlIGN1cnJlbnQgc2l6ZS4gVGhpcyBwcmV2ZW50cwogICAgIC8vIGxvdHMgb2YgdW5uZWNl
c3NhcnkgYWxsb2NhdGlvbnMgZHVyaW5nIGFuIG9wYXF1ZSByZXNpemUuCisgICAgV2lkZ2V0QmFj
a2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS5n
ZXQoKTsKKyAgICBpZiAoYmFja2luZ1N0b3JlICYmIG9sZFdpZGdldFNpemUgPT0gbmV3U2l6ZSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGJhY2tpbmdTdG9yZSkgewogICAgICAgICBjb25z
dCBJbnRTaXplJiBvbGRTaXplID0gYmFja2luZ1N0b3JlLT5zaXplKCk7CiAgICAgICAgIGlmIChu
ZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpCkBAIC01MjYsMjAgKzUzNyw2IEBAIHN0
YXRpYyB2b2lkIHBhaW50V2ViVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBGcmFtZSogZnJh
bWUsIFJlZ2lvbiBkaXJ0eVJlZ2lvCiAgICAgZ2MucmVzdG9yZSgpOwogfQogCi12b2lkIENocm9t
ZUNsaWVudDo6aW52YWxpZGF0ZVdpZGdldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQqIGFjQ29udGV4dCA9IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQuZ2V0KCk7Ci0gICAgaWYgKGFjQ29udGV4dC0+ZW5hYmxlZCgpKSB7Ci0gICAg
ICAgIGFjQ29udGV4dC0+c2NoZWR1bGVSb290TGF5ZXJSZXBhaW50KHJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RL
X1dJREdFVChtX3dlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
eCgpLCByZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCiB2b2lkIENocm9tZUNsaWVudDo6cGVyZm9ybUFsbFBl
bmRpbmdTY3JvbGxzKCkKIHsKICAgICBpZiAoIW1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3Jl
KQpAQCAtNTQ5LDcgKzU0Niw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpwZXJmb3JtQWxsUGVuZGlu
Z1Njcm9sbHMoKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWN0c1RvU2Nyb2xsLnNp
emUoKTsgaSsrKSB7CiAgICAgICAgIEludFJlY3QmIHNjcm9sbFJlY3QgPSBtX3JlY3RzVG9TY3Jv
bGxbaV07CiAgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLT5zY3JvbGwoc2Ny
b2xsUmVjdCwgbV9zY3JvbGxPZmZzZXRzW2ldKTsKLSAgICAgICAgaW52YWxpZGF0ZVdpZGdldFJl
Y3Qoc2Nyb2xsUmVjdCk7CisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19X
SURHRVQobV93ZWJWaWV3KSwgc2Nyb2xsUmVjdC54KCksIHNjcm9sbFJlY3QueSgpLCBzY3JvbGxS
ZWN0LndpZHRoKCksIHNjcm9sbFJlY3QuaGVpZ2h0KCkpOwogICAgIH0KIAogICAgIG1fcmVjdHNU
b1Njcm9sbC5jbGVhcigpOwpAQCAtNTg1LDEyICs1ODIsNyBAQCB2b2lkIENocm9tZUNsaWVudDo6
cGFpbnQoV2ViQ29yZTo6VGltZXI8Q2hyb21lQ2xpZW50PiopCiAgICAgfQogCiAgICAgY29uc3Qg
SW50UmVjdCYgcmVjdCA9IG1fZGlydHlSZWdpb24uYm91bmRzKCk7Ci0gICAgaW52YWxpZGF0ZVdp
ZGdldFJlY3QocmVjdCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
bV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+c3luY0xheWVy
c05vdygpOwotICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQtPnJlbmRlckxheWVyc1RvV2luZG93KDAsIHJlY3QpOwotI2VuZGlmCisgICAgZ3RrX3dpZGdl
dF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChtX3dlYlZpZXcpLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAKICAgICBtX2RpcnR5UmVnaW9uID0g
UmVnaW9uKCk7CiAgICAgbV9sYXN0RGlzcGxheVRpbWUgPSBjdXJyZW50VGltZSgpOwpAQCAtNjA2
LDYgKzU5OCwxMSBAQCB2b2lkIENocm9tZUNsaWVudDo6cGFpbnQoV2ViQ29yZTo6VGltZXI8Q2hy
b21lQ2xpZW50PiopCiAKIHZvaWQgQ2hyb21lQ2xpZW50Ojpmb3JjZVBhaW50KCkKIHsKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKG1fd2ViVmlldy0+cHJpdi0+YWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPmVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
I2VuZGlmCisKICAgICBtX2ZvcmNlUGFpbnQgPSB0cnVlOwogICAgIHBhaW50KDApOwogICAgIG1f
Zm9yY2VQYWludCA9IGZhbHNlOwpAQCAtNjE3LDYgKzYxNCwxNCBAQCB2b2lkIENocm9tZUNsaWVu
dDo6aW52YWxpZGF0ZVJvb3RWaWV3KGNvbnN0IEludFJlY3QmLCBib29sIGltbWVkaWF0ZSkKIAog
dm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KGNvbnN0IElu
dFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQogeworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogYWNDb250
ZXh0ID0gbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5nZXQo
KTsKKyAgICBpZiAoYWNDb250ZXh0LT5lbmFibGVkKCkpIHsKKyAgICAgICAgYWNDb250ZXh0LT5z
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSh1cGRhdGVSZWN0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZSh1cGRhdGVSZWN0KTsKQEAg
LTYyNSwxMiArNjMwLDM0IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNB
bmRSb290Vmlldyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sCiAKIHZvaWQgQ2hyb21l
Q2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNGb3JTbG93U2Nyb2xsKGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QsIGJvb2wgaW1tZWRpYXRlKQogewotICAgIGludmFsaWRhdGVDb250ZW50c0FuZFJv
b3RWaWV3KHVwZGF0ZVJlY3QsIGltbWVkaWF0ZSk7CiAgICAgbV9hZGp1c3RtZW50V2F0Y2hlci51
cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzTGF0ZXIoKTsKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogYWND
b250ZXh0ID0gbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5n
ZXQoKTsKKyAgICBpZiAoYWNDb250ZXh0LT5lbmFibGVkKCkpIHsKKyAgICAgICAgYWNDb250ZXh0
LT5zZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSh1cGRhdGVSZWN0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9v
dFZpZXcodXBkYXRlUmVjdCwgaW1tZWRpYXRlKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnQ6OnNj
cm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBj
b25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKKyAgICBtX2FkanVzdG1lbnRXYXRjaGVyLnVwZGF0
ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnNMYXRlcigpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBjb21wb3Np
dGluZ0NvbnRleHQgPSBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0LmdldCgpOworICAgIGlmIChjb21wb3NpdGluZ0NvbnRleHQtPmVuYWJsZWQoKSkgeworICAg
ICAgICBBU1NFUlQoIXJlY3RUb1Njcm9sbC5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoIWRl
bHRhLmlzRW1wdHkoKSk7CisKKyAgICAgICAgY29tcG9zaXRpbmdDb250ZXh0LT5zY3JvbGxOb25D
b21wb3NpdGVkQ29udGVudHMocmVjdFRvU2Nyb2xsLCBkZWx0YSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKwogICAgIG1fcmVjdHNUb1Njcm9sbC5hcHBlbmQocmVjdFRvU2Nyb2xs
KTsKICAgICBtX3Njcm9sbE9mZnNldHMuYXBwZW5kKGRlbHRhKTsKIApAQCAtNjU3LDggKzY4NCw2
IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgZGVsdGEsIGNvbnN0
IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uCiAKICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKHNj
cm9sbFJlcGFpbnRSZWdpb24pOwogICAgIG1fZGlzcGxheVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
LQotICAgIG1fYWRqdXN0bWVudFdhdGNoZXIudXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFy
c0xhdGVyKCk7CiB9CiAKIEludFJlY3QgQ2hyb21lQ2xpZW50Ojpyb290Vmlld1RvU2NyZWVuKGNv
bnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CkBAIC05NjYsMTcgKzk5MSwzMiBAQCB2b2lkIENocm9t
ZUNsaWVudDo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqKQogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgQ2hyb21lQ2xpZW50OjphdHRhY2hS
b290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcikK
IHsKLSAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5h
dHRhY2hSb290R3JhcGhpY3NMYXllcihyb290TGF5ZXIpOworICAgIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0KiBjb250ZXh0ID0gbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dC5nZXQoKTsKKyAgICBib29sIHR1cm5pbmdPZmZDb21wb3NpdGluZyA9ICFy
b290TGF5ZXIgJiYgY29udGV4dC0+ZW5hYmxlZCgpOworICAgIGJvb2wgdHVybmluZ09uQ29tcG9z
aXRpbmcgPSByb290TGF5ZXIgJiYgIWNvbnRleHQtPmVuYWJsZWQoKTsKKworICAgIGNvbnRleHQt
PnNldFJvb3RDb21wb3NpdGluZ0xheWVyKHJvb3RMYXllcik7CisKKyAgICBpZiAodHVybmluZ09u
Q29tcG9zaXRpbmcpIHsKKyAgICAgICAgbV9kaXNwbGF5VGltZXIuc3RvcCgpOworICAgICAgICBt
X3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZSA9IFdlYkNvcmU6OldpZGdldEJhY2tpbmdTdG9y
ZTo6Y3JlYXRlKEdUS19XSURHRVQobV93ZWJWaWV3KSwgSW50U2l6ZSgxLCAxKSk7CisgICAgfQor
CisgICAgaWYgKHR1cm5pbmdPZmZDb21wb3NpdGluZykgeworICAgICAgICBtX3dlYlZpZXctPnBy
aXYtPmJhY2tpbmdTdG9yZSA9IFdlYkNvcmU6OldpZGdldEJhY2tpbmdTdG9yZTo6Y3JlYXRlKEdU
S19XSURHRVQobV93ZWJWaWV3KSwgZ2V0V2ViVmlld1JlY3QobV93ZWJWaWV3KS5zaXplKCkpOwor
ICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV93ZWJW
aWV3LT5wcml2LT5iYWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpKSk7CisgICAgICAgIGNsZWFy
RXZlcnl3aGVyZUluQmFja2luZ1N0b3JlKG1fd2ViVmlldywgY3IuZ2V0KCkpOworICAgIH0KIH0K
IAogdm9pZCBDaHJvbWVDbGllbnQ6OnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRp
b24oKQogewotICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQtPm1hcmtGb3JTeW5jKCk7CisgICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dC0+c2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xp
ZW50OjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkKIHsKLSAgICBtX3dlYlZpZXctPnBy
aXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5tYXJrRm9yU3luYygpOworICAgIG1f
d2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnNjaGVkdWxlTGF5
ZXJGbHVzaCgpOwogfQogCiBDaHJvbWVDbGllbnQ6OkNvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIENo
cm9tZUNsaWVudDo6YWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmggYi9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAppbmRleCBl
NWUyZmExZWIwMjJmYjY0MWRmMzZkMmFjZWIxMmJkMGJjZTQzNDdhLi4yODRiZGFhMzY2MDZhZTE1
YWJiYzE1NmIzZWU4ZTIxNWQ3MmMxZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaApAQCAtMTc5LDcgKzE3OSw2IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogICAgICAgICBkb3VibGUgbV9sYXN0RGlzcGxheVRpbWU7CiAgICAgICAg
IHVuc2lnbmVkIGludCBtX3JlcGFpbnRTb29uU291cmNlSWQ7CiAKLSAgICAgICAgdm9pZCBpbnZh
bGlkYXRlV2lkZ2V0UmVjdChjb25zdCBJbnRSZWN0Jik7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQogICAgICAgICBSZWZQdHI8RWxlbWVudD4gbV9mdWxsU2NyZWVuRWxlbWVudDsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDk3MTc4
MDYzN2FmMjdhNDAxNGIwNDVhN2I1ZGZkNzQzN2Q4ZDIwMWMuLmE1MzY4OTQ0ZDNmZmZmMmNjNmYz
YTEzNDM5MTQ3NDdjN2EzZmNhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAKQEAgLTY3OSw4ICs2NzksMTAgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93
ZWJfdmlld19kcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKIAogICAgIFdlYktp
dFdlYlZpZXdQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCktPnByaXY7CiAj
aWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGlmIChwcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dC0+cmVuZGVyTGF5ZXJzVG9XaW5kb3coY3IsIGNsaXBSZWN0KSkKKyAgICBpZiAo
cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJlbmRlckxheWVyc1RvV2luZG93
KGNyLCBjbGlwUmVjdCkpIHsKKyAgICAgICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3Zp
ZXdfcGFyZW50X2NsYXNzKS0+ZHJhdyh3aWRnZXQsIGNyKTsKICAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgIH0KICNlbmRpZgogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlX2xpc3RfdCogcmVjdExpc3Qg
PSBjYWlyb19jb3B5X2NsaXBfcmVjdGFuZ2xlX2xpc3QoY3IpOwpAQCAtODc1LDE1ICs4NzcsMTYg
QEAgc3RhdGljIHZvaWQgcmVzaXplV2ViVmlld0Zyb21BbGxvY2F0aW9uKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIEd0a0FsbG9jYXRpb24qIGEKICAgICBXZWJLaXQ6OkNocm9tZUNsaWVudCogY2hy
b21lQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpDaHJvbWVDbGllbnQqPihwYWdlLT5jaHJv
bWUoKS0+Y2xpZW50KCkpOwogICAgIGNocm9tZUNsaWVudC0+d2lkZ2V0U2l6ZUNoYW5nZWQob2xk
U2l6ZSwgSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KSk7CiAg
ICAgY2hyb21lQ2xpZW50LT5hZGp1c3RtZW50V2F0Y2hlcigpLT51cGRhdGVBZGp1c3RtZW50c0Zy
b21TY3JvbGxiYXJzKCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
d2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnJlc2l6ZVJvb3RM
YXllcihJbnRTaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpKTsKLSNl
bmRpZgogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2l6ZV9hbGxvY2F0ZShHdGtX
aWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKIHsKKyAgICBHdGtBbGxv
Y2F0aW9uIG9sZEFsbG9jYXRpb247CisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRn
ZXQsICZvbGRBbGxvY2F0aW9uKTsKKwogICAgIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92
aWV3X3BhcmVudF9jbGFzcyktPnNpemVfYWxsb2NhdGUod2lkZ2V0LCBhbGxvY2F0aW9uKTsKKyAg
ICBpZiAoYWxsb2NhdGlvbi0+d2lkdGggPT0gb2xkQWxsb2NhdGlvbi53aWR0aCAmJiBhbGxvY2F0
aW9uLT5oZWlnaHQgPT0gb2xkQWxsb2NhdGlvbi5oZWlnaHQpCisgICAgICAgIHJldHVybjsKIAog
ICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKICAg
ICBpZiAoIWd0a193aWRnZXRfZ2V0X21hcHBlZCh3aWRnZXQpKSB7CkBAIC0xMDAzLDEwICsxMDA2
LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3JlYWxpemUoR3RrV2lkZ2V0KiB3aWRn
ZXQpCiAjZW5kaWYKICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGdka193aW5kb3dfbmV3KGd0a193
aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cod2lkZ2V0KSwgJmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNf
bWFzayk7CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJf
VklFVyh3aWRnZXQpLT5wcml2OwotICAgIHByaXYtPmhhc05hdGl2ZVdpbmRvdyA9IGdka193aW5k
b3dfZW5zdXJlX25hdGl2ZSh3aW5kb3cpOwotI2VuZGlmCiAgICAgZ3RrX3dpZGdldF9zZXRfd2lu
ZG93KHdpZGdldCwgd2luZG93KTsKICAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEod2luZG93
LCB3aWRnZXQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL0xheWVyVHJlZUhvc3RHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcAppbmRleCAxYjkxZGU4NGYxMmIzN2M3NWRl
YjZkZjA0NjNhYmExODQxZGQ1NzkxLi5hNDEyYTg1MDA5ZmM5M2Q4NzA3NGM3YjMyNjVkYmQ5ZDBk
MWQ5ZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L0xheWVyVHJlZUhvc3RHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgR0xDb250ZXh0
KiBMYXllclRyZWVIb3N0R3RrOjpnbENvbnRleHQoKQogICAgIGlmICghd2luZG93SGFuZGxlKQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29u
dGV4dEZvcldpbmRvdyh3aW5kb3dIYW5kbGUsIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7
CisgICAgbV9jb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHdpbmRv
d0hhbmRsZSwgR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4dCgpLCBHTENvbnRleHQ6OlNpbmdsZUJ1
ZmZlcik7CiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvQ2hh
bmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDg3N2JiNTY2ZWFlMmY0NDFhNGIzOTMzZGU1NjY1NmVh
N2M1YmI4MTYuLjZlZWFiZjBmOGU0ZjI4OTU4NTI3ZDQyMzc0MDUxMTUyNjFkNjRhN2UgMTAwNjQ0
Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0w
OC0xNiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dUS10gVXNpbmcgYSBuYXRpdmUgd2luZG93IGZvciB0aGUgV2ViVmlldyBicmVha3MgR3RrT3Zl
cmxheQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAw
ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNv
bmZpZ3VyZS5hYzogUGFyc2UgeGNvbXBvc2l0ZSBwa2ctY29uZmlnIGZpbGUgZHVyaW5nIGNvbmZp
Z3VyYXRpb24uCisKIDIwMTItMDgtMTIgIExvw69jIFlodWVsICA8bG9pYy55aHVlbEBzb2Z0YXRo
b21lLmNvbT4KIAogICAgICAgICBbUXRdIE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgd2l0aG91
dCBRdFRlc3QvUXRQcmludFN1cHBvcnQKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZp
Z3VyZS5hYwppbmRleCA3ZWE1Yjk1ZWViZjc0MjBlYzg5OGEzNTU5ZjMxMWMyMDI4YzQ1Y2YxLi5m
OTQxZDU3NzY4ZWU3YTQwZjVmY2FiYmIwMjkyZTMxZDE5MTZlNmIyIDEwMDY0NAotLS0gYS9jb25m
aWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC01NjUsNiArNTY1LDEyIEBAIEFDX0FSR19X
SVRIKGFjY2VsZXJhdGlvbl9iYWNrZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkK
IEFDX01TR19SRVNVTFQoWyR3aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5kXSkKIAoraWYgdGVzdCAi
JHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tlbmQiID0gIm9wZW5nbCI7IHRoZW4KKyAgICBQS0dfQ0hF
Q0tfTU9EVUxFUyhbWENPTVBPU0lURV0sIFt4Y29tcG9zaXRlXSk7CisgICAgQUNfU1VCU1QoWENP
TVBPU0lURV9DRkxBR1MpCisgICAgQUNfU1VCU1QoWENPTVBPU0lURV9MSUJTKQorZmkKKwogIyBP
cGVuR0wgaXMgdHVybmVkIG9uIGJ5IGRlZmF1bHQgKGFsb25nIHdpdGggV2ViR0wgYW5kIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nKSwgYnV0IGlmCiAjIENsdXR0ZXIgaXMgY2hvc2VuIGFzIHRoZSBh
Y2NlbGVyYXRlZCBkcmF3aW5nIGJhY2tlbmQsIHdlIHdhbnQgdG8gZGlzYWJsZSBpdC4gQ09HTCBk
b2VzIAogIyBub3QgcGxheSB3ZWxsIHdpdGggT3BlbkdMLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159694</attachid>
            <date>2012-08-21 08:20:40 -0700</date>
            <delta_ts>2012-08-21 11:33:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90085-20120821082039.patch</filename>
            <type>text/plain</type>
            <size>55799</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDY2M2E0NmQzYzdmYWQy
NDM5MDE2YzVmY2EzYWY4Yjc0NzdkYmZhYS4uNzIwZDg1Y2Q3YmExMjJkYmQ2OTNkYTE3ZTRkNGYw
MWJhZmZlNjg0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTIxICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2lu
ZyBhIG5hdGl2ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGhpcyB3aWxsIGJlIGNvdmVyZWQgYnkgcGl4ZWwgdGVzdCBmb3IgYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgd2hlbiB0aGV5IGFyZSBhY3RpdmF0ZWQuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5saXN0LmFtOiBBZGQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cgZmlsZXMgdG8g
dGhlIHNvdXJjZSBsaXN0LgorICAgICAgICBNYWtlIGEgbmV3IHNlY3Rpb24gZm9yIEdMWCBzcGVj
aWZpYyBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xY
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSk6IEV4
cG9zZSBzaGFyZWREaXNwbGF5IGFzIGEgc3RhdGljIG1ldGhvZAorICAgICAgICBzbyB0aGF0IGl0
IGNhbiBiZSBjYWxsZWQgYnkgb3RoZXIgWDExIHNwZWNpZmljIGNvZGUuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBBZGRlZC4gQW4gaW1wbGVt
ZW50YXRpb24gb2YgYSBHTCBzdXJmYWNlCisgICAgICAgIHRoYXQgcmVuZGVycyB0byBhbiBYLXdp
bmRvdyB3aGljaCByZWRpcmVjdHMgdG8gYSBwaXhtYXAuCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg6IEFkZGVkLgorCiAyMDEyLTA4LTIxICBJbHlh
IFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBOTUk6IHJlbmFtZSBhZGRNZW1iZXIgZm9yIHN0cmluZ3MgYW5kIEtVUkwgdG8gYWRkSW5z
dHJ1bWVudGVkTWVtYmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDUxMWEwODcxYTQxN2E3ZWU0MmQ2
YmIyYWQ1MzU1YzBkNmFiMTQ2MDcuLjFkYWY4OWU0YTRkNzliYWE1YTI2YjBmMjNiZWY1OWRjNWE1
MGE5MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMi0wOC0yMSAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXNp
bmcgYSBuYXRpdmUgd2luZG93IGZvciB0aGUgV2ViVmlldyBicmVha3MgR3RrT3ZlcmxheQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAwODUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXdyaXRlIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0IGZvciBUZXh0dXJlTWFwcGVyR0wgdG8gYmUgbW9yZSBz
aW1pbGFyIHRvCisgICAgICAgIHRoZSBXZWJLaXQyIExheWVyVHJlZUhvc3QgYW5kIHN3aXRjaCBm
cm9tIHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgd2lkZ2V0IHdpbmRvdworICAgICAgICB0byBh
IHdpbmRvdyByZWRpcmVjdGVkIHRvIGEgcGl4bWFwIHZpYSBYQ29tcG9zaXRlLiBUaGUgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQKKyAgICAgICAgbm93IGhhbmRsZXMgcGFpbnRpbmcgdGhl
IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgaXRzZWxmIGFuZCBubyBsb25nZXIgcmVsaWVzIG9uIHRo
ZQorICAgICAgICBDaHJvbWVDbGllbnQgYmFja2luZyBzdG9yZS4KKworICAgICAgICBUaGlzIGZp
eGVzIGlzc3VlcyB3aXRoIHVzaW5nIEd0a092ZXJsYXkgV2ViS2l0V2ViVmlldyBhcyB3ZWxsIGFz
IG1ha2luZyBpdCBwb3NzaWJsZQorICAgICAgICB0byBydW4gcGl4ZWwgdGVzdHMgd2l0aCBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyB0dXJuZWQgb24uCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oOgorICAgICAgICAoQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0R0wuY3BwOgorICAgICAgICBSZW5hbWUgc29tZSBtZXRob2RzIHRv
IG1ha2UgdGhlbSBtb3JlIHNpbWlsYXIgdG8gTGF5ZXJUcmVlSG9zdC4gTm93IHdlIHdhaXQgdG8g
cmVuZGVyCisgICAgICAgIHRoZSBPcGVuR0wgY29udGV4dCB0byB0aGUgd2luZG93IHVudGlsIHRo
ZSB3aWRnZXQncyBkcmF3IHNpZ25hbC4gRXNjYXBlIG91dCBvZiBhbGwKKyAgICAgICAgbWV0aG9k
cyBlYXJseSBpZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBkaXNhYmxlZC4KKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOiBBbHdheXMgY2hlY2sgaWYgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgb24KKyAgICAgICAgYmVmb3JlIGNhbGxpbmcgaW50byBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCBtZXRob2RzLiBXaGVuIEFDIGlzIG9uLCBuZXZl
ciBwYWludAorICAgICAgICB0aGUgYmFja2luZyBzdG9yZSwgZGVmZXJyaW5nIGltbWVkaWF0ZWx5
IHRvIHRoZSBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC4gV2hlbgorICAgICAgICBBQyBp
cyB0dXJuZWQgb24gdGhlIGJhY2tpbmcgc3RvcmUgbm93IHNocmlua3MgdG8gYSBzbWFsbCBzaXpl
IHRvIHNhdmUgbWVtb3J5LgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAg
ICAgICAgKHJlc2l6ZVdlYlZpZXdGcm9tQWxsb2NhdGlvbik6IENocm9tZUNsaWVudCBpcyBub3cg
cmVzcG9uc2libGUgZm9yIHRhbGtpbmcgdG8gdGhlCisgICAgICAgIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0IGRpcmVjdGx5LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NpemVfYWxs
b2NhdGUpOiBFeGl0IGVhcmx5IGlmIHRoZSBhbGxvY2F0aW9uIGlzIG5vdCBhIHJlc2l6ZS4gVGhp
cworICAgICAgICBtYWtlcyBzb21lIGRlZXBlciBsb2dpYyBhIGJpdCBzaW1wbGVyIGFuZCBhdm9p
ZHMgYWNjaWRlbnRhbGx5IGRvaW5nIHRvbyBtdWNoIHdvcmsgZm9yCisgICAgICAgIHdpZGdldCBt
b3ZlbWVudC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19yZWFsaXplKTogV2Ugbm8gbG9uZ2Vy
IG5lZWQgYSBuYXRpdmUgd2luZG93LgorCiAyMDEyLTA4LTE1ICBKb2FubWFyaWUgRGlnZ3MgIDxq
ZGlnZ3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR3RrXSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zm
c2V0KCkgZmFpbHMgZm9yIHRhYmxlIGNlbGxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGY5ZWFi
MjQ0MTg2NTNlZDUzMjk2ZGJmMjBiOTM2YTdkM2U1OGI0YmYuLjM5NDA5ODYxNmU1NWQ2YTI5Yzc0
MWZmMGY5OWYwODczYmE1NzQ1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDU2LDYgKzEw
NTYsNyBAQCBsaWJXZWJDb3JlR3RrX2xhX0NQUEZMQUdTID0gXAogCSQoTElCWFNMVF9DRkxBR1Mp
IFwKIAkkKFNRTElURTNfQ0ZMQUdTKSBcCiAJJChVTklDT0RFX0NGTEFHUykgXAorCSQoWENPTVBP
U0lURV9DRkxBR1MpIFwKIAkkKFhSRU5ERVJfQ0ZMQUdTKSBcCiAJJChYVF9DRkxBR1MpCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDJiYzk4Nzk3ZjE3ZTg0YWQxZDc4Yjg1MTli
Y2ViYTNhYjEzOTNhNjMuLmQ0ODcyNzE2NmZjODAyNTk0ODdlYWJjM2YzNDE4Yzc4ZDJhZGE0MWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTg3NSw2ICs1ODc1LDggQEAgd2Vi
Y29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HTENvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HTENvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdl
dEJhY2tpbmdTdG9yZVgxMS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRp
cmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L2d0ay9ndGsyeHRiaW4uYyBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0Ymlu
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRl
eHQuY3BwCmluZGV4IDZlYjk5MDRlY2IyYTI2ZDA3OWEwMWJlYTdkY2JmZGUzNjVmYjk3NDcuLjcz
MDQ2M2FjZTE5OGU4NmIwNzhlZWE0NmJhMjRmNjNhNTZmYWJlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmNwcApAQCAtMzYs
MTAgKzM2LDEwIEBAIEdMQ29udGV4dCogR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4dCgpCiAgICAg
cmV0dXJuIHNoYXJpbmcuZ2V0KCk7CiB9CiAKLVBhc3NPd25QdHI8R0xDb250ZXh0PiBHTENvbnRl
eHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3codWludDY0X3Qgd2luZG93SGFuZGxlLCBHTENvbnRl
eHQqIHNoYXJpbmdDb250ZXh0KQorUGFzc093blB0cjxHTENvbnRleHQ+IEdMQ29udGV4dDo6Y3Jl
YXRlQ29udGV4dEZvcldpbmRvdyh1aW50NjRfdCB3aW5kb3dIYW5kbGUsIEdMQ29udGV4dCogc2hh
cmluZ0NvbnRleHQsIEJ1ZmZlcmluZ1R5cGUgYnVmZmVyaW5nVHlwZSkKIHsKICNpZiBVU0UoR0xY
KQotICAgIHJldHVybiBHTENvbnRleHRHTFg6OmNyZWF0ZUNvbnRleHQod2luZG93SGFuZGxlLCBz
aGFyaW5nQ29udGV4dCk7CisgICAgcmV0dXJuIEdMQ29udGV4dEdMWDo6Y3JlYXRlQ29udGV4dCh3
aW5kb3dIYW5kbGUsIHNoYXJpbmdDb250ZXh0LCBidWZmZXJpbmdUeXBlKTsKICNlbmRpZgogICAg
IHJldHVybiBudWxscHRyOwogfQpAQCAtNTEsNyArNTEsNyBAQCBHTENvbnRleHQ6OkdMQ29udGV4
dCgpCiBQYXNzT3duUHRyPEdMQ29udGV4dD4gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250
ZXh0KEdMQ29udGV4dCogc2hhcmluZykKIHsKICNpZiBVU0UoR0xYKQotICAgIHJldHVybiBHTENv
bnRleHRHTFg6OmNyZWF0ZUNvbnRleHQoMCwgc2hhcmluZyk7CisgICAgcmV0dXJuIEdMQ29udGV4
dEdMWDo6Y3JlYXRlQ29udGV4dCgwLCBzaGFyaW5nLCBTaW5nbGVCdWZmZXIpOwogI2VuZGlmCiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dM
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250
ZXh0LmgKaW5kZXggYzIzYTQ2Y2YxMzMwMmM0OGVkMGNiZTAzYjM1Y2I1NWE2MWU5NDgyYy4uZjY2
YjA3MjdiYmJhNWMzNDk1NDJlMGU3MTgyZjcyYzA4MzRhYTVhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmgKQEAgLTMwLDcgKzMw
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xDb250ZXh0IHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShHTENvbnRleHQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PEdMQ29udGV4dD4gY3JlYXRlQ29udGV4dEZvcldpbmRvdyh1aW50NjRfdCB3aW5kb3dIYW5kbGUs
IEdMQ29udGV4dCogc2hhcmluZ0NvbnRleHQpOworICAgIGVudW0gQnVmZmVyaW5nVHlwZSB7IERv
dWJsZUJ1ZmZlciwgU2luZ2xlQnVmZmVyIH07CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxHTENv
bnRleHQ+IGNyZWF0ZUNvbnRleHRGb3JXaW5kb3codWludDY0X3Qgd2luZG93SGFuZGxlLCBHTENv
bnRleHQqIHNoYXJpbmdDb250ZXh0LCBCdWZmZXJpbmdUeXBlKTsKICAgICBzdGF0aWMgUGFzc093
blB0cjxHTENvbnRleHQ+IGNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoR0xDb250ZXh0KiBzaGFyaW5n
ID0gMCk7CiAgICAgc3RhdGljIEdMQ29udGV4dCogZ2V0Q3VycmVudCgpOwogICAgIHN0YXRpYyBH
TENvbnRleHQqIHNoYXJpbmdDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwCmluZGV4IDk0OTZmYzkxYWYzMTNk
MDFiZDQwZTliYjllMzRhMDg2YjJjMTYxNTIuLjA0ZjVmODUzOTM4YWQ5NTYwNmE3NDgyODkyYjJj
NDMyOTRlODZhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dseC9HTENvbnRleHRHTFguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dseC9HTENvbnRleHRHTFguY3BwCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIC8vIGJlY2F1c2UgaXQgbWlnaHQgbGVhZCB0byBjcmFzaGVzIGluIHNvbWUgZHJpdmVy
cyAoZmdscngpLiBXZSB1c2UgYSBzaGFyZWQgZGlzcGxheQogLy8gcG9pbnRlciBoZXJlLgogc3Rh
dGljIERpc3BsYXkqIGdTaGFyZWREaXNwbGF5ID0gMDsKLXN0YXRpYyBEaXNwbGF5KiBzaGFyZWRE
aXNwbGF5KCkKK0Rpc3BsYXkqIEdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSgpCiB7CiAgICAg
aWYgKCFnU2hhcmVkRGlzcGxheSkKICAgICAgICAgZ1NoYXJlZERpc3BsYXkgPSBYT3BlbkRpc3Bs
YXkoMCk7CkBAIC04OSwyMiArODksMzMgQEAgdm9pZCBHTENvbnRleHRHTFg6OmNsZWFudXBBY3Rp
dmVDb250ZXh0c0F0RXhpdCgpCiAgICAgZ1NoYXJlZERpc3BsYXkgPSAwOwogfQogCi1QYXNzT3du
UHRyPEdMQ29udGV4dEdMWD4gR0xDb250ZXh0R0xYOjpjcmVhdGVXaW5kb3dDb250ZXh0KFhJRCB3
aW5kb3csIEdMQ29udGV4dCogc2hhcmluZ0NvbnRleHQpCitQYXNzT3duUHRyPEdMQ29udGV4dEdM
WD4gR0xDb250ZXh0R0xYOjpjcmVhdGVXaW5kb3dDb250ZXh0KFhJRCB3aW5kb3csIEdMQ29udGV4
dCogc2hhcmluZ0NvbnRleHQsIEJ1ZmZlcmluZ1R5cGUgYnVmZmVyaW5nVHlwZSkKIHsKICAgICBE
aXNwbGF5KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOwogICAgIFhXaW5kb3dBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXM7CiAgICAgaWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhkaXNwbGF5LCB3aW5k
b3csICZhdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBYVmlzdWFs
SW5mbyB2aXN1YWxJbmZvOwotICAgIHZpc3VhbEluZm8udmlzdWFsaWQgPSBYVmlzdWFsSURGcm9t
VmlzdWFsKGF0dHJpYnV0ZXMudmlzdWFsKTsKKyAgICBpbnQgZnJhbWVidWZmZXJBdHRyaWJ1dGVz
W10gPSB7CisgICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfV0lORE9XX0JJVCwKKyAgICAg
ICAgR0xYX0RPVUJMRUJVRkZFUiwgYnVmZmVyaW5nVHlwZSA9PSBEb3VibGVCdWZmZXIgPyBUcnVl
IDogRmFsc2UsCisgICAgICAgIEdMWF9SRU5ERVJfVFlQRSwgR0xYX1JHQkFfQklULAorICAgICAg
ICBHTFhfUkVEX1NJWkUsIDEsCisgICAgICAgIEdMWF9HUkVFTl9TSVpFLCAxLAorICAgICAgICBH
TFhfQkxVRV9TSVpFLCAxLAorICAgICAgICBHTFhfU1RFTkNJTF9TSVpFLCAxLAorICAgICAgICBO
b25lCisgICAgfTsKIAotICAgIGludCBudW1SZXR1cm5lZCA9IDA7Ci0gICAgWFZpc3VhbEluZm8q
IHZpc3VhbEluZm9MaXN0ID0gWEdldFZpc3VhbEluZm8oZGlzcGxheSwgVmlzdWFsSURNYXNrLCAm
dmlzdWFsSW5mbywgJm51bVJldHVybmVkKTsKKyAgICBpbnQgbnVtYmVyUmV0dXJuZWQgPSAwOwor
ICAgIEdMWEZCQ29uZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcoZGlzcGxheSwgRGVm
YXVsdFNjcmVlbihkaXNwbGF5KSwgZnJhbWVidWZmZXJBdHRyaWJ1dGVzLCAmbnVtYmVyUmV0dXJu
ZWQpOworCisgICAgaWYgKCFudW1iZXJSZXR1cm5lZCB8fCAhY29uZmlncykKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBHTFhDb250ZXh0IGdseFNoYXJpbmdDb250ZXh0ID0gc2hhcmlu
Z0NvbnRleHQgPyBzdGF0aWNfY2FzdDxHTENvbnRleHRHTFgqPihzaGFyaW5nQ29udGV4dCktPm1f
Y29udGV4dCA6IDA7Ci0gICAgR0xYQ29udGV4dCBjb250ZXh0ID0gZ2xYQ3JlYXRlQ29udGV4dChk
aXNwbGF5LCB2aXN1YWxJbmZvTGlzdCwgZ2x4U2hhcmluZ0NvbnRleHQsIFRydWUpOwotICAgIFhG
cmVlKHZpc3VhbEluZm9MaXN0KTsKKyAgICBHTFhDb250ZXh0IGNvbnRleHQgPSBnbFhDcmVhdGVO
ZXdDb250ZXh0KGRpc3BsYXksIGNvbmZpZ3NbMF0sIEdMWF9SR0JBX1RZUEUsIGdseFNoYXJpbmdD
b250ZXh0LCBUcnVlKTsKKyAgICBYRnJlZShjb25maWdzKTsKIAogICAgIGlmICghY29udGV4dCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xOTgsNyArMjA5LDcgQEAgUGFzc093blB0cjxH
TENvbnRleHRHTFg+IEdMQ29udGV4dEdMWDo6Y3JlYXRlUGl4bWFwQ29udGV4dChHTFhDb250ZXh0
IHNoYXJpbmdDb24KICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdMQ29udGV4dEdMWChjb250ZXh0
LCBwaXhtYXAsIGdseFBpeG1hcCkpOwogfQogCi1QYXNzT3duUHRyPEdMQ29udGV4dEdMWD4gR0xD
b250ZXh0R0xYOjpjcmVhdGVDb250ZXh0KFhJRCB3aW5kb3csIEdMQ29udGV4dCogc2hhcmluZ0Nv
bnRleHQpCitQYXNzT3duUHRyPEdMQ29udGV4dEdMWD4gR0xDb250ZXh0R0xYOjpjcmVhdGVDb250
ZXh0KFhJRCB3aW5kb3csIEdMQ29udGV4dCogc2hhcmluZ0NvbnRleHQsIEJ1ZmZlcmluZ1R5cGUg
YnVmZmVyaW5nVHlwZSkKIHsKICAgICBpZiAoIXNoYXJlZERpc3BsYXkoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0yMTMsNyArMjI0LDkgQEAgUGFzc093blB0cjxHTENvbnRleHRHTFg+
IEdMQ29udGV4dEdMWDo6Y3JlYXRlQ29udGV4dChYSUQgd2luZG93LCBHTENvbnRleHQqIHNoYXIK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBHTFhDb250ZXh0IGdseFNoYXJpbmdDb250
ZXh0ID0gc2hhcmluZ0NvbnRleHQgPyBzdGF0aWNfY2FzdDxHTENvbnRleHRHTFgqPihzaGFyaW5n
Q29udGV4dCktPm1fY29udGV4dCA6IDA7Ci0gICAgT3duUHRyPEdMQ29udGV4dEdMWD4gY29udGV4
dCA9IHdpbmRvdyA/IGNyZWF0ZVdpbmRvd0NvbnRleHQod2luZG93LCBzaGFyaW5nQ29udGV4dCkg
OiBudWxscHRyOworICAgIE93blB0cjxHTENvbnRleHRHTFg+IGNvbnRleHQgPSB3aW5kb3cgPyBj
cmVhdGVXaW5kb3dDb250ZXh0KHdpbmRvdywgc2hhcmluZ0NvbnRleHQsIGJ1ZmZlcmluZ1R5cGUp
IDogbnVsbHB0cjsKKworICAgIC8vIFdlIGRvbid0IHVzZSBldmVyIGRvdWJsZS1idWZmZXIgYXQg
dGhlIG1vbWVudCB3aXRoIG9mZnNjcmVlbiBjb250ZXh0cywgc28gd2UgYXJlIGlnbm9yaW5nIGJ1
ZmZlcmluZ1R5cGUuCiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICBjb250ZXh0ID0gY3JlYXRl
UGJ1ZmZlckNvbnRleHQoZ2x4U2hhcmluZ0NvbnRleHQpOwogICAgIGlmICghY29udGV4dCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRH
TFguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFgu
aAppbmRleCA1ZThjNjFjZTRlNDFjNzZiNmM4ZTliNTUwODgzNzVhNWY4NGNjNDNjLi5kNDA3OTQw
MWYxNTQ2OWE4NTNlODliZmFlYTRlYWU2MzczNGVhNDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oCkBAIC0zOSw4ICszOSw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdMQ29udGV4dEdMWCA6IHB1YmxpYyBHTENv
bnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMQ29udGV4dEdMWCk7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R0xDb250ZXh0R0xYPiBjcmVhdGVDb250ZXh0KFhJRCwg
R0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCA9IDApOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdM
Q29udGV4dEdMWD4gY3JlYXRlV2luZG93Q29udGV4dChYSUQgd2luZG93LCBHTENvbnRleHQqIHNo
YXJpbmdDb250ZXh0KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxHTENvbnRleHRHTFg+IGNyZWF0
ZUNvbnRleHQoWElEIHdpbmRvdywgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCwgQnVmZmVyaW5n
VHlwZSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8R0xDb250ZXh0R0xYPiBjcmVhdGVXaW5kb3dD
b250ZXh0KFhJRCB3aW5kb3csIEdMQ29udGV4dCogc2hhcmluZ0NvbnRleHQsIEJ1ZmZlcmluZ1R5
cGUpOwogCiAgICAgdmlydHVhbCB+R0xDb250ZXh0R0xYKCk7CiAgICAgdmlydHVhbCBib29sIG1h
a2VDb250ZXh0Q3VycmVudCgpOwpAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGNhblJlbmRlclRvRGVmYXVsdEZyYW1lYnVmZmVyKCk7CiAgICAgdmlydHVhbCBJbnRT
aXplIGRlZmF1bHRGcmFtZUJ1ZmZlclNpemUoKTsKIAorICAgIHN0YXRpYyBEaXNwbGF5KiBzaGFy
ZWREaXNwbGF5KCk7CisKICNpZiBVU0UoM0RfR1JBUEhJQ1MpCiAgICAgdmlydHVhbCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yZWVjN2U4NGEwMjlhZWRjNDBmYzUxZmQ5MDA5Zjg3MDgzYmJh
NDI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGly
ZWN0ZWRYQ29tcG9zaXRlV2luZG93LmNwcApAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cuaCIKKworI2luY2x1ZGUgIkdMQ29udGV4dEdMWC5oIgorI2luY2x1ZGUgPEdML2dseC5oPgor
I2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KKyNpbmNsdWRlIDxjYWlyby14
bGliLmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8UmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c+IFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjcmVhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlZGlyZWN0
ZWRYQ29tcG9zaXRlV2luZG93KHNpemUpKTsKK30KKworUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KGNvbnN0IEludFNpemUmIHNpemUpCisgICAg
OiBtX3dpbmRvdygwKQorICAgICwgbV9wYXJlbnRXaW5kb3coMCkKKyAgICAsIG1fcGl4bWFwKDAp
CisgICAgLCBtX3N1cmZhY2UoMCkKKyAgICAsIG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKDApCisg
ICAgLCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUoZmFsc2UpCit7CisgICAgRGlzcGxheSog
ZGlzcGxheSA9IEdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSgpOworCisgICAgLy8gVGhpcyBp
cyBiYXNlZCBvbiBjb2RlIGZyb20gQ2hyb21pdW06IHNyYy9jb250ZW50L2NvbW1vbi9ncHUvaW1h
Z2VfdHJhbnNwb3J0X3N1cmZhY2VfbGludXguY2MKKyAgICBYU2V0V2luZG93QXR0cmlidXRlcyB3
aW5kb3dBdHRyaWJ1dGVzOworICAgIHdpbmRvd0F0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3Qg
PSBUcnVlOworICAgIG1fcGFyZW50V2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb290V2luZG93KGRpc3BsYXksIERlZmF1
bHRTY3JlZW4oZGlzcGxheSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LTEwMCwgLTEwMCwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0T3V0cHV0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDV092ZXJyaWRlUmVkaXJlY3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmd2luZG93QXR0cmlidXRlcyk7CisgICAgWE1hcFdpbmRv
dyhkaXNwbGF5LCBtX3BhcmVudFdpbmRvdyk7CisKKyAgICB3aW5kb3dBdHRyaWJ1dGVzLmV2ZW50
X21hc2sgPSBTdHJ1Y3R1cmVOb3RpZnlNYXNrOworICAgIHdpbmRvd0F0dHJpYnV0ZXMub3ZlcnJp
ZGVfcmVkaXJlY3QgPSBGYWxzZTsKKyAgICBtX3dpbmRvdyA9IFhDcmVhdGVXaW5kb3coZGlzcGxh
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJlbnRXaW5kb3csCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29weUZyb21QYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0
T3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dFdmVudE1hc2ssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZ3aW5kb3dBdHRyaWJ1dGVzKTsKKyAgICBYTWFwV2luZG93KGRpc3BsYXks
IG1fd2luZG93KTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFhFdmVudCBldmVudDsKKyAg
ICAgICAgWFdpbmRvd0V2ZW50KGRpc3BsYXksIG1fd2luZG93LCBTdHJ1Y3R1cmVOb3RpZnlNYXNr
LCAmZXZlbnQpOworICAgICAgICBpZiAoZXZlbnQudHlwZSA9PSBNYXBOb3RpZnkgJiYgZXZlbnQu
eG1hcC53aW5kb3cgPT0gbV93aW5kb3cpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAg
WFNlbGVjdElucHV0KGRpc3BsYXksIG1fd2luZG93LCBOb0V2ZW50TWFzayk7CisKKyAgICBYQ29t
cG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIENvbXBvc2l0ZVJlZGlyZWN0
TWFudWFsKTsKKworICAgIHJlc2l6ZShzaXplKTsKKyAgICByZXNpemVMYXRlcigpOyAvLyBGb3Jj
ZSB1cGRhdGUgb2YgdGhlIHVzYWJsZSBhcmVhLgorfQorCitSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdzo6flJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93KCkKK3sKKyAgICBEaXNwbGF5KiBkaXNw
bGF5ID0gR0xDb250ZXh0R0xYOjpzaGFyZWREaXNwbGF5KCk7CisgICAgaWYgKG1fd2luZG93KQor
ICAgICAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgaWYgKG1fcGFy
ZW50V2luZG93KQorICAgICAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX3BhcmVudFdpbmRv
dyk7CisgICAgY2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKTsKKworICAgIGlmIChtX3Bl
bmRpbmdSZXNpemVTb3VyY2VJZCkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcGVuZGluZ1Jl
c2l6ZVNvdXJjZUlkKTsKK30KKworZ2Jvb2xlYW4gUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6
OnJlc2l6ZUxhdGVyQ2FsbGJhY2soUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqIHdpbmRvdykK
K3sKKyAgICB3aW5kb3ctPnJlc2l6ZUxhdGVyKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2
b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpyZXNpemVMYXRlcigpCit7CisgICAgbV91
c2FibGVTaXplID0gbV9zaXplOworICAgIG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkID0gMDsKK30K
Kwordm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplKGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgLy8gV2hlbiBlbmxhcmdpbmcgYSByZWRpcmVjdGVkIHdpbmRvdywgZm9y
IHRoZSBmaXJzdCByZW5kZXIsIHRoZSBuZXdseSBleHBvc2VkIGFyZWFzIHNlZW0KKyAgICAvLyB0
byBjb250YWluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9uIEludGVsIGRyaXZlcnMuIFRvIGF2b2lk
IHJlbmRlcmluZyBhcnRpZmFjdHMgd2hpbGUKKyAgICAvLyByZXNpemluZywgd2Ugd2FpdCB0byBy
ZW5kZXIgdGhvc2UgbmV3IGFyZWFzIHVudGlsIGFmdGVyIGEgc2hvcnQgdGltZW91dC4gVGh1cywg
dGhlCisgICAgLy8gInVzYWJsZSBzaXplIiBvZiB0aGUgd2luZG93IGlzIHNtYWxsZXIgdGhhbiB0
aGUgYWN0dWFsIHNpemUgb2YgdGhlIHdpbmRvdyBmb3IgdGhlIGZpcnN0CisgICAgLy8gcmVuZGVy
LgorICAgIG1fdXNhYmxlU2l6ZSA9IHNpemUuc2hydW5rVG8obV91c2FibGVTaXplKTsKKyAgICBp
ZiAobV91c2FibGVTaXplLndpZHRoKCkgPCBzaXplLndpZHRoKCkgfHwgbV91c2FibGVTaXplLmhl
aWdodCgpIDwgc2l6ZS5oZWlnaHQoKSkgeyAvLyBUaGUgd2luZG93IGlzIGdyb3dpbmcuCisgICAg
ICAgIC8vIFdlJ3JlIGJlaW5nIHZlcnkgY29uc2VydmF0aXZlIGhlcmUuIEluc3RlYWQgb2Ygcmlz
a2luZyBkcmF3aW5nIGFydGlmYWN0cyB3aGlsZSBkb2luZyBjb250aW51b3VzCisgICAgICAgIC8v
IG9wYXF1ZSByZXNpemluZywgd2UgZXJyIG9uIHRoZSBzaWRlIG9mIGhhdmluZyBtb3JlIHVuZHJh
d24gYXJlYXMuCisgICAgICAgIGlmIChtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCkKKyAgICAgICAg
ICAgIGdfc291cmNlX3JlbW92ZShtX3BlbmRpbmdSZXNpemVTb3VyY2VJZCk7CisgICAgICAgIG1f
cGVuZGluZ1Jlc2l6ZVNvdXJjZUlkID0gZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihyZXNpemVMYXRlckNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAg
RGlzcGxheSogZGlzcGxheSA9IEdMQ29udGV4dEdMWDo6c2hhcmVkRGlzcGxheSgpOworICAgIFhS
ZXNpemVXaW5kb3coZGlzcGxheSwgbV93aW5kb3csIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CisgICAgZ2xYV2FpdFgoKTsKKworICAgIC8vIFRoaXMgc3dhcCBpcyBiYXNlZCBvbiBjb2Rl
IGluIENocm9taXVtLiBJdCB0cmllcyB0byB3b3JrLWFyb3VuZCBhIGJ1ZyBpbiB0aGUgSW50ZWwg
ZHJpdmVycworICAgIC8vIHdoZXJlIGEgc3dhcCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBm
cm9udCBhbmQgYmFjayBidWZmZXJzIGFyZSBwcm9wZXJseSByZXNpemVkLgorICAgIGlmIChjb250
ZXh0KCkgPT0gR0xDb250ZXh0OjpnZXRDdXJyZW50KCkpCisgICAgICAgIGNvbnRleHQoKS0+c3dh
cEJ1ZmZlcnMoKTsKKworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9uZWVkc05ld1BpeG1hcEFm
dGVyUmVzaXplID0gdHJ1ZTsKK30KKworR0xDb250ZXh0KiBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvdzo6Y29udGV4dCgpCit7CisgICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsKKworICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAgbV9jb250ZXh0ID0g
R0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KG1fd2luZG93LCBHTENvbnRleHQ6OnNo
YXJpbmdDb250ZXh0KCksIEdMQ29udGV4dDo6U2luZ2xlQnVmZmVyKTsKKyAgICByZXR1cm4gbV9j
b250ZXh0LmdldCgpOworfQorCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93OjpjbGVh
bnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpCit7CisgICAgaWYgKCFtX3BpeG1hcCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgWEZyZWVQaXhtYXAoY2Fpcm9feGxpYl9zdXJmYWNlX2dldF9kaXNw
bGF5KG1fc3VyZmFjZS5nZXQoKSksIG1fcGl4bWFwKTsKKyAgICBtX3BpeG1hcCA9IDA7CisgICAg
bV9zdXJmYWNlID0gbnVsbHB0cjsKK30KKworY2Fpcm9fc3VyZmFjZV90KiBSZWRpcmVjdGVkWENv
bXBvc2l0ZVdpbmRvdzo6Y2Fpcm9TdXJmYWNlRm9yV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQor
eworICAgIGlmICghbV9uZWVkc05ld1BpeG1hcEFmdGVyUmVzaXplICYmIG1fc3VyZmFjZSkKKyAg
ICAgICAgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsKKworICAgIG1fbmVlZHNOZXdQaXhtYXBBZnRl
clJlc2l6ZSA9IGZhbHNlOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgbmV3IHBp
eG1hcCBiZSBjcmVhdGVkIHdpdGggdGhlIHNhbWUgRGlzcGxheSBwb2ludGVyIGFzIHRoZSB0YXJn
ZXQKKyAgICAvLyB3aWRnZXQgb3IgZWxzZSBkcmF3aW5nIHNwZWVkIGNhbiBiZSAxMDB4IHNsb3dl
ci4KKyAgICBEaXNwbGF5KiBuZXdQaXhtYXBEaXNwbGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVko
Z3RrX3dpZGdldF9nZXRfZGlzcGxheSh3aWRnZXQpKTsKKyAgICBQaXhtYXAgbmV3UGl4bWFwID0g
WENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAobmV3UGl4bWFwRGlzcGxheSwgbV93aW5kb3cpOwor
ICAgIGlmICghbmV3UGl4bWFwKSB7CisgICAgICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJm
YWNlKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFhXaW5kb3dBdHRyaWJ1dGVz
IHdpbmRvd0F0dHJpYnV0ZXM7CisgICAgaWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhuZXdQaXht
YXBEaXNwbGF5LCBtX3dpbmRvdywgJndpbmRvd0F0dHJpYnV0ZXMpKSB7CisgICAgICAgIGNsZWFu
dXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CisgICAgICAgIFhGcmVlUGl4bWFwKG5ld1BpeG1h
cERpc3BsYXksIG5ld1BpeG1hcCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb194bGliX3N1
cmZhY2VfY3JlYXRlKG5ld1BpeG1hcERpc3BsYXksIG5ld1BpeG1hcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aW5kb3dBdHRyaWJ1dGVzLnZpc3VhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7CisKKyAgICAvLyBOdmlkaWEgZHJpdmVycyBzZWVt
IHRvIHByZXBhcmUgdGhlaXIgcmVkaXJlY3RlZCB3aW5kb3cgcGl4bWFwIGFzeW5jaHJvbm91c2x5
LCBzbyBmb3IgYSBmZXcgZnJhY3Rpb25zCisgICAgLy8gb2YgYSBzZWNvbmQgYWZ0ZXIgZWFjaCBy
ZXNpemUsIHdoaWxlIGRvaW5nIGNvbnRpbnVvdXMgcmVzaXppbmcgKHdoaWNoIGNvbnN0YW50bHkg
ZGVzdHJveXMgYW5kIGNyZWF0ZXMKKyAgICAvLyBwaXhtYXAgd2luZG93LWJhY2tpbmdzKSwgdGhl
IHBpeG1hcCBtZW1vcnkgaXMgdW5pbml0aWFsaXplZC4gVG8gd29yayBhcm91bmQgdGhpcyBpc3N1
ZSwgcGFpbnQgdGhlIG9sZAorICAgIC8vIHBpeG1hcCB0byB0aGUgbmV3IG9uZSB0byBwcm9wZXJs
eSBpbml0aWFsaXplIGl0LgorICAgIGlmIChtX3N1cmZhY2UpIHsKKyAgICAgICAgUmVmUHRyPGNh
aXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAg
ICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IuZ2V0KCksIDEsIDEsIDEpOworICAgICAgICBj
YWlyb19wYWludChjci5nZXQoKSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShj
ci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3Iu
Z2V0KCkpOworICAgIH0KKworICAgIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7Cisg
ICAgbV9waXhtYXAgPSBuZXdQaXhtYXA7CisgICAgbV9zdXJmYWNlID0gbmV3U3VyZmFjZTsKKwor
ICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVkWENvbXBv
c2l0ZVdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29t
cG9zaXRlV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzllYzdlZGIyNmI4ZGVhNDI2ZmJmNGU2NGE5NWUy
NTlkYTRkN2EzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIElnYWxpYSBTLkwuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKKyNkZWZpbmUgIFJl
ZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93X2gKKworI2luY2x1ZGUgIkdMQ29udGV4dEdMWC5oIgor
I2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorCit0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgUGl4bWFwOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIFdpbmRvdzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7CisgICAgdmlydHVhbCB+UmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3coKTsKKworICAgIGNvbnN0IEludFNpemUmIHVzYWJsZVNpemUoKSB7IHJldHVy
biBtX3VzYWJsZVNpemU7IH0KKyAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgeyByZXR1cm4gbV9z
aXplOyB9CisKKyAgICB2b2lkIHJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKTsKKyAgICBH
TENvbnRleHQqIGNvbnRleHQoKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGNhaXJvU3VyZmFjZUZv
cldpZGdldChHdGtXaWRnZXQqKTsKKworcHJpdmF0ZToKKyAgICBSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdyhjb25zdCBJbnRTaXplJik7CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVzaXplTGF0
ZXJDYWxsYmFjayhSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdyopOworICAgIHZvaWQgcmVzaXpl
TGF0ZXIoKTsKKyAgICB2b2lkIGNsZWFudXBQaXhtYXBBbmRQaXhtYXBTdXJmYWNlKCk7CisKKyAg
ICBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRTaXplIG1fdXNhYmxlU2l6ZTsKKyAgICBXaW5kb3cg
bV93aW5kb3c7CisgICAgV2luZG93IG1fcGFyZW50V2luZG93OworICAgIFBpeG1hcCBtX3BpeG1h
cDsKKyAgICBPd25QdHI8R0xDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gbV9zdXJmYWNlOworICAgIHVuc2lnbmVkIGludCBtX3BlbmRpbmdSZXNpemVTb3Vy
Y2VJZDsKKyAgICBib29sIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggMjE1NTc2ZTUxODE0Y2NmMTJjYzBlZmVi
NjkyZWQ5ZGE3YjI0OTQ1Mi4uMDA0NzNmOWQ1MGI1YTc1N2E1MDUwODFiZmY4ZjJiMTQ4ZDNhNmVh
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291
cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTEwMSw2ICsxMDEsNyBAQCBsaWJ3ZWJr
aXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkBfbGFfTElCQQogCSQoUE5HX0xJQlMpIFwKIAkkKFNRTElURTNfTElCUykgXAogCSQo
VU5JQ09ERV9MSUJTKSBcCisJJChYQ09NUE9TSVRFX0xJQlMpIFwKIAkkKFhSRU5ERVJfTElCUykg
XAogCSQoWFRfTElCUykgXAogCSQoV0lOTU1fTElCUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaCBi
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0LmgKaW5kZXggMjRhNjE0ZGI0NWY0ZjJmNWNjMzI5ZDQ4OGY0YTE4N2FmOTQxZDgxMS4u
ZGFjNjdjYWQzMGRhZDU2N2EyNjYyZTMzYWIwY2FlNTJlOTU0MmM5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dC5oCkBAIC0yOCwxMCArMjgsMTIgQEAKICNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJMYXllci5oIgorI2VuZGlmCisKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAjaW5j
bHVkZSAiR0xDb250ZXh0LmgiCi0jZW5kaWYKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgogI2VuZGlmCiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC00NywxMSArNDksOSBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgdmlydHVhbCB+QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoKTsK
LSAgICB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KTsKLSAgICB2b2lkIHNjaGVkdWxlUm9vdExheWVyUmVwYWludChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7Ci0gICAgdm9pZCBtYXJrRm9yU3luYygpOwotICAgIHZvaWQgc3luY0xheWVyc1RpbWVv
dXQoKTsKLSAgICB2b2lkIHN5bmNMYXllcnNOb3coKTsKKyAgICB2b2lkIHNldFJvb3RDb21wb3Np
dGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHNldE5vbkNvbXBv
c2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2
b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogICAgIHZvaWQgcmVzaXplUm9vdExheWVyKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKTsKICAgICBib29sIHJlbmRlckxheWVyc1RvV2luZG93KGNhaXJv
X3QqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CiAgICAgYm9vbCBlbmFibGVk
KCk7CkBAIC02MywyMiArNjMsNDAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzaG93RGVi
dWdCb3JkZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSBjb25zdDsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgY29tcG9zaXRlTGF5
ZXJzVG9Db250ZXh0KCk7CisgICAgdm9pZCBmbHVzaEFuZFJlbmRlckxheWVycygpOworICAgIGJv
b2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBzY3JvbGxOb25Db21wb3Np
dGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKKwogcHJpdmF0ZToKICAgICBXZWJLaXRXZWJW
aWV3KiBtX3dlYlZpZXc7Ci0gICAgdW5zaWduZWQgaW50IG1fc3luY1RpbWVyQ2FsbGJhY2tJZDsK
KyAgICB1bnNpZ25lZCBpbnQgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkOwogCiAjaWYgVVNF
KENMVVRURVIpCiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9yb290R3JhcGhpY3NMYXll
cjsKICAgICBHdGtXaWRnZXQqIG1fcm9vdExheWVyRW1iZWRkZXI7CisjZWxpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCisgICAgT3duUHRyPFdlYkNvcmU6OlJlZGlyZWN0ZWRYQ29tcG9zaXRlV2lu
ZG93PiBtX3JlZGlyZWN0ZWRXaW5kb3c7CisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI+IG1fcm9vdExheWVyOworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXI+IG1fdGV4dHVyZU1hcHBlcjsKKyAgICBkb3VibGUgbV9sYXN0Rmx1c2hUaW1lOworICAgIGRv
dWJsZSBtX3JlZHJhd1BlbmRpbmdUaW1lOworICAgIGJvb2wgbV9uZWVkc0V4dHJhRmx1c2g7CisK
KyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKCk7CisgICAgdm9pZCBzdG9wQW55UGVuZGlu
Z0xheWVyRmx1c2goKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gbGF5ZXJGbHVzaFRpbWVyRmlyZWRD
YWxsYmFjayhBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCopOworICAgIGJvb2wgcHJlcGFy
ZUZvclJlbmRlcmluZygpOworICAgIHZvaWQgY2xlYXJFdmVyeXdoZXJlKCk7CiAjZWxpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBtX3Jvb3RU
ZXh0dXJlTWFwcGVyTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1f
cm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1f
dGV4dHVyZU1hcHBlcjsKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAgICAgV2ViQ29yZTo6
R0xDb250ZXh0KiBnbENvbnRleHQoKTsKICAgICBPd25QdHI8V2ViQ29yZTo6R0xDb250ZXh0PiBt
X2NvbnRleHQ7CiAjZW5kaWYKLSNlbmRpZgogCiAgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQoV2ViS2l0V2ViVmlldyopOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwIGIvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHRHTC5jcHAKaW5kZXggNjRlYjkwMTc1OGJkNGVhZThhOTQ4N2JhMWRjMDE5NjcyYTllNWFhNS4u
ZWMwZTFhNjRkN2FiZjU5N2ZmYTNiYmQxMDFjNmJjNDNiNjg1MTQ1YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHRHTC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dENhaXJvLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
R0wuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKICNpbmNsdWRlICJ3ZWJraXR3
ZWJ2aWV3cHJpdmF0ZS5oIgpAQCAtMzUsMTMgKzM2LDEyIEBACiAjaW5jbHVkZSA8Z2RrL2dkay5o
PgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAotI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEp
Ci0jZGVmaW5lIFJlZ2lvbiBYUmVnaW9uCi0jZGVmaW5lIEZvbnQgWEZvbnQKLSNkZWZpbmUgQ3Vy
c29yIFhDdXJzb3IKLSNkZWZpbmUgU2NyZWVuIFhTY3JlZW4KLSNpbmNsdWRlIDxnZGsvZ2RreC5o
PgotI2VuZGlmCitjb25zdCBkb3VibGUgZ0ZyYW1lc1BlclNlY29uZCA9IDYwOworCisvLyBUaGVy
ZSBzZWVtcyB0byBiZSBhIGRlbGljYXRlIGJhbGFuY2UgYmV0d2VlbiB0aGUgbWFpbiBsb29wIGJl
aW5nIGZsb29kZWQKKy8vIHdpdGggbW90aW9uIGV2ZW50cyAodGhhdCBmb3JjZSBmbHVzaGVzKSBh
bmQgc3RhcnZpbmcgdGhlIG1haW4gbG9vcCBvZiBldmVudHMKKy8vIHdpdGggZmx1c2ggY2FsbGJh
Y2tzLiBUaGlzIGRlbGF5IGlzIGVudGlyZWx5IGVtcGlyaWNhbC4KK2NvbnN0IGRvdWJsZSBnU2No
ZWR1bGVEZWxheSA9ICgxLjAgLyAoZ0ZyYW1lc1BlclNlY29uZCAvIDMuMCkpOwogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDksMTUwICs0OSwzMDAgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIDogbV93ZWJWaWV3KHdlYlZp
ZXcpCi0gICAgLCBtX3N5bmNUaW1lckNhbGxiYWNrSWQoMCkKLSAgICAsIG1fcm9vdFRleHR1cmVN
YXBwZXJMYXllcigwKQorICAgICwgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKDApCisgICAg
LCBtX3JlZGlyZWN0ZWRXaW5kb3coUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShJ
bnRTaXplKDEsIDEpKSkKKyAgICAsIG1fbGFzdEZsdXNoVGltZSgwKQorICAgICwgbV9yZWRyYXdQ
ZW5kaW5nVGltZSgwKQorICAgICwgbV9uZWVkc0V4dHJhRmx1c2goZmFsc2UpCit7Cit9CisKK3N0
YXRpYyBJbnRTaXplIGdldFdlYlZpZXdTaXplKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7Cisg
ICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRp
b24oR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHJldHVybiBJbnRTaXpl
KGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKK30KKwordm9pZCBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKG1fcm9vdExh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZSh0aGlzKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsK
KworICAgIEludFNpemUgcGFnZVNpemUgPSBnZXRXZWJWaWV3U2l6ZShtX3dlYlZpZXcpOworICAg
IG1fcm9vdExheWVyLT5zZXRTaXplKHBhZ2VTaXplKTsKKworICAgIC8vIFRoZSBub24tY29tcG9z
aXRlZCBjb250ZW50cyBhcmUgYSBjaGlsZCBvZiB0aGUgcm9vdCBsYXllci4KKyAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZSghbV93ZWJWaWV3
LT5wcml2LT50cmFuc3BhcmVudCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXRTaXplKHBhZ2VTaXplKTsKKyAgICBpZiAoY29yZShtX3dlYlZpZXcpLT5zZXR0aW5ncygpLT5h
Y2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKHRydWUpOworCisjaWZuZGVmIE5ERUJVRwor
ICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJSb290IGxheWVyIik7CisgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zZXROYW1lKCJOb24tY29tcG9zaXRlZCBjb250ZW50Iik7CisjZW5k
aWYKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXIuZ2V0KCkpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNw
bGF5KCk7CisKKyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIFRleHR1cmVNYXBwZXIgbmVlZHMg
YW4gYWN0aXZlIE9wZW5HTCBjb250ZXh0LgorICAgIEdMQ29udGV4dCogY29udGV4dCA9IG1fcmVk
aXJlY3RlZFdpbmRvdy0+Y29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7CisK
KyAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1cmVN
YXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OwogfQogCiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6fkFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0KCkKIHsKLSAgICBpZiAobV9zeW5jVGltZXJDYWxsYmFja0lkKQotICAgICAg
ICBnX3NvdXJjZV9yZW1vdmUobV9zeW5jVGltZXJDYWxsYmFja0lkKTsKKyAgICBzdG9wQW55UGVu
ZGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dDo6c3RvcEFueVBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRp
bWVyQ2FsbGJhY2tJZCkKKyAgICAgICAgcmV0dXJuOworICAgIGdfc291cmNlX3JlbW92ZShtX2xh
eWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJ
ZCA9IDA7CiB9CiAKIGJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmVuYWJsZWQo
KQogewotICAgIHJldHVybiBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIgJiYgbV90ZXh0dXJlTWFw
cGVyOworICAgIHJldHVybiBtX3Jvb3RMYXllciAmJiBtX3RleHR1cmVNYXBwZXI7CiB9CiAKLUdM
Q29udGV4dCogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmdsQ29udGV4dCgpCitib29s
IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZW5kZXJMYXllcnNUb1dpbmRvdyhjYWly
b190KiBjciwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgaWYgKG1fY29udGV4dCkK
LSAgICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKKyAgICBtX3JlZHJhd1BlbmRpbmdUaW1l
ID0gMDsKIAotI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCi0gICAgLy8gRklYTUU6IEdy
YWNlZnVsbHkgYWNjb3VudCBmb3Igc2l0dWF0aW9ucyB3aGVyZSB3ZSBkbyBub3QgaGF2ZSBhIHJl
YWxpemVkIHdpbmRvdy4KLSAgICBHZGtXaW5kb3cqIGdka1dpbmRvdyA9IGd0a193aWRnZXRfZ2V0
X3dpbmRvdyhHVEtfV0lER0VUKG1fd2ViVmlldykpOwotICAgIGlmIChnZGtXaW5kb3cgJiYgZ2Rr
X3dpbmRvd19oYXNfbmF0aXZlKGdka1dpbmRvdykpCi0gICAgICAgIG1fY29udGV4dCA9IEdMQ29u
dGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyhHREtfV0lORE9XX1hJRChnZGtXaW5kb3cpLCBH
TENvbnRleHQ6OnNoYXJpbmdDb250ZXh0KCkpOwotI2VuZGlmCisgICAgaWYgKCFlbmFibGVkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7Cisg
ICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gcGFpbnQgYSB3aGl0ZSBiYWNrZ3JvdW5kIChpZiB0aGUg
V2ViVmlldyBpc24ndCB0cmFuc3BhcmVudCksIGJlY2F1c2Ugd2hlbiBncm93aW5nCisgICAgLy8g
dGhlIHJlZGlyZWN0ZWQgd2luZG93LCB0aGUgdXNhYmxlIHNpemUgb2YgdGhlIHdpbmRvdyBtYXkg
YmUgc21hbGxlciB0aGFuIHRoZSBhbGxvY2F0aW9uIG9mIG91ciB3aWRnZXQuCisgICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBzaG93IGFydGlmYWN0cyBpbiB0aGF0IGNhc2UuCisgICAgSW50U2l6ZSB1
c2FibGVXaW5kb3dTaXplID0gbV9yZWRpcmVjdGVkV2luZG93LT51c2FibGVTaXplKCk7CisgICAg
aWYgKHVzYWJsZVdpbmRvd1NpemUgIT0gbV9yZWRpcmVjdGVkV2luZG93LT5zaXplKCkpIHsKKyAg
ICAgICAgaWYgKCFtX3dlYlZpZXctPnByaXYtPnRyYW5zcGFyZW50KSB7CisgICAgICAgICAgICBj
YWlyb19zZXRfc291cmNlX3JnYihjciwgMSwgMSwgMSk7CisgICAgICAgICAgICBjYWlyb19zZXRf
b3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Cisg
ICAgICAgIGNhaXJvX3BhaW50KGNyKTsKKyAgICB9CisKKyAgICBjYWlyb19zdXJmYWNlX3QqIHdp
bmRvd1N1cmZhY2UgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPmNhaXJvU3VyZmFjZUZvcldpZGdldChH
VEtfV0lER0VUKG1fd2ViVmlldykpOworICAgIGlmICghd2luZG93U3VyZmFjZSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIGNsaXBSZWN0LngoKSwgY2xp
cFJlY3QueSgpLCBjbGlwUmVjdC53aWR0aCgpLCBjbGlwUmVjdC5oZWlnaHQoKSk7CisgICAgY2Fp
cm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCB3aW5kb3dTdXJmYWNlLCAwLCAwKTsKKyAgICBjYWly
b19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fZmls
bChjcik7CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCAmJiB0b1RleHR1
cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1
bm5pbmdBbmltYXRpb25zKCkgfHwgbV9uZWVkc0V4dHJhRmx1c2gpIHsKKyAgICAgICAgbV9uZWVk
c0V4dHJhRmx1c2ggPSBmYWxzZTsKKyAgICAgICAgZG91YmxlIG5leHRGbHVzaCA9IG1heCgoMSAv
IGdGcmFtZXNQZXJTZWNvbmQpIC0gKGN1cnJlbnRUaW1lKCkgLSBtX2xhc3RGbHVzaFRpbWUpLCAw
LjApOworICAgICAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRk
X2Z1bGwoR0RLX1BSSU9SSVRZX0VWRU5UUywgMTAwMCAqIG5leHRGbHVzaCwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4obGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayksIHRoaXMsIDAp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0OjpyZW5kZXJMYXllcnNUb1dpbmRvdyhjYWlyb190KiwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCitib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpwcmVwYXJl
Rm9yUmVuZGVyaW5nKCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgR0xDb250ZXh0KiBjb250ZXh0ID0gZ2xDb250ZXh0KCk7CisgICAgR0xDb250
ZXh0KiBjb250ZXh0ID0gbV9yZWRpcmVjdGVkV2luZG93LT5jb250ZXh0KCk7CiAgICAgaWYgKCFj
b250ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHdGtBbGxvY2F0
aW9uIGFsbG9jYXRpb247Ci0gICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihHVEtfV0lER0VU
KG1fd2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICBnbFZpZXdwb3J0KDAsIDAsIGFsbG9jYXRp
b24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Y29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0
KCkKK3sKKyAgICBpZiAoIXByZXBhcmVGb3JSZW5kZXJpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgSW50U2l6ZSYgd2luZG93U2l6ZSA9IG1fcmVkaXJlY3RlZFdpbmRvdy0+c2l6
ZSgpOworICAgIGdsVmlld3BvcnQoMCwgMCwgd2luZG93U2l6ZS53aWR0aCgpLCB3aW5kb3dTaXpl
LmhlaWdodCgpKTsKIAogICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwotICAg
IG1fcm9vdFRleHR1cmVNYXBwZXJMYXllci0+cGFpbnQoKTsKKyAgICB0b1RleHR1cmVNYXBwZXJM
YXllcihtX3Jvb3RMYXllci5nZXQoKSktPnBhaW50KCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5l
bmRQYWludGluZygpOwogCi0gICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBnbEZsdXNoKCk7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5
ZXIpCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpjbGVhckV2ZXJ5d2hlcmUo
KQogeworICAgIGlmICghcHJlcGFyZUZvclJlbmRlcmluZygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBjb25zdCBJbnRTaXplJiB3aW5kb3dTaXplID0gbV9yZWRpcmVjdGVkV2luZG93LT5zaXpl
KCk7CisgICAgZ2xWaWV3cG9ydCgwLCAwLCB3aW5kb3dTaXplLndpZHRoKCksIHdpbmRvd1NpemUu
aGVpZ2h0KCkpOworICAgIGdsQ2xlYXJDb2xvcigxLCAxLCAxLCAxKTsKKyAgICBnbENsZWFyKEdM
X0NPTE9SX0JVRkZFUl9CSVQpOworCisgICAgZ2xGbHVzaCgpOworfQorCit2b2lkIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyKQoreworICAgIC8vIENsZWFyaW5nIGV2ZXJ5d2hlcmUgd2hlbiB0
dXJuaW5nIG9uIG9yIG9mZiB0aGUgbGF5ZXIgdHJlZSBwcmV2ZW50cyB1cyBmcm9tIGZsYXNoaW5n
CisgICAgLy8gb2xkIGNvbnRlbnQgYmVmb3JlIHRoZSBmaXJzdCBmbHVzaC4KKyAgICBjbGVhckV2
ZXJ5d2hlcmUoKTsKKwogICAgIGlmICghZ3JhcGhpY3NMYXllcikgewotICAgICAgICBtX3Jvb3RH
cmFwaGljc0xheWVyLmNsZWFyKCk7Ci0gICAgICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllciA9
IDA7Ci0gICAgICAgIG1fY29udGV4dC5jbGVhcigpOworICAgICAgICBzdG9wQW55UGVuZGluZ0xh
eWVyRmx1c2goKTsKKworICAgICAgICAvLyBTaHJpbmsgdGhlIG9mZnNjcmVlbiB3aW5kb3cgdG8g
c2F2ZSBtZW1vcnkgd2hpbGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgdHVybmVkIG9mZi4K
KyAgICAgICAgbV9yZWRpcmVjdGVkV2luZG93LT5yZXNpemUoSW50U2l6ZSgxLCAxKSk7CisgICAg
ICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyID0gbnVsbHB0cjsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUodGhpcyk7Ci0gICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyID0gdG9U
ZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSk7Ci0gICAgbV9yb290
R3JhcGhpY3NMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Ci0gICAgbV9yb290R3JhcGhp
Y3NMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIt
PnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE5l
ZWRzRGlzcGxheSgpOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldFNpemUoY29yZShtX3dl
YlZpZXcpLT5tYWluRnJhbWUoKS0+dmlldygpLT5mcmFtZVJlY3QoKS5zaXplKCkpOworICAgIGlm
IChncmFwaGljc0xheWVyICYmICFlbmFibGVkKCkpCisgICAgICAgIG1fcmVkaXJlY3RlZFdpbmRv
dy0+cmVzaXplKGdldFdlYlZpZXdTaXplKG1fd2ViVmlldykpOwogCi0gICAgR0xDb250ZXh0KiBj
b250ZXh0ID0gZ2xDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47
CisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KKyAgICBp
bml0aWFsaXplKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxD
aGlsZHJlbigpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3Jh
cGhpY3NMYXllcik7CiAKLSAgICAvLyBUaGUgY29udGV4dCBuZWVkcyB0byBiZSBhY3RpdmUgd2hl
biBjcmVhdGluZyB0aGUgdGV4dHVyZSBtYXBwZXIuIEl0J3MgZmluZSB0bwotICAgIC8vIGF2b2lk
IGNhbGxpbmcgc3dhcEJ1ZmZlcnMgaGVyZSwgYmVjYXVzZSBpdCB3aWxsIGp1c3QgaW5pdGlhbGl6
ZSBzaGFkZXJzLgotICAgIGlmICghY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICBzdG9wQW55UGVuZGluZ0xheWVyRmx1c2goKTsKIAotICAgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbjsKLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19X
SURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIGdsVmlld3BvcnQoMCwgMCwgYWxs
b2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOworICAgIC8vIEZJWE1FOiBUd28gZmx1
c2hlcyBzZWVtIG5lY2Vzc2FyeSB0byBnZXQgdGhlIHByb3BlciByZW5kZXJpbmcgaW4gc29tZSBj
YXNlcy4gSXQncyB1bmNsZWFyCisgICAgLy8gaWYgdGhpcyBpcyBhIGJ1ZyB3aXRoIHRoZSBSZWRp
cmVjdGVkWENvbXBvc2l0ZSB3aW5kb3cgb3Igd2l0aCB0aGlzIGNsYXNzLgorICAgIG1fbmVlZHNF
eHRyYUZsdXNoID0gdHJ1ZTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIAotICAgIG1fdGV4
dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Ci0gICAgbV9yb290VGV4dHVy
ZU1hcHBlckxheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0g
ICAgbV9yb290R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCk7CisgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9m
dWxsKEdES19QUklPUklUWV9FVkVOVFMsIDUwMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVu
Yz4obGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayksIHRoaXMsIDApOwogfQogCi12b2lkIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzY2hlZHVsZVJvb3RMYXllclJlcGFpbnQoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNl
dE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgaWYgKCFtX3Jvb3RHcmFwaGljc0xheWVyKQorICAgIGlmICghbV9yb290TGF5ZXIpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9yb290
R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgICAgIG1fcm9vdExheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3Jvb3RHcmFw
aGljc0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
OnJlc2l6ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6cmVzaXplUm9vdExheWVyKGNvbnN0IEludFNpemUmIG5ld1NpemUp
CiB7Ci0gICAgaWYgKCFtX3Jvb3RHcmFwaGljc0xheWVyKQorICAgIGlmICghZW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXpl
KQogICAgICAgICByZXR1cm47Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0U2l6ZShzaXpl
KTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKKworICAgIG1fcmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKG5ld1NpemUpOwor
ICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1Np
emUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXRO
ZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJl
YXMuCisgICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNpemUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6
ZSk7CisKKyAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAg
ICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhl
aWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCks
IDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQor
CisgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJl
Y3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgp
IC0gb2xkU2l6ZS5oZWlnaHQoKSkpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBuZXdTaXplKSk7Cisg
ICAgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIHNj
cm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChzY3JvbGxSZWN0KTsKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAotc3RhdGljIGdib29sZWFuIHN5bmNMYXllcnNU
aW1lb3V0Q2FsbGJhY2soQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGNvbnRleHQpCitn
Ym9vbGVhbiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bGF5ZXJGbHVzaFRpbWVyRmly
ZWRDYWxsYmFjayhBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICBjb250ZXh0LT5zeW5jTGF5ZXJzVGltZW91dCgpOworICAgIGNvbnRleHQtPmxheWVyRmx1c2hU
aW1lckZpcmVkKCk7CiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0OjptYXJrRm9yU3luYygpCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0OjpzY2hlZHVsZUxheWVyRmx1c2goKQogewotICAgIGlmIChtX3N5bmNUaW1lckNh
bGxiYWNrSWQpCisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8v
IFdlIHVzZSBhIEdMaWIgdGltZXIgYmVjYXVzZSBvdGhlcndpc2UgR1RLKyBldmVudCBoYW5kbGlu
ZyBkdXJpbmcKLSAgICAvLyBkcmFnZ2luZyBjYW4gc3RhcnZlIFdlYkNvcmUgdGltZXJzLCB3aGlj
aCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuCi0gICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gZ190
aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8
R1NvdXJjZUZ1bmM+KHN5bmNMYXllcnNUaW1lb3V0Q2FsbGJhY2spLCB0aGlzLCAwKTsKKyAgICAv
LyBXZSB1c2UgYSBHTGliIHRpbWVyIGJlY2F1c2Ugb3RoZXJ3aXNlIEdUSysgZXZlbnQgaGFuZGxp
bmcgZHVyaW5nIGRyYWdnaW5nIGNhbgorICAgIC8vIHN0YXJ2ZSBXZWJDb3JlIHRpbWVycywgd2hp
Y2ggaGF2ZSBhIGxvd2VyIHByaW9yaXR5LgorICAgIGRvdWJsZSBuZXh0Rmx1c2ggPSBtYXgoZ1Nj
aGVkdWxlRGVsYXkgLSAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEZsdXNoVGltZSksIDAuMCk7Cisg
ICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19Q
UklPUklUWV9FVkVOVFMsIG5leHRGbHVzaCAqIDEwMDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KGxheWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKIH0KIAotdm9p
ZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c3luY0xheWVyc05vdygpCitib29sIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQog
ewotICAgIGlmIChtX3Jvb3RHcmFwaGljc0xheWVyKQotICAgICAgICBtX3Jvb3RHcmFwaGljc0xh
eWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGNvcmUo
bV93ZWJWaWV3KS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNs
dWRpbmdTdWJmcmFtZXMoKTsKKyAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICByZXR1cm4gY29yZShtX3dl
YlZpZXcpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGlu
Z1N1YmZyYW1lcygpOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpz
eW5jTGF5ZXJzVGltZW91dCgpCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpm
bHVzaEFuZFJlbmRlckxheWVycygpCiB7Ci0gICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gMDsK
LSAgICBzeW5jTGF5ZXJzTm93KCk7Ci0gICAgaWYgKCFtX3Jvb3RHcmFwaGljc0xheWVyKQorICAg
IGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodG9UZXh0dXJlTWFw
cGVyTGF5ZXIobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2
ZVJ1bm5pbmdBbmltYXRpb25zKCkpCi0gICAgICAgIG1fc3luY1RpbWVyQ2FsbGJhY2tJZCA9IGdf
dGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAxMDAwLjAgLyA2MC4wLCByZWlu
dGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzeW5jTGF5ZXJzVGltZW91dENhbGxiYWNrKSwgdGhp
cywgMCk7CisgICAgRnJhbWUqIGZyYW1lID0gY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkgfHwgIWZyYW1lLT52
aWV3KCkpCisgICAgICAgIHJldHVybjsKKyAgICBmcmFtZS0+dmlldygpLT51cGRhdGVMYXlvdXRB
bmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CisKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBt
X3JlZGlyZWN0ZWRXaW5kb3ctPmNvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dCAmJiAhY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZmx1
c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIHJlbmRlckxh
eWVyc1RvV2luZG93KDAsIEludFJlY3QoKSk7CisgICAgbV9sYXN0Rmx1c2hUaW1lID0gY3VycmVu
dFRpbWUoKTsKKyAgICBjb21wb3NpdGVMYXllcnNUb0NvbnRleHQoKTsKKworICAgIGd0a193aWRn
ZXRfcXVldWVfZHJhdyhHVEtfV0lER0VUKG1fd2ViVmlldykpOworCisgICAgLy8gSWYgaXQncyBi
ZWVuIGEgbG9uZyB0aW1lIHNpbmNlIHdlJ3ZlIGFjdHVhbGx5IHBhaW50ZWQsIHdoaWNoIG1lYW5z
IHRoYXQgZXZlbnRzIG1pZ2h0CisgICAgLy8gYmUgc3RhcnZpbmcgdGhlIG1haW4gbG9vcCwgd2Ug
c2hvdWxkIGZvcmNlIGEgZHJhdyBub3cuIFRoaXMgc2VlbXMgdG8gcHJldmVudCBkaXNwbGF5Cisg
ICAgLy8gbGFnIG9uIGh0dHA6Ly8yMDEyLmJlZXJjYW1wLmNvbS4KKyAgICBpZiAobV9yZWRyYXdQ
ZW5kaW5nVGltZSAmJiBjdXJyZW50VGltZSgpIC0gbV9yZWRyYXdQZW5kaW5nVGltZSA+IGdTY2hl
ZHVsZURlbGF5KQorICAgICAgICBnZGtfd2luZG93X3Byb2Nlc3NfdXBkYXRlcyhndGtfd2lkZ2V0
X2dldF93aW5kb3coR1RLX1dJREdFVChtX3dlYlZpZXcpKSwgRkFMU0UpOworICAgIGVsc2UgaWYg
KCFtX3JlZHJhd1BlbmRpbmdUaW1lKQorICAgICAgICBtX3JlZHJhd1BlbmRpbmdUaW1lID0gY3Vy
cmVudFRpbWUoKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bGF5
ZXJGbHVzaFRpbWVyRmlyZWQoKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9
IDA7CisgICAgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKIH0KIAogdm9pZCBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xh
eWVyKiwgZG91YmxlIHRpbWUpCkBAIC0yMDYsOSArMzU2LDEwIEBAIHZvaWQgQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQ6Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVy
KikKIAogdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cGFpbnRDb250ZW50cyhj
b25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0xh
eWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgcmVjdFRvUGFpbnQpCiB7Ci0gICAgY2Fp
cm9fdCogY3IgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIGNvcHlSZWN0
RnJvbUNhaXJvU3VyZmFjZVRvQ29udGV4dChtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS0+
Y2Fpcm9TdXJmYWNlKCksIGNyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnRTaXplKCksIHJlY3RUb1BhaW50KTsKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAgICBjb250
ZXh0LmNsaXAocmVjdFRvUGFpbnQpOworICAgIGNvcmUobV93ZWJWaWV3KS0+bWFpbkZyYW1lKCkt
PnZpZXcoKS0+cGFpbnQoJmNvbnRleHQsIHJlY3RUb1BhaW50KTsKKyAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKIH0KIAogYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd0RlYnVn
Qm9yZGVycyhjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCmluZGV4IDQxYzg0MDky
NDE4OWQ3YzhjNzAyOGQwMjQ3ZWY4ZjkyYWI4YjE5ZmQuLjc0MGUzYmJjYTUxNTFkMGRiYzIzNDlm
ZjUyYWY0YWU5NWE3YTdmNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtMTQyLDE3ICsxNDIsMTggQEAgdm9pZCBD
aHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIH0K
IH0KIAotRmxvYXRSZWN0IENocm9tZUNsaWVudDo6cGFnZVJlY3QoKQorc3RhdGljIEludFJlY3Qg
Z2V0V2ViVmlld1JlY3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBHdGtBbGxvY2F0
aW9uIGFsbG9jYXRpb247Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTgsIDApCi0gICAgZ3Rr
X3dpZGdldF9nZXRfYWxsb2NhdGlvbihHVEtfV0lER0VUKG1fd2ViVmlldyksICZhbGxvY2F0aW9u
KTsKLSNlbHNlCi0gICAgYWxsb2NhdGlvbiA9IEdUS19XSURHRVQobV93ZWJWaWV3KS0+YWxsb2Nh
dGlvbjsKLSNlbmRpZgorICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVCh3
ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwogICAgIHJldHVybiBJbnRSZWN0KGFsbG9jYXRpb24ueCwg
YWxsb2NhdGlvbi55LCBhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7CiB9CiAK
K0Zsb2F0UmVjdCBDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKK3sKKyAgICByZXR1cm4gZ2V0V2Vi
Vmlld1JlY3QobV93ZWJWaWV3KTsKK30KKwogdm9pZCBDaHJvbWVDbGllbnQ6OmZvY3VzKCkKIHsK
ICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKQEAgLTQx
OSwxMCArNDIwLDIwIEBAIHN0YXRpYyB2b2lkIGNsZWFyRXZlcnl3aGVyZUluQmFja2luZ1N0b3Jl
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNhaXJvX3QqIGNyKQogCiB2b2lkIENocm9tZUNsaWVu
dDo6d2lkZ2V0U2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgb2xkV2lkZ2V0U2l6ZSwgSW50U2l6
ZSBuZXdTaXplKQogewotICAgIFdpZGdldEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlID0gbV93
ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUuZ2V0KCk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBjb21wb3NpdGlu
Z0NvbnRleHQgPSBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
LmdldCgpOworICAgIGlmIChjb21wb3NpdGluZ0NvbnRleHQtPmVuYWJsZWQoKSkgeworICAgICAg
ICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZXNpemVS
b290TGF5ZXIobmV3U2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKIAogICAg
IC8vIEdyb3cgdGhlIGJhY2tpbmcgc3RvcmUgYnkgYXQgbGVhc3QgMS41IHRpbWVzIHRoZSBjdXJy
ZW50IHNpemUuIFRoaXMgcHJldmVudHMKICAgICAvLyBsb3RzIG9mIHVubmVjZXNzYXJ5IGFsbG9j
YXRpb25zIGR1cmluZyBhbiBvcGFxdWUgcmVzaXplLgorICAgIFdpZGdldEJhY2tpbmdTdG9yZSog
YmFja2luZ1N0b3JlID0gbV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUuZ2V0KCk7CisgICAg
aWYgKGJhY2tpbmdTdG9yZSAmJiBvbGRXaWRnZXRTaXplID09IG5ld1NpemUpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGlmIChiYWNraW5nU3RvcmUpIHsKICAgICAgICAgY29uc3QgSW50U2l6ZSYg
b2xkU2l6ZSA9IGJhY2tpbmdTdG9yZS0+c2l6ZSgpOwogICAgICAgICBpZiAobmV3U2l6ZS53aWR0
aCgpID4gb2xkU2l6ZS53aWR0aCgpKQpAQCAtNTI2LDIwICs1MzcsNiBAQCBzdGF0aWMgdm9pZCBw
YWludFdlYlZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldywgRnJhbWUqIGZyYW1lLCBSZWdpb24g
ZGlydHlSZWdpbwogICAgIGdjLnJlc3RvcmUoKTsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnQ6Omlu
dmFsaWRhdGVXaWRnZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBh
Y0NvbnRleHQgPSBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
LmdldCgpOwotICAgIGlmIChhY0NvbnRleHQtPmVuYWJsZWQoKSkgewotICAgICAgICBhY0NvbnRl
eHQtPnNjaGVkdWxlUm9vdExheWVyUmVwYWludChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQobV93
ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LngoKSwgcmVjdC55
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKLX0KLQogdm9pZCBDaHJvbWVDbGllbnQ6OnBlcmZvcm1BbGxQZW5kaW5nU2Nyb2xs
cygpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZSkKQEAgLTU0OSw3
ICs1NDYsNyBAQCB2b2lkIENocm9tZUNsaWVudDo6cGVyZm9ybUFsbFBlbmRpbmdTY3JvbGxzKCkK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVjdHNUb1Njcm9sbC5zaXplKCk7IGkrKykg
ewogICAgICAgICBJbnRSZWN0JiBzY3JvbGxSZWN0ID0gbV9yZWN0c1RvU2Nyb2xsW2ldOwogICAg
ICAgICBtX3dlYlZpZXctPnByaXYtPmJhY2tpbmdTdG9yZS0+c2Nyb2xsKHNjcm9sbFJlY3QsIG1f
c2Nyb2xsT2Zmc2V0c1tpXSk7Ci0gICAgICAgIGludmFsaWRhdGVXaWRnZXRSZWN0KHNjcm9sbFJl
Y3QpOworICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKG1fd2Vi
VmlldyksIHNjcm9sbFJlY3QueCgpLCBzY3JvbGxSZWN0LnkoKSwgc2Nyb2xsUmVjdC53aWR0aCgp
LCBzY3JvbGxSZWN0LmhlaWdodCgpKTsKICAgICB9CiAKICAgICBtX3JlY3RzVG9TY3JvbGwuY2xl
YXIoKTsKQEAgLTU4NSwxMiArNTgyLDcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnBhaW50KFdlYkNv
cmU6OlRpbWVyPENocm9tZUNsaWVudD4qKQogICAgIH0KIAogICAgIGNvbnN0IEludFJlY3QmIHJl
Y3QgPSBtX2RpcnR5UmVnaW9uLmJvdW5kcygpOwotICAgIGludmFsaWRhdGVXaWRnZXRSZWN0KHJl
Y3QpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIG1fd2ViVmlldy0+
cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPnN5bmNMYXllcnNOb3coKTsKLSAg
ICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZW5kZXJM
YXllcnNUb1dpbmRvdygwLCByZWN0KTsKLSNlbmRpZgorICAgIGd0a193aWRnZXRfcXVldWVfZHJh
d19hcmVhKEdUS19XSURHRVQobV93ZWJWaWV3KSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgbV9kaXJ0eVJlZ2lvbiA9IFJlZ2lvbigpOwog
ICAgIG1fbGFzdERpc3BsYXlUaW1lID0gY3VycmVudFRpbWUoKTsKQEAgLTYwNiw2ICs1OTgsMTEg
QEAgdm9pZCBDaHJvbWVDbGllbnQ6OnBhaW50KFdlYkNvcmU6OlRpbWVyPENocm9tZUNsaWVudD4q
KQogCiB2b2lkIENocm9tZUNsaWVudDo6Zm9yY2VQYWludCgpCiB7CisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0LT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAg
ICAgbV9mb3JjZVBhaW50ID0gdHJ1ZTsKICAgICBwYWludCgwKTsKICAgICBtX2ZvcmNlUGFpbnQg
PSBmYWxzZTsKQEAgLTYxNyw2ICs2MTQsMTQgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRh
dGVSb290Vmlldyhjb25zdCBJbnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUpCiAKIHZvaWQgQ2hyb21l
Q2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRSZWN0JiB1cGRh
dGVSZWN0LCBib29sIGltbWVkaWF0ZSkKIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGFjQ29udGV4dCA9IG1fd2Vi
Vmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7CisgICAgaWYg
KGFjQ29udGV4dC0+ZW5hYmxlZCgpKSB7CisgICAgICAgIGFjQ29udGV4dC0+c2V0Tm9uQ29tcG9z
aXRlZENvbnRlbnRzTmVlZERpc3BsYXkodXBkYXRlUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKKwogICAgIGlmICh1cGRhdGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIG1fZGlydHlSZWdpb24udW5pdGUodXBkYXRlUmVjdCk7CkBAIC02MjUsMTIgKzYz
MCwzNCBAQCB2b2lkIENocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXco
Y29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbAogCiB2b2lkIENocm9tZUNsaWVudDo6aW52
YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBi
b29sIGltbWVkaWF0ZSkKIHsKLSAgICBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyh1cGRh
dGVSZWN0LCBpbW1lZGlhdGUpOwogICAgIG1fYWRqdXN0bWVudFdhdGNoZXIudXBkYXRlQWRqdXN0
bWVudHNGcm9tU2Nyb2xsYmFyc0xhdGVyKCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGFjQ29udGV4dCA9IG1f
d2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0KCk7CisgICAg
aWYgKGFjQ29udGV4dC0+ZW5hYmxlZCgpKSB7CisgICAgICAgIGFjQ29udGV4dC0+c2V0Tm9uQ29t
cG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkodXBkYXRlUmVjdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKworICAgIGludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KHVwZGF0
ZVJlY3QsIGltbWVkaWF0ZSk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpzY3JvbGwoY29uc3Qg
SW50U2l6ZSYgZGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCiB7CisgICAgbV9hZGp1c3RtZW50V2F0Y2hlci51cGRhdGVBZGp1c3RtZW50
c0Zyb21TY3JvbGxiYXJzTGF0ZXIoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29tcG9zaXRpbmdDb250ZXh0
ID0gbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5nZXQoKTsK
KyAgICBpZiAoY29tcG9zaXRpbmdDb250ZXh0LT5lbmFibGVkKCkpIHsKKyAgICAgICAgQVNTRVJU
KCFyZWN0VG9TY3JvbGwuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFkZWx0YS5pc0VtcHR5
KCkpOworCisgICAgICAgIGNvbXBvc2l0aW5nQ29udGV4dC0+c2Nyb2xsTm9uQ29tcG9zaXRlZENv
bnRlbnRzKHJlY3RUb1Njcm9sbCwgZGVsdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKICAgICBtX3JlY3RzVG9TY3JvbGwuYXBwZW5kKHJlY3RUb1Njcm9sbCk7CiAgICAgbV9z
Y3JvbGxPZmZzZXRzLmFwcGVuZChkZWx0YSk7CiAKQEAgLTY1Nyw4ICs2ODQsNiBAQCB2b2lkIENo
cm9tZUNsaWVudDo6c2Nyb2xsKGNvbnN0IEludFNpemUmIGRlbHRhLCBjb25zdCBJbnRSZWN0JiBy
ZWN0VG9TY3JvbGwsIGNvbgogCiAgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShzY3JvbGxSZXBhaW50
UmVnaW9uKTsKICAgICBtX2Rpc3BsYXlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0KLSAgICBtX2Fk
anVzdG1lbnRXYXRjaGVyLnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNjcm9sbGJhcnNMYXRlcigpOwog
fQogCiBJbnRSZWN0IENocm9tZUNsaWVudDo6cm9vdFZpZXdUb1NjcmVlbihjb25zdCBJbnRSZWN0
JiByZWN0KSBjb25zdApAQCAtOTY2LDE3ICs5OTEsMzIgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmV4
aXRGdWxsU2NyZWVuRm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KikKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIENocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNz
TGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiByb290TGF5ZXIpCiB7Ci0gICAgbV93
ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+YXR0YWNoUm9vdEdy
YXBoaWNzTGF5ZXIocm9vdExheWVyKTsKKyAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dCogY29udGV4dCA9IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQuZ2V0KCk7CisgICAgYm9vbCB0dXJuaW5nT2ZmQ29tcG9zaXRpbmcgPSAhcm9vdExheWVyICYm
IGNvbnRleHQtPmVuYWJsZWQoKTsKKyAgICBib29sIHR1cm5pbmdPbkNvbXBvc2l0aW5nID0gcm9v
dExheWVyICYmICFjb250ZXh0LT5lbmFibGVkKCk7CisKKyAgICBjb250ZXh0LT5zZXRSb290Q29t
cG9zaXRpbmdMYXllcihyb290TGF5ZXIpOworCisgICAgaWYgKHR1cm5pbmdPbkNvbXBvc2l0aW5n
KSB7CisgICAgICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKKyAgICAgICAgbV93ZWJWaWV3LT5w
cml2LT5iYWNraW5nU3RvcmUgPSBXZWJDb3JlOjpXaWRnZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShH
VEtfV0lER0VUKG1fd2ViVmlldyksIEludFNpemUoMSwgMSkpOworICAgIH0KKworICAgIGlmICh0
dXJuaW5nT2ZmQ29tcG9zaXRpbmcpIHsKKyAgICAgICAgbV93ZWJWaWV3LT5wcml2LT5iYWNraW5n
U3RvcmUgPSBXZWJDb3JlOjpXaWRnZXRCYWNraW5nU3RvcmU6OmNyZWF0ZShHVEtfV0lER0VUKG1f
d2ViVmlldyksIGdldFdlYlZpZXdSZWN0KG1fd2ViVmlldykuc2l6ZSgpKTsKKyAgICAgICAgUmVm
UHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fd2ViVmlldy0+cHJpdi0+
YmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSkpOworICAgICAgICBjbGVhckV2ZXJ5d2hlcmVJ
bkJhY2tpbmdTdG9yZShtX3dlYlZpZXcsIGNyLmdldCgpKTsKKyAgICB9CiB9CiAKIHZvaWQgQ2hy
b21lQ2xpZW50OjpzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCkKIHsKLSAg
ICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5tYXJrRm9y
U3luYygpOworICAgIG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQtPnNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCiB2b2lkIENocm9tZUNsaWVudDo6c2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyU3luYygpCiB7Ci0gICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dC0+bWFya0ZvclN5bmMoKTsKKyAgICBtX3dlYlZpZXctPnBy
aXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5zY2hlZHVsZUxheWVyRmx1c2goKTsK
IH0KIAogQ2hyb21lQ2xpZW50OjpDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBDaHJvbWVDbGllbnQ6
OmFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oIGIvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKaW5kZXggZTVlMmZhMWViMDIy
ZmI2NDFkZjM2ZDJhY2ViMTJiZDBiY2U0MzQ3YS4uMjg0YmRhYTM2NjA2YWUxNWFiYmMxNTZiM2Vl
OGUyMTVkNzJjMWUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmgKQEAgLTE3OSw3ICsxNzksNiBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKICAgICAgICAgZG91YmxlIG1fbGFzdERpc3BsYXlUaW1lOwogICAgICAgICB1bnNpZ25lZCBp
bnQgbV9yZXBhaW50U29vblNvdXJjZUlkOwogCi0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVdpZGdl
dFJlY3QoY29uc3QgSW50UmVjdCYpOwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAg
ICAgUmVmUHRyPEVsZW1lbnQ+IG1fZnVsbFNjcmVlbkVsZW1lbnQ7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA5NzE3ODA2MzdhZjI3YTQw
MTRiMDQ1YTdiNWRmZDc0MzdkOGQyMDFjLi5hNTM2ODk0NGQzZmZmZjJjYzZmM2ExMzQzOTE0NzQ3
YzdhM2ZjYWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
CkBAIC02NzksOCArNjc5LDEwIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJh
dyhHdGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCogY3IpCiAKICAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2OwogI2lmIFVTRShURVhU
VVJFX01BUFBFUikKLSAgICBpZiAocHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQt
PnJlbmRlckxheWVyc1RvV2luZG93KGNyLCBjbGlwUmVjdCkpCisgICAgaWYgKHByaXYtPmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZW5kZXJMYXllcnNUb1dpbmRvdyhjciwgY2xpcFJl
Y3QpKSB7CisgICAgICAgIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9j
bGFzcyktPmRyYXcod2lkZ2V0LCBjcik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CiAj
ZW5kaWYKIAogICAgIGNhaXJvX3JlY3RhbmdsZV9saXN0X3QqIHJlY3RMaXN0ID0gY2Fpcm9fY29w
eV9jbGlwX3JlY3RhbmdsZV9saXN0KGNyKTsKQEAgLTg3NSwxNSArODc3LDE2IEBAIHN0YXRpYyB2
b2lkIHJlc2l6ZVdlYlZpZXdGcm9tQWxsb2NhdGlvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBH
dGtBbGxvY2F0aW9uKiBhCiAgICAgV2ViS2l0OjpDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCA9
IHN0YXRpY19jYXN0PFdlYktpdDo6Q2hyb21lQ2xpZW50Kj4ocGFnZS0+Y2hyb21lKCktPmNsaWVu
dCgpKTsKICAgICBjaHJvbWVDbGllbnQtPndpZGdldFNpemVDaGFuZ2VkKG9sZFNpemUsIEludFNp
emUoYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCkpOwogICAgIGNocm9tZUNs
aWVudC0+YWRqdXN0bWVudFdhdGNoZXIoKS0+dXBkYXRlQWRqdXN0bWVudHNGcm9tU2Nyb2xsYmFy
cygpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHdlYlZpZXctPnBy
aXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5yZXNpemVSb290TGF5ZXIoSW50U2l6
ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KSk7Ci0jZW5kaWYKIH0KIAog
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3NpemVfYWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24pCiB7CisgICAgR3RrQWxsb2NhdGlvbiBvbGRB
bGxvY2F0aW9uOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmb2xkQWxs
b2NhdGlvbik7CisKICAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJlbnRf
Y2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7CisgICAgaWYgKGFsbG9j
YXRpb24tPndpZHRoID09IG9sZEFsbG9jYXRpb24ud2lkdGggJiYgYWxsb2NhdGlvbi0+aGVpZ2h0
ID09IG9sZEFsbG9jYXRpb24uaGVpZ2h0KQorICAgICAgICByZXR1cm47CiAKICAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7CiAgICAgaWYgKCFndGtf
d2lkZ2V0X2dldF9tYXBwZWQod2lkZ2V0KSkgewpAQCAtMTAwMywxMCArMTAwNiw2IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld19yZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQogI2VuZGlm
CiAgICAgR2RrV2luZG93KiB3aW5kb3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0X2dldF9w
YXJlbnRfd2luZG93KHdpZGdldCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzX21hc2spOwogCi0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0
KS0+cHJpdjsKLSAgICBwcml2LT5oYXNOYXRpdmVXaW5kb3cgPSBnZGtfd2luZG93X2Vuc3VyZV9u
YXRpdmUod2luZG93KTsKLSNlbmRpZgogICAgIGd0a193aWRnZXRfc2V0X3dpbmRvdyh3aWRnZXQs
IHdpbmRvdyk7CiAgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpbmRvdywgd2lkZ2V0KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXll
clRyZWVIb3N0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
TGF5ZXJUcmVlSG9zdEd0ay5jcHAKaW5kZXggMWI5MWRlODRmMTJiMzdjNzVkZWI2ZGYwNDYzYWJh
MTg0MWRkNTc5MS4uYTQxMmE4NTAwOWZjOTNkODcwNzRjN2IzMjY1ZGJkOWQwZDFkOWUyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVI
b3N0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xh
eWVyVHJlZUhvc3RHdGsuY3BwCkBAIC03OCw3ICs3OCw3IEBAIEdMQ29udGV4dCogTGF5ZXJUcmVl
SG9zdEd0azo6Z2xDb250ZXh0KCkKICAgICBpZiAoIXdpbmRvd0hhbmRsZSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5k
b3cod2luZG93SGFuZGxlLCBHTENvbnRleHQ6OnNoYXJpbmdDb250ZXh0KCkpOworICAgIG1fY29u
dGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyh3aW5kb3dIYW5kbGUsIEdM
Q29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSwgR0xDb250ZXh0OjpTaW5nbGVCdWZmZXIpOwogICAg
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0No
YW5nZUxvZwppbmRleCA1MzM0OWVmNDkyYjY5MDg5Y2NjNDRhZDc5YWQwNDdiODBhNjU4NGE3Li5l
MjRmNTEwYTE4YWYxNGNmMWVlOWU2YjQwZTJhMTQ1YzU1YzUyYjNlIDEwMDY0NAotLS0gYS9DaGFu
Z2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDgtMjEgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFVzaW5n
IGEgbmF0aXZlIHdpbmRvdyBmb3IgdGhlIFdlYlZpZXcgYnJlYWtzIEd0a092ZXJsYXkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMDg1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6
IFBhcnNlIHhjb21wb3NpdGUgcGtnLWNvbmZpZyBmaWxlIGR1cmluZyBjb25maWd1cmF0aW9uLgor
CiAyMDEyLTA4LTIxICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEJ1aWxkIGZpeCBmb3IgV2luQ0UgYWZ0ZXIgcjExNTM0OC4KZGlmZiAtLWdpdCBhL2Nv
bmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA3OGYyMDY3ZTZlYjdmZmRjZmFlYWI3YjA3
YThjYmIxNjdkNmZmNGVlLi4yOGY5YWY4OGJlMzY1MmE0YmZhMmUyYjM4YTM3YzkzNGFhZGFhOTIy
IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC01NjUsNiAr
NTY1LDEyIEBAIEFDX0FSR19XSVRIKGFjY2VsZXJhdGlvbl9iYWNrZW5kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXSkKIEFDX01TR19SRVNVTFQoWyR3aXRoX2FjY2VsZXJhdGlvbl9iYWNr
ZW5kXSkKIAoraWYgdGVzdCAiJHdpdGhfYWNjZWxlcmF0aW9uX2JhY2tlbmQiID0gIm9wZW5nbCI7
IHRoZW4KKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbWENPTVBPU0lURV0sIFt4Y29tcG9zaXRlXSk7
CisgICAgQUNfU1VCU1QoWENPTVBPU0lURV9DRkxBR1MpCisgICAgQUNfU1VCU1QoWENPTVBPU0lU
RV9MSUJTKQorZmkKKwogIyBPcGVuR0wgaXMgdHVybmVkIG9uIGJ5IGRlZmF1bHQgKGFsb25nIHdp
dGggV2ViR0wgYW5kIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nKSwgYnV0IGlmCiAjIENsdXR0ZXIg
aXMgY2hvc2VuIGFzIHRoZSBhY2NlbGVyYXRlZCBkcmF3aW5nIGJhY2tlbmQsIHdlIHdhbnQgdG8g
ZGlzYWJsZSBpdC4gQ09HTCBkb2VzIAogIyBub3QgcGxheSB3ZWxsIHdpdGggT3BlbkdMLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159728</attachid>
            <date>2012-08-21 11:33:08 -0700</date>
            <delta_ts>2012-08-21 12:45:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90085-20120821113307.patch</filename>
            <type>text/plain</type>
            <size>52953</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjk2MjQ4MWM2YTY5OWJh
NWRkOTA2OTY5MjQ4MjBiOWI1MzQ0MGZhOC4uMGIwMTM2MmQ4Y2FmMjYyOTEyZmYzNWNiZDBlOTNl
NTY1ZDkyNDdhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA4LTIxICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBVc2lu
ZyBhIG5hdGl2ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
VGhpcyB3aWxsIGJlIGNvdmVyZWQgYnkgcGl4ZWwgdGVzdCBmb3IgYWNjZWxlcmF0ZWQKKyAgICAg
ICAgY29tcG9zaXRpbmcgd2hlbiB0aGV5IGFyZSBhY3RpdmF0ZWQuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbTogQWRkIFhDb21wb3NpdGUgbGlicmFyaWVzIHRvIHRoZSBsaW5rZXIgbGlzdC4K
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3cgZmlsZXMgdG8gdGhlIHNvdXJjZSBsaXN0LgorICAgICAgICBNYWtlIGEgbmV3IHNlY3Rp
b24gZm9yIEdMWCBzcGVjaWZpYyBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
bHgvR0xDb250ZXh0R0xYLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dEdMWDo6c2hh
cmVkRGlzcGxheSk6IEV4cG9zZSBzaGFyZWREaXNwbGF5IGFzIGEgc3RhdGljIG1ldGhvZAorICAg
ICAgICBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgYnkgb3RoZXIgWDExIHNwZWNpZmljIGNvZGUu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oOiBEaXR0by4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwOiBB
ZGRlZC4gQW4gaW1wbGVtZW50YXRpb24gb2YgYSBHTCBzdXJmYWNlCisgICAgICAgIHRoYXQgcmVu
ZGVycyB0byBhbiBYLXdpbmRvdyB3aGljaCByZWRpcmVjdHMgdG8gYSBwaXhtYXAuCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Lmg6IEFkZGVkLgorCiAy
MDEyLTA4LTIxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI2MDc2LCByMTI2MDk5LCBhbmQgcjEy
NjEwNi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCA1MTFhMDg3MWE0MTdhN2VlNDJkNmJiMmFkNTM1NWMw
ZDZhYjE0NjA3Li4xZGFmODllNGE0ZDc5YmFhNWEyNmIwZjIzYmVmNTlkYzVhNTBhOTBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTItMDgtMjEgIE1hcnRpbiBSb2JpbnNv
biAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFVzaW5nIGEgbmF0aXZl
IHdpbmRvdyBmb3IgdGhlIFdlYlZpZXcgYnJlYWtzIEd0a092ZXJsYXkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMDg1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV3cml0ZSBBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dCBmb3IgVGV4dHVyZU1hcHBlckdMIHRvIGJlIG1vcmUgc2ltaWxhciB0bwor
ICAgICAgICB0aGUgV2ViS2l0MiBMYXllclRyZWVIb3N0IGFuZCBzd2l0Y2ggZnJvbSByZW5kZXJp
bmcgZGlyZWN0bHkgdG8gdGhlIHdpZGdldCB3aW5kb3cKKyAgICAgICAgdG8gYSB3aW5kb3cgcmVk
aXJlY3RlZCB0byBhIHBpeG1hcCB2aWEgWENvbXBvc2l0ZS4gVGhlIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0CisgICAgICAgIG5vdyBoYW5kbGVzIHBhaW50aW5nIHRoZSBub24tY29tcG9z
aXRlZCBjb250ZW50IGl0c2VsZiBhbmQgbm8gbG9uZ2VyIHJlbGllcyBvbiB0aGUKKyAgICAgICAg
Q2hyb21lQ2xpZW50IGJhY2tpbmcgc3RvcmUuCisKKyAgICAgICAgVGhpcyBmaXhlcyBpc3N1ZXMg
d2l0aCB1c2luZyBHdGtPdmVybGF5IFdlYktpdFdlYlZpZXcgYXMgd2VsbCBhcyBtYWtpbmcgaXQg
cG9zc2libGUKKyAgICAgICAgdG8gcnVuIHBpeGVsIHRlc3RzIHdpdGggYWNjZWxlcmF0ZWQgY29t
cG9zaXRpbmcgdHVybmVkIG9uLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQuaDoKKyAgICAgICAgKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dEdMLmNwcDoKKyAgICAgICAgUmVuYW1lIHNvbWUgbWV0aG9kcyB0byBtYWtlIHRoZW0g
bW9yZSBzaW1pbGFyIHRvIExheWVyVHJlZUhvc3QuIE5vdyB3ZSB3YWl0IHRvIHJlbmRlcgorICAg
ICAgICB0aGUgT3BlbkdMIGNvbnRleHQgdG8gdGhlIHdpbmRvdyB1bnRpbCB0aGUgd2lkZ2V0J3Mg
ZHJhdyBzaWduYWwuIEVzY2FwZSBvdXQgb2YgYWxsCisgICAgICAgIG1ldGhvZHMgZWFybHkgaWYg
YWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgZGlzYWJsZWQuCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDogQWx3YXlzIGNoZWNrIGlmIGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nIGlzIG9uCisgICAgICAgIGJlZm9yZSBjYWxsaW5nIGludG8gQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0NvbnRleHQgbWV0aG9kcy4gV2hlbiBBQyBpcyBvbiwgbmV2ZXIgcGFpbnQKKyAg
ICAgICAgdGhlIGJhY2tpbmcgc3RvcmUsIGRlZmVycmluZyBpbW1lZGlhdGVseSB0byB0aGUgQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuIFdoZW4KKyAgICAgICAgQUMgaXMgdHVybmVkIG9u
IHRoZSBiYWNraW5nIHN0b3JlIG5vdyBzaHJpbmtzIHRvIGEgc21hbGwgc2l6ZSB0byBzYXZlIG1l
bW9yeS4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgIChyZXNp
emVXZWJWaWV3RnJvbUFsbG9jYXRpb24pOiBDaHJvbWVDbGllbnQgaXMgbm93IHJlc3BvbnNpYmxl
IGZvciB0YWxraW5nIHRvIHRoZQorICAgICAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dCBkaXJlY3RseS4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19zaXplX2FsbG9jYXRlKTogRXhp
dCBlYXJseSBpZiB0aGUgYWxsb2NhdGlvbiBpcyBub3QgYSByZXNpemUuIFRoaXMKKyAgICAgICAg
bWFrZXMgc29tZSBkZWVwZXIgbG9naWMgYSBiaXQgc2ltcGxlciBhbmQgYXZvaWRzIGFjY2lkZW50
YWxseSBkb2luZyB0b28gbXVjaCB3b3JrIGZvcgorICAgICAgICB3aWRnZXQgbW92ZW1lbnQuCisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfcmVhbGl6ZSk6IFdlIG5vIGxvbmdlciBuZWVkIGEgbmF0
aXZlIHdpbmRvdy4KKwogMjAxMi0wOC0xNSAgSm9hbm1hcmllIERpZ2dzICA8amRpZ2dzQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0d0a10gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldCgpIGZhaWxz
IGZvciB0YWJsZSBjZWxscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDAyYmU3NGJhODhkZmQ4ZWVmNWViYzE1MmQy
OTcyZTZjNTJjY2NjMWMuLjBjNmFhY2ZiZTQ2YTEzNjdkODE3MDg3NDJmYjQ0NmEyZmExMDZkYzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wOC0yMSAgTWFydGluIFJvYmluc29u
ICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXNpbmcgYSBuYXRpdmUg
d2luZG93IGZvciB0aGUgV2ViVmlldyBicmVha3MgR3RrT3ZlcmxheQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAwODUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgWENvbXBvc2l0ZSBsaWJyYXJpZXMg
dG8gdGhlIGxpbmtlciBsaXN0IGZvciBXZWJLaXQyLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06IEFkZCBYQ29tcG9zaXRlCisKIDIwMTItMDgtMjEgIEplc3NlIHZhbiBkZW4gS2llYm9vbSAg
PGplc3NldmRrQGdub21lLm9yZz4gYW5kIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBkZXN0cm95IG5vdGlmeSBmb3IgcmVnaXN0
ZXJfdXJpX3NjaGVtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0g
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBmOWVhYjI0NDE4NjUzZWQ1MzI5
NmRiZjIwYjkzNmE3ZDNlNThiNGJmLi4zOTQwOTg2MTZlNTVkNmEyOWM3NDFmZjBmOTlmMDg3M2Jh
NTc0NTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTA1Niw2ICsxMDU2LDcgQEAgbGliV2Vi
Q29yZUd0a19sYV9DUFBGTEFHUyA9IFwKIAkkKExJQlhTTFRfQ0ZMQUdTKSBcCiAJJChTUUxJVEUz
X0NGTEFHUykgXAogCSQoVU5JQ09ERV9DRkxBR1MpIFwKKwkkKFhDT01QT1NJVEVfQ0ZMQUdTKSBc
CiAJJChYUkVOREVSX0NGTEFHUykgXAogCSQoWFRfQ0ZMQUdTKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCAyYmM5ODc5N2YxN2U4NGFkMWQ3OGI4NTE5YmNlYmEzYWIxMzkzYTYz
Li5kNDg3MjcxNjZmYzgwMjU5NDg3ZWFiYzNmMzQxOGM3OGQyYWRhNDFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU4NzUsNiArNTg3NSw4IEBAIHdlYmNvcmVndGtfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVY
MTEuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3Np
dGVXaW5kb3cuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0Ymlu
LmMgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwCmluZGV4
IDk0OTZmYzkxYWYzMTNkMDFiZDQwZTliYjllMzRhMDg2YjJjMTYxNTIuLjk1NDBiODZhMGJhZjQ0
NmJmYjZmNjlkMGJkNjg2OTI3ZjVlNzkyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwCkBAIC0zMSw3ICszMSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGJlY2F1c2UgaXQgbWlnaHQgbGVhZCB0byBjcmFzaGVz
IGluIHNvbWUgZHJpdmVycyAoZmdscngpLiBXZSB1c2UgYSBzaGFyZWQgZGlzcGxheQogLy8gcG9p
bnRlciBoZXJlLgogc3RhdGljIERpc3BsYXkqIGdTaGFyZWREaXNwbGF5ID0gMDsKLXN0YXRpYyBE
aXNwbGF5KiBzaGFyZWREaXNwbGF5KCkKK0Rpc3BsYXkqIEdMQ29udGV4dEdMWDo6c2hhcmVkRGlz
cGxheSgpCiB7CiAgICAgaWYgKCFnU2hhcmVkRGlzcGxheSkKICAgICAgICAgZ1NoYXJlZERpc3Bs
YXkgPSBYT3BlbkRpc3BsYXkoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKaW5kZXggNWU4YzYxY2U0ZTQxYzc2YjZjOGU5YjU1
MDg4Mzc1YTVmODRjYzQzYy4uYjNiMThjMTU2Y2MzMWNkYzZiMTMyZGEwN2UxMmZlMmU3MzI4ZGU2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29u
dGV4dEdMWC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENv
bnRleHRHTFguaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBH
TENvbnRleHRHTFggOiBwdWJsaWMgR0xDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShHTENvbnRleHRHTFgpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMQ29udGV4
dEdMWD4gY3JlYXRlQ29udGV4dChYSUQsIEdMQ29udGV4dCogc2hhcmluZ0NvbnRleHQgPSAwKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxHTENvbnRleHRHTFg+IGNyZWF0ZUNvbnRleHQoWElEIHdp
bmRvdywgR0xDb250ZXh0KiBzaGFyaW5nQ29udGV4dCk7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8
R0xDb250ZXh0R0xYPiBjcmVhdGVXaW5kb3dDb250ZXh0KFhJRCB3aW5kb3csIEdMQ29udGV4dCog
c2hhcmluZ0NvbnRleHQpOwogCiAgICAgdmlydHVhbCB+R0xDb250ZXh0R0xYKCk7CkBAIC00OCw2
ICs0OCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuUmVuZGVyVG9EZWZhdWx0RnJh
bWVidWZmZXIoKTsKICAgICB2aXJ0dWFsIEludFNpemUgZGVmYXVsdEZyYW1lQnVmZmVyU2l6ZSgp
OwogCisgICAgc3RhdGljIERpc3BsYXkqIHNoYXJlZERpc3BsYXkoKTsKKwogI2lmIFVTRSgzRF9H
UkFQSElDUykKICAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1D
b250ZXh0KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMDllZWZi
MDE3YmY4YTk5MzQ2ZDk3MTA0OGMyZWQyOTU3NDMzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuY3BwCkBA
IC0wLDAgKzEsMjE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdy5oIgorCisjaW5jbHVkZSAiR0xDb250ZXh0
R0xYLmgiCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNv
bXBvc2l0ZS5oPgorI2luY2x1ZGUgPGNhaXJvLXhsaWIuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5o
PgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzc093blB0cjxSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdz4gUmVkaXJl
Y3RlZFhDb21wb3NpdGVXaW5kb3c6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3coc2l6ZSkpOwor
fQorCitSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6UmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3coY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fd2luZG93KDApCisgICAgLCBtX3BhcmVu
dFdpbmRvdygwKQorICAgICwgbV9waXhtYXAoMCkKKyAgICAsIG1fc3VyZmFjZSgwKQorICAgICwg
bV9wZW5kaW5nUmVzaXplU291cmNlSWQoMCkKKyAgICAsIG1fbmVlZHNOZXdQaXhtYXBBZnRlclJl
c2l6ZShmYWxzZSkKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0R0xYOjpzaGFy
ZWREaXNwbGF5KCk7CisKKyAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIGNvZGUgZnJvbSBDaHJvbWl1
bTogc3JjL2NvbnRlbnQvY29tbW9uL2dwdS9pbWFnZV90cmFuc3BvcnRfc3VyZmFjZV9saW51eC5j
YworICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7CisgICAgd2luZG93
QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IFRydWU7CisgICAgbV9wYXJlbnRXaW5kb3cg
PSBYQ3JlYXRlV2luZG93KGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJvb3RXaW5kb3coZGlzcGxheSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTAwLCAtMTAwLCAxLCAxLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW5wdXRPdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b3B5RnJvbVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXT3Zl
cnJpZGVSZWRpcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW5k
b3dBdHRyaWJ1dGVzKTsKKyAgICBYTWFwV2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsK
KworICAgIHdpbmRvd0F0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IFN0cnVjdHVyZU5vdGlmeU1hc2s7
CisgICAgd2luZG93QXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IEZhbHNlOworICAgIG1f
d2luZG93ID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3BhcmVudFdpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5RnJvbVBhcmVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRPdXRwdXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvcHlGcm9tUGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
V0V2ZW50TWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd0F0dHJpYnV0
ZXMpOworICAgIFhNYXBXaW5kb3coZGlzcGxheSwgbV93aW5kb3cpOworCisgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgWEV2ZW50IGV2ZW50OworICAgICAgICBYV2luZG93RXZlbnQoZGlzcGxheSwg
bV93aW5kb3csIFN0cnVjdHVyZU5vdGlmeU1hc2ssICZldmVudCk7CisgICAgICAgIGlmIChldmVu
dC50eXBlID09IE1hcE5vdGlmeSAmJiBldmVudC54bWFwLndpbmRvdyA9PSBtX3dpbmRvdykKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBYU2VsZWN0SW5wdXQoZGlzcGxheSwgbV93aW5k
b3csIE5vRXZlbnRNYXNrKTsKKworICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5
LCBtX3dpbmRvdywgQ29tcG9zaXRlUmVkaXJlY3RNYW51YWwpOworCisgICAgcmVzaXplKHNpemUp
OworICAgIHJlc2l6ZUxhdGVyKCk7IC8vIEZvcmNlIHVwZGF0ZSBvZiB0aGUgdXNhYmxlIGFyZWEu
Cit9CisKK1JlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojp+UmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3coKQoreworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHTENvbnRleHRHTFg6OnNoYXJlZERp
c3BsYXkoKTsKKyAgICBpZiAobV93aW5kb3cpCisgICAgICAgIFhEZXN0cm95V2luZG93KGRpc3Bs
YXksIG1fd2luZG93KTsKKyAgICBpZiAobV9wYXJlbnRXaW5kb3cpCisgICAgICAgIFhEZXN0cm95
V2luZG93KGRpc3BsYXksIG1fcGFyZW50V2luZG93KTsKKyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4
bWFwU3VyZmFjZSgpOworCisgICAgaWYgKG1fcGVuZGluZ1Jlc2l6ZVNvdXJjZUlkKQorICAgICAg
ICBnX3NvdXJjZV9yZW1vdmUobV9wZW5kaW5nUmVzaXplU291cmNlSWQpOworfQorCitnYm9vbGVh
biBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6cmVzaXplTGF0ZXJDYWxsYmFjayhSZWRpcmVj
dGVkWENvbXBvc2l0ZVdpbmRvdyogd2luZG93KQoreworICAgIHdpbmRvdy0+cmVzaXplTGF0ZXIo
KTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3c6OnJlc2l6ZUxhdGVyKCkKK3sKKyAgICBtX3VzYWJsZVNpemUgPSBtX3NpemU7CisgICAgbV9w
ZW5kaW5nUmVzaXplU291cmNlSWQgPSAwOworfQorCit2b2lkIFJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93OjpyZXNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICAvLyBXaGVuIGVubGFy
Z2luZyBhIHJlZGlyZWN0ZWQgd2luZG93LCBmb3IgdGhlIGZpcnN0IHJlbmRlciwgdGhlIG5ld2x5
IGV4cG9zZWQgYXJlYXMgc2VlbQorICAgIC8vIHRvIGNvbnRhaW4gdW5pbml0aWFsaXplZCBtZW1v
cnkgb24gSW50ZWwgZHJpdmVycy4gVG8gYXZvaWQgcmVuZGVyaW5nIGFydGlmYWN0cyB3aGlsZQor
ICAgIC8vIHJlc2l6aW5nLCB3ZSB3YWl0IHRvIHJlbmRlciB0aG9zZSBuZXcgYXJlYXMgdW50aWwg
YWZ0ZXIgYSBzaG9ydCB0aW1lb3V0LiBUaHVzLCB0aGUKKyAgICAvLyAidXNhYmxlIHNpemUiIG9m
IHRoZSB3aW5kb3cgaXMgc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgd2luZG93
IGZvciB0aGUgZmlyc3QKKyAgICAvLyByZW5kZXIuCisgICAgbV91c2FibGVTaXplID0gc2l6ZS5z
aHJ1bmtUbyhtX3VzYWJsZVNpemUpOworICAgIGlmIChtX3VzYWJsZVNpemUud2lkdGgoKSA8IHNp
emUud2lkdGgoKSB8fCBtX3VzYWJsZVNpemUuaGVpZ2h0KCkgPCBzaXplLmhlaWdodCgpKSB7IC8v
IFRoZSB3aW5kb3cgaXMgZ3Jvd2luZy4KKyAgICAgICAgLy8gV2UncmUgYmVpbmcgdmVyeSBjb25z
ZXJ2YXRpdmUgaGVyZS4gSW5zdGVhZCBvZiByaXNraW5nIGRyYXdpbmcgYXJ0aWZhY3RzIHdoaWxl
IGRvaW5nIGNvbnRpbnVvdXMKKyAgICAgICAgLy8gb3BhcXVlIHJlc2l6aW5nLCB3ZSBlcnIgb24g
dGhlIHNpZGUgb2YgaGF2aW5nIG1vcmUgdW5kcmF3biBhcmVhcy4KKyAgICAgICAgaWYgKG1fcGVu
ZGluZ1Jlc2l6ZVNvdXJjZUlkKQorICAgICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcGVuZGlu
Z1Jlc2l6ZVNvdXJjZUlkKTsKKyAgICAgICAgbV9wZW5kaW5nUmVzaXplU291cmNlSWQgPSBnX3Rp
bWVvdXRfYWRkKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlc2l6ZUxhdGVyQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0
R0xYOjpzaGFyZWREaXNwbGF5KCk7CisgICAgWFJlc2l6ZVdpbmRvdyhkaXNwbGF5LCBtX3dpbmRv
dywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBnbFhXYWl0WCgpOworCisgICAg
Ly8gVGhpcyBzd2FwIGlzIGJhc2VkIG9uIGNvZGUgaW4gQ2hyb21pdW0uIEl0IHRyaWVzIHRvIHdv
cmstYXJvdW5kIGEgYnVnIGluIHRoZSBJbnRlbCBkcml2ZXJzCisgICAgLy8gd2hlcmUgYSBzd2Fw
IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZyb250IGFuZCBiYWNrIGJ1ZmZlcnMgYXJlIHBy
b3Blcmx5IHJlc2l6ZWQuCisgICAgaWYgKGNvbnRleHQoKSA9PSBHTENvbnRleHQ6OmdldEN1cnJl
bnQoKSkKKyAgICAgICAgY29udGV4dCgpLT5zd2FwQnVmZmVycygpOworCisgICAgbV9zaXplID0g
c2l6ZTsKKyAgICBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemUgPSB0cnVlOworfQorCitHTENv
bnRleHQqIFJlZGlyZWN0ZWRYQ29tcG9zaXRlV2luZG93Ojpjb250ZXh0KCkKK3sKKyAgICBpZiAo
bV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOworCisgICAgQVNTRVJU
KG1fd2luZG93KTsKKyAgICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JX
aW5kb3cobV93aW5kb3csIEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKSk7CisgICAgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsKK30KKwordm9pZCBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvdzo6
Y2xlYW51cFBpeG1hcEFuZFBpeG1hcFN1cmZhY2UoKQoreworICAgIGlmICghbV9waXhtYXApCisg
ICAgICAgIHJldHVybjsKKworICAgIFhGcmVlUGl4bWFwKGNhaXJvX3hsaWJfc3VyZmFjZV9nZXRf
ZGlzcGxheShtX3N1cmZhY2UuZ2V0KCkpLCBtX3BpeG1hcCk7CisgICAgbV9waXhtYXAgPSAwOwor
ICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogUmVkaXJlY3Rl
ZFhDb21wb3NpdGVXaW5kb3c6OmNhaXJvU3VyZmFjZUZvcldpZGdldChHdGtXaWRnZXQqIHdpZGdl
dCkKK3sKKyAgICBpZiAoIW1fbmVlZHNOZXdQaXhtYXBBZnRlclJlc2l6ZSAmJiBtX3N1cmZhY2Up
CisgICAgICAgIHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7CisKKyAgICBtX25lZWRzTmV3UGl4bWFw
QWZ0ZXJSZXNpemUgPSBmYWxzZTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIG5l
dyBwaXhtYXAgYmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIERpc3BsYXkgcG9pbnRlciBhcyB0aGUg
dGFyZ2V0CisgICAgLy8gd2lkZ2V0IG9yIGVsc2UgZHJhd2luZyBzcGVlZCBjYW4gYmUgMTAweCBz
bG93ZXIuCisgICAgRGlzcGxheSogbmV3UGl4bWFwRGlzcGxheSA9IEdES19ESVNQTEFZX1hESVNQ
TEFZKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkod2lkZ2V0KSk7CisgICAgUGl4bWFwIG5ld1BpeG1h
cCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG5ld1BpeG1hcERpc3BsYXksIG1fd2luZG93
KTsKKyAgICBpZiAoIW5ld1BpeG1hcCkgeworICAgICAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFw
U3VyZmFjZSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBYV2luZG93QXR0cmli
dXRlcyB3aW5kb3dBdHRyaWJ1dGVzOworICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMobmV3
UGl4bWFwRGlzcGxheSwgbV93aW5kb3csICZ3aW5kb3dBdHRyaWJ1dGVzKSkgeworICAgICAgICBj
bGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOworICAgICAgICBYRnJlZVBpeG1hcChuZXdQ
aXhtYXBEaXNwbGF5LCBuZXdQaXhtYXApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9feGxp
Yl9zdXJmYWNlX2NyZWF0ZShuZXdQaXhtYXBEaXNwbGF5LCBuZXdQaXhtYXAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2luZG93QXR0cmlidXRlcy52aXN1YWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworCisgICAgLy8gTnZpZGlhIGRyaXZlcnMg
c2VlbSB0byBwcmVwYXJlIHRoZWlyIHJlZGlyZWN0ZWQgd2luZG93IHBpeG1hcCBhc3luY2hyb25v
dXNseSwgc28gZm9yIGEgZmV3IGZyYWN0aW9ucworICAgIC8vIG9mIGEgc2Vjb25kIGFmdGVyIGVh
Y2ggcmVzaXplLCB3aGlsZSBkb2luZyBjb250aW51b3VzIHJlc2l6aW5nICh3aGljaCBjb25zdGFu
dGx5IGRlc3Ryb3lzIGFuZCBjcmVhdGVzCisgICAgLy8gcGl4bWFwIHdpbmRvdy1iYWNraW5ncyks
IHRoZSBwaXhtYXAgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMg
aXNzdWUsIHBhaW50IHRoZSBvbGQKKyAgICAvLyBwaXhtYXAgdG8gdGhlIG5ldyBvbmUgdG8gcHJv
cGVybHkgaW5pdGlhbGl6ZSBpdC4KKyAgICBpZiAobV9zdXJmYWNlKSB7CisgICAgICAgIFJlZlB0
cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7
CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLmdldCgpLCAxLCAxLCAxKTsKKyAgICAg
ICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZh
Y2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNhaXJvX3BhaW50
KGNyLmdldCgpKTsKKyAgICB9CisKKyAgICBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgp
OworICAgIG1fcGl4bWFwID0gbmV3UGl4bWFwOworICAgIG1fc3VyZmFjZSA9IG5ld1N1cmZhY2U7
CisKKyAgICByZXR1cm4gbV9zdXJmYWNlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhD
b21wb3NpdGVXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZWRpcmVjdGVk
WENvbXBvc2l0ZVdpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5ZWM3ZWRiMjZiOGRlYTQyNmZiZjRlNjRh
OTVlMjU5ZGE0ZDdhMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaApAQCAtMCwwICsxLDcxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCBJZ2FsaWEgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisjZGVmaW5l
ICBSZWRpcmVjdGVkWENvbXBvc2l0ZVdpbmRvd19oCisKKyNpbmNsdWRlICJHTENvbnRleHRHTFgu
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKwordHlw
ZWRlZiB1bnNpZ25lZCBsb25nIFBpeG1hcDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5k
b3cgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlZGlyZWN0ZWRYQ29tcG9zaXRl
V2luZG93PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgflJlZGlyZWN0ZWRY
Q29tcG9zaXRlV2luZG93KCk7CisKKyAgICBjb25zdCBJbnRTaXplJiB1c2FibGVTaXplKCkgeyBy
ZXR1cm4gbV91c2FibGVTaXplOyB9CisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIHsgcmV0dXJu
IG1fc2l6ZTsgfQorCisgICAgdm9pZCByZXNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSk7Cisg
ICAgR0xDb250ZXh0KiBjb250ZXh0KCk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZh
Y2VGb3JXaWRnZXQoR3RrV2lkZ2V0Kik7CisKK3ByaXZhdGU6CisgICAgUmVkaXJlY3RlZFhDb21w
b3NpdGVXaW5kb3coY29uc3QgSW50U2l6ZSYpOworCisgICAgc3RhdGljIGdib29sZWFuIHJlc2l6
ZUxhdGVyQ2FsbGJhY2soUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cqKTsKKyAgICB2b2lkIHJl
c2l6ZUxhdGVyKCk7CisgICAgdm9pZCBjbGVhbnVwUGl4bWFwQW5kUGl4bWFwU3VyZmFjZSgpOwor
CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgSW50U2l6ZSBtX3VzYWJsZVNpemU7CisgICAgV2lu
ZG93IG1fd2luZG93OworICAgIFdpbmRvdyBtX3BhcmVudFdpbmRvdzsKKyAgICBQaXhtYXAgbV9w
aXhtYXA7CisgICAgT3duUHRyPEdMQ29udGV4dD4gbV9jb250ZXh0OworICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICB1bnNpZ25lZCBpbnQgbV9wZW5kaW5nUmVzaXpl
U291cmNlSWQ7CisgICAgYm9vbCBtX25lZWRzTmV3UGl4bWFwQWZ0ZXJSZXNpemU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZWRpcmVjdGVkWENvbXBvc2l0ZVdp
bmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IDIxNTU3NmU1MTgxNGNjZjEyY2Mw
ZWZlYjY5MmVkOWRhN2IyNDk0NTIuLjAwNDczZjlkNTBiNWE3NTdhNTA1MDgxYmZmOGYyYjE0OGQz
YTZlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDEsNiArMTAxLDcgQEAgbGli
d2Via2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01J
Tk9SX1ZFUlNJT05AX2xhX0xJQkEKIAkkKFBOR19MSUJTKSBcCiAJJChTUUxJVEUzX0xJQlMpIFwK
IAkkKFVOSUNPREVfTElCUykgXAorCSQoWENPTVBPU0lURV9MSUJTKSBcCiAJJChYUkVOREVSX0xJ
QlMpIFwKIAkkKFhUX0xJQlMpIFwKIAkkKFdJTk1NX0xJQlMpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dC5oCmluZGV4IDI0YTYxNGRiNDVmNGYyZjVjYzMyOWQ0ODhmNGExODdhZjk0MWQ4
MTEuLjI5NjE3ZTc2NjFkODY4NWNiMTVjYTk4YzU0M2E4Mzg4MTBlYjY1MDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQuaApAQCAtMjgsMTAgKzI4LDEyIEBACiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyTGF5ZXIuaCIKKyNlbmRpZgorCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQog
I2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVkaXJlY3RlZFhDb21wb3NpdGVXaW5kb3cuaCIKICNlbmRpZgog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtNDcsMTEgKzQ5LDkgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgfkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
KCk7Ci0gICAgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKik7Ci0gICAgdm9pZCBzY2hlZHVsZVJvb3RMYXllclJlcGFpbnQoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotICAgIHZvaWQgbWFya0ZvclN5bmMoKTsKLSAgICB2b2lkIHN5bmNMYXllcnNU
aW1lb3V0KCk7Ci0gICAgdm9pZCBzeW5jTGF5ZXJzTm93KCk7CisgICAgdm9pZCBzZXRSb290Q29t
cG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXROb25D
b21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cisg
ICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKICAgICB2b2lkIHJlc2l6ZVJvb3RMYXllcihj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAgYm9vbCByZW5kZXJMYXllcnNUb1dpbmRvdyhj
YWlyb190KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogICAgIGJvb2wgZW5h
YmxlZCgpOwpAQCAtNjMsMjIgKzYzLDQwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2hv
d0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikgY29uc3Q7CiAKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2b2lkIGNvbXBvc2l0
ZUxheWVyc1RvQ29udGV4dCgpOworICAgIHZvaWQgZmx1c2hBbmRSZW5kZXJMYXllcnMoKTsKKyAg
ICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIHZvaWQgc2Nyb2xsTm9uQ29t
cG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CisKIHByaXZhdGU6CiAgICAgV2ViS2l0
V2ViVmlldyogbV93ZWJWaWV3OwotICAgIHVuc2lnbmVkIGludCBtX3N5bmNUaW1lckNhbGxiYWNr
SWQ7CisgICAgdW5zaWduZWQgaW50IG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZDsKIAogI2lm
IFVTRShDTFVUVEVSKQogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fcm9vdEdyYXBoaWNz
TGF5ZXI7CiAgICAgR3RrV2lkZ2V0KiBtX3Jvb3RMYXllckVtYmVkZGVyOworI2VsaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQorICAgIE93blB0cjxXZWJDb3JlOjpSZWRpcmVjdGVkWENvbXBvc2l0
ZVdpbmRvdz4gbV9yZWRpcmVjdGVkV2luZG93OworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOworICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CisgICAgZG91YmxlIG1fbGFzdEZsdXNoVGltZTsKKyAg
ICBkb3VibGUgbV9yZWRyYXdQZW5kaW5nVGltZTsKKyAgICBib29sIG1fbmVlZHNFeHRyYUZsdXNo
OworCisgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZCgpOworICAgIHZvaWQgc3RvcEFueVBl
bmRpbmdMYXllckZsdXNoKCk7CisgICAgc3RhdGljIGdib29sZWFuIGxheWVyRmx1c2hUaW1lckZp
cmVkQ2FsbGJhY2soQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqKTsKKyAgICBXZWJDb3Jl
OjpHTENvbnRleHQqIHByZXBhcmVGb3JSZW5kZXJpbmcoKTsKKyAgICB2b2lkIGNsZWFyRXZlcnl3
aGVyZSgpOwogI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJMYXllciogbV9yb290VGV4dHVyZU1hcHBlckxheWVyOwogICAgIE93blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBtX3Jvb3RHcmFwaGljc0xheWVyOwogICAgIE93blB0cjxXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKQogICAgIFdlYkNvcmU6OkdMQ29udGV4dCogZ2xDb250ZXh0KCk7CiAgICAgT3duUHRyPFdl
YkNvcmU6OkdMQ29udGV4dD4gbV9jb250ZXh0OwogI2VuZGlmCi0jZW5kaWYKIAogICAgIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYktpdFdlYlZpZXcqKTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCmluZGV4IDY0ZWI5MDE3NThiZDRlYWU4YTk0ODdi
YTFkYzAxOTY3MmE5ZTVhYTUuLmUwM2Y3ZWQwNDg5MThjZWJmNTFmNDUwNjU0ODdkZjJmZGY2NzI4
MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgi
CiAjaW5jbHVkZSAid2Via2l0d2Vidmlld3ByaXZhdGUuaCIKQEAgLTM1LDEzICszNiwxMiBAQAog
I2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKLSNpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfWDExKQotI2RlZmluZSBSZWdpb24gWFJlZ2lvbgotI2RlZmluZSBGb250
IFhGb250Ci0jZGVmaW5lIEN1cnNvciBYQ3Vyc29yCi0jZGVmaW5lIFNjcmVlbiBYU2NyZWVuCi0j
aW5jbHVkZSA8Z2RrL2dka3guaD4KLSNlbmRpZgorY29uc3QgZG91YmxlIGdGcmFtZXNQZXJTZWNv
bmQgPSA2MDsKKworLy8gVGhlcmUgc2VlbXMgdG8gYmUgYSBkZWxpY2F0ZSBiYWxhbmNlIGJldHdl
ZW4gdGhlIG1haW4gbG9vcCBiZWluZyBmbG9vZGVkCisvLyB3aXRoIG1vdGlvbiBldmVudHMgKHRo
YXQgZm9yY2UgZmx1c2hlcykgYW5kIHN0YXJ2aW5nIHRoZSBtYWluIGxvb3Agb2YgZXZlbnRzCisv
LyB3aXRoIGZsdXNoIGNhbGxiYWNrcy4gVGhpcyBkZWxheSBpcyBlbnRpcmVseSBlbXBpcmljYWwu
Citjb25zdCBkb3VibGUgZ1NjaGVkdWxlRGVsYXkgPSAoMS4wIC8gKGdGcmFtZXNQZXJTZWNvbmQg
LyAzLjApKTsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ5LDE1MCArNDksMzIy
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAg
ICA6IG1fd2ViVmlldyh3ZWJWaWV3KQotICAgICwgbV9zeW5jVGltZXJDYWxsYmFja0lkKDApCi0g
ICAgLCBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIoMCkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVy
Q2FsbGJhY2tJZCgwKQorICAgICwgbV9yZWRpcmVjdGVkV2luZG93KFJlZGlyZWN0ZWRYQ29tcG9z
aXRlV2luZG93OjpjcmVhdGUoSW50U2l6ZSgxLCAxKSkpCisgICAgLCBtX2xhc3RGbHVzaFRpbWUo
MCkKKyAgICAsIG1fcmVkcmF3UGVuZGluZ1RpbWUoMCkKKyAgICAsIG1fbmVlZHNFeHRyYUZsdXNo
KGZhbHNlKQoreworfQorCitzdGF0aWMgSW50U2l6ZSBnZXRXZWJWaWV3U2l6ZShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQogeworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtf
d2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsK
KyAgICByZXR1cm4gSW50U2l6ZShhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7
Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmluaXRpYWxpemUoKQor
eworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5
ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgbV9yb290TGF5ZXItPnNldERy
YXdzQ29udGVudChmYWxzZSk7CisKKyAgICBJbnRTaXplIHBhZ2VTaXplID0gZ2V0V2ViVmlld1Np
emUobV93ZWJWaWV3KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShwYWdlU2l6ZSk7CisKKyAg
ICAvLyBUaGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudHMgYXJlIGEgY2hpbGQgb2YgdGhlIHJvb3Qg
bGF5ZXIuCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKHRoaXMpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3ND
b250ZW50KHRydWUpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVu
dHNPcGFxdWUoIW1fd2ViVmlldy0+cHJpdi0+dHJhbnNwYXJlbnQpOworICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShwYWdlU2l6ZSk7CisgICAgaWYgKGNvcmUobV93ZWJW
aWV3KS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKQorICAgICAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyh0cnVlKTsK
KworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiUm9vdCBsYXllciIp
OworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmFtZSgiTm9uLWNvbXBvc2l0
ZWQgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworCisgICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSBU
ZXh0dXJlTWFwcGVyIG5lZWRzIGFuIGFjdGl2ZSBPcGVuR0wgY29udGV4dC4KKyAgICBHTENvbnRl
eHQqIGNvbnRleHQgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPmNvbnRleHQoKTsKKyAgICBjb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFw
cGVyR0w6OmNyZWF0ZSgpOworCisgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIu
Z2V0KCkpLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
On5BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCgpCiB7Ci0gICAgaWYgKG1fc3luY1RpbWVy
Q2FsbGJhY2tJZCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fc3luY1RpbWVyQ2FsbGJhY2tJ
ZCk7CisgICAgc3RvcEFueVBlbmRpbmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnN0b3BBbnlQZW5kaW5nTGF5ZXJGbHVzaCgpCit7CisgICAg
aWYgKCFtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNrSWQpCisgICAgICAgIHJldHVybjsKKyAgICBn
X3NvdXJjZV9yZW1vdmUobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKTsKKyAgICBtX2xheWVy
Rmx1c2hUaW1lckNhbGxiYWNrSWQgPSAwOwogfQogCiBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0OjplbmFibGVkKCkKIHsKLSAgICByZXR1cm4gbV9yb290VGV4dHVyZU1hcHBlckxh
eWVyICYmIG1fdGV4dHVyZU1hcHBlcjsKKyAgICByZXR1cm4gbV9yb290TGF5ZXIgJiYgbV90ZXh0
dXJlTWFwcGVyOwogfQogCi1HTENvbnRleHQqIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
OjpnbENvbnRleHQoKQorYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVy
TGF5ZXJzVG9XaW5kb3coY2Fpcm9fdCogY3IsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewot
ICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CisgICAg
bV9yZWRyYXdQZW5kaW5nVGltZSA9IDA7CiAKLSNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDEx
KQotICAgIC8vIEZJWE1FOiBHcmFjZWZ1bGx5IGFjY291bnQgZm9yIHNpdHVhdGlvbnMgd2hlcmUg
d2UgZG8gbm90IGhhdmUgYSByZWFsaXplZCB3aW5kb3cuCi0gICAgR2RrV2luZG93KiBnZGtXaW5k
b3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKLSAgICBp
ZiAoZ2RrV2luZG93ICYmIGdka193aW5kb3dfaGFzX25hdGl2ZShnZGtXaW5kb3cpKQotICAgICAg
ICBtX2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3coR0RLX1dJTkRP
V19YSUQoZ2RrV2luZG93KSwgR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4dCgpKTsKLSNlbmRpZgor
ICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJdCdz
IGltcG9ydGFudCB0byBwYWludCBhIHdoaXRlIGJhY2tncm91bmQgKGlmIHRoZSBXZWJWaWV3IGlz
bid0IHRyYW5zcGFyZW50KSwgYmVjYXVzZSB3aGVuIGdyb3dpbmcKKyAgICAvLyB0aGUgcmVkaXJl
Y3RlZCB3aW5kb3csIHRoZSB1c2FibGUgc2l6ZSBvZiB0aGUgd2luZG93IG1heSBiZSBzbWFsbGVy
IHRoYW4gdGhlIGFsbG9jYXRpb24gb2Ygb3VyIHdpZGdldC4KKyAgICAvLyBXZSBkb24ndCB3YW50
IHRvIHNob3cgYXJ0aWZhY3RzIGluIHRoYXQgY2FzZS4KKyAgICBJbnRTaXplIHVzYWJsZVdpbmRv
d1NpemUgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPnVzYWJsZVNpemUoKTsKKyAgICBpZiAodXNhYmxl
V2luZG93U2l6ZSAhPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPnNpemUoKSkgeworICAgICAgICBpZiAo
IW1fd2ViVmlldy0+cHJpdi0+dHJhbnNwYXJlbnQpIHsKKyAgICAgICAgICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiKGNyLCAxLCAxLCAxKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihj
ciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBj
YWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICAgICAgY2Fp
cm9fcGFpbnQoY3IpOworICAgIH0KIAotICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CisgICAg
Y2Fpcm9fc3VyZmFjZV90KiB3aW5kb3dTdXJmYWNlID0gbV9yZWRpcmVjdGVkV2luZG93LT5jYWly
b1N1cmZhY2VGb3JXaWRnZXQoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBpZiAoIXdpbmRv
d1N1cmZhY2UpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNy
LCBjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xpcFJlY3Qud2lkdGgoKSwgY2xpcFJlY3Qu
aGVpZ2h0KCkpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgd2luZG93U3VyZmFj
ZSwgMCwgMCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VS
Q0UpOworICAgIGNhaXJvX2ZpbGwoY3IpOworCisgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lckNh
bGxiYWNrSWQgJiYgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5kZXNj
ZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpIHx8IG1fbmVlZHNFeHRyYUZsdXNo
KSB7CisgICAgICAgIG1fbmVlZHNFeHRyYUZsdXNoID0gZmFsc2U7CisgICAgICAgIGRvdWJsZSBu
ZXh0Rmx1c2ggPSBtYXgoKDEgLyBnRnJhbWVzUGVyU2Vjb25kKSAtIChjdXJyZW50VGltZSgpIC0g
bV9sYXN0Rmx1c2hUaW1lKSwgMC4wKTsKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXJDYWxsYmFj
a0lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdES19QUklPUklUWV9FVkVOVFMsIDEwMDAgKiBuZXh0
Rmx1c2gsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGxheWVyRmx1c2hUaW1lckZpcmVk
Q2FsbGJhY2spLCB0aGlzLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3coY2Fp
cm9fdCosIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQorR0xDb250ZXh0KiBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6cHJlcGFyZUZvclJlbmRlcmluZygpCiB7CiAgICAgaWYgKCFlbmFi
bGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBH
TENvbnRleHQqIGNvbnRleHQgPSBnbENvbnRleHQoKTsKKyAgICBHTENvbnRleHQqIGNvbnRleHQg
PSBtX3JlZGlyZWN0ZWRXaW5kb3ctPmNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIWNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiAwOwogCi0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIGd0a193aWRnZXRf
Z2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2NhdGlvbik7Ci0gICAg
Z2xWaWV3cG9ydCgwLCAwLCBhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7Cisg
ICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQ6OmNvbXBvc2l0ZUxheWVyc1RvQ29udGV4dCgpCit7CisgICAgR0xDb250ZXh0KiBjb250ZXh0
ID0gcHJlcGFyZUZvclJlbmRlcmluZygpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29uc3QgSW50U2l6ZSYgd2luZG93U2l6ZSA9IG1fcmVkaXJlY3RlZFdpbmRv
dy0+c2l6ZSgpOworICAgIGdsVmlld3BvcnQoMCwgMCwgd2luZG93U2l6ZS53aWR0aCgpLCB3aW5k
b3dTaXplLmhlaWdodCgpKTsKIAogICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygp
OwotICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllci0+cGFpbnQoKTsKKyAgICB0b1RleHR1cmVN
YXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnBhaW50KCk7CiAgICAgbV90ZXh0dXJlTWFw
cGVyLT5lbmRQYWludGluZygpOwogCiAgICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIC8vIEZJWE1FOiBJdCBzZWVtcyB0aGF0IHdoZW4gdXNpbmcgZG91
YmxlLWJ1ZmZlcmluZyAoYW5kIG9uIHNvbWUgZHJpdmVycyBzaW5nbGUtYnVmZmVyaW5nKQorICAg
IC8vIGFuZCBYQ29tcG9zaXRlIHdpbmRvdyByZWRpcmVjdGlvbiwgdHdvIHN3YXAgYnVmZmVycyBh
cmUgcmVxdWlyZWQgdG8gZm9yY2UgdGhlIHBpeG1hcAorICAgIC8vIHRvIHVwZGF0ZS4gVGhpcyBp
c24ndCBhIHByb2JsZW0gZHVyaW5nIGFuaW1hdGlvbnMsIGJlY2F1c2Ugc3dhcEJ1ZmZlciBpcyBj
b250aW51b3VzbHkgCisgICAgLy8gY2FsbGVkLiBGb3Igbm9uLWFuaW1hdGlvbiBzaXR1YXRpb25z
IHdlIHVzZSB0aGlzIHRlcnJpYmxlIGhhY2sgdW50aWwgd2UgY2FuIGdldCB0byB0aGUKKyAgICAv
LyBib3R0b20gb2YgdGhlIGlzc3VlLgorICAgIGlmICghdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9y
b290TGF5ZXIuZ2V0KCkpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygp
KSB7CisgICAgICAgIGNvbnRleHQtPnN3YXBCdWZmZXJzKCk7CisgICAgICAgIGNvbnRleHQtPnN3
YXBCdWZmZXJzKCk7CisgICAgfQogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVy
KQordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Y2xlYXJFdmVyeXdoZXJlKCkK
IHsKLSAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgbV9yb290R3JhcGhpY3NMYXll
ci5jbGVhcigpOwotICAgICAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIgPSAwOwotICAgICAg
ICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBwcmVwYXJlRm9y
UmVuZGVyaW5nKCk7CisgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47CisKKyAgICBj
b25zdCBJbnRTaXplJiB3aW5kb3dTaXplID0gbV9yZWRpcmVjdGVkV2luZG93LT5zaXplKCk7Cisg
ICAgZ2xWaWV3cG9ydCgwLCAwLCB3aW5kb3dTaXplLndpZHRoKCksIHdpbmRvd1NpemUuaGVpZ2h0
KCkpOworICAgIGdsQ2xlYXJDb2xvcigxLCAxLCAxLCAxKTsKKyAgICBnbENsZWFyKEdMX0NPTE9S
X0JVRkZFUl9CSVQpOworCisgICAgY29udGV4dC0+c3dhcEJ1ZmZlcnMoKTsKKworICAgIC8vIEZJ
WE1FOiBJdCBzZWVtcyB0aGF0IHdoZW4gdXNpbmcgZG91YmxlLWJ1ZmZlcmluZyAoYW5kIG9uIHNv
bWUgZHJpdmVycyBzaW5nbGUtYnVmZmVyaW5nKQorICAgIC8vIGFuZCBYQ29tcG9zaXRlIHdpbmRv
dyByZWRpcmVjdGlvbiwgdHdvIHN3YXAgYnVmZmVycyBhcmUgcmVxdWlyZWQgdG8gZm9yY2UgdGhl
IHBpeG1hcAorICAgIC8vIHRvIHVwZGF0ZS4gVGhpcyBpc24ndCBhIHByb2JsZW0gZHVyaW5nIGFu
aW1hdGlvbnMsIGJlY2F1c2Ugc3dhcEJ1ZmZlciBpcyBjb250aW51b3VzbHkgCisgICAgLy8gY2Fs
bGVkLiBGb3Igbm9uLWFuaW1hdGlvbiBzaXR1YXRpb25zIHdlIHVzZSB0aGlzIHRlcnJpYmxlIGhh
Y2sgdW50aWwgd2UgY2FuIGdldCB0byB0aGUKKyAgICAvLyBib3R0b20gb2YgdGhlIGlzc3VlLgor
ICAgIGlmICghdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5kZXNjZW5k
YW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKSB7CisgICAgICAgIGNvbnRleHQtPnN3
YXBCdWZmZXJzKCk7CisgICAgICAgIGNvbnRleHQtPnN3YXBCdWZmZXJzKCk7CiAgICAgfQorfQog
Ci0gICAgbV9yb290R3JhcGhpY3NMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsK
LSAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jv
b3RHcmFwaGljc0xheWVyLmdldCgpKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5hZGRDaGls
ZChncmFwaGljc0xheWVyKTsKLSAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxz
ZSk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgbV9y
b290R3JhcGhpY3NMYXllci0+c2V0U2l6ZShjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52
aWV3KCktPmZyYW1lUmVjdCgpLnNpemUoKSk7Cit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyKQoreworICAgIC8vIENsZWFyaW5nIGV2ZXJ5d2hlcmUgd2hlbiB0dXJuaW5nIG9uIG9yIG9m
ZiB0aGUgbGF5ZXIgdHJlZSBwcmV2ZW50cyB1cyBmcm9tIGZsYXNoaW5nCisgICAgLy8gb2xkIGNv
bnRlbnQgYmVmb3JlIHRoZSBmaXJzdCBmbHVzaC4KKyAgICBjbGVhckV2ZXJ5d2hlcmUoKTsKIAot
ICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmICghZ3JhcGhpY3NMYXllcikgeworICAgICAgICBzdG9w
QW55UGVuZGluZ0xheWVyRmx1c2goKTsKIAotICAgIC8vIFRoZSBjb250ZXh0IG5lZWRzIHRvIGJl
IGFjdGl2ZSB3aGVuIGNyZWF0aW5nIHRoZSB0ZXh0dXJlIG1hcHBlci4gSXQncyBmaW5lIHRvCi0g
ICAgLy8gYXZvaWQgY2FsbGluZyBzd2FwQnVmZmVycyBoZXJlLCBiZWNhdXNlIGl0IHdpbGwganVz
dCBpbml0aWFsaXplIHNoYWRlcnMuCi0gICAgaWYgKCFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgLy8gU2hyaW5rIHRoZSBvZmZzY3JlZW4gd2luZG93IHRvIHNhdmUgbWVt
b3J5IHdoaWxlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGlzIHR1cm5lZCBvZmYuCisgICAgICAg
IG1fcmVkaXJlY3RlZFdpbmRvdy0+cmVzaXplKEludFNpemUoMSwgMSkpOworICAgICAgICBtX3Jv
b3RMYXllciA9IG51bGxwdHI7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9
IG51bGxwdHI7CisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IG51bGxwdHI7CiAgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0gICAgZ3RrX3dp
ZGdldF9nZXRfYWxsb2NhdGlvbihHVEtfV0lER0VUKG1fd2ViVmlldyksICZhbGxvY2F0aW9uKTsK
LSAgICBnbFZpZXdwb3J0KDAsIDAsIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0
KTsKKyAgICBpZiAoZ3JhcGhpY3NMYXllciAmJiAhZW5hYmxlZCgpKQorICAgICAgICBtX3JlZGly
ZWN0ZWRXaW5kb3ctPnJlc2l6ZShnZXRXZWJWaWV3U2l6ZShtX3dlYlZpZXcpKTsKIAotICAgIG1f
dGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7Ci0gICAgbV9yb290VGV4
dHVyZU1hcHBlckxheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7
Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCk7CisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNo
eS4KKyAgICBpbml0aWFsaXplKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5y
ZW1vdmVBbGxDaGlsZHJlbigpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRk
Q2hpbGQoZ3JhcGhpY3NMYXllcik7CisKKyAgICBzdG9wQW55UGVuZGluZ0xheWVyRmx1c2goKTsK
KworICAgIC8vIEZJWE1FOiBUd28gZmx1c2hlcyBzZWVtIG5lY2Vzc2FyeSB0byBnZXQgdGhlIHBy
b3BlciByZW5kZXJpbmcgaW4gc29tZSBjYXNlcy4gSXQncyB1bmNsZWFyCisgICAgLy8gaWYgdGhp
cyBpcyBhIGJ1ZyB3aXRoIHRoZSBSZWRpcmVjdGVkWENvbXBvc2l0ZSB3aW5kb3cgb3Igd2l0aCB0
aGlzIGNsYXNzLgorICAgIG1fbmVlZHNFeHRyYUZsdXNoID0gdHJ1ZTsKKyAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKKworICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91
dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCA1MDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KGxheWVyRmx1c2hUaW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKIH0KIAot
dm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2NoZWR1bGVSb290TGF5ZXJSZXBh
aW50KGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIGlmICghbV9yb290R3JhcGhpY3NMYXllcikKKyAgICBpZiAoIW1fcm9vdExh
eWVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICBtX3Jvb3RM
YXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9y
b290R3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0OjpyZXNpemVSb290TGF5ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlc2l6ZVJvb3RMYXllcihjb25zdCBJbnRTaXplJiBu
ZXdTaXplKQogewotICAgIGlmICghbV9yb290R3JhcGhpY3NMYXllcikKKyAgICBpZiAoIWVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldFNpemUo
c2l6ZSk7Ci0gICAgbV9yb290R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CisKKyAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXpl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlZGlyZWN0ZWRXaW5kb3ctPnJlc2l6ZShuZXdT
aXplKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIC8vIElmIHRo
ZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50
IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAorICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBv
c2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zaXplKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXpl
KG5ld1NpemUpOworCisgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkg
eworICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3
U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53
aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOwor
ICAgIH0KKworICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAg
ICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
RmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5o
ZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbmV3U2l6
ZSkpOworICAgIGZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBz
eW5jTGF5ZXJzVGltZW91dENhbGxiYWNrKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBj
b250ZXh0KQordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2Nyb2xsTm9uQ29t
cG9zaXRlZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUm
IHNjcm9sbE9mZnNldCkKIHsKLSAgICBjb250ZXh0LT5zeW5jTGF5ZXJzVGltZW91dCgpOworICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHNjcm9s
bFJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitnYm9vbGVhbiBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWRDYWxsYmFjayhBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBjb250ZXh0LT5sYXll
ckZsdXNoVGltZXJGaXJlZCgpOwogICAgIHJldHVybiBGQUxTRTsKIH0KIAotdm9pZCBBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bWFya0ZvclN5bmMoKQordm9pZCBBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dDo6c2NoZWR1bGVMYXllckZsdXNoKCkKIHsKLSAgICBpZiAobV9zeW5j
VGltZXJDYWxsYmFja0lkKQorICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV9sYXllckZsdXNoVGltZXJDYWxsYmFja0lkKQogICAgICAgICByZXR1cm47CiAK
LSAgICAvLyBXZSB1c2UgYSBHTGliIHRpbWVyIGJlY2F1c2Ugb3RoZXJ3aXNlIEdUSysgZXZlbnQg
aGFuZGxpbmcgZHVyaW5nCi0gICAgLy8gZHJhZ2dpbmcgY2FuIHN0YXJ2ZSBXZWJDb3JlIHRpbWVy
cywgd2hpY2ggaGF2ZSBhIGxvd2VyIHByaW9yaXR5LgotICAgIG1fc3luY1RpbWVyQ2FsbGJhY2tJ
ZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAwLCByZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPihzeW5jTGF5ZXJzVGltZW91dENhbGxiYWNrKSwgdGhpcywgMCk7
CisgICAgLy8gV2UgdXNlIGEgR0xpYiB0aW1lciBiZWNhdXNlIG90aGVyd2lzZSBHVEsrIGV2ZW50
IGhhbmRsaW5nIGR1cmluZyBkcmFnZ2luZyBjYW4KKyAgICAvLyBzdGFydmUgV2ViQ29yZSB0aW1l
cnMsIHdoaWNoIGhhdmUgYSBsb3dlciBwcmlvcml0eS4KKyAgICBkb3VibGUgbmV4dEZsdXNoID0g
bWF4KGdTY2hlZHVsZURlbGF5IC0gKGN1cnJlbnRUaW1lKCkgLSBtX2xhc3RGbHVzaFRpbWUpLCAw
LjApOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyQ2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVs
bChHREtfUFJJT1JJVFlfRVZFTlRTLCBuZXh0Rmx1c2ggKiAxMDAwLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihsYXllckZsdXNoVGltZXJGaXJlZENhbGxiYWNrKSwgdGhpcywgMCk7CiB9
CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnN5bmNMYXllcnNOb3coKQor
Ym9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFu
Z2VzKCkKIHsKLSAgICBpZiAobV9yb290R3JhcGhpY3NMYXllcikKLSAgICAgICAgbV9yb290R3Jh
cGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAg
ICBjb3JlKG1fd2ViVmlldyktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0
YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgcmV0dXJuIGNv
cmUobV93ZWJWaWV3KS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJ
bmNsdWRpbmdTdWJmcmFtZXMoKTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6c3luY0xheWVyc1RpbWVvdXQoKQordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6Zmx1c2hBbmRSZW5kZXJMYXllcnMoKQogewotICAgIG1fc3luY1RpbWVyQ2FsbGJhY2tJ
ZCA9IDA7Ci0gICAgc3luY0xheWVyc05vdygpOwotICAgIGlmICghbV9yb290R3JhcGhpY3NMYXll
cikKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUqIGZy
YW1lID0gY29yZShtX3dlYlZpZXcpLT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFm
cmFtZS0+Y29udGVudFJlbmRlcmVyKCkgfHwgIWZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBmcmFtZS0+dmlldygpLT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJz
aXZlKCk7CisKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBtX3JlZGlyZWN0ZWRXaW5kb3ctPmNv
bnRleHQoKTsKKyAgICBpZiAoY29udGV4dCAmJiAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jv
b3RHcmFwaGljc0xheWVyLmdldCgpKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1h
dGlvbnMoKSkKLSAgICAgICAgbV9zeW5jVGltZXJDYWxsYmFja0lkID0gZ190aW1lb3V0X2FkZF9m
dWxsKEdES19QUklPUklUWV9FVkVOVFMsIDEwMDAuMCAvIDYwLjAsIHJlaW50ZXJwcmV0X2Nhc3Q8
R1NvdXJjZUZ1bmM+KHN5bmNMYXllcnNUaW1lb3V0Q2FsbGJhY2spLCB0aGlzLCAwKTsKKyAgICBm
bHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICAvLyAgICByZXR1cm47CiAKLSAgICByZW5k
ZXJMYXllcnNUb1dpbmRvdygwLCBJbnRSZWN0KCkpOworICAgIG1fbGFzdEZsdXNoVGltZSA9IGN1
cnJlbnRUaW1lKCk7CisgICAgY29tcG9zaXRlTGF5ZXJzVG9Db250ZXh0KCk7CisKKyAgICBndGtf
d2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKworICAgIC8vIElmIGl0
J3MgYmVlbiBhIGxvbmcgdGltZSBzaW5jZSB3ZSd2ZSBhY3R1YWxseSBwYWludGVkLCB3aGljaCBt
ZWFucyB0aGF0IGV2ZW50cyBtaWdodAorICAgIC8vIGJlIHN0YXJ2aW5nIHRoZSBtYWluIGxvb3As
IHdlIHNob3VsZCBmb3JjZSBhIGRyYXcgbm93LiBUaGlzIHNlZW1zIHRvIHByZXZlbnQgZGlzcGxh
eQorICAgIC8vIGxhZyBvbiBodHRwOi8vMjAxMi5iZWVyY2FtcC5jb20uCisgICAgaWYgKG1fcmVk
cmF3UGVuZGluZ1RpbWUgJiYgY3VycmVudFRpbWUoKSAtIG1fcmVkcmF3UGVuZGluZ1RpbWUgPiBn
U2NoZWR1bGVEZWxheSkKKyAgICAgICAgZ2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMoZ3RrX3dp
ZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQobV93ZWJWaWV3KSksIEZBTFNFKTsKKyAgICBlbHNl
IGlmICghbV9yZWRyYXdQZW5kaW5nVGltZSkKKyAgICAgICAgbV9yZWRyYXdQZW5kaW5nVGltZSA9
IGN1cnJlbnRUaW1lKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
OmxheWVyRmx1c2hUaW1lckZpcmVkKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lckNhbGxiYWNr
SWQgPSAwOworICAgIGZsdXNoQW5kUmVuZGVyTGF5ZXJzKCk7CiB9CiAKIHZvaWQgQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhp
Y3NMYXllciosIGRvdWJsZSB0aW1lKQpAQCAtMjA2LDkgKzM3OCwxMCBAQCB2b2lkIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NM
YXllciopCiAKIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnBhaW50Q29udGVu
dHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmIHJlY3RUb1BhaW50KQogewotICAg
IGNhaXJvX3QqIGNyID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKLSAgICBjb3B5
UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQobV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3Rv
cmUtPmNhaXJvU3VyZmFjZSgpLCBjciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50U2l6ZSgpLCByZWN0VG9QYWludCk7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAg
Y29udGV4dC5jbGlwKHJlY3RUb1BhaW50KTsKKyAgICBjb3JlKG1fd2ViVmlldyktPm1haW5GcmFt
ZSgpLT52aWV3KCktPnBhaW50KCZjb250ZXh0LCByZWN0VG9QYWludCk7CisgICAgY29udGV4dC5y
ZXN0b3JlKCk7CiB9CiAKIGJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNob3dE
ZWJ1Z0JvcmRlcnMoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAppbmRleCA0MWM4
NDA5MjQxODlkN2M4YzcwMjhkMDI0N2VmOGY5MmFiOGIxOWZkLi43NDBlM2JiY2E1MTUxZDBkYmMy
MzQ5ZmY1MmFmNGFlOTVhN2E3ZjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTE0MiwxNyArMTQyLDE4IEBAIHZv
aWQgQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAg
ICB9CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKK3N0YXRpYyBJbnRS
ZWN0IGdldFdlYlZpZXdSZWN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgR3RrQWxs
b2NhdGlvbiBhbGxvY2F0aW9uOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDE4LCAwKQotICAg
IGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2Nh
dGlvbik7Ci0jZWxzZQotICAgIGFsbG9jYXRpb24gPSBHVEtfV0lER0VUKG1fd2ViVmlldyktPmFs
bG9jYXRpb247Ci0jZW5kaWYKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19XSURH
RVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKICAgICByZXR1cm4gSW50UmVjdChhbGxvY2F0aW9u
LngsIGFsbG9jYXRpb24ueSwgYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOwog
fQogCitGbG9hdFJlY3QgQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCgpCit7CisgICAgcmV0dXJuIGdl
dFdlYlZpZXdSZWN0KG1fd2ViVmlldyk7Cit9CisKIHZvaWQgQ2hyb21lQ2xpZW50Ojpmb2N1cygp
CiB7CiAgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQobV93ZWJWaWV3KSk7CkBA
IC00MTksMTAgKzQyMCwyMCBAQCBzdGF0aWMgdm9pZCBjbGVhckV2ZXJ5d2hlcmVJbkJhY2tpbmdT
dG9yZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjYWlyb190KiBjcikKIAogdm9pZCBDaHJvbWVD
bGllbnQ6OndpZGdldFNpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG9sZFdpZGdldFNpemUsIElu
dFNpemUgbmV3U2l6ZSkKIHsKLSAgICBXaWRnZXRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9
IG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLmdldCgpOworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCogY29tcG9z
aXRpbmdDb250ZXh0ID0gbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dC5nZXQoKTsKKyAgICBpZiAoY29tcG9zaXRpbmdDb250ZXh0LT5lbmFibGVkKCkpIHsKKyAg
ICAgICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVz
aXplUm9vdExheWVyKG5ld1NpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAK
ICAgICAvLyBHcm93IHRoZSBiYWNraW5nIHN0b3JlIGJ5IGF0IGxlYXN0IDEuNSB0aW1lcyB0aGUg
Y3VycmVudCBzaXplLiBUaGlzIHByZXZlbnRzCiAgICAgLy8gbG90cyBvZiB1bm5lY2Vzc2FyeSBh
bGxvY2F0aW9ucyBkdXJpbmcgYW4gb3BhcXVlIHJlc2l6ZS4KKyAgICBXaWRnZXRCYWNraW5nU3Rv
cmUqIGJhY2tpbmdTdG9yZSA9IG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLmdldCgpOwor
ICAgIGlmIChiYWNraW5nU3RvcmUgJiYgb2xkV2lkZ2V0U2l6ZSA9PSBuZXdTaXplKQorICAgICAg
ICByZXR1cm47CisKICAgICBpZiAoYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGNvbnN0IEludFNp
emUmIG9sZFNpemUgPSBiYWNraW5nU3RvcmUtPnNpemUoKTsKICAgICAgICAgaWYgKG5ld1NpemUu
d2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkKQEAgLTUyNiwyMCArNTM3LDYgQEAgc3RhdGljIHZv
aWQgcGFpbnRXZWJWaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEZyYW1lKiBmcmFtZSwgUmVn
aW9uIGRpcnR5UmVnaW8KICAgICBnYy5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50
OjppbnZhbGlkYXRlV2lkZ2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dCogYWNDb250ZXh0ID0gbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dC5nZXQoKTsKLSAgICBpZiAoYWNDb250ZXh0LT5lbmFibGVkKCkpIHsKLSAgICAgICAgYWND
b250ZXh0LT5zY2hlZHVsZVJvb3RMYXllclJlcGFpbnQocmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0jZW5kaWYKLSAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VU
KG1fd2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJl
Y3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7Ci19Ci0KIHZvaWQgQ2hyb21lQ2xpZW50OjpwZXJmb3JtQWxsUGVuZGluZ1Nj
cm9sbHMoKQogewogICAgIGlmICghbV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUpCkBAIC01
NDksNyArNTQ2LDcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnBlcmZvcm1BbGxQZW5kaW5nU2Nyb2xs
cygpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlY3RzVG9TY3JvbGwuc2l6ZSgpOyBp
KyspIHsKICAgICAgICAgSW50UmVjdCYgc2Nyb2xsUmVjdCA9IG1fcmVjdHNUb1Njcm9sbFtpXTsK
ICAgICAgICAgbV93ZWJWaWV3LT5wcml2LT5iYWNraW5nU3RvcmUtPnNjcm9sbChzY3JvbGxSZWN0
LCBtX3Njcm9sbE9mZnNldHNbaV0pOwotICAgICAgICBpbnZhbGlkYXRlV2lkZ2V0UmVjdChzY3Jv
bGxSZWN0KTsKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVCht
X3dlYlZpZXcpLCBzY3JvbGxSZWN0LngoKSwgc2Nyb2xsUmVjdC55KCksIHNjcm9sbFJlY3Qud2lk
dGgoKSwgc2Nyb2xsUmVjdC5oZWlnaHQoKSk7CiAgICAgfQogCiAgICAgbV9yZWN0c1RvU2Nyb2xs
LmNsZWFyKCk7CkBAIC01ODUsMTIgKzU4Miw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpwYWludChX
ZWJDb3JlOjpUaW1lcjxDaHJvbWVDbGllbnQ+KikKICAgICB9CiAKICAgICBjb25zdCBJbnRSZWN0
JiByZWN0ID0gbV9kaXJ0eVJlZ2lvbi5ib3VuZHMoKTsKLSAgICBpbnZhbGlkYXRlV2lkZ2V0UmVj
dChyZWN0KTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBtX3dlYlZp
ZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LT5zeW5jTGF5ZXJzTm93KCk7
Ci0gICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVu
ZGVyTGF5ZXJzVG9XaW5kb3coMCwgcmVjdCk7Ci0jZW5kaWYKKyAgICBndGtfd2lkZ2V0X3F1ZXVl
X2RyYXdfYXJlYShHVEtfV0lER0VUKG1fd2ViVmlldyksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAogICAgIG1fZGlydHlSZWdpb24gPSBSZWdpb24o
KTsKICAgICBtX2xhc3REaXNwbGF5VGltZSA9IGN1cnJlbnRUaW1lKCk7CkBAIC02MDYsNiArNTk4
LDExIEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpwYWludChXZWJDb3JlOjpUaW1lcjxDaHJvbWVDbGll
bnQ+KikKIAogdm9pZCBDaHJvbWVDbGllbnQ6OmZvcmNlUGFpbnQoKQogeworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAobV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisjZW5kaWYK
KwogICAgIG1fZm9yY2VQYWludCA9IHRydWU7CiAgICAgcGFpbnQoMCk7CiAgICAgbV9mb3JjZVBh
aW50ID0gZmFsc2U7CkBAIC02MTcsNiArNjE0LDE0IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjppbnZh
bGlkYXRlUm9vdFZpZXcoY29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRlKQogCiB2b2lkIENo
cm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgYm9vbCBpbW1lZGlhdGUpCiB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorICAgIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBhY0NvbnRleHQgPSBt
X3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOworICAg
IGlmIChhY0NvbnRleHQtPmVuYWJsZWQoKSkgeworICAgICAgICBhY0NvbnRleHQtPnNldE5vbkNv
bXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHVwZGF0ZVJlY3QpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisKICAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKHVwZGF0ZVJlY3QpOwpAQCAtNjI1LDEy
ICs2MzAsMzQgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmludmFsaWRhdGVDb250ZW50c0FuZFJvb3RW
aWV3KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wKIAogdm9pZCBDaHJvbWVDbGllbnQ6
OmludmFsaWRhdGVDb250ZW50c0ZvclNsb3dTY3JvbGwoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVj
dCwgYm9vbCBpbW1lZGlhdGUpCiB7Ci0gICAgaW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXco
dXBkYXRlUmVjdCwgaW1tZWRpYXRlKTsKICAgICBtX2FkanVzdG1lbnRXYXRjaGVyLnVwZGF0ZUFk
anVzdG1lbnRzRnJvbVNjcm9sbGJhcnNMYXRlcigpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KiBhY0NvbnRleHQg
PSBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmdldCgpOwor
ICAgIGlmIChhY0NvbnRleHQtPmVuYWJsZWQoKSkgeworICAgICAgICBhY0NvbnRleHQtPnNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHVwZGF0ZVJlY3QpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyh1
cGRhdGVSZWN0LCBpbW1lZGlhdGUpOwogfQogCiB2b2lkIENocm9tZUNsaWVudDo6c2Nyb2xsKGNv
bnN0IEludFNpemUmIGRlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0KQogeworICAgIG1fYWRqdXN0bWVudFdhdGNoZXIudXBkYXRlQWRqdXN0
bWVudHNGcm9tU2Nyb2xsYmFyc0xhdGVyKCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQqIGNvbXBvc2l0aW5nQ29u
dGV4dCA9IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuZ2V0
KCk7CisgICAgaWYgKGNvbXBvc2l0aW5nQ29udGV4dC0+ZW5hYmxlZCgpKSB7CisgICAgICAgIEFT
U0VSVCghcmVjdFRvU2Nyb2xsLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVCghZGVsdGEuaXNF
bXB0eSgpKTsKKworICAgICAgICBjb21wb3NpdGluZ0NvbnRleHQtPnNjcm9sbE5vbkNvbXBvc2l0
ZWRDb250ZW50cyhyZWN0VG9TY3JvbGwsIGRlbHRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCiAgICAgbV9yZWN0c1RvU2Nyb2xsLmFwcGVuZChyZWN0VG9TY3JvbGwpOwogICAg
IG1fc2Nyb2xsT2Zmc2V0cy5hcHBlbmQoZGVsdGEpOwogCkBAIC02NTcsOCArNjg0LDYgQEAgdm9p
ZCBDaHJvbWVDbGllbnQ6OnNjcm9sbChjb25zdCBJbnRTaXplJiBkZWx0YSwgY29uc3QgSW50UmVj
dCYgcmVjdFRvU2Nyb2xsLCBjb24KIAogICAgIG1fZGlydHlSZWdpb24udW5pdGUoc2Nyb2xsUmVw
YWludFJlZ2lvbik7CiAgICAgbV9kaXNwbGF5VGltZXIuc3RhcnRPbmVTaG90KDApOwotCi0gICAg
bV9hZGp1c3RtZW50V2F0Y2hlci51cGRhdGVBZGp1c3RtZW50c0Zyb21TY3JvbGxiYXJzTGF0ZXIo
KTsKIH0KIAogSW50UmVjdCBDaHJvbWVDbGllbnQ6OnJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50
UmVjdCYgcmVjdCkgY29uc3QKQEAgLTk2NiwxNyArOTkxLDMyIEBAIHZvaWQgQ2hyb21lQ2xpZW50
OjpleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCopCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogcm9vdExheWVyKQogewotICAg
IG1fd2ViVmlldy0+cHJpdi0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPmF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKHJvb3RMYXllcik7CisgICAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQqIGNvbnRleHQgPSBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0LmdldCgpOworICAgIGJvb2wgdHVybmluZ09mZkNvbXBvc2l0aW5nID0gIXJvb3RMYXll
ciAmJiBjb250ZXh0LT5lbmFibGVkKCk7CisgICAgYm9vbCB0dXJuaW5nT25Db21wb3NpdGluZyA9
IHJvb3RMYXllciAmJiAhY29udGV4dC0+ZW5hYmxlZCgpOworCisgICAgY29udGV4dC0+c2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIocm9vdExheWVyKTsKKworICAgIGlmICh0dXJuaW5nT25Db21wb3Np
dGluZykgeworICAgICAgICBtX2Rpc3BsYXlUaW1lci5zdG9wKCk7CisgICAgICAgIG1fd2ViVmll
dy0+cHJpdi0+YmFja2luZ1N0b3JlID0gV2ViQ29yZTo6V2lkZ2V0QmFja2luZ1N0b3JlOjpjcmVh
dGUoR1RLX1dJREdFVChtX3dlYlZpZXcpLCBJbnRTaXplKDEsIDEpKTsKKyAgICB9CisKKyAgICBp
ZiAodHVybmluZ09mZkNvbXBvc2l0aW5nKSB7CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YmFj
a2luZ1N0b3JlID0gV2ViQ29yZTo6V2lkZ2V0QmFja2luZ1N0b3JlOjpjcmVhdGUoR1RLX1dJREdF
VChtX3dlYlZpZXcpLCBnZXRXZWJWaWV3UmVjdChtX3dlYlZpZXcpLnNpemUoKSk7CisgICAgICAg
IFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3dlYlZpZXctPnBy
aXYtPmJhY2tpbmdTdG9yZS0+Y2Fpcm9TdXJmYWNlKCkpKTsKKyAgICAgICAgY2xlYXJFdmVyeXdo
ZXJlSW5CYWNraW5nU3RvcmUobV93ZWJWaWV3LCBjci5nZXQoKSk7CisgICAgfQogfQogCiB2b2lk
IENocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpCiB7
Ci0gICAgbV93ZWJWaWV3LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+bWFy
a0ZvclN5bmMoKTsKKyAgICBtX3dlYlZpZXctPnByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0LT5zY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnQ6OnNj
aGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKQogewotICAgIG1fd2ViVmlldy0+cHJpdi0+YWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQtPm1hcmtGb3JTeW5jKCk7CisgICAgbV93ZWJWaWV3
LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+c2NoZWR1bGVMYXllckZsdXNo
KCk7CiB9CiAKIENocm9tZUNsaWVudDo6Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgQ2hyb21lQ2xp
ZW50OjphbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCmluZGV4IGU1ZTJmYTFl
YjAyMmZiNjQxZGYzNmQyYWNlYjEyYmQwYmNlNDM0N2EuLjI4NGJkYWEzNjYwNmFlMTVhYmJjMTU2
YjNlZThlMjE1ZDcyYzFlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCkBAIC0xNzksNyArMTc5LDYgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAgICAgICAgIGRvdWJsZSBtX2xhc3REaXNwbGF5VGltZTsKICAgICAgICAgdW5zaWdu
ZWQgaW50IG1fcmVwYWludFNvb25Tb3VyY2VJZDsKIAotICAgICAgICB2b2lkIGludmFsaWRhdGVX
aWRnZXRSZWN0KGNvbnN0IEludFJlY3QmKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAg
ICAgICAgIFJlZlB0cjxFbGVtZW50PiBtX2Z1bGxTY3JlZW5FbGVtZW50OwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggOTcxNzgwNjM3YWYy
N2E0MDE0YjA0NWE3YjVkZmQ3NDM3ZDhkMjAxYy4uYTUzNjg5NDRkM2ZmZmYyY2M2ZjNhMTM0Mzkx
NDc0N2M3YTNmY2FlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcApAQCAtNjc5LDggKzY3OSwxMCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3
X2RyYXcoR3RrV2lkZ2V0KiB3aWRnZXQsIGNhaXJvX3QqIGNyKQogCiAgICAgV2ViS2l0V2ViVmll
d1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+cHJpdjsKICNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCi0gICAgaWYgKHByaXYtPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0LT5yZW5kZXJMYXllcnNUb1dpbmRvdyhjciwgY2xpcFJlY3QpKQorICAgIGlmIChwcml2LT5h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVuZGVyTGF5ZXJzVG9XaW5kb3coY3IsIGNs
aXBSZWN0KSkgeworICAgICAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJl
bnRfY2xhc3MpLT5kcmF3KHdpZGdldCwgY3IpOwogICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
fQogI2VuZGlmCiAKICAgICBjYWlyb19yZWN0YW5nbGVfbGlzdF90KiByZWN0TGlzdCA9IGNhaXJv
X2NvcHlfY2xpcF9yZWN0YW5nbGVfbGlzdChjcik7CkBAIC04NzUsMTUgKzg3NywxNiBAQCBzdGF0
aWMgdm9pZCByZXNpemVXZWJWaWV3RnJvbUFsbG9jYXRpb24oV2ViS2l0V2ViVmlldyogd2ViVmll
dywgR3RrQWxsb2NhdGlvbiogYQogICAgIFdlYktpdDo6Q2hyb21lQ2xpZW50KiBjaHJvbWVDbGll
bnQgPSBzdGF0aWNfY2FzdDxXZWJLaXQ6OkNocm9tZUNsaWVudCo+KHBhZ2UtPmNocm9tZSgpLT5j
bGllbnQoKSk7CiAgICAgY2hyb21lQ2xpZW50LT53aWRnZXRTaXplQ2hhbmdlZChvbGRTaXplLCBJ
bnRTaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpKTsKICAgICBjaHJv
bWVDbGllbnQtPmFkanVzdG1lbnRXYXRjaGVyKCktPnVwZGF0ZUFkanVzdG1lbnRzRnJvbVNjcm9s
bGJhcnMoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB3ZWJWaWV3
LT5wcml2LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC0+cmVzaXplUm9vdExheWVyKElu
dFNpemUoYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCkpOwotI2VuZGlmCiB9
CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zaXplX2FsbG9jYXRlKEd0a1dpZGdldCog
d2lkZ2V0LCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKQogeworICAgIEd0a0FsbG9jYXRpb24g
b2xkQWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJm9s
ZEFsbG9jYXRpb24pOworCiAgICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFy
ZW50X2NsYXNzKS0+c2l6ZV9hbGxvY2F0ZSh3aWRnZXQsIGFsbG9jYXRpb24pOworICAgIGlmIChh
bGxvY2F0aW9uLT53aWR0aCA9PSBvbGRBbGxvY2F0aW9uLndpZHRoICYmIGFsbG9jYXRpb24tPmhl
aWdodCA9PSBvbGRBbGxvY2F0aW9uLmhlaWdodCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOwogICAgIGlmICgh
Z3RrX3dpZGdldF9nZXRfbWFwcGVkKHdpZGdldCkpIHsKQEAgLTEwMDMsMTAgKzEwMDYsNiBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfcmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKICNl
bmRpZgogICAgIEdka1dpbmRvdyogd2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdldF9n
ZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQpLCAmYXR0cmlidXRlcywgYXR0cmlidXRlc19tYXNrKTsK
IAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKQotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXKHdp
ZGdldCktPnByaXY7Ci0gICAgcHJpdi0+aGFzTmF0aXZlV2luZG93ID0gZ2RrX3dpbmRvd19lbnN1
cmVfbmF0aXZlKHdpbmRvdyk7Ci0jZW5kaWYKICAgICBndGtfd2lkZ2V0X3NldF93aW5kb3cod2lk
Z2V0LCB3aW5kb3cpOwogICAgIGdka193aW5kb3dfc2V0X3VzZXJfZGF0YSh3aW5kb3csIHdpZGdl
dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggM2VkY2UwYWEyZjIxZmQ2OGIyOTNkMTBjNjk1
YWVkZGI5NzA2ZGZkNi4uYmEwYWM2OTU1MzAxNjg1NDIzMTczZWFjODk5N2RjZGY4YzVkM2ZhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTEwOCw2ICsxMDgsNyBAQCBsaWJ3ZWJraXQyZ3RrX0BX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05A
X2xhX0NQUAogCSQoR1RLX1VOSVhfUFJJTlRJTkdfQ0ZMQUdTKSBcCiAJJChMSUJTT1VQX0NGTEFH
UykgXAogCSQoVU5JQ09ERV9DRkxBR1MpIFwKKwkkKFhDT01QT1NJVEVfQ0ZMQUdTKSBcCiAJJChY
VF9DRkxBR1MpCiAKIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBf
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfQ1hYRkxBR1MgPSBcCkBAIC0xODAsNiAr
MTgxLDcgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VC
S0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUIKIAkkKFNRTElURTNfTElCUykgXAogCSQo
VU5JQ09ERV9MSUJTKSBcCiAJJChYUkVOREVSX0xJQlMpIFwKKwkkKFhDT01QT1NJVEVfTElCUykg
XAogCSQoWFRfTElCUykgXAogCSQoWkxJQl9MSUJTKQogCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cg
Yi9DaGFuZ2VMb2cKaW5kZXggNTMzNDllZjQ5MmI2OTA4OWNjYzQ0YWQ3OWFkMDQ3YjgwYTY1ODRh
Ny4uZTI0ZjUxMGExOGFmMTRjZjFlZTllNmI0MGUyYTE0NWM1NWM1MmIzZSAxMDA2NDQKLS0tIGEv
Q2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA4LTIxICBN
YXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBV
c2luZyBhIG5hdGl2ZSB3aW5kb3cgZm9yIHRoZSBXZWJWaWV3IGJyZWFrcyBHdGtPdmVybGF5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDA4NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY29uZmlndXJl
LmFjOiBQYXJzZSB4Y29tcG9zaXRlIHBrZy1jb25maWcgZmlsZSBkdXJpbmcgY29uZmlndXJhdGlv
bi4KKwogMjAxMi0wOC0yMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBCdWlsZCBmaXggZm9yIFdpbkNFIGFmdGVyIHIxMTUzNDguCmRpZmYgLS1naXQg
YS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNzhmMjA2N2U2ZWI3ZmZkY2ZhZWFi
N2IwN2E4Y2JiMTY3ZDZmZjRlZS4uMjhmOWFmODhiZTM2NTJhNGJmYTJlMmIzOGEzN2M5MzRhYWRh
YTkyMiAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNTY1
LDYgKzU2NSwxMiBAQCBBQ19BUkdfV0lUSChhY2NlbGVyYXRpb25fYmFja2VuZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF0pCiBBQ19NU0dfUkVTVUxUKFskd2l0aF9hY2NlbGVyYXRpb25f
YmFja2VuZF0pCiAKK2lmIHRlc3QgIiR3aXRoX2FjY2VsZXJhdGlvbl9iYWNrZW5kIiA9ICJvcGVu
Z2wiOyB0aGVuCisgICAgUEtHX0NIRUNLX01PRFVMRVMoW1hDT01QT1NJVEVdLCBbeGNvbXBvc2l0
ZV0pOworICAgIEFDX1NVQlNUKFhDT01QT1NJVEVfQ0ZMQUdTKQorICAgIEFDX1NVQlNUKFhDT01Q
T1NJVEVfTElCUykKK2ZpCisKICMgT3BlbkdMIGlzIHR1cm5lZCBvbiBieSBkZWZhdWx0IChhbG9u
ZyB3aXRoIFdlYkdMIGFuZCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyksIGJ1dCBpZgogIyBDbHV0
dGVyIGlzIGNob3NlbiBhcyB0aGUgYWNjZWxlcmF0ZWQgZHJhd2luZyBiYWNrZW5kLCB3ZSB3YW50
IHRvIGRpc2FibGUgaXQuIENPR0wgZG9lcyAKICMgbm90IHBsYXkgd2VsbCB3aXRoIE9wZW5HTC4K
</data>
<flag name="review"
          id="170123"
          type_id="1"
          status="+"
          setter="alex"
    />
          </attachment>
      

    </bug>

</bugzilla>