<?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>48509</bug_id>
          
          <creation_ts>2010-10-28 04:43:41 -0700</creation_ts>
          <short_desc>[GTK] Implement WebView and WebKitWebView classes for WebKit2</short_desc>
          <delta_ts>2011-02-25 03:46:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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>
          
          <blocked>52805</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Amruth Raj">amruthraj</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>andersca</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>kbalazs</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>300990</commentid>
    <comment_count>0</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-28 04:43:41 -0700</bug_when>
    <thetext>Implementing UpdateChunk, ChunkedUpdateDrawingArea/Proxy, WebView classes for WebKit2 Gtk port and add WKAPI that are required for a sample app</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301712</commentid>
    <comment_count>1</comment_count>
      <attachid>72322</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-29 06:17:21 -0700</bug_when>
    <thetext>Created attachment 72322
Implementation of all paint related classes ie UpdateChunk and ChunkedUpdateDrawingArea/Proxy classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301714</commentid>
    <comment_count>2</comment_count>
      <attachid>72323</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-29 06:21:55 -0700</bug_when>
    <thetext>Created attachment 72323
Contains Implementation of WebView Class and WKAPI exposing some API on top of it

This patch has a compilation dependency on the other patch that is attached with this bug(attachment id: 72322).
Please do not push this until the 72322 is checked-in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301743</commentid>
    <comment_count>3</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-10-29 07:15:09 -0700</bug_when>
    <thetext>Adding myself to the CC list for this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303416</commentid>
    <comment_count>4</comment_count>
      <attachid>72682</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-02 09:41:48 -0700</bug_when>
    <thetext>Created attachment 72682
UpdateChunk, ChunkedUpdateDrawingArea, WebView classes implementation for GTK port

UpdateChunk, ChunkedUpdateDrawingArea, WebView classes implementation for GTK port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303417</commentid>
    <comment_count>5</comment_count>
      <attachid>72683</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-02 09:42:52 -0700</bug_when>
    <thetext>Created attachment 72683
Changes to WKAPI interfaces for GTK port

Changes in WKBase and WKAPICast implementation for GTK port. Also, contains WKView implementation for GTK port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330757</commentid>
    <comment_count>6</comment_count>
      <attachid>78232</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-07 07:19:05 -0800</bug_when>
    <thetext>Created attachment 78232
UpdateChunk, ChunkedUpdateDrawingArea implementation for GTK port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330759</commentid>
    <comment_count>7</comment_count>
      <attachid>78233</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-07 07:19:54 -0800</bug_when>
    <thetext>Created attachment 78233
WebView, WebViewInternal classes implementation for GTK port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330760</commentid>
    <comment_count>8</comment_count>
      <attachid>78234</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-07 07:21:02 -0800</bug_when>
    <thetext>Created attachment 78234
Changes to WKAPI interfaces for GTK port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331249</commentid>
    <comment_count>9</comment_count>
      <attachid>78232</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-01-08 12:42:29 -0800</bug_when>
    <thetext>Comment on attachment 78232
UpdateChunk, ChunkedUpdateDrawingArea implementation for GTK port

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

Some thoughts from a non-reviewer.

&gt; WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h:74
&gt; +#if PLATFORM(GTK)
&gt; +    // to destroy the shared memory that is created in setSize

Please use full sentences with capital letter and dot at the end.

&gt; WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h:78
&gt; +    HashMap &lt;uint32_t, void*&gt; xIDMap;

Seems like simply owning the UpdateChunk would be more straightforward than the map.
The drawing area is acting on exactly one chunk at a time so the map would never has more than one item.
In didUpdate you can release the owned chunk.

&gt; WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:67
&gt; +    // BitBlt from the backing-store to the window.
&gt; +    gdk_draw_drawable(window, gc, m_backingStoreBitmap, rect.x(), rect.y(), rect.x(), rect.y(), rect.width(), rect.height());
&gt; +    g_object_unref(gc);

BitBlt is a Windows API function. I guess you wont refer to that here :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332318</commentid>
    <comment_count>10</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2011-01-11 07:24:53 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 78232 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78232&amp;action=review
&gt; 
&gt; Some thoughts from a non-reviewer.
&gt; 
&gt; &gt; WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h:74
&gt; &gt; +#if PLATFORM(GTK)
&gt; &gt; +    // to destroy the shared memory that is created in setSize
&gt; 
&gt; Please use full sentences with capital letter and dot at the end.
Sure. Will address this.
&gt; 
&gt; &gt; WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.h:78
&gt; &gt; +    HashMap &lt;uint32_t, void*&gt; xIDMap;
&gt; 
&gt; Seems like simply owning the UpdateChunk would be more straightforward than the map.
&gt; The drawing area is acting on exactly one chunk at a time so the map would never has more than one item.
&gt; In didUpdate you can release the owned chunk.
The map holds the UpdateChunk&apos;s created in setSize as well. There can be multiple setSize requests at a time or there can be a scenario where size-request and update-request happen simultaneously(for eg. resize a window when a gif image plays). In this case, there would be more than 1 UpdateChunks alive in the map.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:67
&gt; &gt; +    // BitBlt from the backing-store to the window.
&gt; &gt; +    gdk_draw_drawable(window, gc, m_backingStoreBitmap, rect.x(), rect.y(), rect.x(), rect.y(), rect.width(), rect.height());
&gt; &gt; +    g_object_unref(gc);
&gt; 
&gt; BitBlt is a Windows API function. I guess you wont refer to that here :)
Sure. Will reword the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332959</commentid>
    <comment_count>11</comment_count>
      <attachid>78232</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-12 01:18:56 -0800</bug_when>
    <thetext>Comment on attachment 78232
UpdateChunk, ChunkedUpdateDrawingArea implementation for GTK port

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

I&apos;m not reviewer, this is an unofficial review.

&gt; WebKit2/Shared/gtk/UpdateChunk.h:47
&gt; +    GdkPixmap* memory() const { return m_bitmapSharedMemory; }

GdkPixmap is deprecated, cairo surfaces should be used instead. Also the name memory() is confusing to me, since it doesn&apos;t return the memory data but the GdkPixmap.

&gt; WebKit2/Shared/gtk/UpdateChunk.cpp:48
&gt; +    m_bitmapSharedMemory = gdk_pixmap_new(0, rect.width(), rect.height(), gdk_visual_get_depth(gdk_visual_get_system()));
&gt; +    m_xID = static_cast&lt;uint32_t&gt;(GDK_PIXMAP_XID(m_bitmapSharedMemory));

Since GdkPixmap is deprecated we could use a mmapped file and a cairo image surface to draw into.

&gt; WebKit2/WebProcess/WebPage/ChunkedUpdateDrawingArea.cpp:94
&gt; +#if PLATFORM(GTK)
&gt; +    xIDMap.set(updateChunk.xID(), updateChunk.memory());
&gt; +#endif

I think we should avoid having platform #ifdefs in common code

&gt; WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:64
&gt; +    GdkGC* gc = gdk_gc_new(m_backingStoreBitmap);

GdkGC is deprecated too, you can get a cairo context with gdk_cairo_create() and use cairo api for drawing.

&gt; WebKit2/UIProcess/gtk/ChunkedUpdateDrawingAreaProxyGtk.cpp:85
&gt; +    gdk_window_invalidate_rect(m_webView-&gt;window()-&gt;window, &amp;gdkRect, false);

GtkWidget::window is private now in GTK+. Instead of having a method that returns the view window, I would add a method to the view to update a rectangle that calls gdk_window_invalidate_rect().

&gt; WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.cpp:124
&gt; +#if PLATFORM(GTK)
&gt; +    page-&gt;process()-&gt;send(DrawingAreaLegacyMessage::DidSetSizeDone, page-&gt;pageID(), CoreIPC::In(info().identifier, updateChunk-&gt;xID()));
&gt; +#endif

Platform #ifdefs in common code again, I think we can avoid this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332972</commentid>
    <comment_count>12</comment_count>
      <attachid>78233</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-12 02:11:18 -0800</bug_when>
    <thetext>Comment on attachment 78233
WebView, WebViewInternal classes implementation for GTK port

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

Unofficial review

&gt; WebKit2/ChangeLog:9
&gt; +        * UIProcess/gtk/WebView.cpp: Added. The native GtkWidget handle for each WKViewRef for GTK port.

Shouldn&apos;t this be in UIProcess/API/gtk ?

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:31
&gt; +static GObjectClass *parentClass = 0;

You can use G_DEFINE_TYPE() macro that already does this and other things for you.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:35
&gt; +    GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);

GTK_WIDGET_SET_FLAGS is deprecated, use gtk_widget_set_realized() instead.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:42
&gt; +    attributes.x = widget-&gt;allocation.x;
&gt; +    attributes.y = widget-&gt;allocation.y;
&gt; +    attributes.width = widget-&gt;allocation.width;
&gt; +    attributes.height = widget-&gt;allocation.height;

The widget inherits from GtkContainer so I think we should take into account the border width. Also GtkWidget::allocation is private now, you should use gtk_widget_get_allocation(). This should be something like:

borderWidth = gtk_container_get_border_width(GTK_CONTAINER(widget));
gtk_widget_get_allocation(widget, &amp;allocation);
attributes.x = allocation.x + borderWidth;
attributes.y = allocation.y + borderWidth;
attributes.width = allocation.width - borderWidth * 2;
attributes.height = allocation.height - borderWidth * 2;

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:52


This is deprecated too because GtkWidget::style is private, use gtk_widget_style_attach() instead

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:53
&gt; +    gtk_style_set_background(widget-&gt;style, widget-&gt;window, GTK_STATE_NORMAL);

Use gtk_widget_get_style() here

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:62


GTK_WIDGET_REALIZED() is deprecated, use gtk_widget_get_realized() instead

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:63


Use gtk_widget_get_window() here

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:64
&gt; +    gtk_widget_set_parent(widget, GTK_WIDGET(container));

I think this is enough, why do you need to call set_parent_window too?

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:83
&gt; +static void
&gt; +webkitWidgetViewFinalize(GObject* obj)
&gt; +{
&gt; +    G_OBJECT_CLASS(parentClass)-&gt;finalize(obj);
&gt; +}

You don&apos;t need this, the parent finalize will be called anyway if you don&apos;t implement finalize()

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:85
&gt; +static void webkitWidgetViewClassInit(gpointer widgetViewParentClass, __attribute__((unused)) gpointer widgetViewClassData)

This can simply be webkitWidgetViewClassInit(WebKitWidgetViewClass* klass)

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:93
&gt; +    widgetClass-&gt;expose_event = WebKit::WebView::webViewOnExpose;

Expose is deprecated too, we should use #ifdefs here to use expose_event in gtk2 and draw in gtk3

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:114
&gt; +static void webkitWidgetViewInit(GTypeInstance* instance, __attribute__((unused)) gpointer widgetViewClass)

this can simply be static void webkitWidgetViewInit(WebKitWidgetView* webView)

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:126
&gt; +GType
&gt; +webkitWidgetViewGetType(void)

Use G_DEFINE_TYPE macro instead

&gt; WebKit2/UIProcess/gtk/WebView.cpp:36
&gt; +#include &quot;WebViewInternal.h&quot;

Why WebView and WebViewInternal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333933</commentid>
    <comment_count>13</comment_count>
      <attachid>78233</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-13 14:23:17 -0800</bug_when>
    <thetext>Comment on attachment 78233
WebView, WebViewInternal classes implementation for GTK port

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

Here are my first impressions. I have listed some specific issues below. I will do a more thorough review later though.

General: Is WebKitWidgetView going to be part of the public API? If so, it should go into WebKit2/UIProcess/gtk, and be organized like the other ports. I&apos;m a little concered with the naming. The rest of the API follows the CF naming conventions WKEtcEtc and it seems that the other ports try to follow that as well. Maybe it makes sense to name this something like GTKWKView or GWKView. WebKitWidgetView implies this a view for holding widgets though. :)

If it allows the code to use WebKit naming conventions everywhere, I think we can avoid using G_DEFINE_TYPE.

&gt;&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:31
&gt;&gt; +static GObjectClass *parentClass = 0;
&gt; 
&gt; You can use G_DEFINE_TYPE() macro that already does this and other things for you.

Depending on how you decide about G_DEFINE_TYPE, this asterisk needs to go with the typename.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:68
&gt; +static void
&gt; +webkitWidgetViewDispose(GObject* obj)

This should be all one line. Please don&apos;t abbreviate the variable name.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:80
&gt; +static void
&gt; +webkitWidgetViewFinalize(GObject* obj)

Ditto.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:111
&gt; +    g_type_class_add_private(klass, sizeof(WebKitWidgetViewPrivate));

Instead of doing this, it would be better to do it manually. This will allow you to have the private section that can hold C++ members and properly call their constructors and desctructors. Take a look at WebKit/gtk/webkit/webkitwebplugin.cpp for an example of how to do this. We&apos;ll be doign this all over the WebKit 1 API eventually.

&gt;&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:126
&gt;&gt; +GType
&gt;&gt; +webkitWidgetViewGetType(void)
&gt; 
&gt; Use G_DEFINE_TYPE macro instead

This should just be one line. Leave out the &apos;void&apos; for the empty argument list too, please.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:130
&gt; +    static GType type = 0; 
&gt; +
&gt; +    if (!type) {

Use an early return here.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:144
&gt; +        static const GTypeInfo info = {
&gt; +            sizeof(WebKitWidgetViewClass),      /* class structure size */
&gt; +            0,                                  /* base_init */
&gt; +            0,                                  /* base_finalize */
&gt; +            (GClassInitFunc)webkitWidgetViewClassInit, /* class initializer */
&gt; +            0,                                  /* class_finalize */
&gt; +            0,                                  /* class_data */
&gt; +            sizeof(WebKitWidgetView),           /* instance structure size */
&gt; +            0,                                  /* preallocated instances */
&gt; +            (GInstanceInitFunc)webkitWidgetViewInit,   /* instance initializer */
&gt; +            0                                   /* function table */
&gt; +        };   
&gt; +        type = g_type_register_static(GTK_TYPE_CONTAINER, &quot;WebKitWidgetView&quot;, &amp;info, (GTypeFlags)0);

Please use static_casts here (or reinterpret_casts where appropriate) instead of a c-style casts.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:47
&gt; +    gpointer webViewInstance = widgetView-&gt;priv-&gt;webViewInstance;
&gt; +    WebView* webView = reinterpret_cast&lt;WebView*&gt;(webViewInstance);

I think it&apos;s a bad idea to use reinterpret_cast here to get the WebView instance. Just store the pointer as a WebView* and make the private section actually private.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:50

Instead of getting the entire clipbox for the region, wouldn&apos;t it make sense to break it up into rectangles and paint them separately. Is that possible? Take a look at the expose event in webkitwebview.cpp. In any case, I think you should pass an IntRect to this method.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:59
&gt; +    GObjectClass* parentClass = (GObjectClass*)g_type_class_peek_parent(WEBKIT_WIDGET_VIEW_GET_CLASS(widget));
&gt; +    GTK_WIDGET_CLASS(parentClass)-&gt;size_allocate(widget, allocation);
&gt; +    WebKitWidgetView* widgetView = WEBKIT_WIDGET_VIEW(widget);

Can&apos;t you just do widgetView-&gt;parentClass?

&gt; WebKit2/UIProcess/gtk/WebView.cpp:61
&gt; +    gpointer webViewInstance = widgetView-&gt;priv-&gt;webViewInstance;
&gt; +    WebView* webView = reinterpret_cast&lt;WebView*&gt;(webViewInstance);

Same comment as above.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:66
&gt; +gboolean WebView::webViewFocusInEvent(GtkWidget* widget, GdkEventFocus* event)

Same comments as above in this method.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:86
&gt; +gboolean WebView::webViewFocusOutEvent(GtkWidget* widget, GdkEventFocus* event)

Ditto.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:102
&gt; +gboolean WebView::webViewKeyPressEvent(GtkWidget* widget, GdkEventKey* event)

Ditto.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:113
&gt; +gboolean WebView::webViewKeyReleaseEvent(GtkWidget* widget, GdkEventKey* event)

Ditto.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:127
&gt; +gboolean WebView::webViewButtonPressEvent(GtkWidget* widget, GdkEventButton* const event)

Ditto.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:138
&gt; +gboolean WebView::webViewButtonReleaseEvent(GtkWidget* widget, GdkEventButton* event)

Ditto.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:169
&gt; +WebView::WebView(GdkRectangle rect, WebContext* context, WebPageGroup* pageGroup, GtkWidget*  hostWindow)

You should use a more descriptive parameter name than just &quot;rect.&quot; I can&apos;t tell from this patch what it represents. There&apos;s an extra space after the final asterisk.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:179
&gt; +    m_window = (GtkWidget*)g_object_new(WEBKIT_TYPE_WIDGET_VIEW, NULL); 

Use a static_cast here please.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:182
&gt; +    WebKitWidgetView* webView = WEBKIT_WIDGET_VIEW(m_window);
&gt; +    webView-&gt;priv-&gt;webViewInstance = reinterpret_cast&lt;gpointer&gt;(this);

Here you can just do WEBKIT_WIDGET_VIEW(m_window)-&gt;priv-&gt;webViewInstance = this;

&gt; WebKit2/UIProcess/gtk/WebView.cpp:206
&gt; +void WebView::onSetFocusEvent(GtkWidget*, bool)

What&apos;s the use of the second parameter? It&apos;s never used or named.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:211
&gt; +void WebView::onKillFocusEvent(GtkWidget*, bool)

Ditto.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:224
&gt; +    m_page-&gt;handleMouseEvent(mouseEvent);

This can just be:
m_page-&gt;handleMouseEvent(WebEventFactory::createWebMouseEvent(event));

&gt; WebKit2/UIProcess/gtk/WebView.cpp:230
&gt; +    WebWheelEvent wheelEvent = WebEventFactory::createWebWheelEvent(event);
&gt; +    m_page-&gt;handleWheelEvent(wheelEvent);

Same comment here.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.h:46


Please don&apos;t store this anonymously.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.h:47
&gt; +    GtkIMContext *imContext;

The asterisk is in the wrong position here.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.h:54
&gt; +    WebKitWidgetViewPrivate *priv;

Ditto.

&gt; WebKit2/UIProcess/gtk/WebViewInternal.h:62
&gt; +GType
&gt; +webkitWidgetViewGetType(void);

This should be one line.

&gt; WebKit2/UIProcess/gtk/WebView.h:112
&gt; +    GdkRectangle m_rect;

I&apos;d really prefer a more descriptive name for this member. What does the rect actually represent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334327</commentid>
    <comment_count>14</comment_count>
      <attachid>78945</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-14 08:51:25 -0800</bug_when>
    <thetext>Created attachment 78945
WebView &amp; WebKitWebView implementation with review comments incorporation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334330</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-14 08:52:44 -0800</bug_when>
    <thetext>Attachment 78945 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebKit2/ChangeLog&apos;, u&apos;WebKit2/UIProcess/gt...&quot; exit_code: 1

WebKit2/UIProcess/gtk/WebKitWebView.cpp:33:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334335</commentid>
    <comment_count>16</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-14 09:02:08 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 78233 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78233&amp;action=review
&gt; 
&gt; Unofficial review
&gt; 
&gt; &gt; WebKit2/ChangeLog:9
&gt; &gt; +        * UIProcess/gtk/WebView.cpp: Added. The native GtkWidget handle for each WKViewRef for GTK port.
&gt; 
&gt; Shouldn&apos;t this be in UIProcess/API/gtk ?
The public interfaces WKAPI files are part of patch (https://bugs.webkit.org/attachment.cgi?id=78234) in same bug. These files are internal to WebKit2, hence we have kept them in UIProcess/gtk instead of API/gtk. We have followed the win port pattern.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:31
&gt; &gt; +static GObjectClass *parentClass = 0;
&gt; 
&gt; You can use G_DEFINE_TYPE() macro that already does this and other things for you.
As per discussion with mrobinson, we decided not to use G_DEFINE_TYPE so that we can be in sync with WebKit style rather than glib.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:35
&gt; &gt; +    GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
&gt; 
&gt; GTK_WIDGET_SET_FLAGS is deprecated, use gtk_widget_set_realized() instead.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:42
&gt; &gt; +    attributes.x = widget-&gt;allocation.x;
&gt; &gt; +    attributes.y = widget-&gt;allocation.y;
&gt; &gt; +    attributes.width = widget-&gt;allocation.width;
&gt; &gt; +    attributes.height = widget-&gt;allocation.height;
&gt; 
&gt; The widget inherits from GtkContainer so I think we should take into account the border width. Also GtkWidget::allocation is private now, you should use gtk_widget_get_allocation(). This should be something like:
&gt; 
&gt; borderWidth = gtk_container_get_border_width(GTK_CONTAINER(widget));
&gt; gtk_widget_get_allocation(widget, &amp;allocation);
&gt; attributes.x = allocation.x + borderWidth;
&gt; attributes.y = allocation.y + borderWidth;
&gt; attributes.width = allocation.width - borderWidth * 2;
&gt; attributes.height = allocation.height - borderWidth * 2;
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:52
&gt; 
&gt; 
&gt; This is deprecated too because GtkWidget::style is private, use gtk_widget_style_attach() instead
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:53
&gt; &gt; +    gtk_style_set_background(widget-&gt;style, widget-&gt;window, GTK_STATE_NORMAL);
&gt; 
&gt; Use gtk_widget_get_style() here
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:62
&gt; 
&gt; 
&gt; GTK_WIDGET_REALIZED() is deprecated, use gtk_widget_get_realized() instead
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:63
&gt; 
&gt; 
&gt; Use gtk_widget_get_window() here
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:64
&gt; &gt; +    gtk_widget_set_parent(widget, GTK_WIDGET(container));
&gt; 
&gt; I think this is enough, why do you need to call set_parent_window too?
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:83
&gt; &gt; +static void
&gt; &gt; +webkitWidgetViewFinalize(GObject* obj)
&gt; &gt; +{
&gt; &gt; +    G_OBJECT_CLASS(parentClass)-&gt;finalize(obj);
&gt; &gt; +}
&gt; 
&gt; You don&apos;t need this, the parent finalize will be called anyway if you don&apos;t implement finalize()
Done. Since we have no other member to be freed in finalize, removed the callback itself.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:85
&gt; &gt; +static void webkitWidgetViewClassInit(gpointer widgetViewParentClass, __attribute__((unused)) gpointer widgetViewClassData)
&gt; 
&gt; This can simply be webkitWidgetViewClassInit(WebKitWidgetViewClass* klass)
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:93
&gt; &gt; +    widgetClass-&gt;expose_event = WebKit::WebView::webViewOnExpose;
&gt; 
&gt; Expose is deprecated too, we should use #ifdefs here to use expose_event in gtk2 and draw in gtk3
Done. The draw is right now stubbed. We will try to put the properly tested draw() implementation ASAP (probably along with reworked UpdateChunk patch) 
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:114
&gt; &gt; +static void webkitWidgetViewInit(GTypeInstance* instance, __attribute__((unused)) gpointer widgetViewClass)
&gt; 
&gt; this can simply be static void webkitWidgetViewInit(WebKitWidgetView* webView)
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:126
&gt; &gt; +GType
&gt; &gt; +webkitWidgetViewGetType(void)
&gt; 
&gt; Use G_DEFINE_TYPE macro instead
As explained earlier, decided not to use this macro.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:36
&gt; &gt; +#include &quot;WebViewInternal.h&quot;
&gt; 
&gt; Why WebView and WebViewInternal?
Basically, WebView class implements interface PageClient and holds the native window handle. WebViewInternal is the gobject which captures the actual WebView (GtkWidget). I have now renamed WebViewInternal to WebKitWebView (as in WebKit1 since it does the same job as WebKitWebView).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334348</commentid>
    <comment_count>17</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2011-01-14 09:19:45 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 78233 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78233&amp;action=review
&gt; 
&gt; Here are my first impressions. I have listed some specific issues below. I will do a more thorough review later though.
&gt; 
&gt; General: Is WebKitWidgetView going to be part of the public API? If so, it should go into WebKit2/UIProcess/gtk, and be organized like the other ports. I&apos;m a little concered with the naming. The rest of the API follows the CF naming conventions WKEtcEtc and it seems that the other ports try to follow that as well. Maybe it makes sense to name this something like GTKWKView or GWKView. WebKitWidgetView implies this a view for holding widgets though. :)
&gt; 
No WebKitWidgetView is always internal to WebView class. No other class should know even existence of the native widget handle. For all other classes, WebView is the actual handle. Hence, we kept the files in UIProcess/gtk folder. The actual public API files are WKView.[h/cpp] which are present in UIProcess/API/gtk folder (present in other patch of same bug). The API and file names of public API follow the CF pattern of WKxxx.

&gt; If it allows the code to use WebKit naming conventions everywhere, I think we can avoid using G_DEFINE_TYPE.
I haven&apos;t used G_DEFINE_TYPE and instead following webkit style everywhere.
&gt; 
&gt; &gt;&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:31
&gt; &gt;&gt; +static GObjectClass *parentClass = 0;
&gt; &gt; 
&gt; &gt; You can use G_DEFINE_TYPE() macro that already does this and other things for you.
&gt; 
&gt; Depending on how you decide about G_DEFINE_TYPE, this asterisk needs to go with the typename.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:68
&gt; &gt; +static void
&gt; &gt; +webkitWidgetViewDispose(GObject* obj)
&gt; 
&gt; This should be all one line. Please don&apos;t abbreviate the variable name.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:80
&gt; &gt; +static void
&gt; &gt; +webkitWidgetViewFinalize(GObject* obj)
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:111
&gt; &gt; +    g_type_class_add_private(klass, sizeof(WebKitWidgetViewPrivate));
&gt; 
&gt; Instead of doing this, it would be better to do it manually. This will allow you to have the private section that can hold C++ members and properly call their constructors and desctructors. Take a look at WebKit/gtk/webkit/webkitwebplugin.cpp for an example of how to do this. We&apos;ll be doign this all over the WebKit 1 API eventually.
I haven&apos;t yet used the placement constructors for private section. This is because right now there are no C++ members in the private. There is only one GtkIMContext* only in private structure. My thinking was when we add any C++ members to private we can move to that placement constructor syntax (as in WebKit1).
&gt; 
&gt; &gt;&gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:126
&gt; &gt;&gt; +GType
&gt; &gt;&gt; +webkitWidgetViewGetType(void)
&gt; &gt; 
&gt; &gt; Use G_DEFINE_TYPE macro instead
&gt; 
&gt; This should just be one line. Leave out the &apos;void&apos; for the empty argument list too, please.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:130
&gt; &gt; +    static GType type = 0; 
&gt; &gt; +
&gt; &gt; +    if (!type) {
&gt; 
&gt; Use an early return here.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:144
&gt; &gt; +        static const GTypeInfo info = {
&gt; &gt; +            sizeof(WebKitWidgetViewClass),      /* class structure size */
&gt; &gt; +            0,                                  /* base_init */
&gt; &gt; +            0,                                  /* base_finalize */
&gt; &gt; +            (GClassInitFunc)webkitWidgetViewClassInit, /* class initializer */
&gt; &gt; +            0,                                  /* class_finalize */
&gt; &gt; +            0,                                  /* class_data */
&gt; &gt; +            sizeof(WebKitWidgetView),           /* instance structure size */
&gt; &gt; +            0,                                  /* preallocated instances */
&gt; &gt; +            (GInstanceInitFunc)webkitWidgetViewInit,   /* instance initializer */
&gt; &gt; +            0                                   /* function table */
&gt; &gt; +        };   
&gt; &gt; +        type = g_type_register_static(GTK_TYPE_CONTAINER, &quot;WebKitWidgetView&quot;, &amp;info, (GTypeFlags)0);
&gt; 
&gt; Please use static_casts here (or reinterpret_casts where appropriate) instead of a c-style casts.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:47
&gt; &gt; +    gpointer webViewInstance = widgetView-&gt;priv-&gt;webViewInstance;
&gt; &gt; +    WebView* webView = reinterpret_cast&lt;WebView*&gt;(webViewInstance);
&gt; 
&gt; I think it&apos;s a bad idea to use reinterpret_cast here to get the WebView instance. Just store the pointer as a WebView* and make the private section actually private.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:50
&gt; 
&gt; Instead of getting the entire clipbox for the region, wouldn&apos;t it make sense to break it up into rectangles and paint them separately. Is that possible? Take a look at the expose event in webkitwebview.cpp. In any case, I think you should pass an IntRect to this method.
Done. Passing IntRect now. Regarding painting them separately, actually, WebProcess itself takes care of giving small rects for painting to UIProcess. If the rects needs to be coalesced, WebProcess itself coaletaes all such rects and sends the final rects to UIProcess to paint. UIProcess always just blindly paints the rects given to paint by WebProcess by calling gdk_window_invalidate_rect() on the rect given by WebProcess.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:59
&gt; &gt; +    GObjectClass* parentClass = (GObjectClass*)g_type_class_peek_parent(WEBKIT_WIDGET_VIEW_GET_CLASS(widget));
&gt; &gt; +    GTK_WIDGET_CLASS(parentClass)-&gt;size_allocate(widget, allocation);
&gt; &gt; +    WebKitWidgetView* widgetView = WEBKIT_WIDGET_VIEW(widget);
&gt; 
&gt; Can&apos;t you just do widgetView-&gt;parentClass?
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:61
&gt; &gt; +    gpointer webViewInstance = widgetView-&gt;priv-&gt;webViewInstance;
&gt; &gt; +    WebView* webView = reinterpret_cast&lt;WebView*&gt;(webViewInstance);
&gt; 
&gt; Same comment as above.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:66
&gt; &gt; +gboolean WebView::webViewFocusInEvent(GtkWidget* widget, GdkEventFocus* event)
&gt; 
&gt; Same comments as above in this method.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:86
&gt; &gt; +gboolean WebView::webViewFocusOutEvent(GtkWidget* widget, GdkEventFocus* event)
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:102
&gt; &gt; +gboolean WebView::webViewKeyPressEvent(GtkWidget* widget, GdkEventKey* event)
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:113
&gt; &gt; +gboolean WebView::webViewKeyReleaseEvent(GtkWidget* widget, GdkEventKey* event)
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:127
&gt; &gt; +gboolean WebView::webViewButtonPressEvent(GtkWidget* widget, GdkEventButton* const event)
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:138
&gt; &gt; +gboolean WebView::webViewButtonReleaseEvent(GtkWidget* widget, GdkEventButton* event)
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:169
&gt; &gt; +WebView::WebView(GdkRectangle rect, WebContext* context, WebPageGroup* pageGroup, GtkWidget*  hostWindow)
&gt; 
&gt; You should use a more descriptive parameter name than just &quot;rect.&quot; I can&apos;t tell from this patch what it represents. There&apos;s an extra space after the final asterisk.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:179
&gt; &gt; +    m_window = (GtkWidget*)g_object_new(WEBKIT_TYPE_WIDGET_VIEW, NULL); 
&gt; 
&gt; Use a static_cast here please.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:182
&gt; &gt; +    WebKitWidgetView* webView = WEBKIT_WIDGET_VIEW(m_window);
&gt; &gt; +    webView-&gt;priv-&gt;webViewInstance = reinterpret_cast&lt;gpointer&gt;(this);
&gt; 
&gt; Here you can just do WEBKIT_WIDGET_VIEW(m_window)-&gt;priv-&gt;webViewInstance = this;
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:206
&gt; &gt; +void WebView::onSetFocusEvent(GtkWidget*, bool)
&gt; 
&gt; What&apos;s the use of the second parameter? It&apos;s never used or named.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:211
&gt; &gt; +void WebView::onKillFocusEvent(GtkWidget*, bool)
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:224
&gt; &gt; +    m_page-&gt;handleMouseEvent(mouseEvent);
&gt; 
&gt; This can just be:
&gt; m_page-&gt;handleMouseEvent(WebEventFactory::createWebMouseEvent(event));
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:230
&gt; &gt; +    WebWheelEvent wheelEvent = WebEventFactory::createWebWheelEvent(event);
&gt; &gt; +    m_page-&gt;handleWheelEvent(wheelEvent);
&gt; 
&gt; Same comment here.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.h:46
&gt; 
&gt; 
&gt; Please don&apos;t store this anonymously.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.h:47
&gt; &gt; +    GtkIMContext *imContext;
&gt; 
&gt; The asterisk is in the wrong position here.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.h:54
&gt; &gt; +    WebKitWidgetViewPrivate *priv;
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.h:62
&gt; &gt; +GType
&gt; &gt; +webkitWidgetViewGetType(void);
&gt; 
&gt; This should be one line.
Done.
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.h:112
&gt; &gt; +    GdkRectangle m_rect;
&gt; 
&gt; I&apos;d really prefer a more descriptive name for this member. What does the rect actually represent?
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334353</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-01-14 09:29:13 -0800</bug_when>
    <thetext>(In reply to comment #16) 
&gt; &gt; You can use G_DEFINE_TYPE() macro that already does this and other things for you.
&gt; As per discussion with mrobinson, we decided not to use G_DEFINE_TYPE so that we can be in sync with WebKit style rather than glib.

I disagree, but at least you could use the current implementation of the G_DEFINE_TYPE macro, using the webkit coding style it would be something like:

GType webkitWebViewGetType()
{
    static volatile gsize gDefineTypeIdVolatile = 0;
    if (g_once_init_enter(&amp;gDefineTypeIdVolatile)) {
        GType gDefineTypeId = g_type_register_static_simple(GTK_TYPE_CONTAINER,
                                                                                            g_intern_static_string(&quot;WebKitWebView&quot;),
                                                                                            sizeof(WebKitWebViewClass),
                                                                                            reinterpret_cast&lt;GClassInitFunc&gt;(webkitWebViewClassInit),
                                                                                            sizeof(WebKitWebView),
                                                                                            reinterpret_cast&lt;GInstanceInitFunc&gt;(webkitWebViewInit),
                                                                                            static_cast&lt;GTypeFlags&gt;(0));
        g_once_init_leave(&amp;gDefineTypeIdVolatile, gDefineTypeId);
    }
    return gDefineTypeIdVolatile;
}

&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:35
&gt; &gt; &gt; +    GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
&gt; &gt; 
&gt; &gt; GTK_WIDGET_SET_FLAGS is deprecated, use gtk_widget_set_realized() instead.
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:42
&gt; &gt; &gt; +    attributes.x = widget-&gt;allocation.x;
&gt; &gt; &gt; +    attributes.y = widget-&gt;allocation.y;
&gt; &gt; &gt; +    attributes.width = widget-&gt;allocation.width;
&gt; &gt; &gt; +    attributes.height = widget-&gt;allocation.height;
&gt; &gt; 
&gt; &gt; The widget inherits from GtkContainer so I think we should take into account the border width. Also GtkWidget::allocation is private now, you should use gtk_widget_get_allocation(). This should be something like:
&gt; &gt; 
&gt; &gt; borderWidth = gtk_container_get_border_width(GTK_CONTAINER(widget));
&gt; &gt; gtk_widget_get_allocation(widget, &amp;allocation);
&gt; &gt; attributes.x = allocation.x + borderWidth;
&gt; &gt; attributes.y = allocation.y + borderWidth;
&gt; &gt; attributes.width = allocation.width - borderWidth * 2;
&gt; &gt; attributes.height = allocation.height - borderWidth * 2;
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:52
&gt; &gt; 
&gt; &gt; 
&gt; &gt; This is deprecated too because GtkWidget::style is private, use gtk_widget_style_attach() instead
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:53
&gt; &gt; &gt; +    gtk_style_set_background(widget-&gt;style, widget-&gt;window, GTK_STATE_NORMAL);
&gt; &gt; 
&gt; &gt; Use gtk_widget_get_style() here
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:62
&gt; &gt; 
&gt; &gt; 
&gt; &gt; GTK_WIDGET_REALIZED() is deprecated, use gtk_widget_get_realized() instead
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:63
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Use gtk_widget_get_window() here
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:64
&gt; &gt; &gt; +    gtk_widget_set_parent(widget, GTK_WIDGET(container));
&gt; &gt; 
&gt; &gt; I think this is enough, why do you need to call set_parent_window too?
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:83
&gt; &gt; &gt; +static void
&gt; &gt; &gt; +webkitWidgetViewFinalize(GObject* obj)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    G_OBJECT_CLASS(parentClass)-&gt;finalize(obj);
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; You don&apos;t need this, the parent finalize will be called anyway if you don&apos;t implement finalize()
&gt; Done. Since we have no other member to be freed in finalize, removed the callback itself.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:85
&gt; &gt; &gt; +static void webkitWidgetViewClassInit(gpointer widgetViewParentClass, __attribute__((unused)) gpointer widgetViewClassData)
&gt; &gt; 
&gt; &gt; This can simply be webkitWidgetViewClassInit(WebKitWidgetViewClass* klass)
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:93
&gt; &gt; &gt; +    widgetClass-&gt;expose_event = WebKit::WebView::webViewOnExpose;
&gt; &gt; 
&gt; &gt; Expose is deprecated too, we should use #ifdefs here to use expose_event in gtk2 and draw in gtk3
&gt; Done. The draw is right now stubbed. We will try to put the properly tested draw() implementation ASAP (probably along with reworked UpdateChunk patch) 
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:114
&gt; &gt; &gt; +static void webkitWidgetViewInit(GTypeInstance* instance, __attribute__((unused)) gpointer widgetViewClass)
&gt; &gt; 
&gt; &gt; this can simply be static void webkitWidgetViewInit(WebKitWidgetView* webView)
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebViewInternal.cpp:126
&gt; &gt; &gt; +GType
&gt; &gt; &gt; +webkitWidgetViewGetType(void)
&gt; &gt; 
&gt; &gt; Use G_DEFINE_TYPE macro instead
&gt; As explained earlier, decided not to use this macro.
&gt; &gt; 
&gt; &gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:36
&gt; &gt; &gt; +#include &quot;WebViewInternal.h&quot;
&gt; &gt; 
&gt; &gt; Why WebView and WebViewInternal?
&gt; Basically, WebView class implements interface PageClient and holds the native window handle. WebViewInternal is the gobject which captures the actual WebView (GtkWidget). I have now renamed WebViewInternal to WebKitWebView (as in WebKit1 since it does the same job as WebKitWebView).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334356</commentid>
    <comment_count>19</comment_count>
      <attachid>78945</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-14 09:30:49 -0800</bug_when>
    <thetext>Comment on attachment 78945
WebView &amp; WebKitWebView implementation with review comments incorporation

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

Looking better! I&apos;m slightly concerned with the name of the GTK+ widget because it collides with the WebKit1 naming. I&apos;m not sure if that would cause linking issues or not (some older libraries might link against WebKit1 for JavaScriptCore. I know it&apos;s unusual, but maybe we should consider the WKView naming convention to match other ports.

&gt; WebKit2/UIProcess/gtk/WebKitWebView.cpp:51
&gt; +#if GTK_CHECK_VERSION(2, 18, 0)
&gt; +    gtk_widget_get_allocation(widget, &amp;allocation);
&gt; +#else
&gt; +    allocation = widget-&gt;allocation;
&gt; +#endif

Here you can just include GtkVersioning.h from WebCore and only call gtk_widget_get_allocation(...)

&gt; WebKit2/UIProcess/gtk/WebKitWebView.cpp:168
&gt; +            sizeof(WebKitWebViewClass),          /* class structure size */
&gt; +            0,                                  /* base_init */
&gt; +            0,                                  /* base_finalize */
&gt; +            reinterpret_cast&lt;GClassInitFunc&gt;(webkitWebViewClassInit), /* class initializer */
&gt; +            0,                                  /* class_finalize */
&gt; +            0,                                  /* class_data */
&gt; +            sizeof(WebKitWebView),               /* instance structure size */
&gt; +            0,                                  /* preallocated instances */
&gt; +            reinterpret_cast&lt;GInstanceInitFunc&gt;(webkitWebViewInit),   /* instance initializer */
&gt; +            0                                   /* function table */
&gt; +    };   

This should be a four space indent. Nit!: do you mind lining up the comments? :)

&gt; WebKit2/UIProcess/gtk/WebView.h:61
&gt; +#ifdef GTK_API_VERSION_2
&gt; +    static gboolean webViewOnExpose(GtkWidget*, GdkEventExpose*);
&gt; +#else
&gt; +    static gboolean webViewOnDraw(GtkWidget*, cairo_t*);
&gt; +#endif
&gt; +    static void webViewOnSizeAllocate(GtkWidget*, GtkAllocation*);
&gt; +    static gboolean webViewFocusInEvent(GtkWidget*, GdkEventFocus*);
&gt; +    static gboolean webViewFocusOutEvent(GtkWidget*, GdkEventFocus*);
&gt; +    static gboolean webViewKeyPressEvent(GtkWidget*, GdkEventKey*);
&gt; +    static gboolean webViewKeyReleaseEvent(GtkWidget*, GdkEventKey*);
&gt; +    static gboolean webViewButtonPressEvent(GtkWidget*, GdkEventButton*);
&gt; +    static gboolean webViewButtonReleaseEvent(GtkWidget*, GdkEventButton*);
&gt; +    static gboolean webViewScrollEvent(GtkWidget*, GdkEventScroll*);
&gt; +    static gboolean webViewMotionNotifyEvent(GtkWidget*, GdkEventMotion*);

These seem to be GObject methods that are really only used in WebKitWebView.cpp. I think it might make more sense to declare them statically inside the GObject implementation file.

Ah, I see you have them here, because the methods on WebView are private. Perhaps a better approach would be to make these methods on the private data section of the GObject and make the private data struct a friend class of WebView. Either that or make the WebView:onWhatever methods public. Technically you are calling them from another class.

&gt; WebKit2/UIProcess/gtk/WebView.h:118
&gt; +    GdkRectangle m_windowRect;

Is this the rectangle that represents the entire window or just the viewport? If it&apos;s the viewport, I think m_viewRect or m_viewportRect makes more sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334375</commentid>
    <comment_count>20</comment_count>
      <attachid>78232</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-14 10:04:53 -0800</bug_when>
    <thetext>Comment on attachment 78232
UpdateChunk, ChunkedUpdateDrawingArea implementation for GTK port

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

r- because this should almost certainly use cairo surfaces instead of GdkPixmaps.

&gt; WebKit2/UIProcess/ChunkedUpdateDrawingAreaProxy.h:28
&gt; -#ifndef DrawingAreaProxyUpdateChunk_h
&gt; -#define DrawingAreaProxyUpdateChunk_h
&gt; +#ifndef ChunkedUpdateDrawingAreaProxy_h
&gt; +#define ChunkedUpdateDrawingAreaProxy_h

This is a good change, but I think it can go in a separate cleanup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334376</commentid>
    <comment_count>21</comment_count>
      <attachid>78234</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-14 10:06:11 -0800</bug_when>
    <thetext>Comment on attachment 78234
Changes to WKAPI interfaces for GTK port

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

&gt; WebKit2/UIProcess/API/C/gtk/WKView.h:37
&gt; +WK_EXPORT WKViewRef WKViewCreate(GdkRectangle rect, WKContextRef context, WKPageGroupRef pageGroup, GtkWidget * hostWindow);

Since the GdkRectangle parameter is currently unused, I&apos;d say just leave it out for now. You have an extra space after GtkWidget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334382</commentid>
    <comment_count>22</comment_count>
      <attachid>78945</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-14 10:17:23 -0800</bug_when>
    <thetext>Comment on attachment 78945
WebView &amp; WebKitWebView implementation with review comments incorporation

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

&gt; WebKit2/UIProcess/gtk/WebView.cpp:73
&gt; +    GtkWidget* toplevel = gtk_widget_get_toplevel(widget);
&gt; +    if (GTK_WIDGET_TOPLEVEL(toplevel) &amp;&amp; gtk_window_has_toplevel_focus(GTK_WINDOW(toplevel))) {

Is it really necessary to check GTK_WIDGET_TOPLEVEL(...) on the return value of gtk_widget_get_toplevel(...)?

&gt; WebKit2/UIProcess/gtk/WebView.cpp:79
&gt; +        if (!(webView-&gt;m_isPageActive)) {
&gt; +            webView-&gt;m_isPageActive = true;
&gt; +            webView-&gt;updateActiveState();
&gt; +        }
&gt; +        webView-&gt;onSetFocusEvent(widget);

This logic is all in terms of internal WebView members. I think it makes sense to just move this into one method within WebView, perhaps WebView::handleFocusInEvent.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:92
&gt; +    webView-&gt;onKillFocusEvent(widget);
&gt; +    webView-&gt;m_isPageActive = false; 
&gt; +    webView-&gt;updateActiveState();

This series of actions belongs inside one WebView method, perhaps WebView::handleFocusOutEvent.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:154
&gt; +WebView::WebView(GdkRectangle windowRect, WebContext* context, WebPageGroup* pageGroup, GtkWidget* hostWindow)

I think you should remove the windowRect and hostWindow parameters here. They are both unused and it probably makes more sense to look them up when you need them. For instance, the host window of a widget may change, etc.

&gt; WebKit2/UIProcess/gtk/WebView.cpp:229
&gt; +void WebView::updateActiveState()
&gt; +{
&gt; +    m_page-&gt;setActive(isActive());
&gt; +}

I&apos;d prefer you to remove this method and just call ::setActive directly. It&apos;s clearer. I think it makes sense to make the onKillFocusEvent and onSetFocusEvent smarter rather than having all the logic in the GObject.

&gt; WebKit2/UIProcess/gtk/WebView.h:84
&gt; +    void onPaintEvent(GtkWidget*, WebCore::IntRect);
&gt; +    void onSizeEvent(GtkWidget*, WebCore::IntSize);
&gt; +    void onSetFocusEvent(GtkWidget*);
&gt; +    void onKillFocusEvent(GtkWidget*);
&gt; +    void onKeyEvent(GdkEventKey*);
&gt; +    void onMouseEvent(GdkEventAny*);
&gt; +    void onWheelEvent(GdkEventScroll*);

Sorry to bikeshed here, but I&apos;d prefer these names to begin with verbs. For instance:
onPaintEvent(...) -&gt; paint(...) or handlePaintEvent(...)
onSizeEvent(...) -&gt; resisize(...) or handleSizeEvent(...)
etc.

&gt;&gt; WebKit2/UIProcess/gtk/WebView.h:118

&gt; 
&gt; Is this the rectangle that represents the entire window or just the viewport? If it&apos;s the viewport, I think m_viewRect or m_viewportRect makes more sense.

I think this should be removed for  now, since it&apos;s unused.

&gt; WebKit2/UIProcess/gtk/WebView.h:119


This might be more accurately called m_viewWidget.

&gt; WebKit2/UIProcess/gtk/WebView.h:120
&gt; +    GtkWidget* m_hostWindow;

I recommend removing this for now since it&apos;s unused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348060</commentid>
    <comment_count>23</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-09 01:32:15 -0800</bug_when>
    <thetext>I&apos;m going to create a bug per patch to simplify the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348110</commentid>
    <comment_count>24</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-02-09 02:48:51 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 78945 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78945&amp;action=review
&gt; 
&gt; &gt; WebKit2/UIProcess/gtk/WebView.cpp:73
&gt; &gt; +    GtkWidget* toplevel = gtk_widget_get_toplevel(widget);
&gt; &gt; +    if (GTK_WIDGET_TOPLEVEL(toplevel) &amp;&amp; gtk_window_has_toplevel_focus(GTK_WINDOW(toplevel))) {
&gt; 
&gt; Is it really necessary to check GTK_WIDGET_TOPLEVEL(...) on the return value of gtk_widget_get_toplevel(...)?
&gt; 

It is recommended, yes, check the documentation of the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348183</commentid>
    <comment_count>25</comment_count>
      <attachid>81797</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-09 06:30:15 -0800</bug_when>
    <thetext>Created attachment 81797
Proposed patch

We are not using currently the widget as proper API but if we want to create a gtk API eventually we will have to move it to the API/gtk directory and remove the webview dependency from its API. We can leave that for future patches though. I&apos;m still reviewing criticals in the webprocess and the other patches but I think makes sense to upload for review so we can do both things at the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348991</commentid>
    <comment_count>26</comment_count>
      <attachid>81961</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-10 05:50:12 -0800</bug_when>
    <thetext>Created attachment 81961
Proposed patch

I&apos;ve removed unuseful function pointed out by Carlos, and talked about the API decisions, we can start with this API for this initial patches and start later different work.

The criticals allow the rendering and browsing but they are things we have to implement different in webcore to avoid access to the widget, we will solve that in following bugs and patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349143</commentid>
    <comment_count>27</comment_count>
      <attachid>81961</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-10 09:49:31 -0800</bug_when>
    <thetext>Comment on attachment 81961
Proposed patch

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

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:41
&gt; +    gboolean disposeHasRun;

disposeRan?

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:50
&gt; +    guint borderWidth = gtk_container_get_border_width(GTK_CONTAINER(widget));
&gt; +    gtk_widget_get_allocation(widget, &amp;allocation);

Does it make sense for a WebView to have a border, since it isn&apos;t a container in the traditional sense?

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:206
&gt; +    webView-&gt;keyPress(event);

Please have method names that use verbs. handleKeyboardEvent. keyPress is a misnomer anyway, since this is a release event.

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:215
&gt; +    webView-&gt;mouseActivate(reinterpret_cast&lt;GdkEventAny*&gt;(event));

Ditto. handleMouseEvent.

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:224
&gt; +    webView-&gt;mouseActivate(reinterpret_cast&lt;GdkEventAny*&gt;(event));

Ditto. handleMouseEvent.

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:232
&gt; +    webView-&gt;scroll(event);

Ditto. handleWheelEvent.

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:240
&gt; +    webView-&gt;mouseActivate(reinterpret_cast&lt;GdkEventAny*&gt;(event));

Ditto. handleMouseEvent.

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.h:40
&gt; +#define WEBKIT_WEB_VIEW(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_VIEW, WebKitWebView))

Please don&apos;t abbreviate here since these are in WebKit style.

&gt; Source/WebKit2/UIProcess/gtk/WebView.cpp:144
&gt; +    return IntRect(m_viewRect).size();

Wouldn&apos;t it make sense to just ask the widget for its allocation here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349166</commentid>
    <comment_count>28</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-02-10 10:25:33 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 81961 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81961&amp;action=review

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:50
&gt; &gt; +    guint borderWidth = gtk_container_get_border_width(GTK_CONTAINER(widget));
&gt; &gt; +    gtk_widget_get_allocation(widget, &amp;allocation);
&gt; 
&gt; Does it make sense for a WebView to have a border, since it isn&apos;t a container in the traditional sense?

you can do gtk_container_set_border_width (GTK_CONTAINER (web_view), 5);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349173</commentid>
    <comment_count>29</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-10 10:34:05 -0800</bug_when>
    <thetext>(In reply to comment #28)

&gt; you can do gtk_container_set_border_width (GTK_CONTAINER (web_view), 5);

It&apos;s true, but the WebView doesn&apos;t contain widgets that you pack into it manually. It&apos;s only a container because it contains flash plugin windows and embedded objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349802</commentid>
    <comment_count>30</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-11 09:16:53 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #27)
&gt; (From update of attachment 81961 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81961&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:41
&gt; &gt; +    gboolean disposeHasRun;
&gt; 
&gt; disposeRan?
&gt; 

Actually now that you point this out, I think I&apos;m going to change this to the usual check of each variable in the gtkwidgets for the case were dispose is called multiple times.

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:50
&gt; &gt; +    guint borderWidth = gtk_container_get_border_width(GTK_CONTAINER(widget));
&gt; &gt; +    gtk_widget_get_allocation(widget, &amp;allocation);
&gt; 
&gt; Does it make sense for a WebView to have a border, since it isn&apos;t a container in the traditional sense?
&gt;

I agree, we do not need it.

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebView.cpp:144
&gt; &gt; +    return IntRect(m_viewRect).size();
&gt; 
&gt; Wouldn&apos;t it make sense to just ask the widget for its allocation here?

Yep, I think you are right, I had this in my list but I forgot to check it because it was the only reason to keep the gdkrectangle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349850</commentid>
    <comment_count>31</comment_count>
      <attachid>82145</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-11 11:03:20 -0800</bug_when>
    <thetext>Created attachment 82145
Proposed patch

Fixed all the issues pointed out, and removed the gdkrectangle, we are not using it anymore. Webkit2 here we come! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351317</commentid>
    <comment_count>32</comment_count>
      <attachid>82466</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-15 08:54:54 -0800</bug_when>
    <thetext>Created attachment 82466
Proposed patch

Updated the patch with new additions to the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355125</commentid>
    <comment_count>33</comment_count>
      <attachid>83285</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-22 01:38:50 -0800</bug_when>
    <thetext>Created attachment 83285
Proposed patch

Patch updated, added the clickCount code similar to the code used in webkit1. I left one style issue, using NULL instead a 0 because we are calling a glib API and we had issues using 0 in these situation IIRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355128</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-22 01:39:58 -0800</bug_when>
    <thetext>Attachment 83285 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:261:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357146</commentid>
    <comment_count>35</comment_count>
      <attachid>83285</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-24 10:32:23 -0800</bug_when>
    <thetext>Comment on attachment 83285
Proposed patch

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

Looks good, but please make the following changes.

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:92
&gt; +#ifdef GTK_API_VERSION_2
&gt; +#if GTK_CHECK_VERSION(2, 20, 0)
&gt; +    gtk_widget_style_attach(widget);
&gt; +#else
&gt; +    widget-&gt;style = gtk_style_attach(gtk_widget_get_style(widget), window);
&gt; +#endif

A nice cleanup would be to make this handled by GtkVersioning.h in a followup patch.

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:145
&gt; +    GdkWindow* window = gtk_widget_get_window(widget);
&gt; +    cairo_t* cr = gdk_cairo_create(window);
&gt; +
&gt; +    webView-&gt;paint(widget, clipRect, cr);
&gt; +

This should be smarter eventually. It&apos;s probably a good idea to open a bug tracking moving the smarts from WebKit1.

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:165
&gt; +static void webViewOnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation)

Please rename this to webViewSizeAllocate for consistency.

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:349
&gt; +    static volatile gsize gDefineTypeIdVolatile = 0;
&gt; +    if (g_once_init_enter(&amp;gDefineTypeIdVolatile)) {

Please turn this into an early return.

&gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.h:29
&gt; +#ifndef WebKitWebView_h
&gt; +#define WebKitWebView_h

Let&apos;s call this WebViewWidget for now,  just so that the separation of concerns is clear. I think having a GtkWidget called WebKitWebView and a C++ class called WebView is too confusing for the moment. Later on we can focus more heavily on what kind of interface we want to expose to the end user. This will be easier once we see how this looks for the released version of Mac and Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357811</commentid>
    <comment_count>36</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-25 03:15:26 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 83285 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83285&amp;action=review
&gt; 
&gt; Looks good, but please make the following changes.
&gt; 

Thanks for the review :).

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:92
&gt; &gt; +#ifdef GTK_API_VERSION_2
&gt; &gt; +#if GTK_CHECK_VERSION(2, 20, 0)
&gt; &gt; +    gtk_widget_style_attach(widget);
&gt; &gt; +#else
&gt; &gt; +    widget-&gt;style = gtk_style_attach(gtk_widget_get_style(widget), window);
&gt; &gt; +#endif
&gt; 
&gt; A nice cleanup would be to make this handled by GtkVersioning.h in a followup patch.
&gt; 

Added bug:

https://bugs.webkit.org/show_bug.cgi?id=55210

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:145
&gt; &gt; +    GdkWindow* window = gtk_widget_get_window(widget);
&gt; &gt; +    cairo_t* cr = gdk_cairo_create(window);
&gt; &gt; +
&gt; &gt; +    webView-&gt;paint(widget, clipRect, cr);
&gt; &gt; +
&gt; 
&gt; This should be smarter eventually. It&apos;s probably a good idea to open a bug tracking moving the smarts from WebKit1.
&gt;

I&apos;m going to change it to use them.

&gt; &gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:165
&gt; &gt; +static void webViewOnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation)
&gt; 
&gt; Please rename this to webViewSizeAllocate for consistency.
&gt;
&gt; &gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.cpp:349
&gt; &gt; +    static volatile gsize gDefineTypeIdVolatile = 0;
&gt; &gt; +    if (g_once_init_enter(&amp;gDefineTypeIdVolatile)) {
&gt; 
&gt; Please turn this into an early return.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/gtk/WebKitWebView.h:29
&gt; &gt; +#ifndef WebKitWebView_h
&gt; &gt; +#define WebKitWebView_h
&gt; 
&gt; Let&apos;s call this WebViewWidget for now,  just so that the separation of concerns is clear. I think having a GtkWidget called WebKitWebView and a C++ class called WebView is too confusing for the moment. Later on we can focus more heavily on what kind of interface we want to expose to the end user. This will be easier once we see how this looks for the released version of Mac and Windows.

All done, thanks again, I&apos;ll try to land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357817</commentid>
    <comment_count>37</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-02-25 03:46:04 -0800</bug_when>
    <thetext>Landed http://trac.webkit.org/changeset/79671.

Thanks everybody for the help :).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72322</attachid>
            <date>2010-10-29 06:17:21 -0700</date>
            <delta_ts>2010-11-02 09:47:32 -0700</delta_ts>
            <desc>Implementation of all paint related classes ie UpdateChunk and ChunkedUpdateDrawingArea/Proxy classes</desc>
            <filename>UpdateChunk.diff</filename>
            <type>text/plain</type>
            <size>25516</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ZWE5ZmY5OS4uODI3YjY4NiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0xMC0yOCAgQ2hhbmRyYSBWYWxs
YWxhICA8Y2hhbmRyYS52YWxsYWxhQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFtHVEtdIEltcGxlbWVudGF0aW9u
IG9mIFVwZGF0ZUNodW5rLCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWEvUHJveHkgY2xhc3Nlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MDkKKyAg
ICAgICAgCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogU2hhcmVkL0NvcmVJ
UENTdXBwb3J0L0RyYXdpbmdBcmVhTWVzc2FnZUtpbmRzLmg6CisgICAgICAgICogU2hhcmVkL2d0
ay9VcGRhdGVDaHVuay5jcHA6IEFkZGVkLiBXZWJQcm9jZXNzIHVzZXMgZ2RrX3BpeG1hcF9uZXcg
dG8gY3JlYXRlIGFuZCBwYWludCBhIGNodW5rLiBVSVByb2Nlc3MgdXNlcyBnZGtfcGl4bWFwX2Zv
cmVpZ25fbmV3IHRvIG9idGFpbiByZWZlcmVuY2UgdG8gdGhlIHBhaW50ZWQgY2h1bmsuCisgICAg
ICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjpVcGRhdGVDaHVuayk6CisgICAgICAgIChXZWJLaXQ6
OlVwZGF0ZUNodW5rOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6ZGVj
b2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6Q2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBk
YXRlRHJhd2luZ0FyZWFQcm94eTo6ZGlkU2V0U2l6ZSk6IFNlbmQgYSAnRGlkU2V0U2l6ZURvbmUn
IG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyB0byBkZWxldGUgdGhlIHBpeG1hcCBjcmVhdGVkIHRocm91
Z2ggYSBTZXRTaXplCisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVBy
b3h5Ojp1cGRhdGUpOiBBZGQgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgWElEIHdoaWxlIHNlbmRp
bmcgbWVzc2FnZSB3aGljaCB0aGUgd2ViIHByb2Nlc3MgdXNlcyB0byBkZWxldGUgdGhlR2RrUGl4
bWFwCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94
eUd0ay5jcHA6IEFkZGVkLiBDcmVhdGVzIGFuZCBtYWludGFpbnMgYSBiYWNraW5nIHN0b3JlIHVz
aW5nIEdka1BpeG1hcAorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQ
cm94eTo6cGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVBy
b3h5OjplbnN1cmVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRl
RHJhd2luZ0FyZWFQcm94eTo6aW52YWxpZGF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJL
aXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpwbGF0Zm9ybVBhaW50KToKKyAgICAg
ICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmRyYXdVcGRhdGVDaHVu
a0ludG9CYWNraW5nU3RvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViVmlldy5oOiBB
ZGRlZC4gTmF0aXZlIEd0a1dpZGdldCBoYW5kbGUgZm9yIFdLVmlld1JlZiBmb3IgR1RLIHBvcnQu
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3aW5kb3cpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3Ojpob3N0V2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6cGFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NodW5rZWRVcGRhdGVEcmF3
aW5nQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6
ZGlzcGxheSk6IFN0b3JlIHRoZSBYSUQgb2YgYSBHZGtQaXhtYXAgZm9yIGRlbGV0aW9uIGluIGZ1
dHVyZShhZnRlciBVSSBwcm9jZXNzIHNlbmRzIGEgZGlkVXBkYXRlIGNvbmZpcm1hdGlvbikuCisg
ICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6c2V0U2l6ZSk6IFNhbWUg
YXMgYWJvdmUuCisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9DaHVua2VkVXBk
YXRlRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0NodW5r
ZWRVcGRhdGVEcmF3aW5nQXJlYUd0ay5jcHA6IEFkZGVkLiBJbXBsZW1lbnRzIGZ1bmN0aW9uYWxp
dHkgdG8gcGFpbnQgaW50byBhbiB1cGRhdGUgY2h1bmsgYW5kIGZyZWUgaXQuCisgICAgICAgIChX
ZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6cGFpbnRJbnRvVXBkYXRlQ2h1bmspOgor
ICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OmZyZWVCaXRNYXBNZW1v
cnkpOiBVbnJlZiB0aGUgc3RvcmVkIERyYXdhYmxlIE1lbW9yeQorICAgICAgICAoV2ViS2l0OjpD
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSk6IERlbGV0ZSB0aGUgc3RvcmVkIEdk
a1BpeG1hcC4KKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhOjpkaWRT
ZXRTaXplRG9uZSk6IERlbGV0ZSB0aGUgc3RvcmVkIEdka1BpeG1hcC4KKwogMjAxMC0xMC0yOCAg
QW1ydXRoIFJhaiAgPGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEg
IDxyYXZpLmthc2liaGF0bGFAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0KaW5kZXggNzYwZjliZS4uMGU1MjQ4MyAxMDA2NDQKLS0tIGEvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC00Niwx
MyArNDYsMTggQEAgd2Via2l0Mmd0a19zb3VyY2VzICs9IFwKIAlXZWJLaXQyL1BsYXRmb3JtL2d0
ay9TaGFyZWRNZW1vcnlHdGsuY3BwIFwKIAlXZWJLaXQyL1NoYXJlZC9ndGsvQmFja2luZ1N0b3Jl
R3RrLmNwcCBcCiAJV2ViS2l0Mi9TaGFyZWQvZ3RrL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmgg
XAorCVdlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5jcHAgXAogCVdlYktpdDIvU2hhcmVk
L2d0ay9VcGRhdGVDaHVuay5oIFwKIAlXZWJLaXQyL1NoYXJlZC9ndGsvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzR3RrLmNwcCBcCiAJV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oIFwK
KwlXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlHdGsu
Y3BwIFwKKwlXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5oIFwKIAlXZWJLaXQyL1VJUHJv
Y2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvU3RvcmVHdGsuY3BwIFwKIAlXZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ3RrL0luamVjdGVkQnVuZGxlR3RrLmNwcCBcCiAJV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvZ3RrL05ldHNjYXBlUGx1Z2luR3RrLmNwcCBc
Ci0JV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmgKKwlXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQuaCBcCisJV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYUd0ay5jcHAKKwkKIAogd2Via2l0Ml9zb3VyY2VzICs9
IFwKIAlXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2Rlci5oIFwKQEAgLTQwMywx
MCArNDA4LDEyIEBAIEJVSUxUX1NPVVJDRVMgKz0gXAogd2Via2l0Mmd0a19jcHBmbGFncyArPSBc
CiAJLUkkKHNyY2RpcikvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsgXAogCS1JJChzcmNkaXIpL1dlYktp
dDIvU2hhcmVkL2d0ayBcCisJLUkkKHNyY2RpcikvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrIFwKIAkt
SSQoc3JjZGlyKS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ayBcCiAJLUkkKHNyY2Rpcikv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL2d0ayBcCiAJLUkkKHNyY2RpcikvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvZ3RrIFwKLQktSSQoc3JjZGlyKS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrCisJLUkkKHNyY2RpcikvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ayBcCisJLUkkKHNyY2RpcikvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrCiAKIHdlYmtpdDJfY3BwZmxhZ3MgKz0gXAogCS1pbmNsdWRlICQo
c3JjZGlyKS9XZWJLaXQyL1dlYktpdDJQcmVmaXguaCBcCmRpZmYgLS1naXQgYS9XZWJLaXQyL1No
YXJlZC9Db3JlSVBDU3VwcG9ydC9EcmF3aW5nQXJlYU1lc3NhZ2VLaW5kcy5oIGIvV2ViS2l0Mi9T
aGFyZWQvQ29yZUlQQ1N1cHBvcnQvRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMuaAppbmRleCA4MDJl
NjEyLi5lODc1NDU3IDEwMDY0NAotLS0gYS9XZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9E
cmF3aW5nQXJlYU1lc3NhZ2VLaW5kcy5oCisrKyBiL1dlYktpdDIvU2hhcmVkL0NvcmVJUENTdXBw
b3J0L0RyYXdpbmdBcmVhTWVzc2FnZUtpbmRzLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRp
b25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsNiArNDYs
MTMgQEAgZW51bSBLaW5kIHsKICAgICAvLyBDYWxsZWQgd2hlbiBhbiB1cGRhdGUgY2h1bmsgc2Vu
dCB0byB0aGUgZHJhd2luZyBhcmVhIGhhcyBiZWVuCiAgICAgLy8gaW5jb3Jwb3JhdGVkIGludG8g
dGhlIGJhY2tpbmcgc3RvcmUuCiAgICAgRGlkVXBkYXRlLAorCisgICAgLy8gQ2FsbGVkIHdoZW5l
dmVyIHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nIGFyZWEgZ2V0IHVwZGF0ZWQKKyAgICAvLyB1c2Vk
IGluIG9ubHkgR1RLIHRvIGZyZWUgdGhlIG1lbW9yeSB3aGljaCBpcyBhbGxvY2F0ZWQgaW4gc2V0
c2l6ZQorI2lmIFBMQVRGT1JNKEdUSykKKyAgICBEaWRTZXRTaXplRG9uZSwKKyNlbmRpZgorICAg
IAogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0ZUNodW5rLmNw
cCBiL1dlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzRmZTE1ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdDIvU2hh
cmVkL2d0ay9VcGRhdGVDaHVuay5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJVcGRhdGVDaHVuay5oIgorCisjaW5jbHVkZSAi
QXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9u
aW5nLmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitVcGRhdGVDaHVuazo6VXBkYXRlQ2h1bmsoKQorICAg
IDogbV9iaXRtYXBTaGFyZWRNZW1vcnkoMCkKK3sKK30KKworVXBkYXRlQ2h1bms6OlVwZGF0ZUNo
dW5rKGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgOiBtX3JlY3QocmVjdCkKK3sKKyAgICBtX2Jp
dG1hcFNoYXJlZE1lbW9yeSA9IGdka19waXhtYXBfbmV3KDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSwgZ2RrX3Zpc3VhbF9nZXRfZGVwdGgoZ2RrX3Zpc3VhbF9nZXRfc3lzdGVtKCkpKTsK
KyAgICBtX3hJRCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihHREtfUElYTUFQX1hJRChtX2JpdG1h
cFNoYXJlZE1lbW9yeSkpOworfQorCitVcGRhdGVDaHVuazo6VXBkYXRlQ2h1bmsoY29uc3QgSW50
UmVjdCYgcmVjdCwgR2RrUGl4bWFwKiBiaXRtYXBTaGFyZWRNZW1vcnkpCisgICAgOiBtX3JlY3Qo
cmVjdCkKKyAgICAsIG1fYml0bWFwU2hhcmVkTWVtb3J5KGJpdG1hcFNoYXJlZE1lbW9yeSkKK3sK
K30KKwordm9pZCBVcGRhdGVDaHVuazo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlciog
ZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGUobV9yZWN0KTsKKyAgICBlbmNv
ZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1feElEKSk7Cit9CisKK2Jvb2wgVXBk
YXRlQ2h1bms6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFVwZGF0
ZUNodW5rJiB1cGRhdGVDaHVuaykKK3sKKyAgICBJbnRSZWN0IHJlY3Q7CisgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUocmVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVwZGF0ZUNo
dW5rLm1fcmVjdCA9IHJlY3Q7CisgICAgdWludDMyX3QgcGl4bWFwU2hhcmVkTW1lbW9yeTsKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShwaXhtYXBTaGFyZWRNbWVtb3J5KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHVwZGF0ZUNodW5rLm1feElEID0gcGl4bWFwU2hhcmVkTW1lbW9yeTsK
KyAgICB1bnNpZ25lZCBsb25nIHhQaXhtYXBTaGFyZWRNbWVtb3J5ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4ocGl4bWFwU2hhcmVkTW1lbW9yeSk7CisgICAgdXBkYXRlQ2h1bmsubV9iaXRt
YXBTaGFyZWRNZW1vcnkgPSBnZGtfcGl4bWFwX2ZvcmVpZ25fbmV3KHhQaXhtYXBTaGFyZWRNbWVt
b3J5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9XZWJLaXQyL1VJUHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5j
cHAgYi9XZWJLaXQyL1VJUHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5jcHAK
aW5kZXggZDU2YzljYi4uZmViZmM4YSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9VSVByb2Nlc3MvQ2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuY3BwCisrKyBiL1dlYktpdDIvVUlQcm9jZXNzL0No
dW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9y
dGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw2ICs0
OCw5IEBAIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpDaHVua2VkVXBkYXRlRHJhd2lu
Z0FyZWFQcm94eShQbGF0Zm9ybVdlYlZpZXcqIHdlCiAgICAgLCBtX2lzV2FpdGluZ0ZvckRpZFNl
dEZyYW1lTm90aWZpY2F0aW9uKGZhbHNlKQogICAgICwgbV9pc1Zpc2libGUodHJ1ZSkKICAgICAs
IG1fZm9yY2VSZXBhaW50V2hlblJlc3VtaW5nUGFpbnRpbmcoZmFsc2UpCisjaWYgUExBVEZPUk0o
R1RLKQorICAgICwgbV9iYWNraW5nU3RvcmVCaXRtYXAoMCkKKyNlbmRpZgogICAgICwgbV93ZWJW
aWV3KHdlYlZpZXcpCiB7CiB9CkBAIC0xMzAsNiArMTM0LDkgQEAgdm9pZCBDaHVua2VkVXBkYXRl
RHJhd2luZ0FyZWFQcm94eTo6ZGlkU2V0U2l6ZShVcGRhdGVDaHVuayogdXBkYXRlQ2h1bmspCiAg
ICAgICAgIGRyYXdVcGRhdGVDaHVua0ludG9CYWNraW5nU3RvcmUodXBkYXRlQ2h1bmspOwogCiAg
ICAgV2ViUGFnZVByb3h5KiBwYWdlID0gdGhpcy0+cGFnZSgpOworI2lmIFBMQVRGT1JNKEdUSykK
KyAgICBwYWdlLT5wcm9jZXNzKCktPnNlbmQoRHJhd2luZ0FyZWFNZXNzYWdlOjpEaWRTZXRTaXpl
RG9uZSwgcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKGluZm8oKS5pZCwgdXBkYXRlQ2h1bmst
PnhJRCgpKSk7CisjZW5kaWYKICAgICBwYWdlLT5wcm9jZXNzKCktPnJlc3BvbnNpdmVuZXNzVGlt
ZXIoKS0+c3RvcCgpOwogfQogCkBAIC0xNDYsNyArMTUzLDExIEBAIHZvaWQgQ2h1bmtlZFVwZGF0
ZURyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZShVcGRhdGVDaHVuayogdXBkYXRlQ2h1bmspCiAgICAg
fQogCiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gdGhpcy0+cGFnZSgpOworI2lmIFBMQVRGT1JN
KEdUSykKKyAgICBwYWdlLT5wcm9jZXNzKCktPnNlbmQoRHJhd2luZ0FyZWFNZXNzYWdlOjpEaWRV
cGRhdGUsIHBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihpbmZvKCkuaWQsIHVwZGF0ZUNodW5r
LT54SUQoKSkpOworI2Vsc2UKICAgICBwYWdlLT5wcm9jZXNzKCktPnNlbmQoRHJhd2luZ0FyZWFN
ZXNzYWdlOjpEaWRVcGRhdGUsIHBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihpbmZvKCkuaWQp
KTsKKyNlbmRpZgogfQogCiB2b2lkIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpkaWRS
ZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1l
c3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCmRpZmYgLS1naXQg
YS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlHdGsu
Y3BwIGIvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzE2NzhmCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5n
QXJlYVByb3h5R3RrLmNwcApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworCisjaW5jbHVkZSAiQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaCIK
KworI2luY2x1ZGUgIlVwZGF0ZUNodW5rLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5Lmgi
CisjaW5jbHVkZSAiV2ViVmlldy5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYlBhZ2VQcm94eSogQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVh
UHJveHk6OnBhZ2UoKQoreworICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsKK30KKwordm9p
ZCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6ZW5zdXJlQmFja2luZ1N0b3JlKCkKK3sK
KyAgICBpZiAobV9iYWNraW5nU3RvcmVCaXRtYXApCisgICAgICAgIHJldHVybjsKKworICAgIG1f
YmFja2luZ1N0b3JlQml0bWFwID0gZ2RrX3BpeG1hcF9uZXcobV93ZWJWaWV3LT53aW5kb3coKS0+
d2luZG93LCBtX3ZpZXdTaXplLndpZHRoKCksIG1fdmlld1NpemUuaGVpZ2h0KCksIC0xKTsKK30K
Kwordm9pZCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6aW52YWxpZGF0ZUJhY2tpbmdT
dG9yZSgpCit7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlQml0bWFwKSB7CisgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKG1fYmFja2luZ1N0b3JlQml0bWFwKTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmVC
aXRtYXAgPSAwOworICAgIH0KK30KKwordm9pZCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94
eTo6cGxhdGZvcm1QYWludChjb25zdCBJbnRSZWN0JiByZWN0LCBHZGtXaW5kb3cqIHdpbmRvdykK
K3sKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlQml0bWFwKQorICAgICAgICByZXR1cm47CisKKyAg
ICBHZGtHQyogZ2MgPSBnZGtfZ2NfbmV3KG1fYmFja2luZ1N0b3JlQml0bWFwKTsKKyAgICAvLyBC
aXRCbHQgZnJvbSB0aGUgYmFja2luZy1zdG9yZSB0byB0aGUgd2luZG93LgorICAgIGdka19kcmF3
X2RyYXdhYmxlKHdpbmRvdywgZ2MsIG1fYmFja2luZ1N0b3JlQml0bWFwLCByZWN0LngoKSwgcmVj
dC55KCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
KyAgICBnX29iamVjdF91bnJlZihnYyk7CisKK30KKwordm9pZCBDaHVua2VkVXBkYXRlRHJhd2lu
Z0FyZWFQcm94eTo6ZHJhd1VwZGF0ZUNodW5rSW50b0JhY2tpbmdTdG9yZShVcGRhdGVDaHVuayog
dXBkYXRlQ2h1bmspCit7CisgICAgZW5zdXJlQmFja2luZ1N0b3JlKCk7CisgICAgSW50UmVjdCBy
ZWN0ID0gdXBkYXRlQ2h1bmstPnJlY3QoKTsKKyAgICBpZiAoIXVwZGF0ZUNodW5rLT5tZW1vcnko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2RrUmVjdGFuZ2xlIGdka1JlY3QgPSByZWN0Owor
CisgICAgR2RrR0MqIGdjID0gZ2RrX2djX25ldyh1cGRhdGVDaHVuay0+bWVtb3J5KCkpOworICAg
IGdka19kcmF3X2RyYXdhYmxlKG1fYmFja2luZ1N0b3JlQml0bWFwLCBnYywgdXBkYXRlQ2h1bmst
Pm1lbW9yeSgpLCAwLCAwLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CisgICAgZ2RrX2Rpc3BsYXlfc3luYyhnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgp
KTsKKyAgICBnX29iamVjdF91bnJlZih1cGRhdGVDaHVuay0+bWVtb3J5KCkpOworCisgICAgZ2Rr
X3dpbmRvd19pbnZhbGlkYXRlX3JlY3QobV93ZWJWaWV3LT53aW5kb3coKS0+d2luZG93LCAmZ2Rr
UmVjdCwgZmFsc2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQgCmRpZmYgLS1naXQgYS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5oIGIvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGYwNzNmCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaApAQCAtMCwwICsx
LDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmll
d19oCisjZGVmaW5lIFdlYlZpZXdfaAorCisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5j
bHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IERyYXdpbmdBcmVhUHJveHk7CitjbGFzcyBXZWJQYWdlTmFtZXNwYWNlOworCitjbGFzcyBXZWJW
aWV3IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlldz4sIHB1YmxpYyBQYWdlQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICB+V2ViVmlldygpOworICAgIEdka1JlY3RhbmdsZSByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0O30KKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld09uRXhwb3NlKEd0a1dp
ZGdldCAqd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSAqZXZlbnQpOworICAgIHN0YXRpYyB2b2lkIHdl
YlZpZXdPblNpemVBbGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxs
b2NhdGlvbik7CisgICAgc3RhdGljIGdib29sZWFuIHdlYlZpZXdGb2N1c0luRXZlbnQoR3RrV2lk
Z2V0ICp3aWRnZXQsIEdka0V2ZW50Rm9jdXMgKmV2ZW50KTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4g
d2ViVmlld0ZvY3VzT3V0RXZlbnQoR3RrV2lkZ2V0ICp3aWRnZXQsIEdka0V2ZW50Rm9jdXMgKmV2
ZW50KTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0tleVByZXNzRXZlbnQoR3RrV2lkZ2V0
KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCk7CisgICAgc3RhdGljIGdib29sZWFuIHdlYlZp
ZXdLZXlSZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCk7
CisgICAgc3RhdGljIGdib29sZWFuIHdlYlZpZXdCdXR0b25QcmVzc0V2ZW50KEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogY29uc3QgZXZlbnQpOworICAgIHN0YXRpYyBnYm9vbGVh
biB3ZWJWaWV3QnV0dG9uUmVsZWFzZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1
dHRvbiogZXZlbnQpOworICAgIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3U2Nyb2xsRXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50U2Nyb2xsKiBldmVudCk7CisgICAgc3RhdGljIGdib29s
ZWFuIHdlYlZpZXdNb3Rpb25Ob3RpZnlFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRN
b3Rpb24qIGV2ZW50KTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZpZXc+IGNyZWF0ZShH
ZGtSZWN0YW5nbGUgcmVjdCwgV2ViUGFnZU5hbWVzcGFjZSogcGFnZU5hbWVzcGFjZSwgR3RrV2lk
Z2V0KiBob3N0V2luZG93KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJW
aWV3KHJlY3QsIHBhZ2VOYW1lc3BhY2UsIGhvc3RXaW5kb3cpKTsKKyAgICB9CisKKyAgICBHdGtX
aWRnZXQqIHdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93OyB9CisgICAgR3RrV2lkZ2V0
KiBob3N0V2luZG93KCkgY29uc3QgeyByZXR1cm4gbV9ob3N0V2luZG93OyB9CisgICAgdm9pZCBz
ZXRIb3N0V2luZG93KEd0a1dpZGdldCopOworCisgICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgV2ViVmlldyhHZGtS
ZWN0YW5nbGUsIFdlYlBhZ2VOYW1lc3BhY2UqLCBHdGtXaWRnZXQqIGhvc3RXaW5kb3cpOworCisg
ICAgdm9pZCBvblBhaW50RXZlbnQoR3RrV2lkZ2V0KiwgR2RrUmVjdGFuZ2xlKTsKKyAgICB2b2lk
IG9uU2l6ZUV2ZW50KEd0a1dpZGdldCosIFdlYkNvcmU6OkludFNpemUpOworICAgIHZvaWQgb25T
ZXRGb2N1c0V2ZW50KEd0a1dpZGdldCosIGJvb2wpOworICAgIHZvaWQgb25LaWxsRm9jdXNFdmVu
dChHdGtXaWRnZXQqLCBib29sKTsKKyAgICB2b2lkIG9uS2V5RXZlbnQoR2RrRXZlbnRLZXkgKik7
CisgICAgdm9pZCBvbk1vdXNlRXZlbnQoR2RrRXZlbnRBbnkgKik7CisgICAgdm9pZCBvbldoZWVs
RXZlbnQoR2RrRXZlbnRTY3JvbGwgKmV2ZW50KTsKKworICAgIGJvb2wgaXNBY3RpdmUoKTsKKyAg
ICB2b2lkIHVwZGF0ZUFjdGl2ZVN0YXRlKCk7CisgICAgdm9pZCBjbG9zZSgpOworCisgICAgLy8g
UGFnZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkRXhpdCgpOworICAgIHZpcnR1
YWwgdm9pZCBwcm9jZXNzRGlkUmV2aXZlKCk7CisgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhi
b29sIGRpcmVjdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdU
Rjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vy
c29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9y
dEFyZ3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOworICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94
eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxs
RWRpdENvbW1hbmRzKCk7CisgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29u
c3QgV1RGOjpTdHJpbmcmLCBib29sLCBpbnQpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRS
ZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAg
IHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTm90SGFuZGxlS2V5RXZlbnQo
Y29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVP
dXQpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9p
ZCBwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisgICAgdmlydHVhbCB2b2lk
IHBhZ2VEaWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKyNlbmRpZgorCisgICAgR2Rr
UmVjdGFuZ2xlIG1fcmVjdDsKKyAgICBHdGtXaWRnZXQqIG1fd2luZG93OworICAgIEd0a1dpZGdl
dCogbV9ob3N0V2luZG93OworICAgIGJvb2wgbV9pc1BhZ2VBY3RpdmU7CisgICAgUmVmUHRyPFdl
YlBhZ2VQcm94eT4gbV9wYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBXZWJWaWV3X2gKZGlmZiAtLWdpdCBhL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0No
dW5rZWRVcGRhdGVEcmF3aW5nQXJlYS5jcHAgYi9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWEuY3BwCmluZGV4IDdlNGRjZGYuLjljMjNiNjUgMTAwNjQ0
Ci0tLSBhL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YS5jcHAKKysrIGIvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ2h1bmtlZFVwZGF0ZURyYXdp
bmdBcmVhLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy
MDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Niw2ICs5Nyw5IEBAIHZvaWQgQ2h1bmtlZFVw
ZGF0ZURyYXdpbmdBcmVhOjpkaXNwbGF5KCkKICAgICAvLyBDcmVhdGUgYSBuZXcgVXBkYXRlQ2h1
bmsgYW5kIHBhaW50IGludG8gaXQuCiAgICAgVXBkYXRlQ2h1bmsgdXBkYXRlQ2h1bmsoZGlydHlS
ZWN0KTsKICAgICBwYWludEludG9VcGRhdGVDaHVuaygmdXBkYXRlQ2h1bmspOworI2lmIFBMQVRG
T1JNKEdUSykKKyAgICB4SURNYXAuc2V0KHVwZGF0ZUNodW5rLnhJRCgpLCB1cGRhdGVDaHVuay5t
ZW1vcnkoKSk7CisjZW5kaWYKIAogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24o
KS0+c2VuZChEcmF3aW5nQXJlYVByb3h5TWVzc2FnZTo6VXBkYXRlLCBtX3dlYlBhZ2UtPnBhZ2VJ
RCgpLCBDb3JlSVBDOjpJbih1cGRhdGVDaHVuaykpOwogCkBAIC0xNDMsNiArMTQ3LDkgQEAgdm9p
ZCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgdmlld1Np
emUpCiAgICAgLy8gQ3JlYXRlIGEgbmV3IFVwZGF0ZUNodW5rIGFuZCBwYWludCBpbnRvIGl0Lgog
ICAgIFVwZGF0ZUNodW5rIHVwZGF0ZUNodW5rKEludFJlY3QoMCwgMCwgdmlld1NpemUud2lkdGgo
KSwgdmlld1NpemUuaGVpZ2h0KCkpKTsKICAgICBwYWludEludG9VcGRhdGVDaHVuaygmdXBkYXRl
Q2h1bmspOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICB4SURNYXAuc2V0KHVwZGF0ZUNodW5rLnhJ
RCgpLCB1cGRhdGVDaHVuay5tZW1vcnkoKSk7CisjZW5kaWYKIAogICAgIG1fZGlzcGxheVRpbWVy
LnN0b3AoKTsKIApAQCAtMjEyLDEwICsyMTksMjcgQEAgdm9pZCBDaHVua2VkVXBkYXRlRHJhd2lu
Z0FyZWE6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjoK
ICAgICAgICAgICAgIHJlc3VtZVBhaW50aW5nKGZvcmNlUmVwYWludCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIERyYXdpbmdBcmVhTWVzc2FnZTo6RGlkVXBk
YXRlOgorCisgICAgICAgIGNhc2UgRHJhd2luZ0FyZWFNZXNzYWdlOjpEaWRVcGRhdGU6IHsKKyNp
ZiBQTEFURk9STShHVEspCisgICAgICAgICAgICB1aW50MzJfdCB4aWQ7CisgICAgICAgICAgICBp
ZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dCh4aWQpKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBkaWRVcGRhdGUoeGlkKTsKKyNlbHNlCiAgICAgICAgICAg
ICBkaWRVcGRhdGUoKTsKKyNlbmRpZgogICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgfQor
I2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgY2FzZSBEcmF3aW5nQXJlYU1lc3NhZ2U6OkRpZFNl
dFNpemVEb25lOiB7CisgICAgICAgICAgICB1aW50MzJfdCB4aWQ7CisgICAgICAgICAgICBpZiAo
IWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dCh4aWQpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBkaWRTZXRTaXplRG9uZSh4aWQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYS5oIGIvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmgKaW5kZXggNzY3
MTk4Zi4uZTJkNjlkNiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmgKKysrIGIvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25z
IENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMzAsOSBA
QAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNjksNiArNzMs
MTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50SW50b1VwZGF0ZUNodW5rKFVwZGF0ZUNodW5r
Kik7CiAKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZGlydHlSZWN0OworI2lmIFBMQVRGT1JNKEdU
SykKKyAgICAvLyB0byBkZXN0cm95IHRoZSBzaGFyZWQgbWVtb3J5IHRoYXQgaXMgY3JlYXRlZCBp
biBzZXRTaXplCisgICAgdm9pZCBkaWRTZXRTaXplRG9uZSh1aW50MzJfdCk7CisgICAgdm9pZCBm
cmVlQml0TWFwTWVtb3J5KHVpbnQzMl90KTsKKyAgICB2b2lkIGRpZFVwZGF0ZSh1aW50MzJfdCk7
CisgICAgSGFzaE1hcCA8dWludDMyX3QsIHZvaWQqPiB4SURNYXA7CisjZW5kaWYKICAgICBib29s
IG1faXNXYWl0aW5nRm9yVXBkYXRlOwogICAgIGJvb2wgbV9wYWludGluZ0lzU3VzcGVuZGVkOwog
ICAgIFJ1bkxvb3A6OlRpbWVyPENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYT4gbV9kaXNwbGF5VGlt
ZXI7CmRpZmYgLS1naXQgYS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvQ2h1bmtlZFVw
ZGF0ZURyYXdpbmdBcmVhR3RrLmNwcCBiL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9D
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWFHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjhkZWQ5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhR3RrLmNwcApAQCAtMCwwICsxLDc2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkNodW5rZWRV
cGRhdGVEcmF3aW5nQXJlYS5oIgorCisjaW5jbHVkZSAiVXBkYXRlQ2h1bmsuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhOjpwYWlu
dEludG9VcGRhdGVDaHVuayhVcGRhdGVDaHVuayogdXBkYXRlQ2h1bmspCit7CisgICAgQVNTRVJU
KHVwZGF0ZUNodW5rLT5pc0VtcHR5KCkpOworICAgICAKKyAgICBHZGtQaXhtYXAqIHBpeG1hcCA9
IHVwZGF0ZUNodW5rLT5tZW1vcnkoKTsKKyAgICBjYWlyb190KiBjciA9IGdka19jYWlyb19jcmVh
dGUocGl4bWFwKTsKKyAgICBHcmFwaGljc0NvbnRleHQgZ2MoY3IpOworICAgIGdjLnNhdmUoKTsK
KyAgICBJbnRSZWN0IHJlY3QgPSB1cGRhdGVDaHVuay0+cmVjdCgpOworICAgIGdjLnRyYW5zbGF0
ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CisgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChnYywgdXBk
YXRlQ2h1bmstPnJlY3QoKSk7CisgICAgZ2MucmVzdG9yZSgpOworICAgIGNhaXJvX2Rlc3Ryb3ko
Y3IpOworICAgIGdka19kaXNwbGF5X3N5bmMoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7Cit9
CisKK3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhOjpmcmVlQml0TWFwTWVtb3J5KHVpbnQz
Ml90IHhpZCkKK3sKKyAgICBHZGtQaXhtYXAqIHBpeG1hcCA9IChHZGtQaXhtYXAqKXhJRE1hcC5n
ZXQoeGlkKTsKKyAgICBBU1NFUlQocGl4bWFwKTsKKyAgICBnX29iamVjdF91bnJlZihwaXhtYXAp
OworICAgIHhJRE1hcC5yZW1vdmUoeGlkKTsKK30KKwordm9pZCBDaHVua2VkVXBkYXRlRHJhd2lu
Z0FyZWE6OmRpZFVwZGF0ZSh1aW50MzJfdCB4SUQpCit7CisgICAgbV9pc1dhaXRpbmdGb3JVcGRh
dGUgPSBmYWxzZTsKKyAgICBmcmVlQml0TWFwTWVtb3J5KHhJRCk7CisgICAgLy8gRGlzcGxheSBp
ZiBuZWVkZWQuCisgICAgZGlzcGxheSgpOworfQorCit2b2lkIENodW5rZWRVcGRhdGVEcmF3aW5n
QXJlYTo6ZGlkU2V0U2l6ZURvbmUodWludDMyX3QgeElEKQoreworICAgIGZyZWVCaXRNYXBNZW1v
cnkoeElEKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72323</attachid>
            <date>2010-10-29 06:21:55 -0700</date>
            <delta_ts>2010-11-02 09:47:11 -0700</delta_ts>
            <desc>Contains Implementation of WebView Class and WKAPI exposing some API on top of it</desc>
            <filename>WebView.diff</filename>
            <type>text/plain</type>
            <size>37424</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ODI3YjY4Ni4uMTEwNGU1ZiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MSBAQAorMjAxMC0xMC0yOSAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+LCBSYXZpIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0
bGFAbW90b3JvbGEuY29tPiBhbmQgQ2hhbmRyYSBWYWxsYWxhICA8Y2hhbmRyYS52YWxsYWxhQG1v
dG9yb2xhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbR1RLXSBJbXBsZW1lbnRhdGlvbiBvZiBXZWJWaWV3LCBXS0FQSSBjbGFzc2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODUwOQorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLQmFzZS5oOgor
ICAgICAgICAqIFNoYXJlZC9BUEkvYy9ndGsvV0tCYXNlR3RrLmg6IEFkZGVkLiBEZWNsYXJhdGlv
biBvZiBXS1ZpZXdSZWYgZm9yIEdUSyBwb3J0LgorICAgICAgICAqIFNoYXJlZC9OYXRpdmVXZWJL
ZXlib2FyZEV2ZW50Lmg6IERlY2xhcmF0aW9uIG9mIGNvbnN0cnVjdG9yIGZvciBHdGsgcG9ydC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9DL2d0ay9XS0FQSUNhc3RHdGsuaDogQWRkZWQuIFR5cGUgZGVmaW5pdGlvbiB0ZW1w
bGF0ZSBmb3IgV0tWaWV3UmVmIHRvIFdlYlZpZXcgYW5kIHZpY2UtdmVyc2EuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3BwOiBBZGRlZC4gSW1wbGVtZW50YXRpb24gb2Yg
V0tWaWV3IEFQSSBpbnRlcmZhY2UuCisgICAgICAgIChXS1ZpZXdDcmVhdGUpOgorICAgICAgICAo
V0tWaWV3R2V0V2luZG93KToKKyAgICAgICAgKFdLVmlld0dldEhvc3RXaW5kb3cpOgorICAgICAg
ICAoV0tWaWV3R2V0UGFnZSk6CisgICAgICAgIChXS1ZpZXdTZXRIb3N0V2luZG93KToKKyAgICAg
ICAgKFdLVVJMQ3JlYXRlV2l0aFVSTCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2d0ay9X
S1ZpZXcuaDogQWRkZWQuIERlY2xhcmF0aW9uIG9mIFdLVmlldyBBUEkgaW50ZXJmYWNlLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViVmlldy5jcHA6IEFkZGVkLiBUaGUgbmF0aXZlIEd0a1dp
ZGdldCBoYW5kbGUgZm9yIGVhY2ggV0tWaWV3UmVmIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6d2ViVmlld09uRXhwb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6d2ViVmlld09uU2l6ZUFsbG9jYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d2Vi
Vmlld0ZvY3VzSW5FdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdGb2N1
c091dEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0tleVByZXNzRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3S2V5UmVsZWFzZUV2ZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0J1dHRvblByZXNzRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3QnV0dG9uUmVsZWFzZUV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmlld1Njcm9sbEV2ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6d2ViVmlld01vdGlvbk5vdGlmeUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6On5XZWJWaWV3KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0SG9zdFdpbmRvdyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6Om9uUGFpbnRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9u
U2l6ZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25TZXRGb2N1c0V2ZW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25LaWxsRm9jdXNFdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6Om9uS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpv
bk1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvbldoZWVsRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppc0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OnVwZGF0ZUFjdGl2ZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y2xv
c2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpwcm9jZXNzRGlkRXhpdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OnByb2Nlc3NEaWRSZXZpdmUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojp0YWtlRm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp0b29sVGlwQ2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldEN1cnNvcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6OnNldFZpZXdwb3J0QXJndW1lbnRzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OmNsZWFyQWxsRWRpdENvbW1hbmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0RWRp
dENvbW1hbmRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNvbnZlcnRUb0Rldmlj
ZVNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZGlkTm90SGFuZGxlS2V5RXZlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlZpZXdJbnRlcm5hbC5jcHA6IEFkZGVkLiBUaGUg
R09iamVjdCBpbnRlcmZhY2UgZm9yIFdlYlZpZXcuIFRoZSBHT2JqZWN0IGlzIHRoZSBHdGtXaWRn
ZXQgaGFuZGxlIHdoaWNoIGlzIHVzZWQgYnkgV0tWaWV3UmVmIGZvciBHVEsgcG9ydC4KKyAgICAg
ICAgKHdlYmtpdFdpZGdldFZpZXdSZWFsaXplKToKKyAgICAgICAgKHdlYmtpdFdpZGdldFZpZXdD
b250YWluZXJBZGQpOgorICAgICAgICAod2Via2l0V2lkZ2V0Vmlld0Rpc3Bvc2UpOgorICAgICAg
ICAod2Via2l0V2lkZ2V0Vmlld0ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdFdpZGdldFZpZXdD
bGFzc0luaXQpOgorICAgICAgICAod2Via2l0V2lkZ2V0Vmlld0luaXQpOgorICAgICAgICAod2Vi
a2l0V2lkZ2V0Vmlld0dldFR5cGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViVmlld0lu
dGVybmFsLmg6IEFkZGVkLiBUaGUgR09iamVjdCBpbnRlcmZhY2UgZGVjbGFyYXRpb25zIGZvciBH
dGtXaWRnZXQgaGFuZGxlIGZvciBHVEsgcG9ydC4KKwogMjAxMC0xMC0yOCAgQ2hhbmRyYSBWYWxs
YWxhICA8Y2hhbmRyYS52YWxsYWxhQG1vdG9yb2xhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9X
ZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDBlNTI0ODMuLjY5OGY1YzIgMTAwNjQ0Ci0tLSBh
L1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAt
Myw2ICszLDcgQEAgRm9yd2FyZGluZ0hlYWRlcnMgOj0gJChHRU5TT1VSQ0VTX1dFQktJVDIpL2lu
Y2x1ZGUKIEh0dHBTdGFjayA6PSBASFRUUF9TVEFDS0AKIAogd2Via2l0Mmd0a19zdGF0aWNfaF9h
cGkgKz0gXAorCSQoc3JjZGlyKS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9ndGsvV0tCYXNlR3RrLmgg
XAogCSQoc3JjZGlyKS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0FycmF5LmggXAogCSQoc3JjZGly
KS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0Jhc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdDIvU2hh
cmVkL0FQSS9jL1dLQ2VydGlmaWNhdGVJbmZvLmggXApAQCAtMjQsNiArMjUsOCBAQCB3ZWJraXQy
Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChzcmNkaXIpL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dL
VVJMUmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkxSZXNw
b25zZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVc2VyQ29udGVudFVS
TFBhdHRlcm4uaCBcCisJJChzcmNkaXIpL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0FQ
SUNhc3RHdGsuaCBcCisJJChzcmNkaXIpL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1Zp
ZXcuaCBcCiAJJChzcmNkaXIpL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvV0tSZXRhaW5QdHIu
aCBcCiAJJChzcmNkaXIpL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dlYktpdDIuaCBcCiAJJChz
cmNkaXIpL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oIFwKQEAgLTQ0LDE0ICs0
NywyMSBAQCB3ZWJraXQyZ3RrX3N0YXRpY19oX2FwaSArPSBcCiAKIHdlYmtpdDJndGtfc291cmNl
cyArPSBcCiAJV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvU2hhcmVkTWVtb3J5R3RrLmNwcCBcCisJV2Vi
S2l0Mi9TaGFyZWQvQVBJL2MvZ3RrL1dLQmFzZUd0ay5oIFwKIAlXZWJLaXQyL1NoYXJlZC9ndGsv
QmFja2luZ1N0b3JlR3RrLmNwcCBcCiAJV2ViS2l0Mi9TaGFyZWQvZ3RrL1BsYXRmb3JtQ2VydGlm
aWNhdGVJbmZvLmggXAogCVdlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5jcHAgXAogCVdl
YktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5oIFwKIAlXZWJLaXQyL1NoYXJlZC9ndGsvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzR3RrLmNwcCBcCiAJV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50
RmFjdG9yeS5oIFwKKwlXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tBUElDYXN0R3RrLmgg
XAorCVdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3BwIFwKKwlXZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmggXAogCVdlYktpdDIvVUlQcm9jZXNzL2d0ay9DaHVu
a2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAgXAorCVdlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJWaWV3LmNwcCBcCiAJV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaCBcCisJV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdJbnRlcm5hbC5jcHAgXAorCVdlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJWaWV3SW50ZXJuYWwuaCBcCiAJV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9n
dGsvUGx1Z2luSW5mb1N0b3JlR3RrLmNwcCBcCiAJV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL2d0ay9JbmplY3RlZEJ1bmRsZUd0ay5jcHAgXAogCVdlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL2d0ay9OZXRzY2FwZVBsdWdpbkd0ay5jcHAgXApAQCAtNDA3LDcgKzQx
Nyw5IEBAIEJVSUxUX1NPVVJDRVMgKz0gXAogCiB3ZWJraXQyZ3RrX2NwcGZsYWdzICs9IFwKIAkt
SSQoc3JjZGlyKS9XZWJLaXQyL1BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQyL1NoYXJlZC9ndGsgXAorCS1J
JChzcmNkaXIpL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ayBcCiAJLUkkKHNyY2RpcikvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVn
aW5zL2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L2d0ayBcCmRpZmYgLS1naXQgYS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0Jhc2UuaCBiL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLQmFzZS5oCmluZGV4IGRhNGRmYjcuLjc2Zjc1ZDQgMTAwNjQ0Ci0t
LSBhL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLQmFzZS5oCisrKyBiL1dlYktpdDIvU2hhcmVkL0FQ
SS9jL1dLQmFzZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp
IDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMzLDEwIEBACiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS0Jhc2VXaW4uaD4KICNlbmRpZgogCisjaWYgZGVmaW5lZChCVUlMRElOR19HVEtf
XykKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZUd0ay5oPgorI2VuZGlmCisKIC8qIFdlYktpdDIg
c2hhcmVkIHR5cGVzICovCiAKIHR5cGVkZWYgdWludDMyX3QgV0tUeXBlSUQ7CmRpZmYgLS1naXQg
YS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9ndGsvV0tCYXNlR3RrLmggYi9XZWJLaXQyL1NoYXJlZC9B
UEkvYy9ndGsvV0tCYXNlR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YmVjNTA1YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdDIvU2hhcmVkL0FQSS9jL2d0ay9XS0Jh
c2VHdGsuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx
MCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXS0Jhc2VHdGtfaAorI2RlZmluZSBXS0Jhc2VHdGtfaAorCisjaWZuZGVmIFdL
QmFzZV9oCisjZXJyb3IgIlBsZWFzZSAjaW5jbHVkZSBcIldLQmFzZS5oXCIgaW5zdGVhZCBvZiB0
aGlzIGZpbGUgZGlyZWN0bHkuIgorI2VuZGlmCisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1
ZVdLVmlldyogV0tWaWV3UmVmOworCisjZW5kaWYgLyogV0tCYXNlR3RrX2ggKi8KZGlmZiAtLWdp
dCBhL1dlYktpdDIvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCBiL1dlYktpdDIvU2hh
cmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaAppbmRleCAyNDcxZWVhLi41MjI3OTg2IDEwMDY0
NAotLS0gYS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKKysrIGIvV2Vi
S2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCkBAIC01MSw2ICs1MSw4IEBAIHB1
YmxpYzoKICAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNLCBMUEFSQU0pOwogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgZXhwbGljaXQgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudChRS2V5RXZlbnQqKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5Kik7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KE1BQykKZGlmZiAtLWdpdCBhL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oIGIv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKaW5kZXggNWU5ZjM1My4uNTBhMmMy
MSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKKysrIGIv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUx
LDQgKzE1Miw3IEBAIGlubGluZSBGaW5kT3B0aW9ucyB0b0ZpbmRPcHRpb25zKFdLRmluZE9wdGlv
bnMgd2tGaW5kT3B0aW9ucykKICNpbmNsdWRlICJXS0FQSUNhc3RXaW4uaCIKICNlbmRpZgogCisj
aWYgZGVmaW5lZChCVUlMRElOR19HVEtfXykKKyNpbmNsdWRlICJXS0FQSUNhc3RHdGsuaCIKKyNl
bmRpZgogI2VuZGlmIC8vIFdLQVBJQ2FzdF9oCmRpZmYgLS1naXQgYS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9ndGsvV0tBUElDYXN0R3RrLmggYi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsv
V0tBUElDYXN0R3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljMTEz
MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0FQSUNh
c3RHdGsuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx
MCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXS0FQSUNhc3RHdGtfaAorI2RlZmluZSBXS0FQSUNhc3RHdGtfaAorCisjaWZu
ZGVmIFdLQVBJQ2FzdF9oCisjZXJyb3IgIlBsZWFzZSAjaW5jbHVkZSBcIldLQVBJQ2FzdC5oXCIg
aW5zdGVhZCBvZiB0aGlzIGZpbGUgZGlyZWN0bHkuIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJWaWV3OworCitXS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVmLCBX
ZWJWaWV3KQorCit9CisKKyNlbmRpZiAvLyBXS0FQSUNhc3RHdGtfaApkaWZmIC0tZ2l0IGEvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5jcHAgYi9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9ndGsvV0tWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
YjMzNDY4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dL
Vmlldy5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJXS1ZpZXcuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dLVmlld1JlZiBXS1ZpZXdD
cmVhdGUoR2RrUmVjdGFuZ2xlIHJlY3QsIFdLUGFnZU5hbWVzcGFjZVJlZiBwYWdlTmFtZXNwYWNl
UmVmLCBHdGtXaWRnZXQqIGhvc3RXaW5kb3cpCit7CisgICAgUmVmUHRyPFdlYlZpZXc+IHZpZXcg
PSBXZWJWaWV3OjpjcmVhdGUocmVjdCwgdG9JbXBsKHBhZ2VOYW1lc3BhY2VSZWYpLCBob3N0V2lu
ZG93KTsKKyAgICByZXR1cm4gdG9BUEkodmlldy5yZWxlYXNlKCkucmVsZWFzZVJlZigpKTsKK30K
KworR3RrV2lkZ2V0KiBXS1ZpZXdHZXRXaW5kb3coV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAg
cmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+d2luZG93KCk7Cit9CisKK0d0a1dpZGdldCogV0tWaWV3
R2V0SG9zdFdpbmRvdyhXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHZp
ZXdSZWYpLT5ob3N0V2luZG93KCk7Cit9CisKK1dLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmll
d1JlZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0FQSSh0b0ltcGwodmlld1JlZiktPnBhZ2Uo
KSk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0SG9zdFdpbmRvdyhXS1ZpZXdSZWYgdmlld1JlZiwgR3Rr
V2lkZ2V0KiBob3N0V2luZG93KQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0SG9zdFdpbmRv
dyhob3N0V2luZG93KTsKK30KKworV0tVUkxSZWYgV0tVUkxDcmVhdGVXaXRoVVJMKGNvbnN0IGNo
YXIqIHVybCkKK3sKKyAgICBTdHJpbmcgdXJsU3RyaW5nKHVybCk7CisgICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHVybFN0cmluZ0ltcGwgPSB1cmxTdHJpbmcuaW1wbCgpOworICAgIHJldHVybiB0b1VS
TFJlZih1cmxTdHJpbmdJbXBsLnJlbGVhc2UoKS5yZWxlYXNlUmVmKCkpOworfQpkaWZmIC0tZ2l0
IGEvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5oIGIvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZ3RrL1dLVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZmNWFiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsv
V0tWaWV3LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV0tWaWV3X2gKKyNkZWZpbmUgV0tWaWV3X2gKKworI2luY2x1ZGUgPFdlYktp
dDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMK
K2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRl
KEdka1JlY3RhbmdsZSByZWN0LCBXS1BhZ2VOYW1lc3BhY2VSZWYgcGFnZU5hbWVzcGFjZSwgR3Rr
V2lkZ2V0ICogaG9zdFdpbmRvdyk7CisKK1dLX0VYUE9SVCBHdGtXaWRnZXQqIFdLVmlld0dldFdp
bmRvdyhXS1ZpZXdSZWYgdmlldyk7CitXS19FWFBPUlQgR3RrV2lkZ2V0KiBXS1ZpZXdHZXRIb3N0
V2luZG93KFdLVmlld1JlZiB2aWV3KTsKKworV0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQ
YWdlKFdLVmlld1JlZiB2aWV3KTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0SG9zdFdpbmRv
dyhXS1ZpZXdSZWYgdmlldywgR3RrV2lkZ2V0KiBob3N0V2luZG93KTsKKworV0tfRVhQT1JUIFdL
VVJMUmVmIFdLVVJMQ3JlYXRlV2l0aFVSTChjb25zdCBjaGFyKik7CisjaWZkZWYgX19jcGx1c3Bs
dXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogV0tWaWV3X2ggKi8KZGlmZiAtLWdpdCBhL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmNwcCBiL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJW
aWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTBlOGU0Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwCkBAIC0wLDAg
KzEsMzM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldl
YlZpZXcuaCIKKworI2luY2x1ZGUgIkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgiCisj
aW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJFdmVudEZh
Y3RvcnkuaCIKKyNpbmNsdWRlICJXZWJQYWdlTmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViVmlld0ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworZ2Jvb2xlYW4gV2ViVmlldzo6d2Vi
Vmlld09uRXhwb3NlKEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSAqZXZlbnQpCit7
CisgICAgV2ViS2l0V2lkZ2V0Vmlldyogd2lkZ2V0VmlldyA9IFdFQktJVF9XSURHRVRfVklFVyh3
aWRnZXQpOworICAgIGdwb2ludGVyIHdlYlZpZXdJbnN0YW5jZSA9IHdpZGdldFZpZXctPnByaXYt
PndlYlZpZXdJbnN0YW5jZTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gcmVpbnRlcnByZXRfY2Fz
dDxXZWJWaWV3Kj4od2ViVmlld0luc3RhbmNlKTsKKyAgICBHZGtSZWN0YW5nbGUgY2xpcDsKKyAg
ICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlwKTsKKyAgICB3ZWJW
aWV3LT5vblBhaW50RXZlbnQod2lkZ2V0LCBjbGlwKTsKKworICAgIHJldHVybiBGQUxTRTsKK30K
Kwordm9pZCBXZWJWaWV3Ojp3ZWJWaWV3T25TaXplQWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQs
IEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24pCit7CisgICAgR09iamVjdENsYXNzKiBwYXJlbnRD
bGFzcyA9IChHT2JqZWN0Q2xhc3MqKWdfdHlwZV9jbGFzc19wZWVrX3BhcmVudChXRUJLSVRfV0lE
R0VUX1ZJRVdfR0VUX0NMQVNTKHdpZGdldCkpOworICAgIEdUS19XSURHRVRfQ0xBU1MocGFyZW50
Q2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7CisgICAgV2ViS2l0V2lk
Z2V0Vmlldyogd2lkZ2V0VmlldyA9IFdFQktJVF9XSURHRVRfVklFVyh3aWRnZXQpOworICAgIGdw
b2ludGVyIHdlYlZpZXdJbnN0YW5jZSA9IHdpZGdldFZpZXctPnByaXYtPndlYlZpZXdJbnN0YW5j
ZTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJWaWV3Kj4od2Vi
Vmlld0luc3RhbmNlKTsKKworICAgIHdlYlZpZXctPm9uU2l6ZUV2ZW50KHdpZGdldCwgSW50U2l6
ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KSk7Cit9CisKK2dib29sZWFu
IFdlYlZpZXc6OndlYlZpZXdGb2N1c0luRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
Rm9jdXMqIGV2ZW50KQoreworICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdldFZpZXcgPSBXRUJL
SVRfV0lER0VUX1ZJRVcod2lkZ2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3SW5zdGFuY2UgPSB3
aWRnZXRWaWV3LT5wcml2LT53ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmlldyogd2ViVmlldyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7CisgICAgCisgICAg
R3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKHdpZGdldCk7Cisg
ICAgaWYgKEdUS19XSURHRVRfVE9QTEVWRUwodG9wbGV2ZWwpICYmIGd0a193aW5kb3dfaGFzX3Rv
cGxldmVsX2ZvY3VzKEdUS19XSU5ET1codG9wbGV2ZWwpKSkgeworICAgICAgICBndGtfaW1fY29u
dGV4dF9mb2N1c19pbih3aWRnZXRWaWV3LT5wcml2LT5pbUNvbnRleHQpOworICAgICAgICBpZiAo
ISh3ZWJWaWV3LT5tX2lzUGFnZUFjdGl2ZSkpIHsKKyAgICAgICAgICAgIHdlYlZpZXctPm1faXNQ
YWdlQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIHdlYlZpZXctPnVwZGF0ZUFjdGl2ZVN0YXRl
KCk7CisgICAgICAgIH0KKyAgICAgICAgd2ViVmlldy0+b25TZXRGb2N1c0V2ZW50KHdpZGdldCwg
dHJ1ZSk7CisgICAgfQorCisgICAgR09iamVjdENsYXNzKiBwYXJlbnRDbGFzcyA9IChHT2JqZWN0
Q2xhc3MqKWdfdHlwZV9jbGFzc19wZWVrX3BhcmVudChXRUJLSVRfV0lER0VUX1ZJRVdfR0VUX0NM
QVNTKHdpZGdldCkpOworICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHBhcmVudENsYXNzKS0+
Zm9jdXNfaW5fZXZlbnQod2lkZ2V0LCBldmVudCk7Cit9CisKK2dib29sZWFuIFdlYlZpZXc6Ondl
YlZpZXdGb2N1c091dEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEZvY3VzKiBldmVu
dCkKK3sKKyAgICBXZWJLaXRXaWRnZXRWaWV3KiB3aWRnZXRWaWV3ID0gV0VCS0lUX1dJREdFVF9W
SUVXKHdpZGdldCk7CisgICAgZ3BvaW50ZXIgd2ViVmlld0luc3RhbmNlID0gd2lkZ2V0Vmlldy0+
cHJpdi0+d2ViVmlld0luc3RhbmNlOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSByZWludGVycHJl
dF9jYXN0PFdlYlZpZXcqPih3ZWJWaWV3SW5zdGFuY2UpOworCisgICAgd2ViVmlldy0+b25LaWxs
Rm9jdXNFdmVudCh3aWRnZXQsIGZhbHNlKTsKKyAgICB3ZWJWaWV3LT5tX2lzUGFnZUFjdGl2ZSA9
IGZhbHNlOyAKKyAgICB3ZWJWaWV3LT51cGRhdGVBY3RpdmVTdGF0ZSgpOworICAgIGlmICh3aWRn
ZXRWaWV3LT5wcml2LT5pbUNvbnRleHQpCisgICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291
dCh3aWRnZXRWaWV3LT5wcml2LT5pbUNvbnRleHQpOworICAgIAorICAgIEdPYmplY3RDbGFzcyog
cGFyZW50Q2xhc3MgPSAoR09iamVjdENsYXNzKilnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQoV0VC
S0lUX1dJREdFVF9WSUVXX0dFVF9DTEFTUyh3aWRnZXQpKTsKKyAgICByZXR1cm4gR1RLX1dJREdF
VF9DTEFTUyhwYXJlbnRDbGFzcyktPmZvY3VzX291dF9ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30K
KworZ2Jvb2xlYW4gV2ViVmlldzo6d2ViVmlld0tleVByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEdka0V2ZW50S2V5KiBldmVudCkKK3sKKyAgICBXZWJLaXRXaWRnZXRWaWV3KiB3aWRnZXRW
aWV3ID0gV0VCS0lUX1dJREdFVF9WSUVXKHdpZGdldCk7CisgICAgZ3BvaW50ZXIgd2ViVmlld0lu
c3RhbmNlID0gd2lkZ2V0Vmlldy0+cHJpdi0+d2ViVmlld0luc3RhbmNlOworICAgIFdlYlZpZXcq
IHdlYlZpZXcgPSByZWludGVycHJldF9jYXN0PFdlYlZpZXcqPih3ZWJWaWV3SW5zdGFuY2UpOwor
ICAgIHdlYlZpZXctPm9uS2V5RXZlbnQoZXZlbnQpOworICAgIAorICAgIEdPYmplY3RDbGFzcyog
cGFyZW50Q2xhc3MgPSAoR09iamVjdENsYXNzKilnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQoV0VC
S0lUX1dJREdFVF9WSUVXX0dFVF9DTEFTUyh3aWRnZXQpKTsKKyAgICByZXR1cm4gR1RLX1dJREdF
VF9DTEFTUyhwYXJlbnRDbGFzcyktPmtleV9wcmVzc19ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30K
KworZ2Jvb2xlYW4gV2ViVmlldzo6d2ViVmlld0tleVJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdp
ZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdl
dFZpZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVcod2lkZ2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3
SW5zdGFuY2UgPSB3aWRnZXRWaWV3LT5wcml2LT53ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmll
dyogd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7
CisKKyAgICBpZiAoZ3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKHdpZGdldFZpZXctPnBy
aXYtPmltQ29udGV4dCwgZXZlbnQpKQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB3ZWJWaWV3
LT5vbktleUV2ZW50KGV2ZW50KTsKKworICAgIEdPYmplY3RDbGFzcyogcGFyZW50Q2xhc3MgPSAo
R09iamVjdENsYXNzKilnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQoV0VCS0lUX1dJREdFVF9WSUVX
X0dFVF9DTEFTUyh3aWRnZXQpKTsKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyhwYXJlbnRD
bGFzcyktPmtleV9yZWxlYXNlX2V2ZW50KHdpZGdldCwgZXZlbnQpOworfQorCitnYm9vbGVhbiBX
ZWJWaWV3Ojp3ZWJWaWV3QnV0dG9uUHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZl
bnRCdXR0b24qIGNvbnN0IGV2ZW50KQoreworICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdldFZp
ZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVcod2lkZ2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3SW5z
dGFuY2UgPSB3aWRnZXRWaWV3LT5wcml2LT53ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmlldyog
d2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7Cisg
ICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CisgICAgd2ViVmlldy0+b25Nb3VzZUV2
ZW50KChHZGtFdmVudEFueSAqKWV2ZW50KTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworZ2Jv
b2xlYW4gV2ViVmlldzo6d2ViVmlld0J1dHRvblJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50KQoreworICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdl
dFZpZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVcod2lkZ2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3
SW5zdGFuY2UgPSB3aWRnZXRWaWV3LT5wcml2LT53ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmll
dyogd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7
CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CisgICAgd2ViVmlldy0+b25Nb3Vz
ZUV2ZW50KChHZGtFdmVudEFueSAqKWV2ZW50KTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKwor
Z2Jvb2xlYW4gV2ViVmlldzo6d2ViVmlld1Njcm9sbEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBH
ZGtFdmVudFNjcm9sbCogZXZlbnQpCit7CisgICAgV2ViS2l0V2lkZ2V0Vmlldyogd2lkZ2V0Vmll
dyA9IFdFQktJVF9XSURHRVRfVklFVyh3aWRnZXQpOworICAgIGdwb2ludGVyIHdlYlZpZXdJbnN0
YW5jZSA9IHdpZGdldFZpZXctPnByaXYtPndlYlZpZXdJbnN0YW5jZTsKKyAgICBXZWJWaWV3KiB3
ZWJWaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJWaWV3Kj4od2ViVmlld0luc3RhbmNlKTsKKyAg
ICB3ZWJWaWV3LT5vbldoZWVsRXZlbnQoZXZlbnQpOworCisgICAgcmV0dXJuIEZBTFNFOworfQor
CitnYm9vbGVhbiBXZWJWaWV3Ojp3ZWJWaWV3TW90aW9uTm90aWZ5RXZlbnQoR3RrV2lkZ2V0KiB3
aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCkKK3sKKyAgICBXZWJLaXRXaWRnZXRWaWV3KiB3
aWRnZXRWaWV3ID0gV0VCS0lUX1dJREdFVF9WSUVXKHdpZGdldCk7CisgICAgZ3BvaW50ZXIgd2Vi
Vmlld0luc3RhbmNlID0gd2lkZ2V0Vmlldy0+cHJpdi0+d2ViVmlld0luc3RhbmNlOworICAgIFdl
YlZpZXcqIHdlYlZpZXcgPSByZWludGVycHJldF9jYXN0PFdlYlZpZXcqPih3ZWJWaWV3SW5zdGFu
Y2UpOworICAgIHdlYlZpZXctPm9uTW91c2VFdmVudCgoR2RrRXZlbnRBbnkgKilldmVudCk7CisK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK1dlYlZpZXc6OldlYlZpZXcoR2RrUmVjdGFuZ2xlIHJl
Y3QsIFdlYlBhZ2VOYW1lc3BhY2UqIHBhZ2VOYW1lc3BhY2UsIEd0a1dpZGdldCogIGhvc3RXaW5k
b3cpCisgICAgOiBtX3JlY3QocmVjdCkKKyAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQor
ICAgICwgbV9pc1BhZ2VBY3RpdmUodHJ1ZSkKK3sKKyAgICBtX3BhZ2UgPSBwYWdlTmFtZXNwYWNl
LT5jcmVhdGVXZWJQYWdlKCk7CisgICAgbV9wYWdlLT5zZXRQYWdlQ2xpZW50KHRoaXMpOworICAg
IG1fcGFnZS0+c2V0RHJhd2luZ0FyZWEoQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmNy
ZWF0ZSh0aGlzKSk7CisgICAgbV9wYWdlLT5pbml0aWFsaXplV2ViUGFnZShJbnRSZWN0KHJlY3Qp
LnNpemUoKSk7CisKKyAgICBtX3dpbmRvdyA9IChHdGtXaWRnZXQqKWdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9XSURHRVRfVklFVywgTlVMTCk7IAorICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAg
V2ViS2l0V2lkZ2V0Vmlldyogd2ViVmlldyA9IFdFQktJVF9XSURHRVRfVklFVyhtX3dpbmRvdyk7
CisgICAgd2ViVmlldy0+cHJpdi0+d2ViVmlld0luc3RhbmNlID0gcmVpbnRlcnByZXRfY2FzdDxn
cG9pbnRlcj4odGhpcyk7Cit9CisKK1dlYlZpZXc6On5XZWJWaWV3KCkKK3sKK30KKwordm9pZCBX
ZWJWaWV3OjpzZXRIb3N0V2luZG93KEd0a1dpZGdldCogaG9zdFdpbmRvdykKK3sKKyAgICBtX2hv
c3RXaW5kb3cgPSBob3N0V2luZG93OworfQorCit2b2lkIFdlYlZpZXc6Om9uUGFpbnRFdmVudChH
dGtXaWRnZXQqIHdpZGdldCwgR2RrUmVjdGFuZ2xlIHJlY3QpCit7CisgICAgR2RrV2luZG93KiB3
aW5kb3cgPSB3aWRnZXQtPndpbmRvdzsKKyAgICBBU1NFUlQod2luZG93KTsKKyAgICBtX3BhZ2Ut
PmRyYXdpbmdBcmVhKCktPnBhaW50KEludFJlY3QocmVjdCksIHdpbmRvdyk7Cit9CisKK3ZvaWQg
V2ViVmlldzo6b25TaXplRXZlbnQoR3RrV2lkZ2V0KiwgSW50U2l6ZSBzaXplKQoreworICAgIG1f
cGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZShzaXplKTsKK30KKwordm9pZCBXZWJWaWV3Ojpv
blNldEZvY3VzRXZlbnQoR3RrV2lkZ2V0KiwgYm9vbCkKK3sKKyAgICBtX3BhZ2UtPnNldEZvY3Vz
ZWQodHJ1ZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6b25LaWxsRm9jdXNFdmVudChHdGtXaWRnZXQq
LCBib29sKQoreworICAgIG1fcGFnZS0+c2V0Rm9jdXNlZChmYWxzZSk7Cit9CisKK3ZvaWQgV2Vi
Vmlldzo6b25LZXlFdmVudChHZGtFdmVudEtleSAqZXZlbnQpCit7CisgICAgbV9wYWdlLT5oYW5k
bGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQpKTsKK30KKwordm9p
ZCBXZWJWaWV3Ojpvbk1vdXNlRXZlbnQoR2RrRXZlbnRBbnkgKmV2ZW50KQoreworICAgIFdlYk1v
dXNlRXZlbnQgbW91c2VFdmVudCA9IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVu
dChldmVudCk7CisgICAgbV9wYWdlLT5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOworfQor
Cit2b2lkIFdlYlZpZXc6Om9uV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCAqZXZlbnQpCit7Cisg
ICAgV2ViV2hlZWxFdmVudCB3aGVlbEV2ZW50ID0gV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJX
aGVlbEV2ZW50KGV2ZW50KTsKKyAgICBtX3BhZ2UtPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVu
dCk7Cit9CisKK2Jvb2wgV2ViVmlldzo6aXNBY3RpdmUoKQoreworICAgIHJldHVybiBtX2lzUGFn
ZUFjdGl2ZTsKK30KKwordm9pZCBXZWJWaWV3Ojp1cGRhdGVBY3RpdmVTdGF0ZSgpCit7CisgICAg
bV9wYWdlLT5zZXRBY3RpdmUoaXNBY3RpdmUoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xvc2Uo
KQoreworICAgIG1fcGFnZS0+Y2xvc2UoKTsKK30KKworLy8gUGFnZUNsaWVudCdzIHB1cmUgdmly
dHVhbCBmdW5jdGlvbnMKK3ZvaWQgV2ViVmlldzo6cHJvY2Vzc0RpZEV4aXQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cHJvY2Vzc0RpZFJldml2ZSgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp0YWtlRm9jdXMoYm9v
bCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnRvb2xUaXBD
aGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNldFZpZXdwb3J0QXJndW1l
bnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0
cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xlYXJBbGxFZGl0Q29tbWFu
ZHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0RWRp
dENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmLCBib29sLCBpbnQpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biByZWN0OworfQorCitGbG9hdFJlY3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBy
ZWN0OworfQorCit2b2lkIFdlYlZpZXc6OmRpZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K1Bhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0ZVBvcHVwTWVudVBy
b3h5KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEZJWE1FOjpOZWVkIHRvIGlt
cGxlbWVudCBXZWJQb3B1cE1lbnVQcm94eQorICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYlZp
ZXc6OnNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCBmYWRl
T3V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCit2b2lkIFdlYlZpZXc6OnBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFn
ZURpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdJ
bnRlcm5hbC5jcHAgYi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlld0ludGVybmFsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjllMWZlCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdJbnRlcm5hbC5jcHAKQEAgLTAsMCAr
MSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2Vi
Vmlld0ludGVybmFsLmgiCisKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKK3N0YXRpYyBHT2JqZWN0
Q2xhc3MgKnBhcmVudENsYXNzID0gMDsKKworc3RhdGljIHZvaWQgd2Via2l0V2lkZ2V0Vmlld1Jl
YWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mod2lk
Z2V0LCBHVEtfUkVBTElaRUQpOworCisgICAgR2RrV2luZG93QXR0ciBhdHRyaWJ1dGVzOworICAg
IGF0dHJpYnV0ZXMud2luZG93X3R5cGUgPSBHREtfV0lORE9XX0NISUxEOworICAgIGF0dHJpYnV0
ZXMueCA9IHdpZGdldC0+YWxsb2NhdGlvbi54OworICAgIGF0dHJpYnV0ZXMueSA9IHdpZGdldC0+
YWxsb2NhdGlvbi55OworICAgIGF0dHJpYnV0ZXMud2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24u
d2lkdGg7CisgICAgYXR0cmlidXRlcy5oZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0
OworICAgIGF0dHJpYnV0ZXMud2NsYXNzID0gR0RLX0lOUFVUX09VVFBVVDsKKyAgICBhdHRyaWJ1
dGVzLnZpc3VhbCA9IGd0a193aWRnZXRfZ2V0X3Zpc3VhbCh3aWRnZXQpOworICAgIGF0dHJpYnV0
ZXMuY29sb3JtYXAgPSBndGtfd2lkZ2V0X2dldF9jb2xvcm1hcCh3aWRnZXQpOworICAgIGF0dHJp
YnV0ZXMuZXZlbnRfbWFzayA9IEdES19WSVNJQklMSVRZX05PVElGWV9NQVNLIHwgR0RLX0VYUE9T
VVJFX01BU0sgfCBHREtfQlVUVE9OX1BSRVNTX01BU0sgfCBHREtfQlVUVE9OX1JFTEVBU0VfTUFT
SyB8IEdES19QT0lOVEVSX01PVElPTl9NQVNLIHwgR0RLX0tFWV9QUkVTU19NQVNLIHwgR0RLX0tF
WV9SRUxFQVNFX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05f
TU9USU9OX01BU0sgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSyB8IEdES19CVVRUT04yX01PVElP
Tl9NQVNLIHwgR0RLX0JVVFRPTjNfTU9USU9OX01BU0s7CisKKyAgICBnaW50IGF0dHJpYnV0ZXNN
YXNrID0gR0RLX1dBX1ggfCBHREtfV0FfWSB8IEdES19XQV9WSVNVQUwgfCBHREtfV0FfQ09MT1JN
QVA7CisgICAgd2lkZ2V0LT53aW5kb3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0X2dldF9w
YXJlbnRfd2luZG93KHdpZGdldCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzTWFzayk7CisgICAg
Z2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpZGdldC0+d2luZG93LCB3aWRnZXQpOworICAgIHdp
ZGdldC0+c3R5bGUgPSBndGtfc3R5bGVfYXR0YWNoKHdpZGdldC0+c3R5bGUsIHdpZGdldC0+d2lu
ZG93KTsKKyAgICBndGtfc3R5bGVfc2V0X2JhY2tncm91bmQod2lkZ2V0LT5zdHlsZSwgd2lkZ2V0
LT53aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworICAgIFdlYktpdFdpZGdldFZpZXcqIHdlYlZp
ZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVcod2lkZ2V0KTsKKyAgICBndGtfaW1fY29udGV4dF9zZXRf
Y2xpZW50X3dpbmRvdyh3ZWJWaWV3LT5wcml2LT5pbUNvbnRleHQsIHdpZGdldC0+d2luZG93KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0V2lkZ2V0Vmlld0NvbnRhaW5lckFkZChHdGtDb250YWlu
ZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0V2lkZ2V0Vmll
dyogd2ViVmlldyA9IFdFQktJVF9XSURHRVRfVklFVyhjb250YWluZXIpOworCisgICAgaWYgKEdU
S19XSURHRVRfUkVBTElaRUQoY29udGFpbmVyKSkKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfcGFy
ZW50X3dpbmRvdyh3aWRnZXQsIEdUS19XSURHRVQod2ViVmlldyktPndpbmRvdyk7CisgICAgZ3Rr
X3dpZGdldF9zZXRfcGFyZW50KHdpZGdldCwgR1RLX1dJREdFVChjb250YWluZXIpKTsKK30KKwor
c3RhdGljIHZvaWQKK3dlYmtpdFdpZGdldFZpZXdEaXNwb3NlKEdPYmplY3QqIG9iaikKK3sKKyAg
ICBXZWJLaXRXaWRnZXRWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dJREdFVF9WSUVXKG9iaik7Cisg
ICAgaWYgKHdlYlZpZXctPnByaXYtPmRpc3Bvc2VIYXNSdW4pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXctPnByaXYtPmltQ29udGV4dCk7CisgICAgd2ViVmll
dy0+cHJpdi0+ZGlzcG9zZUhhc1J1biA9IFRSVUU7CisgICAgR19PQkpFQ1RfQ0xBU1MocGFyZW50
Q2xhc3MpLT5kaXNwb3NlKG9iaik7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRXaWRnZXRWaWV3
RmluYWxpemUoR09iamVjdCogb2JqKQoreworICAgIEdfT0JKRUNUX0NMQVNTKHBhcmVudENsYXNz
KS0+ZmluYWxpemUob2JqKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2lkZ2V0Vmlld0NsYXNz
SW5pdChncG9pbnRlciB3aWRnZXRWaWV3UGFyZW50Q2xhc3MsIF9fYXR0cmlidXRlX18oKHVudXNl
ZCkpIGdwb2ludGVyIHdpZGdldFZpZXdDbGFzc0RhdGEpCit7CisgICAgV2ViS2l0V2lkZ2V0Vmll
d0NsYXNzKiBrbGFzczsKKyAgICBrbGFzcyA9IHN0YXRpY19jYXN0PFdlYktpdFdpZGdldFZpZXdD
bGFzcyAqPih3aWRnZXRWaWV3UGFyZW50Q2xhc3MpOworICAgIHBhcmVudENsYXNzID0gc3RhdGlj
X2Nhc3Q8R09iamVjdENsYXNzICo+KGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudChrbGFzcykpOwor
CisgICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdldENsYXNzID0gR1RLX1dJREdFVF9DTEFTUyhrbGFz
cyk7CisgICAgd2lkZ2V0Q2xhc3MtPnJlYWxpemUgPSB3ZWJraXRXaWRnZXRWaWV3UmVhbGl6ZTsK
KyAgICB3aWRnZXRDbGFzcy0+ZXhwb3NlX2V2ZW50ID0gV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3
T25FeHBvc2U7CisgICAgd2lkZ2V0Q2xhc3MtPnNpemVfYWxsb2NhdGUgPSBXZWJLaXQ6OldlYlZp
ZXc6OndlYlZpZXdPblNpemVBbGxvY2F0ZTsKKyAgICB3aWRnZXRDbGFzcy0+Zm9jdXNfaW5fZXZl
bnQgPSBXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdGb2N1c0luRXZlbnQ7CisgICAgd2lkZ2V0Q2xh
c3MtPmZvY3VzX291dF9ldmVudCA9IFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0ZvY3VzT3V0RXZl
bnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtleV9wcmVzc19ldmVudCA9IFdlYktpdDo6V2ViVmlldzo6
d2ViVmlld0tleVByZXNzRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtleV9yZWxlYXNlX2V2ZW50
ID0gV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3S2V5UmVsZWFzZUV2ZW50OworICAgIHdpZGdldENs
YXNzLT5idXR0b25fcHJlc3NfZXZlbnQgPSBXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdCdXR0b25Q
cmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5idXR0b25fcmVsZWFzZV9ldmVudCA9IFdlYktp
dDo6V2ViVmlldzo6d2ViVmlld0J1dHRvblJlbGVhc2VFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+
c2Nyb2xsX2V2ZW50ID0gV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3U2Nyb2xsRXZlbnQ7CisgICAg
d2lkZ2V0Q2xhc3MtPm1vdGlvbl9ub3RpZnlfZXZlbnQgPSBXZWJLaXQ6OldlYlZpZXc6OndlYlZp
ZXdNb3Rpb25Ob3RpZnlFdmVudDsKKworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJr
aXRXaWRnZXRWaWV3RmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0
V2lkZ2V0Vmlld0Rpc3Bvc2U7CisKKyAgICBHdGtDb250YWluZXJDbGFzcyogY29udGFpbmVyQ2xh
c3MgPSBHVEtfQ09OVEFJTkVSX0NMQVNTKGtsYXNzKTsKKyAgICBjb250YWluZXJDbGFzcy0+YWRk
ID0gd2Via2l0V2lkZ2V0Vmlld0NvbnRhaW5lckFkZDsKKworICAgIGdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFdpZGdldFZpZXdQcml2YXRlKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdFdpZGdldFZpZXdJbml0KEdUeXBlSW5zdGFuY2UqIGluc3RhbmNlLCBf
X2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBncG9pbnRlciB3aWRnZXRWaWV3Q2xhc3MpCit7CisgICAg
V2ViS2l0V2lkZ2V0Vmlldyogd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0V2lkZ2V0
Vmlldyo+KGluc3RhbmNlKTsKKyAgICBXZWJLaXRXaWRnZXRWaWV3UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9XSURHRVRfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAgICB3ZWJWaWV3LT5wcml2
ID0gcHJpdjsKKworICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdlYlZpZXcsIEdUS19DQU5fRk9D
VVMpOworICAgIHByaXYtPmltQ29udGV4dCA9IGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCk7Cisg
ICAgcHJpdi0+ZGlzcG9zZUhhc1J1biA9IEZBTFNFOworfQorCitHVHlwZQord2Via2l0V2lkZ2V0
Vmlld0dldFR5cGUodm9pZCkKK3sKKyAgICBzdGF0aWMgR1R5cGUgdHlwZSA9IDA7IAorCisgICAg
aWYgKCF0eXBlKSB7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBpbmZvID0gewor
ICAgICAgICAgICAgc2l6ZW9mKFdlYktpdFdpZGdldFZpZXdDbGFzcyksICAgICAgLyogY2xhc3Mg
c3RydWN0dXJlIHNpemUgKi8KKyAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8qIGJhc2VfaW5pdCAqLworICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyogYmFzZV9maW5hbGl6ZSAqLworICAgICAgICAgICAgKEdDbGFz
c0luaXRGdW5jKXdlYmtpdFdpZGdldFZpZXdDbGFzc0luaXQsIC8qIGNsYXNzIGluaXRpYWxpemVy
ICovCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBj
bGFzc19maW5hbGl6ZSAqLworICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyogY2xhc3NfZGF0YSAqLworICAgICAgICAgICAgc2l6ZW9mKFdlYktpdFdpZGdl
dFZpZXcpLCAgICAgICAgICAgLyogaW5zdGFuY2Ugc3RydWN0dXJlIHNpemUgKi8KKyAgICAgICAg
ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZWFsbG9jYXRlZCBp
bnN0YW5jZXMgKi8KKyAgICAgICAgICAgIChHSW5zdGFuY2VJbml0RnVuYyl3ZWJraXRXaWRnZXRW
aWV3SW5pdCwgICAvKiBpbnN0YW5jZSBpbml0aWFsaXplciAqLworICAgICAgICAgICAgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVuY3Rpb24gdGFibGUgKi8KKyAgICAg
ICAgfTsgICAKKyAgICAgICAgdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMoR1RLX1RZUEVf
Q09OVEFJTkVSLCAiV2ViS2l0V2lkZ2V0VmlldyIsICZpbmZvLCAoR1R5cGVGbGFncykwKTsKKyAg
ICB9ICAgIAorCisgICAgcmV0dXJuIHR5cGU7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViVmlld0ludGVybmFsLmggYi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmll
d0ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2ODYxNAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3SW50ZXJuYWwu
aApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJWaWV3SW50ZXJuYWxfaAorI2RlZmluZSBXZWJWaWV3SW50ZXJuYWxfaAorCisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorCisjZGVmaW5lIFdFQktJVF9UWVBFX1dJREdFVF9WSUVXICAgICAg
ICAgICAgKHdlYmtpdFdpZGdldFZpZXdHZXRUeXBlKCkpCisjZGVmaW5lIFdFQktJVF9XSURHRVRf
VklFVyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfVFlQRV9XSURHRVRfVklFVywgV2ViS2l0V2lkZ2V0VmlldykpCisjZGVmaW5lIFdFQktJ
VF9XSURHRVRfVklFV19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChr
bGFzcyksICBXRUJLSVRfVFlQRV9XSURHRVRfVklFVywgV2ViS2l0V2lkZ2V0Vmlld0NsYXNzKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1dJREdFVF9WSUVXKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dJREdFVF9WSUVXKSkKKyNkZWZpbmUg
V0VCS0lUX0lTX1dJREdFVF9WSUVXX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dJREdFVF9WSUVXKSkKKyNkZWZpbmUgV0VCS0lUX1dJ
REdFVF9WSUVXX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9UWVBFX1dJREdFVF9WSUVXLCBXZWJLaXRXaWRnZXRWaWV3Q2xhc3MpKQorCisj
ZGVmaW5lIFdFQktJVF9XSURHRVRfVklFV19HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dJREdFVF9WSUVXLCBXZWJLaXRX
aWRnZXRWaWV3UHJpdmF0ZSkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXaWRnZXRWaWV3IFdl
YktpdFdpZGdldFZpZXc7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2lkZ2V0Vmlld0NsYXNzIFdl
YktpdFdpZGdldFZpZXdDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXaWRnZXRWaWV3UHJp
dmF0ZSBXZWJLaXRXaWRnZXRWaWV3UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXaWRnZXRWaWV3
UHJpdmF0ZSB7CisgICAgZ3BvaW50ZXIgd2ViVmlld0luc3RhbmNlOworICAgIEd0a0lNQ29udGV4
dCAqaW1Db250ZXh0OworICAgIGdib29sZWFuIGRpc3Bvc2VIYXNSdW47Cit9OworCitzdHJ1Y3Qg
X1dlYktpdFdpZGdldFZpZXcgeworICAgIEd0a0NvbnRhaW5lciBwYXJlbnRJbnN0YW5jZTsKKyAg
ICAvLyBwcml2YXRlCisgICAgV2ViS2l0V2lkZ2V0Vmlld1ByaXZhdGUgKnByaXY7Cit9OworCitz
dHJ1Y3QgX1dlYktpdFdpZGdldFZpZXdDbGFzcyB7CisgICAgR3RrQ29udGFpbmVyQ2xhc3MgcGFy
ZW50Q2xhc3M7Cit9OworCitHVHlwZQord2Via2l0V2lkZ2V0Vmlld0dldFR5cGUodm9pZCk7CisK
KworI2VuZGlmIC8vIFdlYlZpZXdJbnRlcm5hbF9oIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72682</attachid>
            <date>2010-11-02 09:41:48 -0700</date>
            <delta_ts>2011-01-07 07:19:05 -0800</delta_ts>
            <desc>UpdateChunk, ChunkedUpdateDrawingArea, WebView classes implementation for GTK port</desc>
            <filename>UpdateChunk WebView ChunkedUpdateDrawingArea Implementation.patch</filename>
            <type>text/plain</type>
            <size>52077</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTcwNSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTcxOSkK
QEAgLTEsMyArMSwzMDMgQEAKKzIwMTAtMTAtMjggIENoYW5kcmEgVmFsbGFsYSAgPGNoYW5kcmEu
dmFsbGFsYUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBbR1RLXSBJbXBsZW1lbnRhdGlvbiBvZiBVcGRhdGVDaHVu
aywgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhL1Byb3h5IGNsYXNzZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTA5CisgICAgICAgIAorICAgICAg
ICAqIFNoYXJlZC9Db3JlSVBDU3VwcG9ydC9EcmF3aW5nQXJlYU1lc3NhZ2VLaW5kcy5oOgorICAg
ICAgICAqIFNoYXJlZC9ndGs6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9ndGsvVXBkYXRlQ2h1
bmsuY3BwOiBBZGRlZC4gV2ViUHJvY2VzcyB1c2VzIGdka19waXhtYXBfbmV3IHRvIGNyZWF0ZSBh
bmQgcGFpbnQgYSBjaHVuay4gVUlQcm9jZXNzIHVzZXMgZ2RrX3BpeG1hcF9mb3JlaWduX25ldyB0
byBvYnRhaW4gcmVmZXJlbmNlIHRvIHRoZSBwYWludGVkIGNodW5rLgorICAgICAgICAoV2ViS2l0
OjpVcGRhdGVDaHVuazo6VXBkYXRlQ2h1bmspOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVu
azo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6OmRlY29kZSk6CisgICAg
ICAgICogU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
VXBkYXRlQ2h1bms6OnJlY3QpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVDaHVuazo6bWVtb3J5
KToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6OnhJRCk6CisgICAgICAgIChXZWJLaXQ6
OlVwZGF0ZUNodW5rOjppc0VtcHR5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ2h1bmtlZFVwZGF0
ZURyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ2h1bmtlZFVwZGF0ZURy
YXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2lu
Z0FyZWFQcm94eTo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6ZGlkU2V0U2l6ZSk6IFNlbmQgYSAn
RGlkU2V0U2l6ZURvbmUnIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyB0byBkZWxldGUgdGhlIHBpeG1h
cCBjcmVhdGVkIHRocm91Z2ggYSBTZXRTaXplCisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRh
dGVEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGUpOiBBZGQgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIg
WElEIHdoaWxlIHNlbmRpbmcgbWVzc2FnZSB3aGljaCB0aGUgd2ViIHByb2Nlc3MgdXNlcyB0byBk
ZWxldGUgdGhlR2RrUGl4bWFwCisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
Z3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5R3RrLmNwcDogQWRkZWQuIENyZWF0ZXMg
YW5kIG1haW50YWlucyBhIGJhY2tpbmcgc3RvcmUgdXNpbmcgR2RrUGl4bWFwCisgICAgICAgIChX
ZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpwYWdlKToKKyAgICAgICAgKFdl
YktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmVuc3VyZUJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjppbnZhbGlk
YXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdB
cmVhUHJveHk6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRl
RHJhd2luZ0FyZWFQcm94eTo6ZHJhd1VwZGF0ZUNodW5rSW50b0JhY2tpbmdTdG9yZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmNwcDogQWRkZWQuIFRoZSBuYXRpdmUgR3RrV2lk
Z2V0IGhhbmRsZSBmb3IgZWFjaCBXS1ZpZXdSZWYgZm9yIEdUSyBwb3J0LgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3Ojp3ZWJWaWV3T25FeHBvc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
Ojp3ZWJWaWV3T25TaXplQWxsb2NhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJW
aWV3Rm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0ZvY3Vz
T3V0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3S2V5UHJlc3NFdmVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdLZXlSZWxlYXNlRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3QnV0dG9uUHJlc3NFdmVudCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdCdXR0b25SZWxlYXNlRXZlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3U2Nyb2xsRXZlbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3Ojp3ZWJWaWV3TW90aW9uTm90aWZ5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6fldlYlZpZXcpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRIb3N0V2luZG93KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6b25QYWludEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25T
aXplRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvblNldEZvY3VzRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvbktpbGxGb2N1c0V2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6b25LZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9u
TW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uV2hlZWxFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6dXBkYXRlQWN0aXZlU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpjbG9z
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnByb2Nlc3NEaWRFeGl0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6cHJvY2Vzc0RpZFJldml2ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OnRha2VGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnRvb2xUaXBDaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0Q3Vyc29yKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6c2V0Vmlld3BvcnRBcmd1bWVudHMpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3OjpyZWdpc3RlckVkaXRDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
Y2xlYXJBbGxFZGl0Q29tbWFuZHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRFZGl0
Q29tbWFuZFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udmVydFRvRGV2aWNl
U3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb252ZXJ0VG9Vc2VyU3BhY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpkaWROb3RIYW5kbGVLZXlFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VEaWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViVmlldy5oOiBBZGRlZC4gTmF0aXZlIEd0a1dpZGdl
dCBoYW5kbGUgZm9yIFdLVmlld1JlZiBmb3IgR1RLIHBvcnQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OnJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3Ojp3aW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpo
b3N0V2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFnZSk6CisgICAgICAgICog
VUlQcm9jZXNzL2d0ay9XZWJWaWV3SW50ZXJuYWwuY3BwOiBBZGRlZC4gVGhlIEdPYmplY3QgaW50
ZXJmYWNlIGZvciBXZWJWaWV3LiBUaGUgR09iamVjdCBpcyB0aGUgR3RrV2lkZ2V0IGhhbmRsZSB3
aGljaCBpcyB1c2VkIGJ5IFdLVmlld1JlZiBmb3IgR1RLIHBvcnQuCisgICAgICAgICh3ZWJraXRX
aWRnZXRWaWV3UmVhbGl6ZSk6CisgICAgICAgICh3ZWJraXRXaWRnZXRWaWV3Q29udGFpbmVyQWRk
KToKKyAgICAgICAgKHdlYmtpdFdpZGdldFZpZXdEaXNwb3NlKToKKyAgICAgICAgKHdlYmtpdFdp
ZGdldFZpZXdGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRXaWRnZXRWaWV3Q2xhc3NJbml0KToK
KyAgICAgICAgKHdlYmtpdFdpZGdldFZpZXdJbml0KToKKyAgICAgICAgKHdlYmtpdFdpZGdldFZp
ZXdHZXRUeXBlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlZpZXdJbnRlcm5hbC5oOiBB
ZGRlZC4gVGhlIEdPYmplY3QgaW50ZXJmYWNlIGRlY2xhcmF0aW9ucyBmb3IgR3RrV2lkZ2V0IGhh
bmRsZSBmb3IgR1RLIHBvcnQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NodW5rZWRV
cGRhdGVEcmF3aW5nQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3
aW5nQXJlYTo6ZGlzcGxheSk6IFN0b3JlIHRoZSBYSUQgb2YgYSBHZGtQaXhtYXAgZm9yIGRlbGV0
aW9uIGluIGZ1dHVyZShhZnRlciBVSSBwcm9jZXNzIHNlbmRzIGEgZGlkVXBkYXRlIGNvbmZpcm1h
dGlvbikuCisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6c2V0U2l6
ZSk6IFNhbWUgYXMgYWJvdmUuCisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5n
QXJlYTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0NodW5rZWRVcGRh
dGVEcmF3aW5nQXJlYUd0ay5jcHA6IEFkZGVkLiBJbXBsZW1lbnRzIGZ1bmN0aW9uYWxpdHkgdG8g
cGFpbnQgaW50byBhbiB1cGRhdGUgY2h1bmsgYW5kIGZyZWUgaXQuCisgICAgICAgIChXZWJLaXQ6
OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6cGFpbnRJbnRvVXBkYXRlQ2h1bmspOgorICAgICAg
ICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OmZyZWVCaXRNYXBNZW1vcnkpOiBV
bnJlZiB0aGUgc3RvcmVkIERyYXdhYmxlIE1lbW9yeQorICAgICAgICAoV2ViS2l0OjpDaHVua2Vk
VXBkYXRlRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSk6IERlbGV0ZSB0aGUgc3RvcmVkIEdka1BpeG1h
cC4KKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhOjpkaWRTZXRTaXpl
RG9uZSk6IERlbGV0ZSB0aGUgc3RvcmVkIEdka1BpeG1hcC4KKwogMjAxMC0xMC0yNyAgS2ltbW8g
S2lubnVuZW4gIDxraW1tby50Lmtpbm51bmVuQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRyZWFzIEtsaW5nLgpJbmRleDogV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0ZUNodW5r
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0ZUNodW5rLmgJKHJldmlz
aW9uIDApCisrKyBXZWJLaXQyL1NoYXJlZC9ndGsvVXBkYXRlQ2h1bmsuaAkocmV2aXNpb24gNTE3
MTkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1v
dG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFVwZGF0ZUNodW5rX2gKKyNkZWZpbmUgVXBkYXRlQ2h1bmtfaAorCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIENvcmVJUEMgewor
Y2xhc3MgQXJndW1lbnRFbmNvZGVyOworY2xhc3MgQXJndW1lbnREZWNvZGVyOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVXBkYXRlQ2h1bmsgeworcHVibGljOgorICAgIFVwZGF0
ZUNodW5rKCk7CisgICAgVXBkYXRlQ2h1bmsoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAg
IFVwZGF0ZUNodW5rKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBHZGtQaXhtYXAqKTsKKworICAg
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
KyAgICBHZGtQaXhtYXAqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwU2hhcmVkTWVt
b3J5OyB9CisgICAgdWludDMyX3QgeElEKCkgeyByZXR1cm4gbV94SUQ7IH0KKyAgICBib29sIGlz
RW1wdHkoKSB7IHJldHVybiBtX3JlY3QuaXNFbXB0eSgpO30KKworICAgIHZvaWQgZW5jb2RlKENv
cmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIFVwZGF0ZUNodW5rJik7CisKK3ByaXZh
dGU6CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3JlY3Q7CisgICAgR2RrUGl4bWFwKiBtX2JpdG1h
cFNoYXJlZE1lbW9yeTsKKyAgICB1aW50MzJfdCBtX3hJRDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gVXBkYXRlQ2h1bmtfaApJbmRleDogV2ViS2l0Mi9TaGFyZWQv
Z3RrL1VwZGF0ZUNodW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9ndGsvVXBk
YXRlQ2h1bmsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0ZUNo
dW5rLmNwcAkocmV2aXNpb24gNTE3MTkpCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiVXBkYXRlQ2h1bmsuaCIKKworI2luY2x1ZGUg
IkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lv
bmluZy5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworVXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5rKCkKKyAg
ICA6IG1fYml0bWFwU2hhcmVkTWVtb3J5KDApCit7Cit9CisKK1VwZGF0ZUNodW5rOjpVcGRhdGVD
aHVuayhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIDogbV9yZWN0KHJlY3QpCit7CisgICAgbV9i
aXRtYXBTaGFyZWRNZW1vcnkgPSBnZGtfcGl4bWFwX25ldygwLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCksIGdka192aXN1YWxfZ2V0X2RlcHRoKGdka192aXN1YWxfZ2V0X3N5c3RlbSgpKSk7
CisgICAgbV94SUQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oR0RLX1BJWE1BUF9YSUQobV9iaXRt
YXBTaGFyZWRNZW1vcnkpKTsKK30KKworVXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5rKGNvbnN0IElu
dFJlY3QmIHJlY3QsIEdka1BpeG1hcCogYml0bWFwU2hhcmVkTWVtb3J5KQorICAgIDogbV9yZWN0
KHJlY3QpCisgICAgLCBtX2JpdG1hcFNoYXJlZE1lbW9yeShiaXRtYXBTaGFyZWRNZW1vcnkpCit7
Cit9CisKK3ZvaWQgVXBkYXRlQ2h1bms6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIq
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fcmVjdCk7CisgICAgZW5j
b2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3hJRCkpOworfQorCitib29sIFVw
ZGF0ZUNodW5rOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBVcGRh
dGVDaHVuayYgdXBkYXRlQ2h1bmspCit7CisgICAgSW50UmVjdCByZWN0OworICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKHJlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1cGRhdGVD
aHVuay5tX3JlY3QgPSByZWN0OworICAgIHVpbnQzMl90IHBpeG1hcFNoYXJlZE1tZW1vcnk7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGl4bWFwU2hhcmVkTW1lbW9yeSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB1cGRhdGVDaHVuay5tX3hJRCA9IHBpeG1hcFNoYXJlZE1tZW1vcnk7
CisgICAgdW5zaWduZWQgbG9uZyB4UGl4bWFwU2hhcmVkTW1lbW9yeSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KHBpeG1hcFNoYXJlZE1tZW1vcnkpOworICAgIHVwZGF0ZUNodW5rLm1fYml0
bWFwU2hhcmVkTWVtb3J5ID0gZ2RrX3BpeG1hcF9mb3JlaWduX25ldyh4UGl4bWFwU2hhcmVkTW1l
bW9yeSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9EcmF3aW5nQXJl
YU1lc3NhZ2VLaW5kcy5oCShyZXZpc2lvbiA1MTcwNSkKKysrIFdlYktpdDIvU2hhcmVkL0NvcmVJ
UENTdXBwb3J0L0RyYXdpbmdBcmVhTWVzc2FnZUtpbmRzLmgJKHJldmlzaW9uIDUxNzE5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00NSw2ICs0NiwxMyBAQAogICAgIC8vIENhbGxlZCB3aGVuIGFuIHVwZGF0
ZSBjaHVuayBzZW50IHRvIHRoZSBkcmF3aW5nIGFyZWEgaGFzIGJlZW4KICAgICAvLyBpbmNvcnBv
cmF0ZWQgaW50byB0aGUgYmFja2luZyBzdG9yZS4KICAgICBEaWRVcGRhdGUsCisKKyAgICAvLyBD
YWxsZWQgd2hlbmV2ZXIgdGhlIHNpemUgb2YgdGhlIGRyYXdpbmcgYXJlYSBnZXQgdXBkYXRlZAor
ICAgIC8vIHVzZWQgaW4gb25seSBHVEsgdG8gZnJlZSB0aGUgbWVtb3J5IHdoaWNoIGlzIGFsbG9j
YXRlZCBpbiBzZXRzaXplCisjaWYgUExBVEZPUk0oR1RLKQorICAgIERpZFNldFNpemVEb25lLAor
I2VuZGlmCisgICAgCiB9OwogCiB9CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJv
eHlHdGsuY3BwCShyZXZpc2lvbiA1MTcxOSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgIkNodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YVByb3h5LmgiCisKKyNpbmNsdWRlICJVcGRhdGVDaHVuay5oIgorI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJQYWdlUHJveHkqIENodW5rZWRVcGRhdGVE
cmF3aW5nQXJlYVByb3h5OjpwYWdlKCkKK3sKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7
Cit9CisKK3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmVuc3VyZUJhY2tpbmdT
dG9yZSgpCit7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlQml0bWFwKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2JhY2tpbmdTdG9yZUJpdG1hcCA9IGdka19waXhtYXBfbmV3KG1fd2ViVmlldy0+
d2luZG93KCktPndpbmRvdywgbV92aWV3U2l6ZS53aWR0aCgpLCBtX3ZpZXdTaXplLmhlaWdodCgp
LCAtMSk7Cit9CisKK3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmludmFsaWRh
dGVCYWNraW5nU3RvcmUoKQoreworICAgIGlmIChtX2JhY2tpbmdTdG9yZUJpdG1hcCkgeworICAg
ICAgICBnX29iamVjdF91bnJlZihtX2JhY2tpbmdTdG9yZUJpdG1hcCk7CisgICAgICAgIG1fYmFj
a2luZ1N0b3JlQml0bWFwID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdp
bmdBcmVhUHJveHk6OnBsYXRmb3JtUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgR2RrV2luZG93
KiB3aW5kb3cpCit7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZUJpdG1hcCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR2RrR0MqIGdjID0gZ2RrX2djX25ldyhtX2JhY2tpbmdTdG9yZUJpdG1hcCk7
CisgICAgLy8gQml0Qmx0IGZyb20gdGhlIGJhY2tpbmctc3RvcmUgdG8gdGhlIHdpbmRvdy4KKyAg
ICBnZGtfZHJhd19kcmF3YWJsZSh3aW5kb3csIGdjLCBtX2JhY2tpbmdTdG9yZUJpdG1hcCwgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7CisgICAgZ19vYmplY3RfdW5yZWYoZ2MpOworCit9CisKK3ZvaWQgQ2h1bmtlZFVw
ZGF0ZURyYXdpbmdBcmVhUHJveHk6OmRyYXdVcGRhdGVDaHVua0ludG9CYWNraW5nU3RvcmUoVXBk
YXRlQ2h1bmsqIHVwZGF0ZUNodW5rKQoreworICAgIGVuc3VyZUJhY2tpbmdTdG9yZSgpOworICAg
IEludFJlY3QgcmVjdCA9IHVwZGF0ZUNodW5rLT5yZWN0KCk7CisgICAgaWYgKCF1cGRhdGVDaHVu
ay0+bWVtb3J5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdka1JlY3RhbmdsZSBnZGtSZWN0
ID0gcmVjdDsKKworICAgIEdka0dDKiBnYyA9IGdka19nY19uZXcodXBkYXRlQ2h1bmstPm1lbW9y
eSgpKTsKKyAgICBnZGtfZHJhd19kcmF3YWJsZShtX2JhY2tpbmdTdG9yZUJpdG1hcCwgZ2MsIHVw
ZGF0ZUNodW5rLT5tZW1vcnkoKSwgMCwgMCwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGdka19kaXNwbGF5X3N5bmMoZ2RrX2Rpc3BsYXlfZ2V0
X2RlZmF1bHQoKSk7CisgICAgZ19vYmplY3RfdW5yZWYodXBkYXRlQ2h1bmstPm1lbW9yeSgpKTsK
KworICAgIGdka193aW5kb3dfaW52YWxpZGF0ZV9yZWN0KG1fd2ViVmlldy0+d2luZG93KCktPndp
bmRvdywgJmdka1JlY3QsIGZhbHNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0IApJbmRl
eDogV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdJbnRlcm5hbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdJbnRlcm5hbC5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlld0ludGVybmFsLmNwcAkocmV2aXNpb24g
NTE3MTkpCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx
MCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgIldlYlZpZXdJbnRlcm5hbC5oIgorCisjaW5jbHVkZSAiV2ViVmlldy5oIgor
CitzdGF0aWMgR09iamVjdENsYXNzICpwYXJlbnRDbGFzcyA9IDA7CisKK3N0YXRpYyB2b2lkIHdl
YmtpdFdpZGdldFZpZXdSZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIEdUS19XSURH
RVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX1JFQUxJWkVEKTsKKworICAgIEdka1dpbmRvd0F0dHIg
YXR0cmlidXRlczsKKyAgICBhdHRyaWJ1dGVzLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19DSElM
RDsKKyAgICBhdHRyaWJ1dGVzLnggPSB3aWRnZXQtPmFsbG9jYXRpb24ueDsKKyAgICBhdHRyaWJ1
dGVzLnkgPSB3aWRnZXQtPmFsbG9jYXRpb24ueTsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0gd2lk
Z2V0LT5hbGxvY2F0aW9uLndpZHRoOworICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gd2lkZ2V0LT5h
bGxvY2F0aW9uLmhlaWdodDsKKyAgICBhdHRyaWJ1dGVzLndjbGFzcyA9IEdES19JTlBVVF9PVVRQ
VVQ7CisgICAgYXR0cmlidXRlcy52aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwod2lkZ2V0
KTsKKyAgICBhdHRyaWJ1dGVzLmNvbG9ybWFwID0gZ3RrX3dpZGdldF9nZXRfY29sb3JtYXAod2lk
Z2V0KTsKKyAgICBhdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBHREtfVklTSUJJTElUWV9OT1RJRllf
TUFTSyB8IEdES19FWFBPU1VSRV9NQVNLIHwgR0RLX0JVVFRPTl9QUkVTU19NQVNLIHwgR0RLX0JV
VFRPTl9SRUxFQVNFX01BU0sgfCBHREtfUE9JTlRFUl9NT1RJT05fTUFTSyB8IEdES19LRVlfUFJF
U1NfTUFTSyB8IEdES19LRVlfUkVMRUFTRV9NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBHREtfQlVUVE9OX01PVElPTl9NQVNLIHwgR0RLX0JVVFRPTjFfTU9USU9OX01BU0sgfCBH
REtfQlVUVE9OMl9NT1RJT05fTUFTSyB8IEdES19CVVRUT04zX01PVElPTl9NQVNLOworCisgICAg
Z2ludCBhdHRyaWJ1dGVzTWFzayA9IEdES19XQV9YIHwgR0RLX1dBX1kgfCBHREtfV0FfVklTVUFM
IHwgR0RLX1dBX0NPTE9STUFQOworICAgIHdpZGdldC0+d2luZG93ID0gZ2RrX3dpbmRvd19uZXco
Z3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQpLCAmYXR0cmlidXRlcywgYXR0cmli
dXRlc01hc2spOworICAgIGdka193aW5kb3dfc2V0X3VzZXJfZGF0YSh3aWRnZXQtPndpbmRvdywg
d2lkZ2V0KTsKKyAgICB3aWRnZXQtPnN0eWxlID0gZ3RrX3N0eWxlX2F0dGFjaCh3aWRnZXQtPnN0
eWxlLCB3aWRnZXQtPndpbmRvdyk7CisgICAgZ3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kKHdpZGdl
dC0+c3R5bGUsIHdpZGdldC0+d2luZG93LCBHVEtfU1RBVEVfTk9STUFMKTsKKyAgICBXZWJLaXRX
aWRnZXRWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dJREdFVF9WSUVXKHdpZGdldCk7CisgICAgZ3Rr
X2ltX2NvbnRleHRfc2V0X2NsaWVudF93aW5kb3cod2ViVmlldy0+cHJpdi0+aW1Db250ZXh0LCB3
aWRnZXQtPndpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdpZGdldFZpZXdDb250YWlu
ZXJBZGQoR3RrQ29udGFpbmVyKiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQoreworICAg
IFdlYktpdFdpZGdldFZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVcoY29udGFpbmVy
KTsKKworICAgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEKGNvbnRhaW5lcikpCisgICAgICAgIGd0
a193aWRnZXRfc2V0X3BhcmVudF93aW5kb3cod2lkZ2V0LCBHVEtfV0lER0VUKHdlYlZpZXcpLT53
aW5kb3cpOworICAgIGd0a193aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29u
dGFpbmVyKSk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRXaWRnZXRWaWV3RGlzcG9zZShHT2Jq
ZWN0KiBvYmopCit7CisgICAgV2ViS2l0V2lkZ2V0Vmlldyogd2ViVmlldyA9IFdFQktJVF9XSURH
RVRfVklFVyhvYmopOworICAgIGlmICh3ZWJWaWV3LT5wcml2LT5kaXNwb3NlSGFzUnVuKQorICAg
ICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3LT5wcml2LT5pbUNvbnRl
eHQpOworICAgIHdlYlZpZXctPnByaXYtPmRpc3Bvc2VIYXNSdW4gPSBUUlVFOworICAgIEdfT0JK
RUNUX0NMQVNTKHBhcmVudENsYXNzKS0+ZGlzcG9zZShvYmopOworfQorCitzdGF0aWMgdm9pZAor
d2Via2l0V2lkZ2V0Vmlld0ZpbmFsaXplKEdPYmplY3QqIG9iaikKK3sKKyAgICBHX09CSkVDVF9D
TEFTUyhwYXJlbnRDbGFzcyktPmZpbmFsaXplKG9iaik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dFdpZGdldFZpZXdDbGFzc0luaXQoZ3BvaW50ZXIgd2lkZ2V0Vmlld1BhcmVudENsYXNzLCBfX2F0
dHJpYnV0ZV9fKCh1bnVzZWQpKSBncG9pbnRlciB3aWRnZXRWaWV3Q2xhc3NEYXRhKQoreworICAg
IFdlYktpdFdpZGdldFZpZXdDbGFzcyoga2xhc3M7CisgICAga2xhc3MgPSBzdGF0aWNfY2FzdDxX
ZWJLaXRXaWRnZXRWaWV3Q2xhc3MgKj4od2lkZ2V0Vmlld1BhcmVudENsYXNzKTsKKyAgICBwYXJl
bnRDbGFzcyA9IHN0YXRpY19jYXN0PEdPYmplY3RDbGFzcyAqPihnX3R5cGVfY2xhc3NfcGVla19w
YXJlbnQoa2xhc3MpKTsKKworICAgIEd0a1dpZGdldENsYXNzKiB3aWRnZXRDbGFzcyA9IEdUS19X
SURHRVRfQ0xBU1Moa2xhc3MpOworICAgIHdpZGdldENsYXNzLT5yZWFsaXplID0gd2Via2l0V2lk
Z2V0Vmlld1JlYWxpemU7CisgICAgd2lkZ2V0Q2xhc3MtPmV4cG9zZV9ldmVudCA9IFdlYktpdDo6
V2ViVmlldzo6d2ViVmlld09uRXhwb3NlOworICAgIHdpZGdldENsYXNzLT5zaXplX2FsbG9jYXRl
ID0gV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3T25TaXplQWxsb2NhdGU7CisgICAgd2lkZ2V0Q2xh
c3MtPmZvY3VzX2luX2V2ZW50ID0gV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3Rm9jdXNJbkV2ZW50
OworICAgIHdpZGdldENsYXNzLT5mb2N1c19vdXRfZXZlbnQgPSBXZWJLaXQ6OldlYlZpZXc6Ondl
YlZpZXdGb2N1c091dEV2ZW50OworICAgIHdpZGdldENsYXNzLT5rZXlfcHJlc3NfZXZlbnQgPSBX
ZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdLZXlQcmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5r
ZXlfcmVsZWFzZV9ldmVudCA9IFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0tleVJlbGVhc2VFdmVu
dDsKKyAgICB3aWRnZXRDbGFzcy0+YnV0dG9uX3ByZXNzX2V2ZW50ID0gV2ViS2l0OjpXZWJWaWV3
Ojp3ZWJWaWV3QnV0dG9uUHJlc3NFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+YnV0dG9uX3JlbGVh
c2VfZXZlbnQgPSBXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdCdXR0b25SZWxlYXNlRXZlbnQ7Cisg
ICAgd2lkZ2V0Q2xhc3MtPnNjcm9sbF9ldmVudCA9IFdlYktpdDo6V2ViVmlldzo6d2ViVmlld1Nj
cm9sbEV2ZW50OworICAgIHdpZGdldENsYXNzLT5tb3Rpb25fbm90aWZ5X2V2ZW50ID0gV2ViS2l0
OjpXZWJWaWV3Ojp3ZWJWaWV3TW90aW9uTm90aWZ5RXZlbnQ7CisKKyAgICBHT2JqZWN0Q2xhc3Mq
IGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0V2lkZ2V0Vmlld0ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+
ZGlzcG9zZSA9IHdlYmtpdFdpZGdldFZpZXdEaXNwb3NlOworCisgICAgR3RrQ29udGFpbmVyQ2xh
c3MqIGNvbnRhaW5lckNsYXNzID0gR1RLX0NPTlRBSU5FUl9DTEFTUyhrbGFzcyk7CisgICAgY29u
dGFpbmVyQ2xhc3MtPmFkZCA9IHdlYmtpdFdpZGdldFZpZXdDb250YWluZXJBZGQ7CisKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRXaWRnZXRWaWV3UHJp
dmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXaWRnZXRWaWV3SW5pdChHVHlwZUluc3Rh
bmNlKiBpbnN0YW5jZSwgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgZ3BvaW50ZXIgd2lkZ2V0Vmll
d0NsYXNzKQoreworICAgIFdlYktpdFdpZGdldFZpZXcqIHdlYlZpZXcgPSByZWludGVycHJldF9j
YXN0PFdlYktpdFdpZGdldFZpZXcqPihpbnN0YW5jZSk7CisgICAgV2ViS2l0V2lkZ2V0Vmlld1By
aXZhdGUqIHByaXYgPSBXRUJLSVRfV0lER0VUX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7Cisg
ICAgd2ViVmlldy0+cHJpdiA9IHByaXY7CisKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3ZWJW
aWV3LCBHVEtfQ0FOX0ZPQ1VTKTsKKyAgICBwcml2LT5pbUNvbnRleHQgPSBndGtfaW1fbXVsdGlj
b250ZXh0X25ldygpOworICAgIHByaXYtPmRpc3Bvc2VIYXNSdW4gPSBGQUxTRTsKK30KKworR1R5
cGUKK3dlYmtpdFdpZGdldFZpZXdHZXRUeXBlKHZvaWQpCit7CisgICAgc3RhdGljIEdUeXBlIHR5
cGUgPSAwOyAKKworICAgIGlmICghdHlwZSkgeworCisgICAgICAgIHN0YXRpYyBjb25zdCBHVHlw
ZUluZm8gaW5mbyA9IHsKKyAgICAgICAgICAgIHNpemVvZihXZWJLaXRXaWRnZXRWaWV3Q2xhc3Mp
LCAgICAgIC8qIGNsYXNzIHN0cnVjdHVyZSBzaXplICovCisgICAgICAgICAgICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiYXNlX2luaXQgKi8KKyAgICAgICAgICAgIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfZmluYWxpemUgKi8KKyAg
ICAgICAgICAgIChHQ2xhc3NJbml0RnVuYyl3ZWJraXRXaWRnZXRWaWV3Q2xhc3NJbml0LCAvKiBj
bGFzcyBpbml0aWFsaXplciAqLworICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLyogY2xhc3NfZmluYWxpemUgKi8KKyAgICAgICAgICAgIDAsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsYXNzX2RhdGEgKi8KKyAgICAgICAgICAgIHNp
emVvZihXZWJLaXRXaWRnZXRWaWV3KSwgICAgICAgICAgIC8qIGluc3RhbmNlIHN0cnVjdHVyZSBz
aXplICovCisgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBwcmVhbGxvY2F0ZWQgaW5zdGFuY2VzICovCisgICAgICAgICAgICAoR0luc3RhbmNlSW5pdEZ1
bmMpd2Via2l0V2lkZ2V0Vmlld0luaXQsICAgLyogaW5zdGFuY2UgaW5pdGlhbGl6ZXIgKi8KKyAg
ICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ1bmN0aW9u
IHRhYmxlICovCisgICAgICAgIH07ICAgCisgICAgICAgIHR5cGUgPSBnX3R5cGVfcmVnaXN0ZXJf
c3RhdGljKEdUS19UWVBFX0NPTlRBSU5FUiwgIldlYktpdFdpZGdldFZpZXciLCAmaW5mbywgKEdU
eXBlRmxhZ3MpMCk7CisgICAgfSAgICAKKworICAgIHJldHVybiB0eXBlOworfQpJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJWaWV3LmNwcAkocmV2aXNpb24gNTE3MTkpCkBAIC0wLDAgKzEsMzM0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYlZpZXcuaCIKKworI2lu
Y2x1ZGUgIkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKKyNpbmNs
dWRlICJXZWJQYWdlTmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5j
bHVkZSAiV2ViVmlld0ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworZ2Jvb2xlYW4gV2ViVmlldzo6d2ViVmlld09uRXhwb3NlKEd0
a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSAqZXZlbnQpCit7CisgICAgV2ViS2l0V2lk
Z2V0Vmlldyogd2lkZ2V0VmlldyA9IFdFQktJVF9XSURHRVRfVklFVyh3aWRnZXQpOworICAgIGdw
b2ludGVyIHdlYlZpZXdJbnN0YW5jZSA9IHdpZGdldFZpZXctPnByaXYtPndlYlZpZXdJbnN0YW5j
ZTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJWaWV3Kj4od2Vi
Vmlld0luc3RhbmNlKTsKKyAgICBHZGtSZWN0YW5nbGUgY2xpcDsKKyAgICBnZGtfcmVnaW9uX2dl
dF9jbGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlwKTsKKyAgICB3ZWJWaWV3LT5vblBhaW50RXZl
bnQod2lkZ2V0LCBjbGlwKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBXZWJWaWV3
Ojp3ZWJWaWV3T25TaXplQWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24q
IGFsbG9jYXRpb24pCit7CisgICAgR09iamVjdENsYXNzKiBwYXJlbnRDbGFzcyA9IChHT2JqZWN0
Q2xhc3MqKWdfdHlwZV9jbGFzc19wZWVrX3BhcmVudChXRUJLSVRfV0lER0VUX1ZJRVdfR0VUX0NM
QVNTKHdpZGdldCkpOworICAgIEdUS19XSURHRVRfQ0xBU1MocGFyZW50Q2xhc3MpLT5zaXplX2Fs
bG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7CisgICAgV2ViS2l0V2lkZ2V0Vmlldyogd2lkZ2V0
VmlldyA9IFdFQktJVF9XSURHRVRfVklFVyh3aWRnZXQpOworICAgIGdwb2ludGVyIHdlYlZpZXdJ
bnN0YW5jZSA9IHdpZGdldFZpZXctPnByaXYtPndlYlZpZXdJbnN0YW5jZTsKKyAgICBXZWJWaWV3
KiB3ZWJWaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJWaWV3Kj4od2ViVmlld0luc3RhbmNlKTsK
KworICAgIHdlYlZpZXctPm9uU2l6ZUV2ZW50KHdpZGdldCwgSW50U2l6ZShhbGxvY2F0aW9uLT53
aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KSk7Cit9CisKK2dib29sZWFuIFdlYlZpZXc6OndlYlZp
ZXdGb2N1c0luRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50KQor
eworICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdldFZpZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVco
d2lkZ2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3SW5zdGFuY2UgPSB3aWRnZXRWaWV3LT5wcml2
LT53ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7CisgICAgCisgICAgR3RrV2lkZ2V0KiB0b3Bs
ZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKHdpZGdldCk7CisgICAgaWYgKEdUS19XSURH
RVRfVE9QTEVWRUwodG9wbGV2ZWwpICYmIGd0a193aW5kb3dfaGFzX3RvcGxldmVsX2ZvY3VzKEdU
S19XSU5ET1codG9wbGV2ZWwpKSkgeworICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbih3
aWRnZXRWaWV3LT5wcml2LT5pbUNvbnRleHQpOworICAgICAgICBpZiAoISh3ZWJWaWV3LT5tX2lz
UGFnZUFjdGl2ZSkpIHsKKyAgICAgICAgICAgIHdlYlZpZXctPm1faXNQYWdlQWN0aXZlID0gdHJ1
ZTsKKyAgICAgICAgICAgIHdlYlZpZXctPnVwZGF0ZUFjdGl2ZVN0YXRlKCk7CisgICAgICAgIH0K
KyAgICAgICAgd2ViVmlldy0+b25TZXRGb2N1c0V2ZW50KHdpZGdldCwgdHJ1ZSk7CisgICAgfQor
CisgICAgR09iamVjdENsYXNzKiBwYXJlbnRDbGFzcyA9IChHT2JqZWN0Q2xhc3MqKWdfdHlwZV9j
bGFzc19wZWVrX3BhcmVudChXRUJLSVRfV0lER0VUX1ZJRVdfR0VUX0NMQVNTKHdpZGdldCkpOwor
ICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHBhcmVudENsYXNzKS0+Zm9jdXNfaW5fZXZlbnQo
d2lkZ2V0LCBldmVudCk7Cit9CisKK2dib29sZWFuIFdlYlZpZXc6OndlYlZpZXdGb2N1c091dEV2
ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEZvY3VzKiBldmVudCkKK3sKKyAgICBXZWJL
aXRXaWRnZXRWaWV3KiB3aWRnZXRWaWV3ID0gV0VCS0lUX1dJREdFVF9WSUVXKHdpZGdldCk7Cisg
ICAgZ3BvaW50ZXIgd2ViVmlld0luc3RhbmNlID0gd2lkZ2V0Vmlldy0+cHJpdi0+d2ViVmlld0lu
c3RhbmNlOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSByZWludGVycHJldF9jYXN0PFdlYlZpZXcq
Pih3ZWJWaWV3SW5zdGFuY2UpOworCisgICAgd2ViVmlldy0+b25LaWxsRm9jdXNFdmVudCh3aWRn
ZXQsIGZhbHNlKTsKKyAgICB3ZWJWaWV3LT5tX2lzUGFnZUFjdGl2ZSA9IGZhbHNlOyAKKyAgICB3
ZWJWaWV3LT51cGRhdGVBY3RpdmVTdGF0ZSgpOworICAgIGlmICh3aWRnZXRWaWV3LT5wcml2LT5p
bUNvbnRleHQpCisgICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291dCh3aWRnZXRWaWV3LT5w
cml2LT5pbUNvbnRleHQpOworICAgIAorICAgIEdPYmplY3RDbGFzcyogcGFyZW50Q2xhc3MgPSAo
R09iamVjdENsYXNzKilnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQoV0VCS0lUX1dJREdFVF9WSUVX
X0dFVF9DTEFTUyh3aWRnZXQpKTsKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyhwYXJlbnRD
bGFzcyktPmZvY3VzX291dF9ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworZ2Jvb2xlYW4gV2Vi
Vmlldzo6d2ViVmlld0tleVByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5
KiBldmVudCkKK3sKKyAgICBXZWJLaXRXaWRnZXRWaWV3KiB3aWRnZXRWaWV3ID0gV0VCS0lUX1dJ
REdFVF9WSUVXKHdpZGdldCk7CisgICAgZ3BvaW50ZXIgd2ViVmlld0luc3RhbmNlID0gd2lkZ2V0
Vmlldy0+cHJpdi0+d2ViVmlld0luc3RhbmNlOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSByZWlu
dGVycHJldF9jYXN0PFdlYlZpZXcqPih3ZWJWaWV3SW5zdGFuY2UpOworICAgIHdlYlZpZXctPm9u
S2V5RXZlbnQoZXZlbnQpOworICAgIAorICAgIEdPYmplY3RDbGFzcyogcGFyZW50Q2xhc3MgPSAo
R09iamVjdENsYXNzKilnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQoV0VCS0lUX1dJREdFVF9WSUVX
X0dFVF9DTEFTUyh3aWRnZXQpKTsKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyhwYXJlbnRD
bGFzcyktPmtleV9wcmVzc19ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworZ2Jvb2xlYW4gV2Vi
Vmlldzo6d2ViVmlld0tleVJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRL
ZXkqIGV2ZW50KQoreworICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdldFZpZXcgPSBXRUJLSVRf
V0lER0VUX1ZJRVcod2lkZ2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3SW5zdGFuY2UgPSB3aWRn
ZXRWaWV3LT5wcml2LT53ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7CisKKyAgICBpZiAoZ3Rr
X2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKHdpZGdldFZpZXctPnByaXYtPmltQ29udGV4dCwg
ZXZlbnQpKQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB3ZWJWaWV3LT5vbktleUV2ZW50KGV2
ZW50KTsKKworICAgIEdPYmplY3RDbGFzcyogcGFyZW50Q2xhc3MgPSAoR09iamVjdENsYXNzKiln
X3R5cGVfY2xhc3NfcGVla19wYXJlbnQoV0VCS0lUX1dJREdFVF9WSUVXX0dFVF9DTEFTUyh3aWRn
ZXQpKTsKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyhwYXJlbnRDbGFzcyktPmtleV9yZWxl
YXNlX2V2ZW50KHdpZGdldCwgZXZlbnQpOworfQorCitnYm9vbGVhbiBXZWJWaWV3Ojp3ZWJWaWV3
QnV0dG9uUHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGNvbnN0
IGV2ZW50KQoreworICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdldFZpZXcgPSBXRUJLSVRfV0lE
R0VUX1ZJRVcod2lkZ2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3SW5zdGFuY2UgPSB3aWRnZXRW
aWV3LT5wcml2LT53ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7CisgICAgZ3RrX3dpZGdldF9n
cmFiX2ZvY3VzKHdpZGdldCk7CisgICAgd2ViVmlldy0+b25Nb3VzZUV2ZW50KChHZGtFdmVudEFu
eSAqKWV2ZW50KTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworZ2Jvb2xlYW4gV2ViVmlldzo6
d2ViVmlld0J1dHRvblJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0
b24qIGV2ZW50KQoreworICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdldFZpZXcgPSBXRUJLSVRf
V0lER0VUX1ZJRVcod2lkZ2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3SW5zdGFuY2UgPSB3aWRn
ZXRWaWV3LT5wcml2LT53ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7CisgICAgZ3RrX3dpZGdl
dF9ncmFiX2ZvY3VzKHdpZGdldCk7CisgICAgd2ViVmlldy0+b25Nb3VzZUV2ZW50KChHZGtFdmVu
dEFueSAqKWV2ZW50KTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworZ2Jvb2xlYW4gV2ViVmll
dzo6d2ViVmlld1Njcm9sbEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFNjcm9sbCog
ZXZlbnQpCit7CisgICAgV2ViS2l0V2lkZ2V0Vmlldyogd2lkZ2V0VmlldyA9IFdFQktJVF9XSURH
RVRfVklFVyh3aWRnZXQpOworICAgIGdwb2ludGVyIHdlYlZpZXdJbnN0YW5jZSA9IHdpZGdldFZp
ZXctPnByaXYtPndlYlZpZXdJbnN0YW5jZTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gcmVpbnRl
cnByZXRfY2FzdDxXZWJWaWV3Kj4od2ViVmlld0luc3RhbmNlKTsKKyAgICB3ZWJWaWV3LT5vbldo
ZWVsRXZlbnQoZXZlbnQpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitnYm9vbGVhbiBXZWJW
aWV3Ojp3ZWJWaWV3TW90aW9uTm90aWZ5RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
TW90aW9uKiBldmVudCkKK3sKKyAgICBXZWJLaXRXaWRnZXRWaWV3KiB3aWRnZXRWaWV3ID0gV0VC
S0lUX1dJREdFVF9WSUVXKHdpZGdldCk7CisgICAgZ3BvaW50ZXIgd2ViVmlld0luc3RhbmNlID0g
d2lkZ2V0Vmlldy0+cHJpdi0+d2ViVmlld0luc3RhbmNlOworICAgIFdlYlZpZXcqIHdlYlZpZXcg
PSByZWludGVycHJldF9jYXN0PFdlYlZpZXcqPih3ZWJWaWV3SW5zdGFuY2UpOworICAgIHdlYlZp
ZXctPm9uTW91c2VFdmVudCgoR2RrRXZlbnRBbnkgKilldmVudCk7CisKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK1dlYlZpZXc6OldlYlZpZXcoR2RrUmVjdGFuZ2xlIHJlY3QsIFdlYlBhZ2VOYW1l
c3BhY2UqIHBhZ2VOYW1lc3BhY2UsIEd0a1dpZGdldCogIGhvc3RXaW5kb3cpCisgICAgOiBtX3Jl
Y3QocmVjdCkKKyAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQorICAgICwgbV9pc1BhZ2VB
Y3RpdmUodHJ1ZSkKK3sKKyAgICBtX3BhZ2UgPSBwYWdlTmFtZXNwYWNlLT5jcmVhdGVXZWJQYWdl
KCk7CisgICAgbV9wYWdlLT5zZXRQYWdlQ2xpZW50KHRoaXMpOworICAgIG1fcGFnZS0+c2V0RHJh
d2luZ0FyZWEoQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZSh0aGlzKSk7Cisg
ICAgbV9wYWdlLT5pbml0aWFsaXplV2ViUGFnZShJbnRSZWN0KHJlY3QpLnNpemUoKSk7CisKKyAg
ICBtX3dpbmRvdyA9IChHdGtXaWRnZXQqKWdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XSURHRVRf
VklFVywgTlVMTCk7IAorICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAgV2ViS2l0V2lkZ2V0Vmll
dyogd2ViVmlldyA9IFdFQktJVF9XSURHRVRfVklFVyhtX3dpbmRvdyk7CisgICAgd2ViVmlldy0+
cHJpdi0+d2ViVmlld0luc3RhbmNlID0gcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4odGhpcyk7
Cit9CisKK1dlYlZpZXc6On5XZWJWaWV3KCkKK3sKK30KKwordm9pZCBXZWJWaWV3OjpzZXRIb3N0
V2luZG93KEd0a1dpZGdldCogaG9zdFdpbmRvdykKK3sKKyAgICBtX2hvc3RXaW5kb3cgPSBob3N0
V2luZG93OworfQorCit2b2lkIFdlYlZpZXc6Om9uUGFpbnRFdmVudChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrUmVjdGFuZ2xlIHJlY3QpCit7CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSB3aWRnZXQt
PndpbmRvdzsKKyAgICBBU1NFUlQod2luZG93KTsKKyAgICBtX3BhZ2UtPmRyYXdpbmdBcmVhKCkt
PnBhaW50KEludFJlY3QocmVjdCksIHdpbmRvdyk7Cit9CisKK3ZvaWQgV2ViVmlldzo6b25TaXpl
RXZlbnQoR3RrV2lkZ2V0KiwgSW50U2l6ZSBzaXplKQoreworICAgIG1fcGFnZS0+ZHJhd2luZ0Fy
ZWEoKS0+c2V0U2l6ZShzaXplKTsKK30KKwordm9pZCBXZWJWaWV3OjpvblNldEZvY3VzRXZlbnQo
R3RrV2lkZ2V0KiwgYm9vbCkKK3sKKyAgICBtX3BhZ2UtPnNldEZvY3VzZWQodHJ1ZSk7Cit9CisK
K3ZvaWQgV2ViVmlldzo6b25LaWxsRm9jdXNFdmVudChHdGtXaWRnZXQqLCBib29sKQoreworICAg
IG1fcGFnZS0+c2V0Rm9jdXNlZChmYWxzZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6b25LZXlFdmVu
dChHZGtFdmVudEtleSAqZXZlbnQpCit7CisgICAgbV9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50
KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQpKTsKK30KKwordm9pZCBXZWJWaWV3Ojpvbk1v
dXNlRXZlbnQoR2RrRXZlbnRBbnkgKmV2ZW50KQoreworICAgIFdlYk1vdXNlRXZlbnQgbW91c2VF
dmVudCA9IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChldmVudCk7CisgICAg
bV9wYWdlLT5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOworfQorCit2b2lkIFdlYlZpZXc6
Om9uV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCAqZXZlbnQpCit7CisgICAgV2ViV2hlZWxFdmVu
dCB3aGVlbEV2ZW50ID0gV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGV2ZW50
KTsKKyAgICBtX3BhZ2UtPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7Cit9CisKK2Jvb2wg
V2ViVmlldzo6aXNBY3RpdmUoKQoreworICAgIHJldHVybiBtX2lzUGFnZUFjdGl2ZTsKK30KKwor
dm9pZCBXZWJWaWV3Ojp1cGRhdGVBY3RpdmVTdGF0ZSgpCit7CisgICAgbV9wYWdlLT5zZXRBY3Rp
dmUoaXNBY3RpdmUoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xvc2UoKQoreworICAgIG1fcGFn
ZS0+Y2xvc2UoKTsKK30KKworLy8gUGFnZUNsaWVudCdzIHB1cmUgdmlydHVhbCBmdW5jdGlvbnMK
K3ZvaWQgV2ViVmlldzo6cHJvY2Vzc0RpZEV4aXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgV2ViVmlldzo6cHJvY2Vzc0RpZFJldml2ZSgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp0YWtlRm9jdXMoYm9vbCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNldFZpZXdwb3J0QXJndW1lbnRzKGNvbnN0IFdlYkNv
cmU6OlZpZXdwb3J0QXJndW1lbnRzJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFu
ZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0RWRpdENvbW1hbmRTdGF0ZShj
b25zdCBTdHJpbmcmLCBib29sLCBpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
RmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiByZWN0OworfQorCitG
bG9hdFJlY3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiByZWN0OworfQorCit2b2lk
IFdlYlZpZXc6OmRpZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZl
bnQmIGV2ZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8V2Vi
UG9wdXBNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0ZVBvcHVwTWVudVByb3h5KCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEZJWE1FOjpOZWVkIHRvIGltcGxlbWVudCBXZWJQb3B1
cE1lbnVQcm94eQorICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYlZpZXc6OnNldEZpbmRJbmRp
Y2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2
b2lkIFdlYlZpZXc6OnBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFnZURpZExlYXZlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMCkK
KysrIFdlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gNTE3
MTkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1v
dG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYlZpZXdJbnRlcm5hbF9oCisjZGVmaW5lIFdlYlZpZXdJbnRlcm5hbF9oCisKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0lER0VUX1ZJRVcgICAg
ICAgICAgICAod2Via2l0V2lkZ2V0Vmlld0dldFR5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dJREdF
VF9WSUVXKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9UWVBFX1dJREdFVF9WSUVXLCBXZWJLaXRXaWRnZXRWaWV3KSkKKyNkZWZpbmUgV0VC
S0lUX1dJREdFVF9WSUVXX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX1dJREdFVF9WSUVXLCBXZWJLaXRXaWRnZXRWaWV3Q2xhc3Mp
KQorI2RlZmluZSBXRUJLSVRfSVNfV0lER0VUX1ZJRVcob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0lER0VUX1ZJRVcpKQorI2RlZmlu
ZSBXRUJLSVRfSVNfV0lER0VUX1ZJRVdfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0lER0VUX1ZJRVcpKQorI2RlZmluZSBXRUJLSVRf
V0lER0VUX1ZJRVdfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX1RZUEVfV0lER0VUX1ZJRVcsIFdlYktpdFdpZGdldFZpZXdDbGFzcykpCisK
KyNkZWZpbmUgV0VCS0lUX1dJREdFVF9WSUVXX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0lER0VUX1ZJRVcsIFdlYktp
dFdpZGdldFZpZXdQcml2YXRlKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdpZGdldFZpZXcg
V2ViS2l0V2lkZ2V0VmlldzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXaWRnZXRWaWV3Q2xhc3Mg
V2ViS2l0V2lkZ2V0Vmlld0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdpZGdldFZpZXdQ
cml2YXRlIFdlYktpdFdpZGdldFZpZXdQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdpZGdldFZp
ZXdQcml2YXRlIHsKKyAgICBncG9pbnRlciB3ZWJWaWV3SW5zdGFuY2U7CisgICAgR3RrSU1Db250
ZXh0ICppbUNvbnRleHQ7CisgICAgZ2Jvb2xlYW4gZGlzcG9zZUhhc1J1bjsKK307CisKK3N0cnVj
dCBfV2ViS2l0V2lkZ2V0VmlldyB7CisgICAgR3RrQ29udGFpbmVyIHBhcmVudEluc3RhbmNlOwor
ICAgIC8vIHByaXZhdGUKKyAgICBXZWJLaXRXaWRnZXRWaWV3UHJpdmF0ZSAqcHJpdjsKK307CisK
K3N0cnVjdCBfV2ViS2l0V2lkZ2V0Vmlld0NsYXNzIHsKKyAgICBHdGtDb250YWluZXJDbGFzcyBw
YXJlbnRDbGFzczsKK307CisKK0dUeXBlCit3ZWJraXRXaWRnZXRWaWV3R2V0VHlwZSh2b2lkKTsK
KworCisjZW5kaWYgLy8gV2ViVmlld0ludGVybmFsX2ggCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJW
aWV3LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5oCShy
ZXZpc2lvbiA1MTcxOSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdfaAorI2RlZmluZSBXZWJWaWV3X2gKKworI2luY2x1
ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKworI2luY2x1ZGUg
PFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBEcmF3aW5nQXJlYVByb3h5OworY2xhc3MgV2ViUGFn
ZU5hbWVzcGFjZTsKKworY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXc+
LCBwdWJsaWMgUGFnZUNsaWVudCB7CitwdWJsaWM6CisgICAgfldlYlZpZXcoKTsKKyAgICBHZGtS
ZWN0YW5nbGUgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDt9CisgICAgc3RhdGljIGdib29s
ZWFuIHdlYlZpZXdPbkV4cG9zZShHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnRFeHBvc2UgKmV2
ZW50KTsKKyAgICBzdGF0aWMgdm9pZCB3ZWJWaWV3T25TaXplQWxsb2NhdGUoR3RrV2lkZ2V0KiB3
aWRnZXQsIEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24pOworICAgIHN0YXRpYyBnYm9vbGVhbiB3
ZWJWaWV3Rm9jdXNJbkV2ZW50KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudEZvY3VzICpldmVu
dCk7CisgICAgc3RhdGljIGdib29sZWFuIHdlYlZpZXdGb2N1c091dEV2ZW50KEd0a1dpZGdldCAq
d2lkZ2V0LCBHZGtFdmVudEZvY3VzICpldmVudCk7CisgICAgc3RhdGljIGdib29sZWFuIHdlYlZp
ZXdLZXlQcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpOwor
ICAgIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3S2V5UmVsZWFzZUV2ZW50KEd0a1dpZGdldCogd2lk
Z2V0LCBHZGtFdmVudEtleSogZXZlbnQpOworICAgIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3QnV0
dG9uUHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGNvbnN0IGV2
ZW50KTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0J1dHRvblJlbGVhc2VFdmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50KTsKKyAgICBzdGF0aWMgZ2Jvb2xl
YW4gd2ViVmlld1Njcm9sbEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFNjcm9sbCog
ZXZlbnQpOworICAgIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3TW90aW9uTm90aWZ5RXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCk7CisKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXZWJWaWV3PiBjcmVhdGUoR2RrUmVjdGFuZ2xlIHJlY3QsIFdlYlBhZ2VOYW1lc3Bh
Y2UqIHBhZ2VOYW1lc3BhY2UsIEd0a1dpZGdldCogaG9zdFdpbmRvdykKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlldyhyZWN0LCBwYWdlTmFtZXNwYWNlLCBob3N0V2lu
ZG93KSk7CisgICAgfQorCisgICAgR3RrV2lkZ2V0KiB3aW5kb3coKSBjb25zdCB7IHJldHVybiBt
X3dpbmRvdzsgfQorICAgIEd0a1dpZGdldCogaG9zdFdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1f
aG9zdFdpbmRvdzsgfQorICAgIHZvaWQgc2V0SG9zdFdpbmRvdyhHdGtXaWRnZXQqKTsKKworICAg
IFdlYlBhZ2VQcm94eSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIFdlYlZpZXcoR2RrUmVjdGFuZ2xlLCBXZWJQYWdlTmFtZXNwYWNlKiwgR3Rr
V2lkZ2V0KiBob3N0V2luZG93KTsKKworICAgIHZvaWQgb25QYWludEV2ZW50KEd0a1dpZGdldCos
IEdka1JlY3RhbmdsZSk7CisgICAgdm9pZCBvblNpemVFdmVudChHdGtXaWRnZXQqLCBXZWJDb3Jl
OjpJbnRTaXplKTsKKyAgICB2b2lkIG9uU2V0Rm9jdXNFdmVudChHdGtXaWRnZXQqLCBib29sKTsK
KyAgICB2b2lkIG9uS2lsbEZvY3VzRXZlbnQoR3RrV2lkZ2V0KiwgYm9vbCk7CisgICAgdm9pZCBv
bktleUV2ZW50KEdka0V2ZW50S2V5ICopOworICAgIHZvaWQgb25Nb3VzZUV2ZW50KEdka0V2ZW50
QW55ICopOworICAgIHZvaWQgb25XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsICpldmVudCk7CisK
KyAgICBib29sIGlzQWN0aXZlKCk7CisgICAgdm9pZCB1cGRhdGVBY3RpdmVTdGF0ZSgpOworICAg
IHZvaWQgY2xvc2UoKTsKKworICAgIC8vIFBhZ2VDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgcHJv
Y2Vzc0RpZEV4aXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZFJldml2ZSgpOworICAg
IHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pOworICAgIHZpcnR1YWwgdm9p
ZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7
CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmlld3Bv
cnRBcmd1bWVudHMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNz
UmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRFZGl0Q29tbWFuZFN0YXRlKGNvbnN0IFdURjo6U3RyaW5nJiwgYm9vbCwgaW50KTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252
ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIGRpZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVu
dVByb3h5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxG
aW5kSW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCk7CisjZW5kaWYKKworICAgIEdka1JlY3RhbmdsZSBtX3JlY3Q7CisgICAgR3RrV2lkZ2V0
KiBtX3dpbmRvdzsKKyAgICBHdGtXaWRnZXQqIG1faG9zdFdpbmRvdzsKKyAgICBib29sIG1faXNQ
YWdlQWN0aXZlOworICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG1fcGFnZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVmlld19oCkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgJKHJldmlzaW9u
IDUxNzA1KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJv
eHkuaAkocmV2aXNpb24gNTE3MTkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5
cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzI0LDggQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIERyYXdpbmdB
cmVhUHJveHlVcGRhdGVDaHVua19oCi0jZGVmaW5lIERyYXdpbmdBcmVhUHJveHlVcGRhdGVDaHVu
a19oCisjaWZuZGVmIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5X2gKKyNkZWZpbmUgQ2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlfaAogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94
eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgpAQCAtNTMsNiArNTQsOSBAQAogdHlw
ZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKICNlbGlmIFBMQVRGT1JNKFFUKQogdHlwZWRl
ZiBRR3JhcGhpY3NXS1ZpZXcgUGxhdGZvcm1XZWJWaWV3OworI2VsaWYgUExBVEZPUk0oR1RLKQor
Y2xhc3MgV2ViVmlldzsKK3R5cGVkZWYgV2ViVmlldyBQbGF0Zm9ybVdlYlZpZXc7CiAjZW5kaWYK
IAogY2xhc3MgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkgOiBwdWJsaWMgRHJhd2luZ0Fy
ZWFQcm94eSB7CkBAIC0xMDAsNiArMTA0LDkgQEAKICAgICBPd25QdHI8SEJJVE1BUD4gbV9iYWNr
aW5nU3RvcmVCaXRtYXA7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICBRSW1hZ2UgbV9iYWNraW5n
U3RvcmVJbWFnZTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAvLyBiYWNraW5nU3RvcmUKKyAg
ICBHZGtQaXhtYXAqIG1fYmFja2luZ1N0b3JlQml0bWFwOwogI2VuZGlmCiAKICAgICBQbGF0Zm9y
bVdlYlZpZXcqIG1fd2ViVmlldzsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0NodW5rZWRVcGRh
dGVEcmF3aW5nQXJlYVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9D
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5jcHAJKHJldmlzaW9uIDUxNzA1KQorKysgV2Vi
S2l0Mi9VSVByb2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuY3BwCShyZXZpc2lv
biA1MTcxOSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAx
MCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNiArNDgsOSBAQAogICAgICwgbV9pc1dhaXRp
bmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbihmYWxzZSkKICAgICAsIG1faXNWaXNpYmxlKHRy
dWUpCiAgICAgLCBtX2ZvcmNlUmVwYWludFdoZW5SZXN1bWluZ1BhaW50aW5nKGZhbHNlKQorI2lm
IFBMQVRGT1JNKEdUSykKKyAgICAsIG1fYmFja2luZ1N0b3JlQml0bWFwKDApCisjZW5kaWYKICAg
ICAsIG1fd2ViVmlldyh3ZWJWaWV3KQogewogfQpAQCAtMTMwLDYgKzEzNCw5IEBACiAgICAgICAg
IGRyYXdVcGRhdGVDaHVua0ludG9CYWNraW5nU3RvcmUodXBkYXRlQ2h1bmspOwogCiAgICAgV2Vi
UGFnZVByb3h5KiBwYWdlID0gdGhpcy0+cGFnZSgpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBw
YWdlLT5wcm9jZXNzKCktPnNlbmQoRHJhd2luZ0FyZWFNZXNzYWdlOjpEaWRTZXRTaXplRG9uZSwg
cGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKGluZm8oKS5pZCwgdXBkYXRlQ2h1bmstPnhJRCgp
KSk7CisjZW5kaWYKICAgICBwYWdlLT5wcm9jZXNzKCktPnJlc3BvbnNpdmVuZXNzVGltZXIoKS0+
c3RvcCgpOwogfQogCkBAIC0xNDYsNyArMTUzLDExIEBACiAgICAgfQogCiAgICAgV2ViUGFnZVBy
b3h5KiBwYWdlID0gdGhpcy0+cGFnZSgpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBwYWdlLT5w
cm9jZXNzKCktPnNlbmQoRHJhd2luZ0FyZWFNZXNzYWdlOjpEaWRVcGRhdGUsIHBhZ2UtPnBhZ2VJ
RCgpLCBDb3JlSVBDOjpJbihpbmZvKCkuaWQsIHVwZGF0ZUNodW5rLT54SUQoKSkpOworI2Vsc2UK
ICAgICBwYWdlLT5wcm9jZXNzKCktPnNlbmQoRHJhd2luZ0FyZWFNZXNzYWdlOjpEaWRVcGRhdGUs
IHBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihpbmZvKCkuaWQpKTsKKyNlbmRpZgogfQogCiB2
b2lkIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShDb3Jl
SVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eS5oCShyZXZpc2lvbiA1MTcwNSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHkuaAkocmV2aXNpb24gNTE3MTkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDYgKzI4LDkg
QEAKICNkZWZpbmUgRHJhd2luZ0FyZWFQcm94eV9oCiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYUJh
c2UuaCIKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2VuZGlmCiAK
ICNpZiBQTEFURk9STShRVCkKIGNsYXNzIFFQYWludGVyOwpAQCAtNDAsNiArNDQsOCBAQAogdHlw
ZWRlZiBIREMgUGxhdGZvcm1EcmF3aW5nQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKFFUKQogdHlw
ZWRlZiBRUGFpbnRlciogUGxhdGZvcm1EcmF3aW5nQ29udGV4dDsKKyNlbGlmIFBMQVRGT1JNKEdU
SykKK3R5cGVkZWYgR2RrV2luZG93KiBQbGF0Zm9ybURyYXdpbmdDb250ZXh0OwogI2VuZGlmCiAK
IGNsYXNzIERyYXdpbmdBcmVhUHJveHkgOiBwdWJsaWMgRHJhd2luZ0FyZWFCYXNlIHsKSW5kZXg6
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0NodW5rZWRVcGRhdGVEcmF3
aW5nQXJlYS5oCShyZXZpc2lvbiA1MTcwNSkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYS5oCShyZXZpc2lvbiA1MTcxOSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjksNiArMzAsOSBAQAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAi
UnVuTG9vcC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpZiBQTEFURk9STShH
VEspCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIApAQCAtNjksNiArNzMsMTMgQEAKICAgICB2b2lkIHBhaW50SW50b1VwZGF0ZUNodW5rKFVw
ZGF0ZUNodW5rKik7CiAKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZGlydHlSZWN0OworI2lmIFBM
QVRGT1JNKEdUSykKKyAgICAvLyB0byBkZXN0cm95IHRoZSBzaGFyZWQgbWVtb3J5IHRoYXQgaXMg
Y3JlYXRlZCBpbiBzZXRTaXplCisgICAgdm9pZCBkaWRTZXRTaXplRG9uZSh1aW50MzJfdCk7Cisg
ICAgdm9pZCBmcmVlQml0TWFwTWVtb3J5KHVpbnQzMl90KTsKKyAgICB2b2lkIGRpZFVwZGF0ZSh1
aW50MzJfdCk7CisgICAgSGFzaE1hcCA8dWludDMyX3QsIHZvaWQqPiB4SURNYXA7CisjZW5kaWYK
ICAgICBib29sIG1faXNXYWl0aW5nRm9yVXBkYXRlOwogICAgIGJvb2wgbV9wYWludGluZ0lzU3Vz
cGVuZGVkOwogICAgIFJ1bkxvb3A6OlRpbWVyPENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYT4gbV9k
aXNwbGF5VGltZXI7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhR3RrLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9DaHVua2VkVXBkYXRlRHJhd2lu
Z0FyZWFHdGsuY3BwCShyZXZpc2lvbiA1MTcxOSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0
aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJDaHVua2VkVXBkYXRlRHJhd2luZ0Fy
ZWEuaCIKKworI2luY2x1ZGUgIlVwZGF0ZUNodW5rLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0ludFJlY3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit2b2lkIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6cGFpbnRJbnRvVXBkYXRlQ2h1
bmsoVXBkYXRlQ2h1bmsqIHVwZGF0ZUNodW5rKQoreworICAgIEFTU0VSVCh1cGRhdGVDaHVuay0+
aXNFbXB0eSgpKTsKKyAgICAgCisgICAgR2RrUGl4bWFwKiBwaXhtYXAgPSB1cGRhdGVDaHVuay0+
bWVtb3J5KCk7CisgICAgY2Fpcm9fdCogY3IgPSBnZGtfY2Fpcm9fY3JlYXRlKHBpeG1hcCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0IGdjKGNyKTsKKyAgICBnYy5zYXZlKCk7CisgICAgSW50UmVjdCBy
ZWN0ID0gdXBkYXRlQ2h1bmstPnJlY3QoKTsKKyAgICBnYy50cmFuc2xhdGUoLXJlY3QueCgpLCAt
cmVjdC55KCkpOworICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ2MsIHVwZGF0ZUNodW5rLT5yZWN0
KCkpOworICAgIGdjLnJlc3RvcmUoKTsKKyAgICBjYWlyb19kZXN0cm95KGNyKTsKKyAgICBnZGtf
ZGlzcGxheV9zeW5jKGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCkpOworfQorCit2b2lkIENodW5r
ZWRVcGRhdGVEcmF3aW5nQXJlYTo6ZnJlZUJpdE1hcE1lbW9yeSh1aW50MzJfdCB4aWQpCit7Cisg
ICAgR2RrUGl4bWFwKiBwaXhtYXAgPSAoR2RrUGl4bWFwKil4SURNYXAuZ2V0KHhpZCk7CisgICAg
QVNTRVJUKHBpeG1hcCk7CisgICAgZ19vYmplY3RfdW5yZWYocGl4bWFwKTsKKyAgICB4SURNYXAu
cmVtb3ZlKHhpZCk7Cit9CisKK3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhOjpkaWRVcGRh
dGUodWludDMyX3QgeElEKQoreworICAgIG1faXNXYWl0aW5nRm9yVXBkYXRlID0gZmFsc2U7Cisg
ICAgZnJlZUJpdE1hcE1lbW9yeSh4SUQpOworICAgIC8vIERpc3BsYXkgaWYgbmVlZGVkLgorICAg
IGRpc3BsYXkoKTsKK30KKwordm9pZCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OmRpZFNldFNp
emVEb25lKHVpbnQzMl90IHhJRCkKK3sKKyAgICBmcmVlQml0TWFwTWVtb3J5KHhJRCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWEuY3BwCShyZXZpc2lvbiA1MTcw
NSkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YS5jcHAJKHJldmlzaW9uIDUxNzE5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29w
eXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Niw2ICs5Nyw5IEBACiAg
ICAgLy8gQ3JlYXRlIGEgbmV3IFVwZGF0ZUNodW5rIGFuZCBwYWludCBpbnRvIGl0LgogICAgIFVw
ZGF0ZUNodW5rIHVwZGF0ZUNodW5rKGRpcnR5UmVjdCk7CiAgICAgcGFpbnRJbnRvVXBkYXRlQ2h1
bmsoJnVwZGF0ZUNodW5rKTsKKyNpZiBQTEFURk9STShHVEspCisgICAgeElETWFwLnNldCh1cGRh
dGVDaHVuay54SUQoKSwgdXBkYXRlQ2h1bmsubWVtb3J5KCkpOworI2VuZGlmCiAKICAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoRHJhd2luZ0FyZWFQcm94eU1lc3Nh
Z2U6OlVwZGF0ZSwgbV93ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4odXBkYXRlQ2h1bmsp
KTsKIApAQCAtMTQzLDYgKzE0Nyw5IEBACiAgICAgLy8gQ3JlYXRlIGEgbmV3IFVwZGF0ZUNodW5r
IGFuZCBwYWludCBpbnRvIGl0LgogICAgIFVwZGF0ZUNodW5rIHVwZGF0ZUNodW5rKEludFJlY3Qo
MCwgMCwgdmlld1NpemUud2lkdGgoKSwgdmlld1NpemUuaGVpZ2h0KCkpKTsKICAgICBwYWludElu
dG9VcGRhdGVDaHVuaygmdXBkYXRlQ2h1bmspOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICB4SURN
YXAuc2V0KHVwZGF0ZUNodW5rLnhJRCgpLCB1cGRhdGVDaHVuay5tZW1vcnkoKSk7CisjZW5kaWYK
IAogICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKIApAQCAtMjEyLDEwICsyMTksMjcgQEAKICAg
ICAgICAgICAgIHJlc3VtZVBhaW50aW5nKGZvcmNlUmVwYWludCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBjYXNlIERyYXdpbmdBcmVhTWVzc2FnZTo6RGlkVXBkYXRl
OgorCisgICAgICAgIGNhc2UgRHJhd2luZ0FyZWFNZXNzYWdlOjpEaWRVcGRhdGU6IHsKKyNpZiBQ
TEFURk9STShHVEspCisgICAgICAgICAgICB1aW50MzJfdCB4aWQ7CisgICAgICAgICAgICBpZiAo
IWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dCh4aWQpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBkaWRVcGRhdGUoeGlkKTsKKyNlbHNlCiAgICAgICAgICAgICBk
aWRVcGRhdGUoKTsKKyNlbmRpZgogICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgfQorI2lm
IFBMQVRGT1JNKEdUSykKKyAgICAgICAgY2FzZSBEcmF3aW5nQXJlYU1lc3NhZ2U6OkRpZFNldFNp
emVEb25lOiB7CisgICAgICAgICAgICB1aW50MzJfdCB4aWQ7CisgICAgICAgICAgICBpZiAoIWFy
Z3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dCh4aWQpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBkaWRTZXRTaXplRG9uZSh4aWQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72683</attachid>
            <date>2010-11-02 09:42:52 -0700</date>
            <delta_ts>2011-01-07 07:21:02 -0800</delta_ts>
            <desc>Changes to WKAPI interfaces for GTK port</desc>
            <filename>WKBase WKAPICast WKView Implementation.patch</filename>
            <type>text/plain</type>
            <size>11649</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTcwNSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTcxOSkK
QEAgLTEsMyArMSwzMDMgQEAKKzIwMTAtMTAtMjkgIENoYW5kcmEgVmFsbGFsYSAgPGNoYW5kcmEu
dmFsbGFsYUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50YXRpb24gb2YgV2ViS2l0MiBBUEkgc2V0IGFu
ZCBjaGFuZ2VzIHRvIFdLQVBJIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MDkKKworICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0Jhc2Uu
aDogSW5jbHVkZWQgV0tCYXNlR3RrLmggaW4gdGhpcyBmaWxlLgorICAgICAgICAqIFNoYXJlZC9B
UEkvYy9ndGs6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9ndGsvV0tCYXNlR3RrLmg6
IEFkZGVkLiBEZWNsYXJhdGlvbiBvZiBXS1ZpZXdSZWYgZm9yIEdUSyBwb3J0LgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaDogSW5jbHVkZWQgV0tBUElDYXN0R3RrLmggaW4g
dGhpcyBmaWxlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9ndGs6IEFkZGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9ndGsvV0tBUElDYXN0R3RrLmg6IEFkZGVkLiBUeXBlIGRlZmlu
aXRpb24gdGVtcGxhdGUgZm9yIFdLVmlld1JlZiB0byBXZWJWaWV3IGFuZCB2aWNlLXZlcnNhLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcDogQWRkZWQuIEltcGxlbWVu
dGF0aW9uIG9mIFdLVmlldyBBUEkgaW50ZXJmYWNlLgorICAgICAgICAoV0tWaWV3Q3JlYXRlKToK
KyAgICAgICAgKFdLVmlld0dldFdpbmRvdyk6CisgICAgICAgIChXS1ZpZXdHZXRIb3N0V2luZG93
KToKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAoV0tWaWV3U2V0SG9zdFdpbmRv
dyk6CisgICAgICAgIChXS1VSTENyZWF0ZVdpdGhVUkwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9ndGsvV0tWaWV3Lmg6IEFkZGVkLiBEZWNsYXJhdGlvbiBvZiBXS1ZpZXcgQVBJIGludGVy
ZmFjZS4KKwogMjAxMC0xMC0yNyAgS2ltbW8gS2lubnVuZW4gIDxraW1tby50Lmtpbm51bmVuQG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpJbmRleDogV2Vi
S2l0Mi9TaGFyZWQvQVBJL2MvZ3RrL1dLQmFzZUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
U2hhcmVkL0FQSS9jL2d0ay9XS0Jhc2VHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hh
cmVkL0FQSS9jL2d0ay9XS0Jhc2VHdGsuaAkocmV2aXNpb24gNTE3MTkpCkBAIC0wLDAgKzEsMzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdLQmFzZUd0a19o
CisjZGVmaW5lIFdLQmFzZUd0a19oCisKKyNpZm5kZWYgV0tCYXNlX2gKKyNlcnJvciAiUGxlYXNl
ICNpbmNsdWRlIFwiV0tCYXNlLmhcIiBpbnN0ZWFkIG9mIHRoaXMgZmlsZSBkaXJlY3RseS4iCisj
ZW5kaWYKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tWaWV3KiBXS1ZpZXdSZWY7CisK
KyNlbmRpZiAvKiBXS0Jhc2VHdGtfaCAqLwpJbmRleDogV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tC
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tCYXNlLmgJKHJldmlz
aW9uIDUxNzA1KQorKysgV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tCYXNlLmgJKHJldmlzaW9uIDUx
NzE5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1v
dG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMywxMCBAQAogI2luY2x1ZGUgPFdlYktpdDIv
V0tCYXNlV2luLmg+CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQlVJTERJTkdfR1RLX18pCisjaW5j
bHVkZSA8V2ViS2l0Mi9XS0Jhc2VHdGsuaD4KKyNlbmRpZgorCiAvKiBXZWJLaXQyIHNoYXJlZCB0
eXBlcyAqLwogCiB0eXBlZGVmIHVpbnQzMl90IFdLVHlwZUlEOwpJbmRleDogV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZ3RrL1dLQVBJQ2FzdEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2d0ay9XS0FQSUNhc3RHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2d0ay9XS0FQSUNhc3RHdGsuaAkocmV2aXNpb24gNTE3MTkpCkBAIC0w
LDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdL
QVBJQ2FzdEd0a19oCisjZGVmaW5lIFdLQVBJQ2FzdEd0a19oCisKKyNpZm5kZWYgV0tBUElDYXN0
X2gKKyNlcnJvciAiUGxlYXNlICNpbmNsdWRlIFwiV0tBUElDYXN0LmhcIiBpbnN0ZWFkIG9mIHRo
aXMgZmlsZSBkaXJlY3RseS4iCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlZpZXc7CisKK1dLX0FERF9BUElfTUFQUElORyhXS1ZpZXdSZWYsIFdlYlZpZXcpCisKK30K
KworI2VuZGlmIC8vIFdLQVBJQ2FzdEd0a19oCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9ndGsvV0tWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3Rr
L1dLVmlldy5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dL
Vmlldy5oCShyZXZpc2lvbiA1MTcxOSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0tWaWV3X2gKKyNkZWZpbmUgV0tWaWV3X2gKKwor
I2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCisjaWZk
ZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dLX0VYUE9SVCBXS1ZpZXdS
ZWYgV0tWaWV3Q3JlYXRlKEdka1JlY3RhbmdsZSByZWN0LCBXS1BhZ2VOYW1lc3BhY2VSZWYgcGFn
ZU5hbWVzcGFjZSwgR3RrV2lkZ2V0ICogaG9zdFdpbmRvdyk7CisKK1dLX0VYUE9SVCBHdGtXaWRn
ZXQqIFdLVmlld0dldFdpbmRvdyhXS1ZpZXdSZWYgdmlldyk7CitXS19FWFBPUlQgR3RrV2lkZ2V0
KiBXS1ZpZXdHZXRIb3N0V2luZG93KFdLVmlld1JlZiB2aWV3KTsKKworV0tfRVhQT1JUIFdLUGFn
ZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3KTsKKworV0tfRVhQT1JUIHZvaWQgV0tW
aWV3U2V0SG9zdFdpbmRvdyhXS1ZpZXdSZWYgdmlldywgR3RrV2lkZ2V0KiBob3N0V2luZG93KTsK
KworV0tfRVhQT1JUIFdLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0aFVSTChjb25zdCBjaGFyKik7Cisj
aWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogV0tWaWV3X2ggKi8KSW5k
ZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5jcHAJKHJldmlzaW9uIDUxNzE5KQpA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9s
YSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgIldLVmlldy5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJX
S0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShHZGtS
ZWN0YW5nbGUgcmVjdCwgV0tQYWdlTmFtZXNwYWNlUmVmIHBhZ2VOYW1lc3BhY2VSZWYsIEd0a1dp
ZGdldCogaG9zdFdpbmRvdykKK3sKKyAgICBSZWZQdHI8V2ViVmlldz4gdmlldyA9IFdlYlZpZXc6
OmNyZWF0ZShyZWN0LCB0b0ltcGwocGFnZU5hbWVzcGFjZVJlZiksIGhvc3RXaW5kb3cpOworICAg
IHJldHVybiB0b0FQSSh2aWV3LnJlbGVhc2UoKS5yZWxlYXNlUmVmKCkpOworfQorCitHdGtXaWRn
ZXQqIFdLVmlld0dldFdpbmRvdyhXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9J
bXBsKHZpZXdSZWYpLT53aW5kb3coKTsKK30KKworR3RrV2lkZ2V0KiBXS1ZpZXdHZXRIb3N0V2lu
ZG93KFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPmhv
c3RXaW5kb3coKTsKK30KKworV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXdS
ZWYpCit7CisgICAgcmV0dXJuIHRvQVBJKHRvSW1wbCh2aWV3UmVmKS0+cGFnZSgpKTsKK30KKwor
dm9pZCBXS1ZpZXdTZXRIb3N0V2luZG93KFdLVmlld1JlZiB2aWV3UmVmLCBHdGtXaWRnZXQqIGhv
c3RXaW5kb3cpCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRIb3N0V2luZG93KGhvc3RXaW5k
b3cpOworfQorCitXS1VSTFJlZiBXS1VSTENyZWF0ZVdpdGhVUkwoY29uc3QgY2hhciogdXJsKQor
eworICAgIFN0cmluZyB1cmxTdHJpbmcodXJsKTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gdXJs
U3RyaW5nSW1wbCA9IHVybFN0cmluZy5pbXBsKCk7CisgICAgcmV0dXJuIHRvVVJMUmVmKHVybFN0
cmluZ0ltcGwucmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7Cit9CkluZGV4OiBXZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS0FQSUNhc3QuaAkocmV2aXNpb24gNTE3MDUpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS0FQSUNhc3QuaAkocmV2aXNpb24gNTE3MTkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQ
b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MSw0
ICsxNTIsNyBAQAogI2luY2x1ZGUgIldLQVBJQ2FzdFdpbi5oIgogI2VuZGlmCiAKKyNpZiBkZWZp
bmVkKEJVSUxESU5HX0dUS19fKQorI2luY2x1ZGUgIldLQVBJQ2FzdEd0ay5oIgorI2VuZGlmCiAj
ZW5kaWYgLy8gV0tBUElDYXN0X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78232</attachid>
            <date>2011-01-07 07:19:05 -0800</date>
            <delta_ts>2011-02-09 06:30:15 -0800</delta_ts>
            <desc>UpdateChunk, ChunkedUpdateDrawingArea implementation for GTK port</desc>
            <filename>48509.0.0.patch.complete</filename>
            <type>text/plain</type>
            <size>23379</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTI0MikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTEtMDEtMDcgQ2hhbmRyYSBWYWxsYWxhICA8Y2hhbmRyYS52YWxs
YWxhQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbR1RLXSBJbXBsZW1lbnRhdGlvbiBvZiBVcGRhdGVDaHVuaywgQ2h1bmtlZFVw
ZGF0ZURyYXdpbmdBcmVhL1Byb3h5IGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTA5CisKKyAgICAgICAgKiBTaGFyZWQvQ29yZUlQQ1N1
cHBvcnQvRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMuaDoKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1Vw
ZGF0ZUNodW5rLmNwcDogQWRkZWQuIFdlYlByb2Nlc3MgdXNlcyBnZGtfcGl4bWFwX25ldyB0byBj
cmVhdGUgYW5kIHBhaW50IGEgY2h1bmsuIFVJUHJvY2VzcyB1c2VzIGdka19waXhtYXBfZm9yZWln
bl9uZXcgdG8gb2J0YWluIHJlZmVyZW5jZSB0byB0aGUgcGFpbnRlZCBjaHVuay4KKyAgICAgICAg
KFdlYktpdDo6VXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5rKToKKyAgICAgICAgKFdlYktpdDo6VXBk
YXRlQ2h1bms6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9ndGsvVXBkYXRlQ2h1bmsuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlVwZGF0ZUNodW5rOjpyZWN0KToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6
Om1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjp4SUQpOgorICAgICAgICAo
V2ViS2l0OjpVcGRhdGVDaHVuazo6aXNFbXB0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0NodW5r
ZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVw
ZGF0ZURyYXdpbmdBcmVhUHJveHk6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmRpZFNldFNpemUp
OiBTZW5kIGEgJ0RpZFNldFNpemVEb25lJyBtZXNzYWdlIHRvIFdlYlByb2Nlc3MgdG8gZGVsZXRl
IHRoZSBwaXhtYXAgY3JlYXRlZCB0aHJvdWdoIGEgU2V0U2l6ZQorICAgICAgICAoV2ViS2l0OjpD
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlKTogQWRkIGFuIGFkZGl0aW9uYWwg
cGFyYW1ldGVyIFhJRCB3aGlsZSBzZW5kaW5nIG1lc3NhZ2Ugd2hpY2ggdGhlIHdlYiBwcm9jZXNz
IHVzZXMgdG8gZGVsZXRlIHRoZUdka1BpeG1hcAorICAgICAgICAqIFVJUHJvY2Vzcy9DaHVua2Vk
VXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2d0azogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHA6IEFkZGVkLiBD
cmVhdGVzIGFuZCBtYWludGFpbnMgYSBiYWNraW5nIHN0b3JlIHVzaW5nIEdka1BpeG1hcAorICAg
ICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6cGFnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjplbnN1cmVCYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6
aW52YWxpZGF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRVcGRhdGVE
cmF3aW5nQXJlYVByb3h5OjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKFdlYktpdDo6Q2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmRyYXdVcGRhdGVDaHVua0ludG9CYWNraW5nU3RvcmUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWEu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OmRpc3BsYXkp
OiBTdG9yZSB0aGUgWElEIG9mIGEgR2RrUGl4bWFwIGZvciBkZWxldGlvbiBpbiBmdXR1cmUoYWZ0
ZXIgVUkgcHJvY2VzcyBzZW5kcyBhIGRpZFVwZGF0ZSBjb25maXJtYXRpb24pLgorICAgICAgICAo
V2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OnNldFNpemUpOiBTYW1lIGFzIGFib3Zl
LgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWE6OmRpZFJlY2VpdmVN
ZXNzYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ2h1bmtlZFVwZGF0ZURyYXdp
bmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0azogQWRkZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFHdGsu
Y3BwOiBBZGRlZC4gSW1wbGVtZW50cyBmdW5jdGlvbmFsaXR5IHRvIHBhaW50IGludG8gYW4gdXBk
YXRlIGNodW5rIGFuZCBmcmVlIGl0LgorICAgICAgICAoV2ViS2l0OjpDaHVua2VkVXBkYXRlRHJh
d2luZ0FyZWE6OnBhaW50SW50b1VwZGF0ZUNodW5rKToKKyAgICAgICAgKFdlYktpdDo6Q2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhOjpmcmVlQml0TWFwTWVtb3J5KTogVW5yZWYgdGhlIHN0b3JlZCBE
cmF3YWJsZSBNZW1vcnkKKyAgICAgICAgKFdlYktpdDo6Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVh
OjpkaWRVcGRhdGUpOiBEZWxldGUgdGhlIHN0b3JlZCBHZGtQaXhtYXAuCisgICAgICAgIChXZWJL
aXQ6OkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYTo6ZGlkU2V0U2l6ZURvbmUpOiBEZWxldGUgdGhl
IHN0b3JlZCBHZGtQaXhtYXAuCisKIDIwMTEtMDEtMDYgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEFsd2F5cyBzaG93IHRoZSBhcnJvdyBjdXJzb3Igd2hlbiB0aGUg
d2ViIHByb2Nlc3MgaGFzIGNyYXNoZWQKSW5kZXg6IFdlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVD
aHVuay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5oCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0ZUNodW5rLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1v
dG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFVwZGF0ZUNodW5rX2gKKyNkZWZpbmUgVXBkYXRlQ2h1bmtfaAorCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKworbmFtZXNwYWNlIENvcmVJUEMgewor
Y2xhc3MgQXJndW1lbnRFbmNvZGVyOworY2xhc3MgQXJndW1lbnREZWNvZGVyOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVXBkYXRlQ2h1bmsgeworcHVibGljOgorICAgIFVwZGF0
ZUNodW5rKCk7CisgICAgVXBkYXRlQ2h1bmsoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAg
IFVwZGF0ZUNodW5rKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBHZGtQaXhtYXAqKTsKKworICAg
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
KyAgICBHZGtQaXhtYXAqIG1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwU2hhcmVkTWVt
b3J5OyB9CisgICAgdWludDMyX3QgeElEKCkgeyByZXR1cm4gbV94SUQ7IH0KKyAgICBib29sIGlz
RW1wdHkoKSB7IHJldHVybiBtX3JlY3QuaXNFbXB0eSgpO30KKworICAgIHZvaWQgZW5jb2RlKENv
cmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBVcGRhdGVDaHVuayYpOworCitwcml2YXRlOgorICAg
IFdlYkNvcmU6OkludFJlY3QgbV9yZWN0OworICAgIEdka1BpeG1hcCogbV9iaXRtYXBTaGFyZWRN
ZW1vcnk7CisgICAgdWludDMyX3QgbV94SUQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFVwZGF0ZUNodW5rX2gKSW5kZXg6IFdlYktpdDIvU2hhcmVkL2d0ay9VcGRh
dGVDaHVuay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvZ3RrL1VwZGF0ZUNodW5r
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL2d0ay9VcGRhdGVDaHVuay5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj
KSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiVXBkYXRlQ2h1bmsuaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50RGVj
b2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgorI2lu
Y2x1ZGUgPGdkay9nZGt4Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworVXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5rKCkKKyAgICA6IG1fYml0bWFw
U2hhcmVkTWVtb3J5KDApCit7Cit9CisKK1VwZGF0ZUNodW5rOjpVcGRhdGVDaHVuayhjb25zdCBJ
bnRSZWN0JiByZWN0KQorICAgIDogbV9yZWN0KHJlY3QpCit7CisgICAgbV9iaXRtYXBTaGFyZWRN
ZW1vcnkgPSBnZGtfcGl4bWFwX25ldygwLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIGdk
a192aXN1YWxfZ2V0X2RlcHRoKGdka192aXN1YWxfZ2V0X3N5c3RlbSgpKSk7CisgICAgbV94SUQg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oR0RLX1BJWE1BUF9YSUQobV9iaXRtYXBTaGFyZWRNZW1v
cnkpKTsKK30KKworVXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5rKGNvbnN0IEludFJlY3QmIHJlY3Qs
IEdka1BpeG1hcCogYml0bWFwU2hhcmVkTWVtb3J5KQorICAgIDogbV9yZWN0KHJlY3QpCisgICAg
LCBtX2JpdG1hcFNoYXJlZE1lbW9yeShiaXRtYXBTaGFyZWRNZW1vcnkpCit7Cit9CisKK3ZvaWQg
VXBkYXRlQ2h1bms6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fcmVjdCk7CisgICAgZW5jb2Rlci0+ZW5jb2Rl
KHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3hJRCkpOworfQorCitib29sIFVwZGF0ZUNodW5rOjpk
ZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBVcGRhdGVDaHVuayYgdXBk
YXRlQ2h1bmspCit7CisgICAgSW50UmVjdCByZWN0OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KHJlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1cGRhdGVDaHVuay5tX3JlY3Qg
PSByZWN0OworICAgIHVpbnQzMl90IHBpeG1hcFNoYXJlZE1tZW1vcnk7CisgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUocGl4bWFwU2hhcmVkTW1lbW9yeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB1cGRhdGVDaHVuay5tX3hJRCA9IHBpeG1hcFNoYXJlZE1tZW1vcnk7CisgICAgdW5zaWdu
ZWQgbG9uZyB4UGl4bWFwU2hhcmVkTW1lbW9yeSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
KHBpeG1hcFNoYXJlZE1tZW1vcnkpOworICAgIHVwZGF0ZUNodW5rLm1fYml0bWFwU2hhcmVkTWVt
b3J5ID0gZ2RrX3BpeG1hcF9mb3JlaWduX25ldyh4UGl4bWFwU2hhcmVkTW1lbW9yeSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9T
aGFyZWQvQ29yZUlQQ1N1cHBvcnQvRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9EcmF3aW5nQXJlYU1lc3NhZ2VLaW5k
cy5oCShyZXZpc2lvbiA3NTA1NCkKKysrIFdlYktpdDIvU2hhcmVkL0NvcmVJUENTdXBwb3J0L0Ry
YXdpbmdBcmVhTWVzc2FnZUtpbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDYsNiArNDcsMTIgQEAKICAgICAvLyBpbmNvcnBvcmF0ZWQgaW50byB0aGUgYmFja2luZyBzdG9y
ZS4KICAgICBEaWRVcGRhdGUsCiAKKyAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgdGhlIHNpemUgb2Yg
dGhlIGRyYXdpbmcgYXJlYSBnZXQgdXBkYXRlZAorICAgIC8vIHVzZWQgaW4gb25seSBHVEsgdG8g
ZnJlZSB0aGUgbWVtb3J5IHdoaWNoIGlzIGFsbG9jYXRlZCBpbiBzZXRzaXplCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIERpZFNldFNpemVEb25lLAorI2VuZGlmCisKICNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkKICAgICAvLyBDYWxsZWQgdG8gcmVxdWVzdCBhIHRpbGUgdXBkYXRlLgog
ICAgIFJlcXVlc3RUaWxlVXBkYXRlLApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmgJKHJldmlzaW9uIDc1MDU0KQor
KysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAo
YykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMzAsOSBAQAogI2luY2x1ZGUg
IkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
SW50UG9pbnQuaD4KKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNjYsNiArNzAsMTMgQEAKICAgICB2
b2lkIHBhaW50SW50b1VwZGF0ZUNodW5rKFVwZGF0ZUNodW5rKik7CiAKICAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fZGlydHlSZWN0OworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAvLyB0byBkZXN0cm95
IHRoZSBzaGFyZWQgbWVtb3J5IHRoYXQgaXMgY3JlYXRlZCBpbiBzZXRTaXplCisgICAgdm9pZCBk
aWRTZXRTaXplRG9uZSh1aW50MzJfdCk7CisgICAgdm9pZCBmcmVlQml0TWFwTWVtb3J5KHVpbnQz
Ml90KTsKKyAgICB2b2lkIGRpZFVwZGF0ZSh1aW50MzJfdCk7CisgICAgSGFzaE1hcCA8dWludDMy
X3QsIHZvaWQqPiB4SURNYXA7CisjZW5kaWYKICAgICBib29sIG1faXNXYWl0aW5nRm9yVXBkYXRl
OwogICAgIGJvb2wgbV9wYWludGluZ0lzU3VzcGVuZGVkOwogICAgIFJ1bkxvb3A6OlRpbWVyPENo
dW5rZWRVcGRhdGVEcmF3aW5nQXJlYT4gbV9kaXNwbGF5VGltZXI7CkluZGV4OiBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhR3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvQ2h1bmtlZFVwZGF0ZURy
YXdpbmdBcmVhR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
IkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYS5oIgorCisjaW5jbHVkZSAiVXBkYXRlQ2h1bmsuaCIK
KyNpbmNsdWRlICJXZWJQYWdlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdB
cmVhOjpwYWludEludG9VcGRhdGVDaHVuayhVcGRhdGVDaHVuayogdXBkYXRlQ2h1bmspCit7Cisg
ICAgQVNTRVJUKHVwZGF0ZUNodW5rLT5pc0VtcHR5KCkpOworICAgICAKKyAgICBHZGtQaXhtYXAq
IHBpeG1hcCA9IHVwZGF0ZUNodW5rLT5tZW1vcnkoKTsKKyAgICBjYWlyb190KiBjciA9IGdka19j
YWlyb19jcmVhdGUocGl4bWFwKTsKKyAgICBHcmFwaGljc0NvbnRleHQgZ2MoY3IpOworICAgIGdj
LnNhdmUoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSB1cGRhdGVDaHVuay0+cmVjdCgpOworICAgIGdj
LnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CisgICAgbV93ZWJQYWdlLT5kcmF3UmVj
dChnYywgdXBkYXRlQ2h1bmstPnJlY3QoKSk7CisgICAgZ2MucmVzdG9yZSgpOworICAgIGNhaXJv
X2Rlc3Ryb3koY3IpOworICAgIGdka19kaXNwbGF5X3N5bmMoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1
bHQoKSk7Cit9CisKK3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhOjpmcmVlQml0TWFwTWVt
b3J5KHVpbnQzMl90IHhpZCkKK3sKKyAgICBHZGtQaXhtYXAqIHBpeG1hcCA9IChHZGtQaXhtYXAq
KXhJRE1hcC5nZXQoeGlkKTsKKyAgICBBU1NFUlQocGl4bWFwKTsKKyAgICBnX29iamVjdF91bnJl
ZihwaXhtYXApOworICAgIHhJRE1hcC5yZW1vdmUoeGlkKTsKK30KKwordm9pZCBDaHVua2VkVXBk
YXRlRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSh1aW50MzJfdCB4SUQpCit7CisgICAgbV9pc1dhaXRp
bmdGb3JVcGRhdGUgPSBmYWxzZTsKKyAgICBmcmVlQml0TWFwTWVtb3J5KHhJRCk7CisgICAgLy8g
RGlzcGxheSBpZiBuZWVkZWQuCisgICAgZGlzcGxheSgpOworfQorCit2b2lkIENodW5rZWRVcGRh
dGVEcmF3aW5nQXJlYTo6ZGlkU2V0U2l6ZURvbmUodWludDMyX3QgeElEKQoreworICAgIGZyZWVC
aXRNYXBNZW1vcnkoeElEKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0NodW5rZWRVcGRhdGVEcmF3aW5n
QXJlYS5jcHAJKHJldmlzaW9uIDc1MDU0KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04OCw2ICs4OSw5IEBACiAgICAgLy8gQ3JlYXRlIGEgbmV3IFVwZGF0ZUNodW5rIGFuZCBw
YWludCBpbnRvIGl0LgogICAgIFVwZGF0ZUNodW5rIHVwZGF0ZUNodW5rKGRpcnR5UmVjdCk7CiAg
ICAgcGFpbnRJbnRvVXBkYXRlQ2h1bmsoJnVwZGF0ZUNodW5rKTsKKyNpZiBQTEFURk9STShHVEsp
CisgICAgeElETWFwLnNldCh1cGRhdGVDaHVuay54SUQoKSwgdXBkYXRlQ2h1bmsubWVtb3J5KCkp
OworI2VuZGlmCiAKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQo
RHJhd2luZ0FyZWFQcm94eUxlZ2FjeU1lc3NhZ2U6OlVwZGF0ZSwgbV93ZWJQYWdlLT5wYWdlSUQo
KSwgQ29yZUlQQzo6SW4odXBkYXRlQ2h1bmspKTsKIApAQCAtMTM5LDYgKzE0Myw5IEBACiAgICAg
Ly8gQ3JlYXRlIGEgbmV3IFVwZGF0ZUNodW5rIGFuZCBwYWludCBpbnRvIGl0LgogICAgIFVwZGF0
ZUNodW5rIHVwZGF0ZUNodW5rKEludFJlY3QoMCwgMCwgdmlld1NpemUud2lkdGgoKSwgdmlld1Np
emUuaGVpZ2h0KCkpKTsKICAgICBwYWludEludG9VcGRhdGVDaHVuaygmdXBkYXRlQ2h1bmspOwor
I2lmIFBMQVRGT1JNKEdUSykKKyAgICB4SURNYXAuc2V0KHVwZGF0ZUNodW5rLnhJRCgpLCB1cGRh
dGVDaHVuay5tZW1vcnkoKSk7CisjZW5kaWYKIAogICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsK
IApAQCAtMjA4LDEwICsyMTUsMjYgQEAKICAgICAgICAgICAgIHJlc3VtZVBhaW50aW5nKGZvcmNl
UmVwYWludCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIERy
YXdpbmdBcmVhTGVnYWN5TWVzc2FnZTo6RGlkVXBkYXRlOgorICAgICAgICBjYXNlIERyYXdpbmdB
cmVhTGVnYWN5TWVzc2FnZTo6RGlkVXBkYXRlOiB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAg
ICAgICAgdWludDMyX3QgeGlkOworICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShD
b3JlSVBDOjpPdXQoeGlkKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ZGlkVXBkYXRlKHhpZCk7CisjZWxzZQogICAgICAgICAgICAgZGlkVXBkYXRlKCk7CisjZW5kaWYK
ICAgICAgICAgICAgIGJyZWFrOwotCisgICAgICAgIH0KKyNpZiBQTEFURk9STShHVEspCisgICAg
ICAgIGNhc2UgRHJhd2luZ0FyZWFMZWdhY3lNZXNzYWdlOjpEaWRTZXRTaXplRG9uZTogeworICAg
ICAgICAgICAgdWludDMyX3QgeGlkOworICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29k
ZShDb3JlSVBDOjpPdXQoeGlkKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgZGlkU2V0U2l6ZURvbmUoeGlkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisj
ZW5kaWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJv
eHlHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENv
cHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJv
eHkuaCIKKworI2luY2x1ZGUgIlVwZGF0ZUNodW5rLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1By
b3h5LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlBhZ2VQcm94eSogQ2h1bmtlZFVwZGF0ZURyYXdp
bmdBcmVhUHJveHk6OnBhZ2UoKQoreworICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsKK30K
Kwordm9pZCBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6ZW5zdXJlQmFja2luZ1N0b3Jl
KCkKK3sKKyAgICBpZiAobV9iYWNraW5nU3RvcmVCaXRtYXApCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fYmFja2luZ1N0b3JlQml0bWFwID0gZ2RrX3BpeG1hcF9uZXcobV93ZWJWaWV3LT53aW5k
b3coKS0+d2luZG93LCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCAtMSk7Cit9CisK
K3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmludmFsaWRhdGVCYWNraW5nU3Rv
cmUoKQoreworICAgIGlmIChtX2JhY2tpbmdTdG9yZUJpdG1hcCkgeworICAgICAgICBnX29iamVj
dF91bnJlZihtX2JhY2tpbmdTdG9yZUJpdG1hcCk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlQml0
bWFwID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6
OnBsYXRmb3JtUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgR2RrV2luZG93KiB3aW5kb3cpCit7
CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZUJpdG1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R2RrR0MqIGdjID0gZ2RrX2djX25ldyhtX2JhY2tpbmdTdG9yZUJpdG1hcCk7CisgICAgLy8gQml0
Qmx0IGZyb20gdGhlIGJhY2tpbmctc3RvcmUgdG8gdGhlIHdpbmRvdy4KKyAgICBnZGtfZHJhd19k
cmF3YWJsZSh3aW5kb3csIGdjLCBtX2JhY2tpbmdTdG9yZUJpdG1hcCwgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cisg
ICAgZ19vYmplY3RfdW5yZWYoZ2MpOworCit9CisKK3ZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdB
cmVhUHJveHk6OmRyYXdVcGRhdGVDaHVua0ludG9CYWNraW5nU3RvcmUoVXBkYXRlQ2h1bmsqIHVw
ZGF0ZUNodW5rKQoreworICAgIGVuc3VyZUJhY2tpbmdTdG9yZSgpOworICAgIEludFJlY3QgcmVj
dCA9IHVwZGF0ZUNodW5rLT5yZWN0KCk7CisgICAgaWYgKCF1cGRhdGVDaHVuay0+bWVtb3J5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEdka1JlY3RhbmdsZSBnZGtSZWN0ID0gcmVjdDsKKwor
ICAgIEdka0dDKiBnYyA9IGdka19nY19uZXcodXBkYXRlQ2h1bmstPm1lbW9yeSgpKTsKKyAgICBn
ZGtfZHJhd19kcmF3YWJsZShtX2JhY2tpbmdTdG9yZUJpdG1hcCwgZ2MsIHVwZGF0ZUNodW5rLT5t
ZW1vcnkoKSwgMCwgMCwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOworICAgIGdka19kaXNwbGF5X3N5bmMoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7
CisgICAgZ19vYmplY3RfdW5yZWYodXBkYXRlQ2h1bmstPm1lbW9yeSgpKTsKKworICAgIGdka193
aW5kb3dfaW52YWxpZGF0ZV9yZWN0KG1fd2ViVmlldy0+d2luZG93KCktPndpbmRvdywgJmdka1Jl
Y3QsIGZhbHNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0IApJbmRleDogV2ViS2l0Mi9V
SVByb2Nlc3MvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1VJUHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oCShyZXZpc2lv
biA3NTA1NCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsOCArMjQsOCBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRHJhd2luZ0Fy
ZWFQcm94eVVwZGF0ZUNodW5rX2gKLSNkZWZpbmUgRHJhd2luZ0FyZWFQcm94eVVwZGF0ZUNodW5r
X2gKKyNpZm5kZWYgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlfaAorI2RlZmluZSBDaHVu
a2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eV9oCiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CkBAIC0zOSw2ICs0MCw4IEBACiAjZWxp
ZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxRSW1hZ2U+CiBjbGFzcyBRR3JhcGhpY3NXS1ZpZXc7
CisjZWxpZiBQTEFURk9STShHVEspCit0eXBlZGVmIHN0cnVjdCBfR2RrRHJhd2FibGUgR2RrUGl4
bWFwOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTMsNiArNTYsOSBAQAogdHlw
ZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKICNlbGlmIFBMQVRGT1JNKFFUKQogdHlwZWRl
ZiBRR3JhcGhpY3NXS1ZpZXcgUGxhdGZvcm1XZWJWaWV3OworI2VsaWYgUExBVEZPUk0oR1RLKQor
Y2xhc3MgV2ViVmlldzsKK3R5cGVkZWYgV2ViVmlldyBQbGF0Zm9ybVdlYlZpZXc7CiAjZW5kaWYK
IAogY2xhc3MgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkgOiBwdWJsaWMgRHJhd2luZ0Fy
ZWFQcm94eSB7CkBAIC05OSw2ICsxMDUsOSBAQAogICAgIE93blB0cjxIQklUTUFQPiBtX2JhY2tp
bmdTdG9yZUJpdG1hcDsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIFFJbWFnZSBtX2JhY2tpbmdT
dG9yZUltYWdlOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIEJhY2tpbmdTdG9yZQorICAg
IEdka1BpeG1hcCogbV9iYWNraW5nU3RvcmVCaXRtYXA7CiAjZW5kaWYKIAogICAgIFBsYXRmb3Jt
V2ViVmlldyogbV93ZWJWaWV3OwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQ2h1bmtlZFVwZGF0
ZURyYXdpbmdBcmVhUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0No
dW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmNwcAkocmV2aXNpb24gNzUwNTQpCisrKyBXZWJL
aXQyL1VJUHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNiArNDgsOSBAQAogICAgICwgbV9pc1dhaXRpbmdG
b3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbihmYWxzZSkKICAgICAsIG1faXNWaXNpYmxlKHRydWUp
CiAgICAgLCBtX2ZvcmNlUmVwYWludFdoZW5SZXN1bWluZ1BhaW50aW5nKGZhbHNlKQorI2lmIFBM
QVRGT1JNKEdUSykKKyAgICAsIG1fYmFja2luZ1N0b3JlQml0bWFwKDApCisjZW5kaWYKICAgICAs
IG1fd2ViVmlldyh3ZWJWaWV3KQogewogfQpAQCAtMTE1LDYgKzExOSw5IEBACiAgICAgICAgIGRy
YXdVcGRhdGVDaHVua0ludG9CYWNraW5nU3RvcmUodXBkYXRlQ2h1bmspOwogCiAgICAgV2ViUGFn
ZVByb3h5KiBwYWdlID0gdGhpcy0+cGFnZSgpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBwYWdl
LT5wcm9jZXNzKCktPnNlbmQoRHJhd2luZ0FyZWFMZWdhY3lNZXNzYWdlOjpEaWRTZXRTaXplRG9u
ZSwgcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKGluZm8oKS5pZGVudGlmaWVyLCB1cGRhdGVD
aHVuay0+eElEKCkpKTsKKyNlbmRpZgogICAgIHBhZ2UtPnByb2Nlc3MoKS0+cmVzcG9uc2l2ZW5l
c3NUaW1lcigpLT5zdG9wKCk7CiB9CiAKQEAgLTEzMSw3ICsxMzgsMTEgQEAKICAgICB9CiAKICAg
ICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisjaWYgUExBVEZPUk0oR1RLKQor
ICAgIHBhZ2UtPnByb2Nlc3MoKS0+c2VuZChEcmF3aW5nQXJlYUxlZ2FjeU1lc3NhZ2U6OkRpZFVw
ZGF0ZSwgcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkluKGluZm8oKS5pZGVudGlmaWVyLCB1cGRh
dGVDaHVuay0+eElEKCkpKTsKKyNlbHNlCiAgICAgcGFnZS0+cHJvY2VzcygpLT5zZW5kKERyYXdp
bmdBcmVhTGVnYWN5TWVzc2FnZTo6RGlkVXBkYXRlLCBwYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6
SW4oaW5mbygpLmlkZW50aWZpZXIpKTsKKyNlbmRpZgogfQogCiB2b2lkIENodW5rZWRVcGRhdGVE
cmF3aW5nQXJlYVByb3h5OjpzZW5kU2V0U2l6ZSgpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oCShyZXZpc2lvbiA3NTA1NCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlv
bnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMiw4
IEBACiAKICNpZiBQTEFURk9STShRVCkKIGNsYXNzIFFQYWludGVyOworI2VsaWYgUExBVEZPUk0o
R1RLKQordHlwZWRlZiBzdHJ1Y3QgX0dka0RyYXdhYmxlIEdka1dpbmRvdzsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQzLDYgKzQ2LDggQEAKIHR5cGVkZWYgSERDIFBsYXRmb3Jt
RHJhd2luZ0NvbnRleHQ7CiAjZWxpZiBQTEFURk9STShRVCkKIHR5cGVkZWYgUVBhaW50ZXIqIFBs
YXRmb3JtRHJhd2luZ0NvbnRleHQ7CisjZWxpZiBQTEFURk9STShHVEspCit0eXBlZGVmIEdka1dp
bmRvdyogUGxhdGZvcm1EcmF3aW5nQ29udGV4dDsKICNlbmRpZgogCiBjbGFzcyBEcmF3aW5nQXJl
YVByb3h5IHsK
</data>
<flag name="review"
          id="69515"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78233</attachid>
            <date>2011-01-07 07:19:54 -0800</date>
            <delta_ts>2011-01-14 08:51:25 -0800</delta_ts>
            <desc>WebView, WebViewInternal classes implementation for GTK port</desc>
            <filename>48509.0.1.patch.complete</filename>
            <type>text/plain</type>
            <size>30238</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTI0MCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzAgQEAKKzIwMTEtMDEtMDcgQ2hhbmRyYSBWYWxsYWxhICA8Y2hhbmRyYS52YWxs
YWxhQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbR1RLXSBJbXBsZW1lbnRhdGlvbiBvZiBXZWJWaWV3LCBXZWJWaWV3SW50ZXJu
YWwgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDg1MDkKKworICAgICAgICAqIFVJUHJvY2Vzcy9ndGs6IEFkZGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9ndGsvV2ViVmlldy5jcHA6IEFkZGVkLiBUaGUgbmF0aXZlIEd0a1dpZGdldCBoYW5k
bGUgZm9yIGVhY2ggV0tWaWV3UmVmIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6d2ViVmlld09uRXhwb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmll
d09uU2l6ZUFsbG9jYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0ZvY3Vz
SW5FdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdGb2N1c091dEV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0tleVByZXNzRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3S2V5UmVsZWFzZUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0J1dHRvblByZXNzRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3Ojp3ZWJWaWV3QnV0dG9uUmVsZWFzZUV2ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlldzo6d2ViVmlld1Njcm9sbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6d2ViVmlld01vdGlvbk5vdGlmeUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6On5XZWJWaWV3KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6c2V0SG9zdFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6Om9uUGFpbnRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uU2l6ZUV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25TZXRGb2N1c0V2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6b25LaWxsRm9jdXNFdmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6Om9uS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpvbk1vdXNlRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvbldoZWVsRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3Ojppc0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnVw
ZGF0ZUFjdGl2ZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y2xvc2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpwcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpkaWRSZWxhdW5jaFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
Ojp0YWtlRm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp0b29sVGlwQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldEN1cnNvcik6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OnNldFZpZXdwb3J0QXJndW1lbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNsZWFy
QWxsRWRpdENvbW1hbmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0RWRpdENvbW1h
bmRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNwYWNl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6ZGlkTm90SGFuZGxlS2V5RXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
OjpzZXRGaW5kSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFnZURpZEVu
dGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBh
Z2VEaWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL2d0ay9XZWJWaWV3Lmg6IEFkZGVkLiBOYXRpdmUgR3RrV2lkZ2V0IGhhbmRs
ZSBmb3IgV0tWaWV3UmVmIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
cmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6OndpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Omhvc3RXaW5k
b3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL1dlYlZpZXdJbnRlcm5hbC5jcHA6IEFkZGVkLiBUaGUgR09iamVjdCBpbnRlcmZhY2Ug
Zm9yIFdlYlZpZXcuIFRoZSBHT2JqZWN0IGlzIHRoZSBHdGtXaWRnZXQgaGFuZGxlIHdoaWNoIGlz
IHVzZWQgYnkgV0tWaWV3UmVmIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKHdlYmtpdFdpZGdldFZp
ZXdSZWFsaXplKToKKyAgICAgICAgKHdlYmtpdFdpZGdldFZpZXdDb250YWluZXJBZGQpOgorICAg
ICAgICAod2Via2l0V2lkZ2V0Vmlld0Rpc3Bvc2UpOgorICAgICAgICAod2Via2l0V2lkZ2V0Vmll
d0ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdFdpZGdldFZpZXdDbGFzc0luaXQpOgorICAgICAg
ICAod2Via2l0V2lkZ2V0Vmlld0luaXQpOgorICAgICAgICAod2Via2l0V2lkZ2V0Vmlld0dldFR5
cGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViVmlld0ludGVybmFsLmg6IEFkZGVkLiBU
aGUgR09iamVjdCBpbnRlcmZhY2UgZGVjbGFyYXRpb25zIGZvciBHdGtXaWRnZXQgaGFuZGxlIGZv
ciBHVEsgcG9ydC4KKwogMjAxMS0wMS0wNiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+
CiAKICAgICAgICAgQWx3YXlzIHNob3cgdGhlIGFycm93IGN1cnNvciB3aGVuIHRoZSB3ZWIgcHJv
Y2VzcyBoYXMgY3Jhc2hlZApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdJbnRl
cm5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdJbnRl
cm5hbC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlld0lu
dGVybmFsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViVmlld0ludGVybmFsLmgiCisKKyNpbmNs
dWRlICJXZWJWaWV3LmgiCisKK3N0YXRpYyBHT2JqZWN0Q2xhc3MgKnBhcmVudENsYXNzID0gMDsK
Kworc3RhdGljIHZvaWQgd2Via2l0V2lkZ2V0Vmlld1JlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQp
Cit7CisgICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfUkVBTElaRUQpOworCisg
ICAgR2RrV2luZG93QXR0ciBhdHRyaWJ1dGVzOworICAgIGF0dHJpYnV0ZXMud2luZG93X3R5cGUg
PSBHREtfV0lORE9XX0NISUxEOworICAgIGF0dHJpYnV0ZXMueCA9IHdpZGdldC0+YWxsb2NhdGlv
bi54OworICAgIGF0dHJpYnV0ZXMueSA9IHdpZGdldC0+YWxsb2NhdGlvbi55OworICAgIGF0dHJp
YnV0ZXMud2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lkdGg7CisgICAgYXR0cmlidXRlcy5o
ZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0OworICAgIGF0dHJpYnV0ZXMud2NsYXNz
ID0gR0RLX0lOUFVUX09VVFBVVDsKKyAgICBhdHRyaWJ1dGVzLnZpc3VhbCA9IGd0a193aWRnZXRf
Z2V0X3Zpc3VhbCh3aWRnZXQpOworICAgIGF0dHJpYnV0ZXMuY29sb3JtYXAgPSBndGtfd2lkZ2V0
X2dldF9jb2xvcm1hcCh3aWRnZXQpOworICAgIGF0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19W
SVNJQklMSVRZX05PVElGWV9NQVNLIHwgR0RLX0VYUE9TVVJFX01BU0sgfCBHREtfQlVUVE9OX1BS
RVNTX01BU0sgfCBHREtfQlVUVE9OX1JFTEVBU0VfTUFTSyB8IEdES19QT0lOVEVSX01PVElPTl9N
QVNLIHwgR0RLX0tFWV9QUkVTU19NQVNLIHwgR0RLX0tFWV9SRUxFQVNFX01BU0sKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fTU9USU9OX01BU0sgfCBHREtfQlVUVE9O
MV9NT1RJT05fTUFTSyB8IEdES19CVVRUT04yX01PVElPTl9NQVNLIHwgR0RLX0JVVFRPTjNfTU9U
SU9OX01BU0s7CisKKyAgICBnaW50IGF0dHJpYnV0ZXNNYXNrID0gR0RLX1dBX1ggfCBHREtfV0Ff
WSB8IEdES19XQV9WSVNVQUwgfCBHREtfV0FfQ09MT1JNQVA7CisgICAgd2lkZ2V0LT53aW5kb3cg
PSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0X2dldF9wYXJlbnRfd2luZG93KHdpZGdldCksICZh
dHRyaWJ1dGVzLCBhdHRyaWJ1dGVzTWFzayk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRh
KHdpZGdldC0+d2luZG93LCB3aWRnZXQpOworICAgIHdpZGdldC0+c3R5bGUgPSBndGtfc3R5bGVf
YXR0YWNoKHdpZGdldC0+c3R5bGUsIHdpZGdldC0+d2luZG93KTsKKyAgICBndGtfc3R5bGVfc2V0
X2JhY2tncm91bmQod2lkZ2V0LT5zdHlsZSwgd2lkZ2V0LT53aW5kb3csIEdUS19TVEFURV9OT1JN
QUwpOworICAgIFdlYktpdFdpZGdldFZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVco
d2lkZ2V0KTsKKyAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyh3ZWJWaWV3LT5w
cml2LT5pbUNvbnRleHQsIHdpZGdldC0+d2luZG93KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
V2lkZ2V0Vmlld0NvbnRhaW5lckFkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgV2ViS2l0V2lkZ2V0Vmlldyogd2ViVmlldyA9IFdFQktJVF9XSURH
RVRfVklFVyhjb250YWluZXIpOworCisgICAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQoY29udGFp
bmVyKSkKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQsIEdUS19X
SURHRVQod2ViVmlldyktPndpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zZXRfcGFyZW50KHdpZGdl
dCwgR1RLX1dJREdFVChjb250YWluZXIpKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdFdpZGdl
dFZpZXdEaXNwb3NlKEdPYmplY3QqIG9iaikKK3sKKyAgICBXZWJLaXRXaWRnZXRWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dJREdFVF9WSUVXKG9iaik7CisgICAgaWYgKHdlYlZpZXctPnByaXYtPmRp
c3Bvc2VIYXNSdW4pCisgICAgICAgIHJldHVybjsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZp
ZXctPnByaXYtPmltQ29udGV4dCk7CisgICAgd2ViVmlldy0+cHJpdi0+ZGlzcG9zZUhhc1J1biA9
IFRSVUU7CisgICAgR19PQkpFQ1RfQ0xBU1MocGFyZW50Q2xhc3MpLT5kaXNwb3NlKG9iaik7Cit9
CisKK3N0YXRpYyB2b2lkCit3ZWJraXRXaWRnZXRWaWV3RmluYWxpemUoR09iamVjdCogb2JqKQor
eworICAgIEdfT0JKRUNUX0NMQVNTKHBhcmVudENsYXNzKS0+ZmluYWxpemUob2JqKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0V2lkZ2V0Vmlld0NsYXNzSW5pdChncG9pbnRlciB3aWRnZXRWaWV3
UGFyZW50Q2xhc3MsIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGdwb2ludGVyIHdpZGdldFZpZXdD
bGFzc0RhdGEpCit7CisgICAgV2ViS2l0V2lkZ2V0Vmlld0NsYXNzKiBrbGFzczsKKyAgICBrbGFz
cyA9IHN0YXRpY19jYXN0PFdlYktpdFdpZGdldFZpZXdDbGFzcyAqPih3aWRnZXRWaWV3UGFyZW50
Q2xhc3MpOworICAgIHBhcmVudENsYXNzID0gc3RhdGljX2Nhc3Q8R09iamVjdENsYXNzICo+KGdf
dHlwZV9jbGFzc19wZWVrX3BhcmVudChrbGFzcykpOworCisgICAgR3RrV2lkZ2V0Q2xhc3MqIHdp
ZGdldENsYXNzID0gR1RLX1dJREdFVF9DTEFTUyhrbGFzcyk7CisgICAgd2lkZ2V0Q2xhc3MtPnJl
YWxpemUgPSB3ZWJraXRXaWRnZXRWaWV3UmVhbGl6ZTsKKyAgICB3aWRnZXRDbGFzcy0+ZXhwb3Nl
X2V2ZW50ID0gV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3T25FeHBvc2U7CisgICAgd2lkZ2V0Q2xh
c3MtPnNpemVfYWxsb2NhdGUgPSBXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdPblNpemVBbGxvY2F0
ZTsKKyAgICB3aWRnZXRDbGFzcy0+Zm9jdXNfaW5fZXZlbnQgPSBXZWJLaXQ6OldlYlZpZXc6Ondl
YlZpZXdGb2N1c0luRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmZvY3VzX291dF9ldmVudCA9IFdl
YktpdDo6V2ViVmlldzo6d2ViVmlld0ZvY3VzT3V0RXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtl
eV9wcmVzc19ldmVudCA9IFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0tleVByZXNzRXZlbnQ7Cisg
ICAgd2lkZ2V0Q2xhc3MtPmtleV9yZWxlYXNlX2V2ZW50ID0gV2ViS2l0OjpXZWJWaWV3Ojp3ZWJW
aWV3S2V5UmVsZWFzZUV2ZW50OworICAgIHdpZGdldENsYXNzLT5idXR0b25fcHJlc3NfZXZlbnQg
PSBXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdCdXR0b25QcmVzc0V2ZW50OworICAgIHdpZGdldENs
YXNzLT5idXR0b25fcmVsZWFzZV9ldmVudCA9IFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0J1dHRv
blJlbGVhc2VFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+c2Nyb2xsX2V2ZW50ID0gV2ViS2l0OjpX
ZWJWaWV3Ojp3ZWJWaWV3U2Nyb2xsRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPm1vdGlvbl9ub3Rp
ZnlfZXZlbnQgPSBXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdNb3Rpb25Ob3RpZnlFdmVudDsKKwor
ICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwor
ICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRXaWRnZXRWaWV3RmluYWxpemU7Cisg
ICAgZ29iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0V2lkZ2V0Vmlld0Rpc3Bvc2U7CisKKyAg
ICBHdGtDb250YWluZXJDbGFzcyogY29udGFpbmVyQ2xhc3MgPSBHVEtfQ09OVEFJTkVSX0NMQVNT
KGtsYXNzKTsKKyAgICBjb250YWluZXJDbGFzcy0+YWRkID0gd2Via2l0V2lkZ2V0Vmlld0NvbnRh
aW5lckFkZDsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdl
YktpdFdpZGdldFZpZXdQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdpZGdldFZp
ZXdJbml0KEdUeXBlSW5zdGFuY2UqIGluc3RhbmNlLCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBn
cG9pbnRlciB3aWRnZXRWaWV3Q2xhc3MpCit7CisgICAgV2ViS2l0V2lkZ2V0Vmlldyogd2ViVmll
dyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0V2lkZ2V0Vmlldyo+KGluc3RhbmNlKTsKKyAgICBX
ZWJLaXRXaWRnZXRWaWV3UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XSURHRVRfVklFV19HRVRfUFJJ
VkFURSh3ZWJWaWV3KTsKKyAgICB3ZWJWaWV3LT5wcml2ID0gcHJpdjsKKworICAgIEdUS19XSURH
RVRfU0VUX0ZMQUdTKHdlYlZpZXcsIEdUS19DQU5fRk9DVVMpOworICAgIHByaXYtPmltQ29udGV4
dCA9IGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCk7CisgICAgcHJpdi0+ZGlzcG9zZUhhc1J1biA9
IEZBTFNFOworfQorCitHVHlwZQord2Via2l0V2lkZ2V0Vmlld0dldFR5cGUodm9pZCkKK3sKKyAg
ICBzdGF0aWMgR1R5cGUgdHlwZSA9IDA7IAorCisgICAgaWYgKCF0eXBlKSB7CisKKyAgICAgICAg
c3RhdGljIGNvbnN0IEdUeXBlSW5mbyBpbmZvID0geworICAgICAgICAgICAgc2l6ZW9mKFdlYktp
dFdpZGdldFZpZXdDbGFzcyksICAgICAgLyogY2xhc3Mgc3RydWN0dXJlIHNpemUgKi8KKyAgICAg
ICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfaW5pdCAq
LworICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmFz
ZV9maW5hbGl6ZSAqLworICAgICAgICAgICAgKEdDbGFzc0luaXRGdW5jKXdlYmtpdFdpZGdldFZp
ZXdDbGFzc0luaXQsIC8qIGNsYXNzIGluaXRpYWxpemVyICovCisgICAgICAgICAgICAwLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbGFzc19maW5hbGl6ZSAqLworICAgICAg
ICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2xhc3NfZGF0YSAq
LworICAgICAgICAgICAgc2l6ZW9mKFdlYktpdFdpZGdldFZpZXcpLCAgICAgICAgICAgLyogaW5z
dGFuY2Ugc3RydWN0dXJlIHNpemUgKi8KKyAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qIHByZWFsbG9jYXRlZCBpbnN0YW5jZXMgKi8KKyAgICAgICAgICAg
IChHSW5zdGFuY2VJbml0RnVuYyl3ZWJraXRXaWRnZXRWaWV3SW5pdCwgICAvKiBpbnN0YW5jZSBp
bml0aWFsaXplciAqLworICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogZnVuY3Rpb24gdGFibGUgKi8KKyAgICAgICAgfTsgICAKKyAgICAgICAgdHlwZSA9
IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMoR1RLX1RZUEVfQ09OVEFJTkVSLCAiV2ViS2l0V2lkZ2V0
VmlldyIsICZpbmZvLCAoR1R5cGVGbGFncykwKTsKKyAgICB9ICAgIAorCisgICAgcmV0dXJuIHR5
cGU7Cit9CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJXZWJW
aWV3LmgiCisKKyNpbmNsdWRlICJDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oIgorI2lu
Y2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViVmlld0ludGVybmFsLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworZ2Jvb2xlYW4gV2ViVmlldzo6d2ViVmlld09uRXhwb3NlKEd0a1dpZGdldCogd2lk
Z2V0LCBHZGtFdmVudEV4cG9zZSogZXZlbnQpCit7CisgICAgV2ViS2l0V2lkZ2V0Vmlldyogd2lk
Z2V0VmlldyA9IFdFQktJVF9XSURHRVRfVklFVyh3aWRnZXQpOworICAgIGdwb2ludGVyIHdlYlZp
ZXdJbnN0YW5jZSA9IHdpZGdldFZpZXctPnByaXYtPndlYlZpZXdJbnN0YW5jZTsKKyAgICBXZWJW
aWV3KiB3ZWJWaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJWaWV3Kj4od2ViVmlld0luc3RhbmNl
KTsKKyAgICBHZGtSZWN0YW5nbGUgY2xpcDsKKyAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2
ZW50LT5yZWdpb24sICZjbGlwKTsKKyAgICB3ZWJWaWV3LT5vblBhaW50RXZlbnQod2lkZ2V0LCBj
bGlwKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBXZWJWaWV3Ojp3ZWJWaWV3T25T
aXplQWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24p
Cit7CisgICAgR09iamVjdENsYXNzKiBwYXJlbnRDbGFzcyA9IChHT2JqZWN0Q2xhc3MqKWdfdHlw
ZV9jbGFzc19wZWVrX3BhcmVudChXRUJLSVRfV0lER0VUX1ZJRVdfR0VUX0NMQVNTKHdpZGdldCkp
OworICAgIEdUS19XSURHRVRfQ0xBU1MocGFyZW50Q2xhc3MpLT5zaXplX2FsbG9jYXRlKHdpZGdl
dCwgYWxsb2NhdGlvbik7CisgICAgV2ViS2l0V2lkZ2V0Vmlldyogd2lkZ2V0VmlldyA9IFdFQktJ
VF9XSURHRVRfVklFVyh3aWRnZXQpOworICAgIGdwb2ludGVyIHdlYlZpZXdJbnN0YW5jZSA9IHdp
ZGdldFZpZXctPnByaXYtPndlYlZpZXdJbnN0YW5jZTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0g
cmVpbnRlcnByZXRfY2FzdDxXZWJWaWV3Kj4od2ViVmlld0luc3RhbmNlKTsKKworICAgIHdlYlZp
ZXctPm9uU2l6ZUV2ZW50KHdpZGdldCwgSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2Nh
dGlvbi0+aGVpZ2h0KSk7Cit9CisKK2dib29sZWFuIFdlYlZpZXc6OndlYlZpZXdGb2N1c0luRXZl
bnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50KQoreworICAgIFdlYktp
dFdpZGdldFZpZXcqIHdpZGdldFZpZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVcod2lkZ2V0KTsKKyAg
ICBncG9pbnRlciB3ZWJWaWV3SW5zdGFuY2UgPSB3aWRnZXRWaWV3LT5wcml2LT53ZWJWaWV3SW5z
dGFuY2U7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+
KHdlYlZpZXdJbnN0YW5jZSk7CisgICAgCisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IGd0a193
aWRnZXRfZ2V0X3RvcGxldmVsKHdpZGdldCk7CisgICAgaWYgKEdUS19XSURHRVRfVE9QTEVWRUwo
dG9wbGV2ZWwpICYmIGd0a193aW5kb3dfaGFzX3RvcGxldmVsX2ZvY3VzKEdUS19XSU5ET1codG9w
bGV2ZWwpKSkgeworICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19pbih3aWRnZXRWaWV3LT5w
cml2LT5pbUNvbnRleHQpOworICAgICAgICBpZiAoISh3ZWJWaWV3LT5tX2lzUGFnZUFjdGl2ZSkp
IHsKKyAgICAgICAgICAgIHdlYlZpZXctPm1faXNQYWdlQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHdlYlZpZXctPnVwZGF0ZUFjdGl2ZVN0YXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgd2Vi
Vmlldy0+b25TZXRGb2N1c0V2ZW50KHdpZGdldCwgdHJ1ZSk7CisgICAgfQorCisgICAgR09iamVj
dENsYXNzKiBwYXJlbnRDbGFzcyA9IChHT2JqZWN0Q2xhc3MqKWdfdHlwZV9jbGFzc19wZWVrX3Bh
cmVudChXRUJLSVRfV0lER0VUX1ZJRVdfR0VUX0NMQVNTKHdpZGdldCkpOworICAgIHJldHVybiBH
VEtfV0lER0VUX0NMQVNTKHBhcmVudENsYXNzKS0+Zm9jdXNfaW5fZXZlbnQod2lkZ2V0LCBldmVu
dCk7Cit9CisKK2dib29sZWFuIFdlYlZpZXc6OndlYlZpZXdGb2N1c091dEV2ZW50KEd0a1dpZGdl
dCogd2lkZ2V0LCBHZGtFdmVudEZvY3VzKiBldmVudCkKK3sKKyAgICBXZWJLaXRXaWRnZXRWaWV3
KiB3aWRnZXRWaWV3ID0gV0VCS0lUX1dJREdFVF9WSUVXKHdpZGdldCk7CisgICAgZ3BvaW50ZXIg
d2ViVmlld0luc3RhbmNlID0gd2lkZ2V0Vmlldy0+cHJpdi0+d2ViVmlld0luc3RhbmNlOworICAg
IFdlYlZpZXcqIHdlYlZpZXcgPSByZWludGVycHJldF9jYXN0PFdlYlZpZXcqPih3ZWJWaWV3SW5z
dGFuY2UpOworCisgICAgd2ViVmlldy0+b25LaWxsRm9jdXNFdmVudCh3aWRnZXQsIGZhbHNlKTsK
KyAgICB3ZWJWaWV3LT5tX2lzUGFnZUFjdGl2ZSA9IGZhbHNlOyAKKyAgICB3ZWJWaWV3LT51cGRh
dGVBY3RpdmVTdGF0ZSgpOworICAgIGlmICh3aWRnZXRWaWV3LT5wcml2LT5pbUNvbnRleHQpCisg
ICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291dCh3aWRnZXRWaWV3LT5wcml2LT5pbUNvbnRl
eHQpOworICAgIAorICAgIEdPYmplY3RDbGFzcyogcGFyZW50Q2xhc3MgPSAoR09iamVjdENsYXNz
KilnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQoV0VCS0lUX1dJREdFVF9WSUVXX0dFVF9DTEFTUyh3
aWRnZXQpKTsKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyhwYXJlbnRDbGFzcyktPmZvY3Vz
X291dF9ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworZ2Jvb2xlYW4gV2ViVmlldzo6d2ViVmll
d0tleVByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKK3sK
KyAgICBXZWJLaXRXaWRnZXRWaWV3KiB3aWRnZXRWaWV3ID0gV0VCS0lUX1dJREdFVF9WSUVXKHdp
ZGdldCk7CisgICAgZ3BvaW50ZXIgd2ViVmlld0luc3RhbmNlID0gd2lkZ2V0Vmlldy0+cHJpdi0+
d2ViVmlld0luc3RhbmNlOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSByZWludGVycHJldF9jYXN0
PFdlYlZpZXcqPih3ZWJWaWV3SW5zdGFuY2UpOworICAgIHdlYlZpZXctPm9uS2V5RXZlbnQoZXZl
bnQpOworICAgIAorICAgIEdPYmplY3RDbGFzcyogcGFyZW50Q2xhc3MgPSAoR09iamVjdENsYXNz
KilnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQoV0VCS0lUX1dJREdFVF9WSUVXX0dFVF9DTEFTUyh3
aWRnZXQpKTsKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyhwYXJlbnRDbGFzcyktPmtleV9w
cmVzc19ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworZ2Jvb2xlYW4gV2ViVmlldzo6d2ViVmll
d0tleVJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50KQor
eworICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdldFZpZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVco
d2lkZ2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3SW5zdGFuY2UgPSB3aWRnZXRWaWV3LT5wcml2
LT53ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7CisKKyAgICBpZiAoZ3RrX2ltX2NvbnRleHRf
ZmlsdGVyX2tleXByZXNzKHdpZGdldFZpZXctPnByaXYtPmltQ29udGV4dCwgZXZlbnQpKQorICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICB3ZWJWaWV3LT5vbktleUV2ZW50KGV2ZW50KTsKKworICAg
IEdPYmplY3RDbGFzcyogcGFyZW50Q2xhc3MgPSAoR09iamVjdENsYXNzKilnX3R5cGVfY2xhc3Nf
cGVla19wYXJlbnQoV0VCS0lUX1dJREdFVF9WSUVXX0dFVF9DTEFTUyh3aWRnZXQpKTsKKyAgICBy
ZXR1cm4gR1RLX1dJREdFVF9DTEFTUyhwYXJlbnRDbGFzcyktPmtleV9yZWxlYXNlX2V2ZW50KHdp
ZGdldCwgZXZlbnQpOworfQorCitnYm9vbGVhbiBXZWJWaWV3Ojp3ZWJWaWV3QnV0dG9uUHJlc3NF
dmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGNvbnN0IGV2ZW50KQorewor
ICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdldFZpZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVcod2lk
Z2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3SW5zdGFuY2UgPSB3aWRnZXRWaWV3LT5wcml2LT53
ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdp
ZGdldCk7CisgICAgd2ViVmlldy0+b25Nb3VzZUV2ZW50KChHZGtFdmVudEFueSAqKWV2ZW50KTsK
KworICAgIHJldHVybiBGQUxTRTsKK30KKworZ2Jvb2xlYW4gV2ViVmlldzo6d2ViVmlld0J1dHRv
blJlbGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50KQor
eworICAgIFdlYktpdFdpZGdldFZpZXcqIHdpZGdldFZpZXcgPSBXRUJLSVRfV0lER0VUX1ZJRVco
d2lkZ2V0KTsKKyAgICBncG9pbnRlciB3ZWJWaWV3SW5zdGFuY2UgPSB3aWRnZXRWaWV3LT5wcml2
LT53ZWJWaWV3SW5zdGFuY2U7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViVmlldyo+KHdlYlZpZXdJbnN0YW5jZSk7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3Vz
KHdpZGdldCk7CisgICAgd2ViVmlldy0+b25Nb3VzZUV2ZW50KChHZGtFdmVudEFueSAqKWV2ZW50
KTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworZ2Jvb2xlYW4gV2ViVmlldzo6d2ViVmlld1Nj
cm9sbEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFNjcm9sbCogZXZlbnQpCit7Cisg
ICAgV2ViS2l0V2lkZ2V0Vmlldyogd2lkZ2V0VmlldyA9IFdFQktJVF9XSURHRVRfVklFVyh3aWRn
ZXQpOworICAgIGdwb2ludGVyIHdlYlZpZXdJbnN0YW5jZSA9IHdpZGdldFZpZXctPnByaXYtPndl
YlZpZXdJbnN0YW5jZTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxX
ZWJWaWV3Kj4od2ViVmlld0luc3RhbmNlKTsKKyAgICB3ZWJWaWV3LT5vbldoZWVsRXZlbnQoZXZl
bnQpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitnYm9vbGVhbiBXZWJWaWV3Ojp3ZWJWaWV3
TW90aW9uTm90aWZ5RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVu
dCkKK3sKKyAgICBXZWJLaXRXaWRnZXRWaWV3KiB3aWRnZXRWaWV3ID0gV0VCS0lUX1dJREdFVF9W
SUVXKHdpZGdldCk7CisgICAgZ3BvaW50ZXIgd2ViVmlld0luc3RhbmNlID0gd2lkZ2V0Vmlldy0+
cHJpdi0+d2ViVmlld0luc3RhbmNlOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSByZWludGVycHJl
dF9jYXN0PFdlYlZpZXcqPih3ZWJWaWV3SW5zdGFuY2UpOworICAgIHdlYlZpZXctPm9uTW91c2VF
dmVudCgoR2RrRXZlbnRBbnkgKilldmVudCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK1dl
YlZpZXc6OldlYlZpZXcoR2RrUmVjdGFuZ2xlIHJlY3QsIFdlYkNvbnRleHQqIGNvbnRleHQsIFdl
YlBhZ2VHcm91cCogcGFnZUdyb3VwLCBHdGtXaWRnZXQqICBob3N0V2luZG93KQorICAgIDogbV9y
ZWN0KHJlY3QpCisgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykKKyAgICAsIG1faXNQYWdl
QWN0aXZlKHRydWUpCit7CisgICAgbV9wYWdlID0gY29udGV4dC0+Y3JlYXRlV2ViUGFnZShwYWdl
R3JvdXApOworICAgIG1fcGFnZS0+c2V0UGFnZUNsaWVudCh0aGlzKTsKKyAgICBtX3BhZ2UtPnNl
dERyYXdpbmdBcmVhKENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUodGhpcywg
bV9wYWdlLmdldCgpKSk7CisgICAgbV9wYWdlLT5pbml0aWFsaXplV2ViUGFnZShJbnRSZWN0KHJl
Y3QpLnNpemUoKSk7CisKKyAgICBtX3dpbmRvdyA9IChHdGtXaWRnZXQqKWdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9XSURHRVRfVklFVywgTlVMTCk7IAorICAgIEFTU0VSVChtX3dpbmRvdyk7Cisg
ICAgV2ViS2l0V2lkZ2V0Vmlldyogd2ViVmlldyA9IFdFQktJVF9XSURHRVRfVklFVyhtX3dpbmRv
dyk7CisgICAgd2ViVmlldy0+cHJpdi0+d2ViVmlld0luc3RhbmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxncG9pbnRlcj4odGhpcyk7Cit9CisKK1dlYlZpZXc6On5XZWJWaWV3KCkKK3sKK30KKwordm9p
ZCBXZWJWaWV3OjpzZXRIb3N0V2luZG93KEd0a1dpZGdldCogaG9zdFdpbmRvdykKK3sKKyAgICBt
X2hvc3RXaW5kb3cgPSBob3N0V2luZG93OworfQorCit2b2lkIFdlYlZpZXc6Om9uUGFpbnRFdmVu
dChHdGtXaWRnZXQqIHdpZGdldCwgR2RrUmVjdGFuZ2xlIHJlY3QpCit7CisgICAgR2RrV2luZG93
KiB3aW5kb3cgPSB3aWRnZXQtPndpbmRvdzsKKyAgICBBU1NFUlQod2luZG93KTsKKyAgICBtX3Bh
Z2UtPmRyYXdpbmdBcmVhKCktPnBhaW50KEludFJlY3QocmVjdCksIHdpbmRvdyk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6b25TaXplRXZlbnQoR3RrV2lkZ2V0KiwgSW50U2l6ZSBzaXplKQoreworICAg
IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZShzaXplKTsKK30KKwordm9pZCBXZWJWaWV3
OjpvblNldEZvY3VzRXZlbnQoR3RrV2lkZ2V0KiwgYm9vbCkKK3sKKyAgICBtX3BhZ2UtPnNldEZv
Y3VzZWQodHJ1ZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6b25LaWxsRm9jdXNFdmVudChHdGtXaWRn
ZXQqLCBib29sKQoreworICAgIG1fcGFnZS0+c2V0Rm9jdXNlZChmYWxzZSk7Cit9CisKK3ZvaWQg
V2ViVmlldzo6b25LZXlFdmVudChHZGtFdmVudEtleSAqZXZlbnQpCit7CisgICAgbV9wYWdlLT5o
YW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQpKTsKK30KKwor
dm9pZCBXZWJWaWV3Ojpvbk1vdXNlRXZlbnQoR2RrRXZlbnRBbnkgKmV2ZW50KQoreworICAgIFdl
Yk1vdXNlRXZlbnQgbW91c2VFdmVudCA9IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VF
dmVudChldmVudCk7CisgICAgbV9wYWdlLT5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwor
fQorCit2b2lkIFdlYlZpZXc6Om9uV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCAqZXZlbnQpCit7
CisgICAgV2ViV2hlZWxFdmVudCB3aGVlbEV2ZW50ID0gV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVX
ZWJXaGVlbEV2ZW50KGV2ZW50KTsKKyAgICBtX3BhZ2UtPmhhbmRsZVdoZWVsRXZlbnQod2hlZWxF
dmVudCk7Cit9CisKK2Jvb2wgV2ViVmlldzo6aXNBY3RpdmUoKQoreworICAgIHJldHVybiBtX2lz
UGFnZUFjdGl2ZTsKK30KKwordm9pZCBXZWJWaWV3Ojp1cGRhdGVBY3RpdmVTdGF0ZSgpCit7Cisg
ICAgbV9wYWdlLT5zZXRBY3RpdmUoaXNBY3RpdmUoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xv
c2UoKQoreworICAgIG1fcGFnZS0+Y2xvc2UoKTsKK30KKworLy8gUGFnZUNsaWVudCdzIHB1cmUg
dmlydHVhbCBmdW5jdGlvbnMKK3ZvaWQgV2ViVmlldzo6cHJvY2Vzc0RpZENyYXNoKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmRpZFJlbGF1bmNoUHJvY2Vz
cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp0YWtlRm9j
dXMoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnRv
b2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNldFZpZXdwb3J0
QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFz
c1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xlYXJBbGxFZGl0
Q29tbWFuZHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6
c2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmLCBib29sLCBpbnQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNw
YWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiByZWN0OworfQorCitGbG9hdFJlY3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiByZWN0OworfQorCit2b2lkIFdlYlZpZXc6OmRpZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK1Bhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0ZVBvcHVw
TWVudVByb3h5KFdlYlBhZ2VQcm94eSopCit7CisgICAgLy8gRklYTUU6Ok5lZWQgdG8gaW1wbGVt
ZW50IFdlYlBvcHVwTWVudVByb3h5CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVD
b250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopCit7CisgICAgLy8gRklYTUU6Ok5lZWQgdG8g
aW1wbGVtZW50IFdlYkNvbnRleHRNZW51UHJveHkKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwOworfQorCit2b2lkIFdlYlZpZXc6OnNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0
cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2b2lkIFdlYlZpZXc6OnBh
Z2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFnZURpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKK3ZvaWQgV2ViVmlldzo6ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFt
ZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0aW9uKQoreworfQorCit2b2lkIFdlYlZpZXc6OmRp
ZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgQ29yZUlQQzo6
RGF0YVJlZmVyZW5jZSYpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmll
d0ludGVybmFsX2gKKyNkZWZpbmUgV2ViVmlld0ludGVybmFsX2gKKworI2luY2x1ZGUgPGd0ay9n
dGsuaD4KKworI2RlZmluZSBXRUJLSVRfVFlQRV9XSURHRVRfVklFVyAgICAgICAgICAgICh3ZWJr
aXRXaWRnZXRWaWV3R2V0VHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0lER0VUX1ZJRVcob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVf
V0lER0VUX1ZJRVcsIFdlYktpdFdpZGdldFZpZXcpKQorI2RlZmluZSBXRUJLSVRfV0lER0VUX1ZJ
RVdfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfV0lER0VUX1ZJRVcsIFdlYktpdFdpZGdldFZpZXdDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19XSURHRVRfVklFVyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfVFlQRV9XSURHRVRfVklFVykpCisjZGVmaW5lIFdFQktJVF9JU19X
SURHRVRfVklFV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9XSURHRVRfVklFVykpCisjZGVmaW5lIFdFQktJVF9XSURHRVRfVklFV19H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
VFlQRV9XSURHRVRfVklFVywgV2ViS2l0V2lkZ2V0Vmlld0NsYXNzKSkKKworI2RlZmluZSBXRUJL
SVRfV0lER0VUX1ZJRVdfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9XSURHRVRfVklFVywgV2ViS2l0V2lkZ2V0Vmlld1By
aXZhdGUpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2lkZ2V0VmlldyBXZWJLaXRXaWRnZXRW
aWV3OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdpZGdldFZpZXdDbGFzcyBXZWJLaXRXaWRnZXRW
aWV3Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2lkZ2V0Vmlld1ByaXZhdGUgV2ViS2l0
V2lkZ2V0Vmlld1ByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0V2lkZ2V0Vmlld1ByaXZhdGUgewor
ICAgIGdwb2ludGVyIHdlYlZpZXdJbnN0YW5jZTsKKyAgICBHdGtJTUNvbnRleHQgKmltQ29udGV4
dDsKKyAgICBnYm9vbGVhbiBkaXNwb3NlSGFzUnVuOworfTsKKworc3RydWN0IF9XZWJLaXRXaWRn
ZXRWaWV3IHsKKyAgICBHdGtDb250YWluZXIgcGFyZW50SW5zdGFuY2U7CisgICAgLy8gcHJpdmF0
ZQorICAgIFdlYktpdFdpZGdldFZpZXdQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJL
aXRXaWRnZXRWaWV3Q2xhc3MgeworICAgIEd0a0NvbnRhaW5lckNsYXNzIHBhcmVudENsYXNzOwor
fTsKKworR1R5cGUKK3dlYmtpdFdpZGdldFZpZXdHZXRUeXBlKHZvaWQpOworCisKKyNlbmRpZiAv
LyBXZWJWaWV3SW50ZXJuYWxfaCAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaAkocmV2aXNp
b24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9s
YSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJWaWV3X2gKKyNkZWZpbmUgV2ViVmlld19oCisKKyNpbmNsdWRlICJQYWdlQ2xpZW50Lmgi
CisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+
CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsv
Z3RrLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIERyYXdpbmdBcmVhUHJveHk7CitjbGFzcyBXZWJQYWdlTmFtZXNwYWNlOworCitjbGFz
cyBXZWJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlldz4sIHB1YmxpYyBQYWdlQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICB+V2ViVmlldygpOworICAgIEdka1JlY3RhbmdsZSByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgc3RhdGljIGdib29sZWFuIHdlYlZpZXdPbkV4cG9z
ZShHdGtXaWRnZXQqLCBHZGtFdmVudEV4cG9zZSopOworICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdP
blNpemVBbGxvY2F0ZShHdGtXaWRnZXQqLCBHdGtBbGxvY2F0aW9uKik7CisgICAgc3RhdGljIGdi
b29sZWFuIHdlYlZpZXdGb2N1c0luRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRGb2N1cyopOwor
ICAgIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3Rm9jdXNPdXRFdmVudChHdGtXaWRnZXQqLCBHZGtF
dmVudEZvY3VzKik7CisgICAgc3RhdGljIGdib29sZWFuIHdlYlZpZXdLZXlQcmVzc0V2ZW50KEd0
a1dpZGdldCosIEdka0V2ZW50S2V5Kik7CisgICAgc3RhdGljIGdib29sZWFuIHdlYlZpZXdLZXlS
ZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRLZXkqKTsKKyAgICBzdGF0aWMgZ2Jvb2xl
YW4gd2ViVmlld0J1dHRvblByZXNzRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRCdXR0b24qIGNv
bnN0KTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0J1dHRvblJlbGVhc2VFdmVudChHdGtX
aWRnZXQqLCBHZGtFdmVudEJ1dHRvbiopOworICAgIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3U2Ny
b2xsRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRTY3JvbGwqKTsKKyAgICBzdGF0aWMgZ2Jvb2xl
YW4gd2ViVmlld01vdGlvbk5vdGlmeUV2ZW50KEd0a1dpZGdldCosIEdka0V2ZW50TW90aW9uKik7
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJWaWV3PiBjcmVhdGUoR2RrUmVjdGFuZ2xlIHJl
Y3QsIFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBHdGtXaWRn
ZXQqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZp
ZXcocmVjdCwgY29udGV4dCwgcGFnZUdyb3VwLCBob3N0V2luZG93KSk7CisgICAgfQorCisgICAg
R3RrV2lkZ2V0KiB3aW5kb3coKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdzsgfQorICAgIEd0a1dp
ZGdldCogaG9zdFdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1faG9zdFdpbmRvdzsgfQorICAgIHZv
aWQgc2V0SG9zdFdpbmRvdyhHdGtXaWRnZXQqKTsKKworICAgIFdlYlBhZ2VQcm94eSogcGFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFdlYlZpZXco
R2RrUmVjdGFuZ2xlLCBXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKiwgR3RrV2lkZ2V0Kik7CisK
KyAgICB2b2lkIG9uUGFpbnRFdmVudChHdGtXaWRnZXQqLCBHZGtSZWN0YW5nbGUpOworICAgIHZv
aWQgb25TaXplRXZlbnQoR3RrV2lkZ2V0KiwgV2ViQ29yZTo6SW50U2l6ZSk7CisgICAgdm9pZCBv
blNldEZvY3VzRXZlbnQoR3RrV2lkZ2V0KiwgYm9vbCk7CisgICAgdm9pZCBvbktpbGxGb2N1c0V2
ZW50KEd0a1dpZGdldCosIGJvb2wpOworICAgIHZvaWQgb25LZXlFdmVudChHZGtFdmVudEtleSop
OworICAgIHZvaWQgb25Nb3VzZUV2ZW50KEdka0V2ZW50QW55Kik7CisgICAgdm9pZCBvbldoZWVs
RXZlbnQoR2RrRXZlbnRTY3JvbGwqKTsKKworICAgIGJvb2wgaXNBY3RpdmUoKTsKKyAgICB2b2lk
IHVwZGF0ZUFjdGl2ZVN0YXRlKCk7CisgICAgdm9pZCBjbG9zZSgpOworCisgICAgLy8gUGFnZUNs
aWVudAorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVsYXVuY2hQcm9jZXNzKCk7CisgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhib29s
IGRpcmVjdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6
U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29y
KGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9ydEFy
Z3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOworICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4s
IFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRp
dENvbW1hbmRzKCk7CisgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3Qg
V1RGOjpTdHJpbmcmLCBib29sLCBpbnQpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTm90SGFuZGxlS2V5RXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJQ
b3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5Kik7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51
UHJveHkoV2ViUGFnZVByb3h5Kik7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbmRJbmRpY2F0b3Io
UGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KTsKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkTGVhdmVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCk7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRM
b2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVzZW50YXRpb24pOworICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0
IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKworICAgIC8vIE1lbWJlcnMgb2YgV2ViVmlldyBj
bGFzcworICAgIEdka1JlY3RhbmdsZSBtX3JlY3Q7CisgICAgR3RrV2lkZ2V0KiBtX3dpbmRvdzsK
KyAgICBHdGtXaWRnZXQqIG1faG9zdFdpbmRvdzsKKyAgICBib29sIG1faXNQYWdlQWN0aXZlOwor
ICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG1fcGFnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViVmlld19oCg==
</data>
<flag name="review"
          id="69516"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78234</attachid>
            <date>2011-01-07 07:21:02 -0800</date>
            <delta_ts>2011-02-09 06:30:15 -0800</delta_ts>
            <desc>Changes to WKAPI interfaces for GTK port</desc>
            <filename>48509.1.patch.complete</filename>
            <type>text/plain</type>
            <size>11697</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTI0MCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMDcgQ2hhbmRyYSBWYWxsYWxhICA8Y2hhbmRyYS52YWxs
YWxhQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbR1RLXSBJbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQyIEFQSSBzZXQgYW5kIGNo
YW5nZXMgdG8gV0tBUEkgZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00ODUwOQorCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLQmFzZS5oOiBJ
bmNsdWRlZCBXS0Jhc2VHdGsuaCBpbiB0aGlzIGZpbGUuCisgICAgICAgICogU2hhcmVkL0FQSS9j
L2d0azogQWRkZWQuCisgICAgICAgICogU2hhcmVkL0FQSS9jL2d0ay9XS0Jhc2VHdGsuaDogQWRk
ZWQuIERlY2xhcmF0aW9uIG9mIFdLVmlld1JlZiBmb3IgR1RLIHBvcnQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOiBJbmNsdWRlZCBXS0FQSUNhc3RHdGsuaCBpbiB0aGlz
IGZpbGUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2d0azogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL2d0ay9XS0FQSUNhc3RHdGsuaDogQWRkZWQuIFR5cGUgZGVmaW5pdGlv
biB0ZW1wbGF0ZSBmb3IgV0tWaWV3UmVmIHRvIFdlYlZpZXcgYW5kIHZpY2UtdmVyc2EuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3BwOiBBZGRlZC4gSW1wbGVtZW50YXRp
b24gb2YgV0tWaWV3IEFQSSBpbnRlcmZhY2UuCisgICAgICAgIChXS1ZpZXdDcmVhdGUpOgorICAg
ICAgICAoV0tWaWV3R2V0V2luZG93KToKKyAgICAgICAgKFdLVmlld0dldEhvc3RXaW5kb3cpOgor
ICAgICAgICAoV0tWaWV3R2V0UGFnZSk6CisgICAgICAgIChXS1ZpZXdTZXRIb3N0V2luZG93KToK
KyAgICAgICAgKFdLVVJMQ3JlYXRlV2l0aFVSTCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
L2d0ay9XS1ZpZXcuaDogQWRkZWQuIERlY2xhcmF0aW9uIG9mIFdLVmlldyBBUEkgaW50ZXJmYWNl
LgorCiAyMDExLTAxLTA2ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBbHdheXMgc2hvdyB0aGUgYXJyb3cgY3Vyc29yIHdoZW4gdGhlIHdlYiBwcm9jZXNzIGhhcyBj
cmFzaGVkCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9BUEkvYy9ndGsvV0tCYXNlR3RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvQVBJL2MvZ3RrL1dLQmFzZUd0ay5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0Mi9TaGFyZWQvQVBJL2MvZ3RrL1dLQmFzZUd0ay5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9s
YSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXS0Jhc2VHdGtfaAorI2RlZmluZSBXS0Jhc2VHdGtfaAorCisjaWZuZGVmIFdLQmFzZV9oCisj
ZXJyb3IgIlBsZWFzZSAjaW5jbHVkZSBcIldLQmFzZS5oXCIgaW5zdGVhZCBvZiB0aGlzIGZpbGUg
ZGlyZWN0bHkuIgorI2VuZGlmCisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLVmlldyog
V0tWaWV3UmVmOworCisjZW5kaWYgLyogV0tCYXNlR3RrX2ggKi8KSW5kZXg6IFdlYktpdDIvU2hh
cmVkL0FQSS9jL1dLQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dL
QmFzZS5oCShyZXZpc2lvbiA3NTA1NCkKKysrIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLQmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg
KGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMzLDEwIEBACiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0Jhc2VXaW4uaD4KICNlbmRpZgogCisjaWYgZGVmaW5lZChCVUlMRElOR19H
VEtfXykKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZUd0ay5oPgorI2VuZGlmCisKIC8qIFdlYktp
dDIgc2hhcmVkIHR5cGVzICovCiAKIHR5cGVkZWYgdWludDMyX3QgV0tUeXBlSUQ7CkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS1ZpZXdfaAorI2Rl
ZmluZSBXS1ZpZXdfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwor
V0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoR2RrUmVjdGFuZ2xlIHJlY3QsIFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsIEd0a1dpZGdldCAqIGhv
c3RXaW5kb3cpOworCitXS19FWFBPUlQgR3RrV2lkZ2V0KiBXS1ZpZXdHZXRXaW5kb3coV0tWaWV3
UmVmIHZpZXcpOworV0tfRVhQT1JUIEd0a1dpZGdldCogV0tWaWV3R2V0SG9zdFdpbmRvdyhXS1Zp
ZXdSZWYgdmlldyk7CisKK1dLX0VYUE9SVCBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdS
ZWYgdmlldyk7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldEhvc3RXaW5kb3coV0tWaWV3UmVm
IHZpZXcsIEd0a1dpZGdldCogaG9zdFdpbmRvdyk7CisKK1dLX0VYUE9SVCBXS1VSTFJlZiBXS1VS
TENyZWF0ZVdpdGhVUkwoY29uc3QgY2hhciopOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5k
aWYKKworI2VuZGlmIC8qIFdLVmlld19oICovCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9ndGsvV0tBUElDYXN0R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZ3RrL1dLQVBJQ2FzdEd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZ3RrL1dLQVBJQ2FzdEd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS0FQSUNhc3RHdGtfaAor
I2RlZmluZSBXS0FQSUNhc3RHdGtfaAorCisjaWZuZGVmIFdLQVBJQ2FzdF9oCisjZXJyb3IgIlBs
ZWFzZSAjaW5jbHVkZSBcIldLQVBJQ2FzdC5oXCIgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZGlyZWN0
bHkuIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJWaWV3OworCitX
S19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVmLCBXZWJWaWV3KQorCit9CisKKyNlbmRpZiAvLyBX
S0FQSUNhc3RHdGtfaApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp
IDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJXS1ZpZXcuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2lu
Y2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXS1ZpZXdSZWYg
V0tWaWV3Q3JlYXRlKEdka1JlY3RhbmdsZSByZWN0LCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBHdGtXaWRnZXQqIGhvc3RXaW5kb3cpCit7Cisg
ICAgUmVmUHRyPFdlYlZpZXc+IHZpZXcgPSBXZWJWaWV3OjpjcmVhdGUocmVjdCwgdG9JbXBsKGNv
bnRleHRSZWYpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgaG9zdFdpbmRvdyk7CisgICAgcmV0dXJu
IHRvQVBJKHZpZXcucmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7Cit9CisKK0d0a1dpZGdldCogV0tW
aWV3R2V0V2luZG93KFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmll
d1JlZiktPndpbmRvdygpOworfQorCitHdGtXaWRnZXQqIFdLVmlld0dldEhvc3RXaW5kb3coV0tW
aWV3UmVmIHZpZXdSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+aG9zdFdpbmRv
dygpOworfQorCitXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1JlZikKK3sK
KyAgICByZXR1cm4gdG9BUEkodG9JbXBsKHZpZXdSZWYpLT5wYWdlKCkpOworfQorCit2b2lkIFdL
Vmlld1NldEhvc3RXaW5kb3coV0tWaWV3UmVmIHZpZXdSZWYsIEd0a1dpZGdldCogaG9zdFdpbmRv
dykKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldEhvc3RXaW5kb3coaG9zdFdpbmRvdyk7Cit9
CisKK1dLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0aFVSTChjb25zdCBjaGFyKiB1cmwpCit7CisgICAg
U3RyaW5nIHVybFN0cmluZyh1cmwpOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB1cmxTdHJpbmdJ
bXBsID0gdXJsU3RyaW5nLmltcGwoKTsKKyAgICByZXR1cm4gdG9VUkxSZWYodXJsU3RyaW5nSW1w
bC5yZWxlYXNlKCkucmVsZWFzZVJlZigpKTsKK30KSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLQVBJQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
QVBJQ2FzdC5oCShyZXZpc2lvbiA3NTA1NCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
QVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyNCw0ICsyMjUsNyBA
QAogI2luY2x1ZGUgIldLQVBJQ2FzdFdpbi5oIgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKEJVSUxE
SU5HX0dUS19fKQorI2luY2x1ZGUgIldLQVBJQ2FzdEd0ay5oIgorI2VuZGlmCiAjZW5kaWYgLy8g
V0tBUElDYXN0X2gK
</data>
<flag name="review"
          id="69517"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78945</attachid>
            <date>2011-01-14 08:51:25 -0800</date>
            <delta_ts>2011-02-09 06:30:15 -0800</delta_ts>
            <desc>WebView &amp; WebKitWebView implementation with review comments incorporation</desc>
            <filename>48509.webview.patch.complete</filename>
            <type>text/plain</type>
            <size>31272</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTc5NikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzggQEAKKzIwMTEtMDEtMTQgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3Jv
bGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFA
bW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtHVEtdIEltcGxlbWVudGF0aW9uIG9mIFdlYlZpZXcsIFdlYktpdFdlYlZpZXcgY2xh
c3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1
MDkKKworICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5jcHA6IEFkZGVkLiBU
aGUgR09iamVjdCBpbnRlcmZhY2UgZm9yIFdlYlZpZXcuIAorICAgICAgICBUaGUgR09iamVjdCBp
cyB0aGUgR3RrV2lkZ2V0IGhhbmRsZSB3aGljaCBpcyB1c2VkIGJ5IFdlYlZpZXcgY2xhc3MgZm9y
IEdUSyBwb3J0LgorICAgICAgICAoV2ViS2l0Ojp3ZWJraXRXZWJWaWV3UmVhbGl6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OndlYmtpdFdlYlZpZXdDb250YWluZXJBZGQpOgorICAgICAgICAoV2ViS2l0
Ojp3ZWJraXRXZWJWaWV3RGlzcG9zZSk6CisgICAgICAgIChXZWJLaXQ6OndlYmtpdFdlYlZpZXdD
bGFzc0luaXQpOgorICAgICAgICAoV2ViS2l0Ojp3ZWJraXRXZWJWaWV3SW5pdCk6CisgICAgICAg
IChXZWJLaXQ6OndlYmtpdFdlYlZpZXdHZXRUeXBlKToKKyAgICAgICAgKFdlYktpdDo6d2Via2l0
V2ViVmlld0dldFBhcmVudENsYXNzKToKKyAgICAgICAgKFdlYktpdDo6d2Via2l0V2ViVmlld0dl
dFdlYlZpZXdJbnN0YW5jZSk6CisgICAgICAgIChXZWJLaXQ6OndlYmtpdFdlYlZpZXdTZXRXZWJW
aWV3SW5zdGFuY2UpOgorICAgICAgICAoV2ViS2l0Ojp3ZWJraXRXZWJWaWV3R2V0V2luZG93KToK
KyAgICAgICAgKFdlYktpdDo6d2Via2l0V2ViVmlld0dldElNQ29udGV4dCk6CisgICAgICAgICog
VUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3Lmg6IEFkZGVkLiBUaGUgR09iamVjdCBpbnRlcmZh
Y2UgZGVjbGFyYXRpb25zIGZvciBHdGtXaWRnZXQgaGFuZGxlIGZvciBHVEsgcG9ydC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwOiBBZGRlZC4gVGhlIG5hdGl2ZSBHdGtXaWRn
ZXQgaGFuZGxlIGZvciBHVEsgcG9ydCB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBXS1Zp
ZXdSZWYuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdPbkV4cG9zZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdPbkRyYXcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojp3ZWJWaWV3T25TaXplQWxsb2NhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
Ojp3ZWJWaWV3Rm9jdXNJbkV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmll
d0ZvY3VzT3V0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3S2V5UHJl
c3NFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdLZXlSZWxlYXNlRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3QnV0dG9uUHJlc3NFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdCdXR0b25SZWxlYXNlRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3U2Nyb2xsRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3TW90aW9uTm90aWZ5RXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6fldlYlZp
ZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpnZXRXZWJWaWV3V2luZG93KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6c2V0SG9zdFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6Om9uUGFpbnRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uU2l6ZUV2
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25TZXRGb2N1c0V2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6b25LaWxsRm9jdXNFdmVudCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6Om9uS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpvbk1vdXNl
RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvbldoZWVsRXZlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3Ojppc0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnVwZGF0ZUFjdGl2ZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y2xvc2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpwcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpkaWRSZWxhdW5jaFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Ojp0YWtlRm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp0b29sVGlwQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldEN1cnNvcik6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6OnNldFZpZXdwb3J0QXJndW1lbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6cmVnaXN0ZXJFZGl0Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNs
ZWFyQWxsRWRpdENvbW1hbmRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0RWRpdENv
bW1hbmRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNw
YWNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZGlkTm90SGFuZGxlS2V5RXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjpzZXRGaW5kSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFnZURp
ZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnBhZ2VEaWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rv
cik6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJWaWV3Lmg6IEFkZGVkLiBDbGFzcyB3aGlj
aCBpbXBsZW1lbnRzIHRoZSBQYWdlQ2xpZW50IGludGVyZmFjZS4gCisgICAgICAgIEl0IGlzIGEg
d3JhcHBlciBvdmVyIHRoZSBuYXRpdmUgR3RrV2lkZ2V0IGhhbmRsZSBhc3NvY2lhdGVkIHdpdGgg
ZWFjaCBXS1ZpZXdSZWYgZm9yIEdUSyBwb3J0LgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3aW5kb3cpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3Ojpob3N0V2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFn
ZSk6CisKIDIwMTEtMDEtMTQgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYktpdFdl
YlZpZXcuaCIKKworI2luY2x1ZGUgIldlYlZpZXcuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3N0YXRpYyBncG9pbnRlciB3ZWJraXRXZWJWaWV3UGFyZW50Q2xhc3MgPSBOVUxMOworCitzdHJ1
Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3SW5zdGFuY2U7
CisgICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQ7CisgICAgZ2Jvb2xlYW4gZGlzcG9zZUhhc1J1
bjsKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdSZWFsaXplKEd0a1dpZGdldCogd2lk
Z2V0KQoreworICAgIGd0a193aWRnZXRfc2V0X3JlYWxpemVkKHdpZGdldCwgVFJVRSk7CisKKyAg
ICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisgICAgZ3VpbnQgYm9yZGVyV2lkdGggPSBndGtf
Y29udGFpbmVyX2dldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUih3aWRnZXQpKTsKKyNpZiBH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9u
KHdpZGdldCwgJmFsbG9jYXRpb24pOworI2Vsc2UKKyAgICBhbGxvY2F0aW9uID0gd2lkZ2V0LT5h
bGxvY2F0aW9uOworI2VuZGlmCisKKyAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7CisgICAg
YXR0cmlidXRlcy53aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfQ0hJTEQ7CisgICAgYXR0cmlidXRl
cy54ID0gYWxsb2NhdGlvbi54ICsgYm9yZGVyV2lkdGg7CisgICAgYXR0cmlidXRlcy55ID0gYWxs
b2NhdGlvbi55ICsgYm9yZGVyV2lkdGg7CisgICAgYXR0cmlidXRlcy53aWR0aCA9IGFsbG9jYXRp
b24ud2lkdGggLSBib3JkZXJXaWR0aCAqIDI7CisgICAgYXR0cmlidXRlcy5oZWlnaHQgPSBhbGxv
Y2F0aW9uLmhlaWdodCAtIGJvcmRlcldpZHRoICogMjsKKyAgICBhdHRyaWJ1dGVzLndjbGFzcyA9
IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0cmlidXRlcy52aXN1YWwgPSBndGtfd2lkZ2V0X2dl
dF92aXN1YWwod2lkZ2V0KTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGF0dHJpYnV0
ZXMuY29sb3JtYXAgPSBndGtfd2lkZ2V0X2dldF9jb2xvcm1hcCh3aWRnZXQpOworI2VuZGlmCisg
ICAgYXR0cmlidXRlcy5ldmVudF9tYXNrID0gR0RLX1ZJU0lCSUxJVFlfTk9USUZZX01BU0sgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfRVhQT1NVUkVfTUFTSyAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fUFJFU1NfTUFTSyAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fUkVMRUFTRV9NQVNLIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgR0RLX1BPSU5URVJfTU9USU9OX01BU0sgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBHREtfS0VZX1BSRVNTX01BU0sgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBHREtfS0VZX1JFTEVBU0VfTUFTSworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgR0RLX0JVVFRPTl9NT1RJT05fTUFTSyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IEdES19CVVRUT04xX01PVElPTl9NQVNLIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBHREtfQlVUVE9OM19NT1RJT05fTUFTSzsKKworICAgIGdpbnQgYXR0cmlidXRlc01hc2sgPSBH
REtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VBTDsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgorICAgIGF0dHJpYnV0ZXNNYXNrIHw9IEdES19XQV9DT0xPUk1BUDsKKyNlbmRpZgorICAg
IEdka1dpbmRvdyogd2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50
X3dpbmRvdyh3aWRnZXQpLCAmYXR0cmlidXRlcywgYXR0cmlidXRlc01hc2spOworICAgIGd0a193
aWRnZXRfc2V0X3dpbmRvdyh3aWRnZXQsIHdpbmRvdyk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNl
cl9kYXRhKHdpbmRvdywgd2lkZ2V0KTsKKworI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDIwLCAw
KQorICAgIGd0a193aWRnZXRfc3R5bGVfYXR0YWNoKHdpZGdldCk7CisjZWxzZQorICAgIHdpZGdl
dC0+c3R5bGUgPSBndGtfc3R5bGVfYXR0YWNoKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCks
IHdpbmRvdyk7CisjZW5kaWYKKyAgICBndGtfc3R5bGVfc2V0X2JhY2tncm91bmQoZ3RrX3dpZGdl
dF9nZXRfc3R5bGUod2lkZ2V0KSwgd2luZG93LCBHVEtfU1RBVEVfTk9STUFMKTsKKworICAgIFdl
YktpdFdlYlZpZXcqIHdlYmtpdFdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAg
ICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyh3ZWJraXRXZWJWaWV3LT5wcml2LT5p
bUNvbnRleHQsIHdpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb250YWlu
ZXJBZGQoR3RrQ29udGFpbmVyKiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQoreworICAg
IGd0a193aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNwb3NlKEdPYmplY3QqIGdvYmplY3QpCit7
CisgICAgV2ViS2l0V2ViVmlldyogd2Via2l0V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnb2Jq
ZWN0KTsKKyAgICBpZiAod2Via2l0V2ViVmlldy0+cHJpdi0+ZGlzcG9zZUhhc1J1bikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZ19vYmplY3RfdW5yZWYod2Via2l0V2ViVmlldy0+cHJpdi0+aW1D
b250ZXh0KTsKKyAgICB3ZWJraXRXZWJWaWV3LT5wcml2LT5kaXNwb3NlSGFzUnVuID0gVFJVRTsK
KyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRXZWJWaWV3UGFyZW50Q2xhc3MpLT5kaXNwb3NlKGdv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q2xhc3NJbml0KFdlYktpdFdl
YlZpZXdDbGFzcyogd2Via2l0V2ViVmlld0NsYXNzKQoreworICAgIHdlYmtpdFdlYlZpZXdQYXJl
bnRDbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCh3ZWJraXRXZWJWaWV3Q2xhc3MpOwor
CisgICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdldENsYXNzID0gR1RLX1dJREdFVF9DTEFTUyh3ZWJr
aXRXZWJWaWV3Q2xhc3MpOworICAgIHdpZGdldENsYXNzLT5yZWFsaXplID0gd2Via2l0V2ViVmll
d1JlYWxpemU7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICB3aWRnZXRDbGFzcy0+ZXhw
b3NlX2V2ZW50ID0gV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3T25FeHBvc2U7CisjZWxzZQorICAg
IHdpZGdldENsYXNzLT5kcmF3ID0gV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3T25EcmF3OworI2Vu
ZGlmCisgICAgd2lkZ2V0Q2xhc3MtPnNpemVfYWxsb2NhdGUgPSBXZWJLaXQ6OldlYlZpZXc6Ondl
YlZpZXdPblNpemVBbGxvY2F0ZTsKKyAgICB3aWRnZXRDbGFzcy0+Zm9jdXNfaW5fZXZlbnQgPSBX
ZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdGb2N1c0luRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmZv
Y3VzX291dF9ldmVudCA9IFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0ZvY3VzT3V0RXZlbnQ7Cisg
ICAgd2lkZ2V0Q2xhc3MtPmtleV9wcmVzc19ldmVudCA9IFdlYktpdDo6V2ViVmlldzo6d2ViVmll
d0tleVByZXNzRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtleV9yZWxlYXNlX2V2ZW50ID0gV2Vi
S2l0OjpXZWJWaWV3Ojp3ZWJWaWV3S2V5UmVsZWFzZUV2ZW50OworICAgIHdpZGdldENsYXNzLT5i
dXR0b25fcHJlc3NfZXZlbnQgPSBXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdCdXR0b25QcmVzc0V2
ZW50OworICAgIHdpZGdldENsYXNzLT5idXR0b25fcmVsZWFzZV9ldmVudCA9IFdlYktpdDo6V2Vi
Vmlldzo6d2ViVmlld0J1dHRvblJlbGVhc2VFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+c2Nyb2xs
X2V2ZW50ID0gV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3U2Nyb2xsRXZlbnQ7CisgICAgd2lkZ2V0
Q2xhc3MtPm1vdGlvbl9ub3RpZnlfZXZlbnQgPSBXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdNb3Rp
b25Ob3RpZnlFdmVudDsKKworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1Mod2Via2l0V2ViVmlld0NsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmRpc3Bvc2Ug
PSB3ZWJraXRXZWJWaWV3RGlzcG9zZTsKKworICAgIEd0a0NvbnRhaW5lckNsYXNzKiBjb250YWlu
ZXJDbGFzcyA9IEdUS19DT05UQUlORVJfQ0xBU1Mod2Via2l0V2ViVmlld0NsYXNzKTsKKyAgICBj
b250YWluZXJDbGFzcy0+YWRkID0gd2Via2l0V2ViVmlld0NvbnRhaW5lckFkZDsKKworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJraXRXZWJWaWV3Q2xhc3MsIHNpemVvZihXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3SW5pdChXZWJL
aXRXZWJWaWV3KiB3ZWJraXRXZWJWaWV3KQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBw
cml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHdlYmtpdFdlYlZpZXcsIFdFQktJVF9U
WVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3UHJpdmF0ZSk7CisgICAgd2Via2l0V2ViVmlldy0+
cHJpdiA9IHByaXY7CisKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3ZWJraXRXZWJWaWV3LCBH
VEtfQ0FOX0ZPQ1VTKTsKKyAgICBwcml2LT5pbUNvbnRleHQgPSBndGtfaW1fbXVsdGljb250ZXh0
X25ldygpOworICAgIHByaXYtPmRpc3Bvc2VIYXNSdW4gPSBGQUxTRTsKK30KKworR1R5cGUgd2Vi
a2l0V2ViVmlld0dldFR5cGUoKQoreworICAgIHN0YXRpYyBHVHlwZSB0eXBlID0gMDsgCisgICAg
aWYgKHR5cGUpCisgICAgICAgIHJldHVybiB0eXBlOworCisgICAgc3RhdGljIGNvbnN0IEdUeXBl
SW5mbyBpbmZvID0geworICAgICAgICAgICAgc2l6ZW9mKFdlYktpdFdlYlZpZXdDbGFzcyksICAg
ICAgICAgIC8qIGNsYXNzIHN0cnVjdHVyZSBzaXplICovCisgICAgICAgICAgICAwLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiYXNlX2luaXQgKi8KKyAgICAgICAgICAgIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfZmluYWxpemUgKi8KKyAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0NsYXNzSW5pdEZ1bmM+KHdlYmtpdFdlYlZpZXdD
bGFzc0luaXQpLCAvKiBjbGFzcyBpbml0aWFsaXplciAqLworICAgICAgICAgICAgMCwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2xhc3NfZmluYWxpemUgKi8KKyAgICAgICAg
ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsYXNzX2RhdGEgKi8K
KyAgICAgICAgICAgIHNpemVvZihXZWJLaXRXZWJWaWV3KSwgICAgICAgICAgICAgICAvKiBpbnN0
YW5jZSBzdHJ1Y3R1cmUgc2l6ZSAqLworICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyogcHJlYWxsb2NhdGVkIGluc3RhbmNlcyAqLworICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxHSW5zdGFuY2VJbml0RnVuYz4od2Via2l0V2ViVmlld0luaXQpLCAg
IC8qIGluc3RhbmNlIGluaXRpYWxpemVyICovCisgICAgICAgICAgICAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBmdW5jdGlvbiB0YWJsZSAqLworICAgIH07ICAgCisgICAg
dHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMoR1RLX1RZUEVfQ09OVEFJTkVSLCAiV2ViS2l0
V2ViVmlldyIsICZpbmZvLCBzdGF0aWNfY2FzdDxHVHlwZUZsYWdzPigwKSk7CisKKyAgICByZXR1
cm4gdHlwZTsKK30KKworZ3BvaW50ZXIgd2Via2l0V2ViVmlld0dldFBhcmVudENsYXNzKCkKK3sK
KyAgICByZXR1cm4gd2Via2l0V2ViVmlld1BhcmVudENsYXNzOworfQorCitXZWJWaWV3KiB3ZWJr
aXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdlYktpdFdlYlZpZXcqIHdlYmtpdFdlYlZpZXcp
Cit7CisgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXctPnByaXYtPndlYlZpZXdJbnN0YW5jZTsKK30K
Kwordm9pZCB3ZWJraXRXZWJWaWV3U2V0V2ViVmlld0luc3RhbmNlKFdlYktpdFdlYlZpZXcqIHdl
YmtpdFdlYlZpZXcsIFdlYlZpZXcqIHdlYlZpZXdJbnN0YW5jZSkKK3sKKyAgICB3ZWJraXRXZWJW
aWV3LT5wcml2LT53ZWJWaWV3SW5zdGFuY2UgPSB3ZWJWaWV3SW5zdGFuY2U7Cit9CisKK0dka1dp
bmRvdyogd2Via2l0V2ViVmlld0dldFdpbmRvdyhXZWJLaXRXZWJWaWV3KiB3ZWJraXRXZWJWaWV3
KQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh3ZWJraXRX
ZWJWaWV3KSk7Cit9CisKK0d0a0lNQ29udGV4dCogd2Via2l0V2ViVmlld0dldElNQ29udGV4dChX
ZWJLaXRXZWJWaWV3KiB3ZWJraXRXZWJWaWV3KQoreworICAgIHJldHVybiB3ZWJraXRXZWJWaWV3
LT5wcml2LT5pbUNvbnRleHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViS2l0V2ViVmll
d19oCisjZGVmaW5lIFdlYktpdFdlYlZpZXdfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFVyAgICAgICAg
ICAgICAgICAod2Via2l0V2ViVmlld0dldFR5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVX
KG9iaikgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfVFlQRV9XRUJfVklFVywgV2ViS2l0V2ViVmlldykpCisjZGVmaW5lIFdFQktJVF9XRUJf
VklFV19DTEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19XRUJfVklFVyhvYmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVcpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VC
X1ZJRVdfQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9UWVBFX1dFQl9WSUVXKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0dFVF9DTEFT
UyhvYmopICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQ
RV9XRUJfVklFVywgV2ViS2l0V2ViVmlld0NsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVX
X0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwg
V0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdQcml2YXRlKSkKKworY2xhc3MgV2Vi
VmlldzsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2ViS2l0V2ViVmlld0NsYXNzOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIFdlYktpdFdlYlZpZXdQcml2YXRlOwor
CitzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgeworICAgIEd0a0NvbnRhaW5lciBwYXJlbnRJbnN0YW5j
ZTsKKyAgICAvKjwgcHJpdmF0ZSA+Ki8gCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXY7
Cit9OworCitzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CisgICAgR3RrQ29udGFpbmVyQ2xh
c3MgcGFyZW50Q2xhc3M7Cit9OworCitHVHlwZSB3ZWJraXRXZWJWaWV3R2V0VHlwZSgpOworCitn
cG9pbnRlciB3ZWJraXRXZWJWaWV3R2V0UGFyZW50Q2xhc3MoKTsKKworV2ViVmlldyogd2Via2l0
V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXZWJLaXRXZWJWaWV3Kik7CisKK3ZvaWQgd2Via2l0
V2ViVmlld1NldFdlYlZpZXdJbnN0YW5jZShXZWJLaXRXZWJWaWV3KiwgV2ViVmlldyopOworCitH
ZGtXaW5kb3cqIHdlYmtpdFdlYlZpZXdHZXRXaW5kb3coV2ViS2l0V2ViVmlldyopOworCitHdGtJ
TUNvbnRleHQqIHdlYmtpdFdlYlZpZXdHZXRJTUNvbnRleHQoV2ViS2l0V2ViVmlldyopOworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYktpdFdlYlZpZXdfaCAKSW5kZXg6
IFdlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViVmlldy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYlZpZXcuaCIKKworI2lu
Y2x1ZGUgIkNodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKKyNpbmNs
dWRlICJXZWJFdmVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3LmgiCisjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCitnYm9vbGVhbiBXZWJWaWV3Ojp3ZWJWaWV3T25FeHBvc2UoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50RXhwb3NlKiBldmVudCkKK3sKKyAgICBXZWJWaWV3KiB3
ZWJWaWV3ID0gd2Via2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJRVco
d2lkZ2V0KSk7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworICAgIGdka19yZWdpb25fZ2V0
X2NsaXBib3goZXZlbnQtPnJlZ2lvbiwgJmNsaXBSZWN0KTsKKyAgICB3ZWJWaWV3LT5vblBhaW50
RXZlbnQod2lkZ2V0LCBJbnRSZWN0KGNsaXBSZWN0KSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisjZWxzZQorZ2Jvb2xlYW4gV2ViVmlldzo6d2ViVmlld09uRHJhdyhHdGtXaWRnZXQqLCBjYWly
b190KikKK3sKKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZW5kaWYKKwordm9pZCBXZWJWaWV3Ojp3
ZWJWaWV3T25TaXplQWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24qIGFs
bG9jYXRpb24pCit7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYmtpdFdlYlZpZXdHZXRXZWJW
aWV3SW5zdGFuY2UoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpOworICAgIEdUS19XSURHRVRfQ0xB
U1MoR19PQkpFQ1RfQ0xBU1Mod2Via2l0V2ViVmlld0dldFBhcmVudENsYXNzKCkpKS0+c2l6ZV9h
bGxvY2F0ZSh3aWRnZXQsIGFsbG9jYXRpb24pOworICAgIHdlYlZpZXctPm9uU2l6ZUV2ZW50KHdp
ZGdldCwgSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KSk7Cit9
CisKK2dib29sZWFuIFdlYlZpZXc6OndlYlZpZXdGb2N1c0luRXZlbnQoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYmtpdFdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0g
d2Via2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZSh3ZWJraXRXZWJWaWV3KTsKKyAgICAKKyAg
ICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwod2lkZ2V0KTsK
KyAgICBpZiAoR1RLX1dJREdFVF9UT1BMRVZFTCh0b3BsZXZlbCkgJiYgZ3RrX3dpbmRvd19oYXNf
dG9wbGV2ZWxfZm9jdXMoR1RLX1dJTkRPVyh0b3BsZXZlbCkpKSB7CisgICAgICAgIGd0a19pbV9j
b250ZXh0X2ZvY3VzX2luKHdlYmtpdFdlYlZpZXdHZXRJTUNvbnRleHQod2Via2l0V2ViVmlldykp
OworICAgICAgICBpZiAoISh3ZWJWaWV3LT5tX2lzUGFnZUFjdGl2ZSkpIHsKKyAgICAgICAgICAg
IHdlYlZpZXctPm1faXNQYWdlQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIHdlYlZpZXctPnVw
ZGF0ZUFjdGl2ZVN0YXRlKCk7CisgICAgICAgIH0KKyAgICAgICAgd2ViVmlldy0+b25TZXRGb2N1
c0V2ZW50KHdpZGdldCk7CisgICAgfQorCisgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1MoR19P
QkpFQ1RfQ0xBU1Mod2Via2l0V2ViVmlld0dldFBhcmVudENsYXNzKCkpKS0+Zm9jdXNfaW5fZXZl
bnQod2lkZ2V0LCBldmVudCk7Cit9CisKK2dib29sZWFuIFdlYlZpZXc6OndlYlZpZXdGb2N1c091
dEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEZvY3VzKiBldmVudCkKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJraXRXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7Cisg
ICAgV2ViVmlldyogd2ViVmlldyA9IHdlYmtpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFuY2Uod2Vi
a2l0V2ViVmlldyk7CisKKyAgICB3ZWJWaWV3LT5vbktpbGxGb2N1c0V2ZW50KHdpZGdldCk7Cisg
ICAgd2ViVmlldy0+bV9pc1BhZ2VBY3RpdmUgPSBmYWxzZTsgCisgICAgd2ViVmlldy0+dXBkYXRl
QWN0aXZlU3RhdGUoKTsKKyAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dCA9IHdlYmtpdFdlYlZp
ZXdHZXRJTUNvbnRleHQod2Via2l0V2ViVmlldyk7CisgICAgaWYgKGltQ29udGV4dCkKKyAgICAg
ICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KGltQ29udGV4dCk7CisgICAgCisgICAgcmV0dXJu
IEdUS19XSURHRVRfQ0xBU1MoR19PQkpFQ1RfQ0xBU1Mod2Via2l0V2ViVmlld0dldFBhcmVudENs
YXNzKCkpKS0+Zm9jdXNfb3V0X2V2ZW50KHdpZGdldCwgZXZlbnQpOworfQorCitnYm9vbGVhbiBX
ZWJWaWV3Ojp3ZWJWaWV3S2V5UHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRL
ZXkqIGV2ZW50KQoreworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRXZWJWaWV3R2V0V2Vi
Vmlld0luc3RhbmNlKFdFQktJVF9XRUJfVklFVyh3aWRnZXQpKTsKKyAgICB3ZWJWaWV3LT5vbktl
eUV2ZW50KGV2ZW50KTsKKyAgICAKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyhHX09CSkVD
VF9DTEFTUyh3ZWJraXRXZWJWaWV3R2V0UGFyZW50Q2xhc3MoKSkpLT5rZXlfcHJlc3NfZXZlbnQo
d2lkZ2V0LCBldmVudCk7Cit9CisKK2dib29sZWFuIFdlYlZpZXc6OndlYlZpZXdLZXlSZWxlYXNl
RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKK3sKKyAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJraXRXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7CisgICAg
V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFuY2Uod2Via2l0
V2ViVmlldyk7CisKKyAgICBpZiAoZ3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKHdlYmtp
dFdlYlZpZXdHZXRJTUNvbnRleHQod2Via2l0V2ViVmlldyksIGV2ZW50KSkKKyAgICAgICAgcmV0
dXJuIFRSVUU7CisgICAgCisgICAgd2ViVmlldy0+b25LZXlFdmVudChldmVudCk7CisgICAgcmV0
dXJuIEdUS19XSURHRVRfQ0xBU1MoR19PQkpFQ1RfQ0xBU1Mod2Via2l0V2ViVmlld0dldFBhcmVu
dENsYXNzKCkpKS0+a2V5X3JlbGVhc2VfZXZlbnQod2lkZ2V0LCBldmVudCk7Cit9CisKK2dib29s
ZWFuIFdlYlZpZXc6OndlYlZpZXdCdXR0b25QcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBH
ZGtFdmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYmtpdFdl
YlZpZXdHZXRXZWJWaWV3SW5zdGFuY2UoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpOworICAgIGd0
a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIHdlYlZpZXctPm9uTW91c2VFdmVudChy
ZWludGVycHJldF9jYXN0PEdka0V2ZW50QW55Kj4oZXZlbnQpKTsKKworICAgIHJldHVybiBGQUxT
RTsKK30KKworZ2Jvb2xlYW4gV2ViVmlldzo6d2ViVmlld0J1dHRvblJlbGVhc2VFdmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50KQoreworICAgIFdlYlZpZXcqIHdl
YlZpZXcgPSB3ZWJraXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9XRUJfVklFVyh3
aWRnZXQpKTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKKyAgICB3ZWJWaWV3
LT5vbk1vdXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudEFueSo+KGV2ZW50KSk7CisK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIFdlYlZpZXc6OndlYlZpZXdTY3JvbGxF
dmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQoreworICAgIFdl
YlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9X
RUJfVklFVyh3aWRnZXQpKTsKKyAgICB3ZWJWaWV3LT5vbldoZWVsRXZlbnQoZXZlbnQpOworCisg
ICAgcmV0dXJuIEZBTFNFOworfQorCitnYm9vbGVhbiBXZWJWaWV3Ojp3ZWJWaWV3TW90aW9uTm90
aWZ5RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCkKK3sKKyAg
ICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJL
SVRfV0VCX1ZJRVcod2lkZ2V0KSk7CisgICAgd2ViVmlldy0+b25Nb3VzZUV2ZW50KHJlaW50ZXJw
cmV0X2Nhc3Q8R2RrRXZlbnRBbnkqPihldmVudCkpOworCisgICAgcmV0dXJuIEZBTFNFOworfQor
CitXZWJWaWV3OjpXZWJWaWV3KEdka1JlY3RhbmdsZSB3aW5kb3dSZWN0LCBXZWJDb250ZXh0KiBj
b250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgR3RrV2lkZ2V0KiBob3N0V2luZG93KQor
ICAgIDogbV93aW5kb3dSZWN0KHdpbmRvd1JlY3QpCisgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdp
bmRvdykKKyAgICAsIG1faXNQYWdlQWN0aXZlKHRydWUpCit7CisgICAgbV9wYWdlID0gY29udGV4
dC0+Y3JlYXRlV2ViUGFnZShwYWdlR3JvdXApOworICAgIG1fcGFnZS0+c2V0UGFnZUNsaWVudCh0
aGlzKTsKKyAgICBtX3BhZ2UtPnNldERyYXdpbmdBcmVhKENodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YVByb3h5OjpjcmVhdGUodGhpcywgbV9wYWdlLmdldCgpKSk7CisgICAgbV9wYWdlLT5pbml0aWFs
aXplV2ViUGFnZShJbnRSZWN0KHdpbmRvd1JlY3QpLnNpemUoKSk7CisKKyAgICBtX3dpbmRvdyA9
IHN0YXRpY19jYXN0PEd0a1dpZGdldCo+KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklF
VywgTlVMTCkpOyAKKyAgICBBU1NFUlQobV93aW5kb3cpOworICAgIFdlYktpdFdlYlZpZXcqIHdl
YmtpdFdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcobV93aW5kb3cpOworICAgIHdlYmtpdFdlYlZp
ZXdTZXRXZWJWaWV3SW5zdGFuY2Uod2Via2l0V2ViVmlldywgdGhpcyk7Cit9CisKK1dlYlZpZXc6
On5XZWJWaWV3KCkKK3sKK30KKworR2RrV2luZG93KiBXZWJWaWV3OjpnZXRXZWJWaWV3V2luZG93
KCkKK3sKKyAgICByZXR1cm4gd2Via2l0V2ViVmlld0dldFdpbmRvdyhXRUJLSVRfV0VCX1ZJRVco
bV93aW5kb3cpKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRIb3N0V2luZG93KEd0a1dpZGdldCog
aG9zdFdpbmRvdykKK3sKKyAgICBtX2hvc3RXaW5kb3cgPSBob3N0V2luZG93OworfQorCit2b2lk
IFdlYlZpZXc6Om9uUGFpbnRFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgSW50UmVjdCB3aW5kb3dS
ZWN0KQoreworICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdp
ZGdldCk7CisgICAgQVNTRVJUKHdpbmRvdyk7CisgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5w
YWludCh3aW5kb3dSZWN0LCB3aW5kb3cpOworfQorCit2b2lkIFdlYlZpZXc6Om9uU2l6ZUV2ZW50
KEd0a1dpZGdldCosIEludFNpemUgd2luZG93U2l6ZSkKK3sKKyAgICBtX3BhZ2UtPmRyYXdpbmdB
cmVhKCktPnNldFNpemUod2luZG93U2l6ZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6b25TZXRGb2N1
c0V2ZW50KEd0a1dpZGdldCopCit7CisgICAgbV9wYWdlLT5zZXRGb2N1c2VkKHRydWUpOworfQor
Cit2b2lkIFdlYlZpZXc6Om9uS2lsbEZvY3VzRXZlbnQoR3RrV2lkZ2V0KikKK3sKKyAgICBtX3Bh
Z2UtPnNldEZvY3VzZWQoZmFsc2UpOworfQorCit2b2lkIFdlYlZpZXc6Om9uS2V5RXZlbnQoR2Rr
RXZlbnRLZXkqIGV2ZW50KQoreworICAgIG1fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRp
dmVXZWJLZXlib2FyZEV2ZW50KGV2ZW50KSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6b25Nb3VzZUV2
ZW50KEdka0V2ZW50QW55KiBldmVudCkKK3sKKyAgICBtX3BhZ2UtPmhhbmRsZU1vdXNlRXZlbnQo
V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGV2ZW50KSk7Cit9CisKK3ZvaWQg
V2ViVmlldzo6b25XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3sKKyAgICBtX3Bh
Z2UtPmhhbmRsZVdoZWVsRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50
KGV2ZW50KSk7Cit9CisKK2Jvb2wgV2ViVmlldzo6aXNBY3RpdmUoKQoreworICAgIHJldHVybiBt
X2lzUGFnZUFjdGl2ZTsKK30KKwordm9pZCBXZWJWaWV3Ojp1cGRhdGVBY3RpdmVTdGF0ZSgpCit7
CisgICAgbV9wYWdlLT5zZXRBY3RpdmUoaXNBY3RpdmUoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6
Y2xvc2UoKQoreworICAgIG1fcGFnZS0+Y2xvc2UoKTsKK30KKworLy8gUGFnZUNsaWVudCdzIHB1
cmUgdmlydHVhbCBmdW5jdGlvbnMKK3ZvaWQgV2ViVmlldzo6cHJvY2Vzc0RpZENyYXNoKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmRpZFJlbGF1bmNoUHJv
Y2VzcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp0YWtl
Rm9jdXMoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6
OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29y
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNldFZpZXdw
b3J0QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQo
UGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRv
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xlYXJBbGxF
ZGl0Q29tbWFuZHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmll
dzo6c2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmLCBib29sLCBpbnQpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb0Rldmlj
ZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1JlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gdmlld1JlY3Q7Cit9CisKK0Zsb2F0UmVjdCBXZWJWaWV3Ojpjb252ZXJ0
VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiB2aWV3UmVjdDsKK30KKwordm9pZCBXZWJWaWV3OjpkaWROb3RI
YW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBX
ZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29udGV4dE1l
bnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViVmll
dzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVP
dXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKK3ZvaWQgV2ViVmlldzo6cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpwYWdl
RGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwordm9pZCBXZWJW
aWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVzZW50YXRp
b24pCit7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21S
ZXByZXNlbnRhdGlvbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKK3sKK30KKworZG91
YmxlIFdlYlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCit7CisgICAgcmV0
dXJuIDEuMDsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21G
YWN0b3IoZG91YmxlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYlZpZXcuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENv
cHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWaWV3X2gKKyNkZWZpbmUgV2ViVmlld19oCisK
KyNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUg
PGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERyYXdpbmdBcmVhUHJveHk7CitjbGFzcyBX
ZWJQYWdlTmFtZXNwYWNlOworCitjbGFzcyBXZWJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8V2Vi
Vmlldz4sIHB1YmxpYyBQYWdlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJWaWV3
KCk7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmll
d09uRXhwb3NlKEd0a1dpZGdldCosIEdka0V2ZW50RXhwb3NlKik7CisjZWxzZQorICAgIHN0YXRp
YyBnYm9vbGVhbiB3ZWJWaWV3T25EcmF3KEd0a1dpZGdldCosIGNhaXJvX3QqKTsKKyNlbmRpZgor
ICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdPblNpemVBbGxvY2F0ZShHdGtXaWRnZXQqLCBHdGtBbGxv
Y2F0aW9uKik7CisgICAgc3RhdGljIGdib29sZWFuIHdlYlZpZXdGb2N1c0luRXZlbnQoR3RrV2lk
Z2V0KiwgR2RrRXZlbnRGb2N1cyopOworICAgIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3Rm9jdXNP
dXRFdmVudChHdGtXaWRnZXQqLCBHZGtFdmVudEZvY3VzKik7CisgICAgc3RhdGljIGdib29sZWFu
IHdlYlZpZXdLZXlQcmVzc0V2ZW50KEd0a1dpZGdldCosIEdka0V2ZW50S2V5Kik7CisgICAgc3Rh
dGljIGdib29sZWFuIHdlYlZpZXdLZXlSZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRL
ZXkqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0J1dHRvblByZXNzRXZlbnQoR3RrV2lk
Z2V0KiwgR2RrRXZlbnRCdXR0b24qKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0J1dHRv
blJlbGVhc2VFdmVudChHdGtXaWRnZXQqLCBHZGtFdmVudEJ1dHRvbiopOworICAgIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJWaWV3U2Nyb2xsRXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnRTY3JvbGwqKTsK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld01vdGlvbk5vdGlmeUV2ZW50KEd0a1dpZGdldCos
IEdka0V2ZW50TW90aW9uKik7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJWaWV3PiBjcmVh
dGUoR2RrUmVjdGFuZ2xlIHdpbmRvd1JlY3QsIFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VH
cm91cCogcGFnZUdyb3VwLCBHdGtXaWRnZXQqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZpZXcod2luZG93UmVjdCwgY29udGV4dCwgcGFnZUdyb3Vw
LCBob3N0V2luZG93KSk7CisgICAgfQorCisgICAgR3RrV2lkZ2V0KiB3aW5kb3coKSBjb25zdCB7
IHJldHVybiBtX3dpbmRvdzsgfQorICAgIEd0a1dpZGdldCogaG9zdFdpbmRvdygpIGNvbnN0IHsg
cmV0dXJuIG1faG9zdFdpbmRvdzsgfQorICAgIHZvaWQgc2V0SG9zdFdpbmRvdyhHdGtXaWRnZXQq
KTsKKworICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZS5nZXQo
KTsgfQorCitwcml2YXRlOgorICAgIFdlYlZpZXcoR2RrUmVjdGFuZ2xlLCBXZWJDb250ZXh0Kiwg
V2ViUGFnZUdyb3VwKiwgR3RrV2lkZ2V0Kik7CisKKyAgICBHZGtXaW5kb3cqIGdldFdlYlZpZXdX
aW5kb3coKTsKKyAgICB2b2lkIG9uUGFpbnRFdmVudChHdGtXaWRnZXQqLCBXZWJDb3JlOjpJbnRS
ZWN0KTsKKyAgICB2b2lkIG9uU2l6ZUV2ZW50KEd0a1dpZGdldCosIFdlYkNvcmU6OkludFNpemUp
OworICAgIHZvaWQgb25TZXRGb2N1c0V2ZW50KEd0a1dpZGdldCopOworICAgIHZvaWQgb25LaWxs
Rm9jdXNFdmVudChHdGtXaWRnZXQqKTsKKyAgICB2b2lkIG9uS2V5RXZlbnQoR2RrRXZlbnRLZXkq
KTsKKyAgICB2b2lkIG9uTW91c2VFdmVudChHZGtFdmVudEFueSopOworICAgIHZvaWQgb25XaGVl
bEV2ZW50KEdka0V2ZW50U2Nyb2xsKik7CisKKyAgICBib29sIGlzQWN0aXZlKCk7CisgICAgdm9p
ZCB1cGRhdGVBY3RpdmVTdGF0ZSgpOworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIC8vIFBhZ2VD
bGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCk7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpOworICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoYm9v
bCBkaXJlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6
OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNv
cihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRB
cmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+
LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVk
aXRDb21tYW5kcygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZFN0YXRlKGNvbnN0
IFdURjo6U3RyaW5nJiwgYm9vbCwgaW50KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVj
dCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRpZE5vdEhhbmRsZUtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2Vi
UG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVu
dVByb3h5KFdlYlBhZ2VQcm94eSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaW5kSW5kaWNhdG9y
KFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCk7CisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRFbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZExlYXZlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0
TG9hZEZvck1haW5GcmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0aW9uKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25z
dCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJik7CisgICAgdmlydHVhbCBkb3VibGUgY3VzdG9tUmVw
cmVzZW50YXRpb25ab29tRmFjdG9yKCk7CisgICAgdmlydHVhbCB2b2lkIHNldEN1c3RvbVJlcHJl
c2VudGF0aW9uWm9vbUZhY3Rvcihkb3VibGUpOworCisgICAgLy8gTWVtYmVycyBvZiBXZWJWaWV3
IGNsYXNzCisgICAgR2RrUmVjdGFuZ2xlIG1fd2luZG93UmVjdDsKKyAgICBHdGtXaWRnZXQqIG1f
d2luZG93OworICAgIEd0a1dpZGdldCogbV9ob3N0V2luZG93OworICAgIGJvb2wgbV9pc1BhZ2VB
Y3RpdmU7CisgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbV9wYWdlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJWaWV3X2gK
</data>
<flag name="review"
          id="70322"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81797</attachid>
            <date>2011-02-09 06:30:15 -0800</date>
            <delta_ts>2011-02-10 05:50:12 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>webview.patch</filename>
            <type>text/plain</type>
            <size>31004</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGZkZmU2NzU1NmI5YTQ3ZDM3NTNmY2E4N2E5YzM5MDc5NmRkNDQxZmUKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MjowMjowMyAyMDExICswMTAwCgogICAgMjAxMS0wMi0wNyAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KICAgIAogICAgICAgICAgICBCYXNlZCBvbiBwYXRjaCBieSBBbXJ1dGggUmFqIGFuZCBS
YXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYQogICAgCiAgICAgICAgICAgIFtHVEtdIEltcGxlbWVu
dCBXZWJWaWV3IGFuZCBXZWJLaXRXZWJWaWV3IGNsYXNzZXMgZm9yIFdlYktpdDIKICAgICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTA5CiAgICAKICAg
ICAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKICAgICAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwOiBBZGRlZC4gVGhlIEdPYmplY3QgaW50ZXJmYWNlCiAgICAgICAgICAg
IGZvciBXZWJWaWV3LiBUaGUgR09iamVjdCBpcyB0aGUgR3RrV2lkZ2V0IGhhbmRsZSB3aGljaCBp
cyB1c2VkIGJ5CiAgICAgICAgICAgIFdlYlZpZXcgY2xhc3MgZm9yIEdUSyBwb3J0LgogICAgICAg
ICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5oOiBBZGRlZC4gVGhlIEdPYmplY3Qg
aW50ZXJmYWNlCiAgICAgICAgICAgIGRlY2xhcmF0aW9ucyBmb3IgR3RrV2lkZ2V0IGhhbmRsZSBm
b3IgR1RLIHBvcnQuCiAgICAgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmNwcDogQWRk
ZWQuIFRoZSBuYXRpdmUgR3RrV2lkZ2V0IGhhbmRsZQogICAgICAgICAgICBmb3IgR1RLIHBvcnQg
d2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggV0tWaWV3UmVmLgogICAgICAgICAgICAqIFVJ
UHJvY2Vzcy9ndGsvV2ViVmlldy5oOiBBZGRlZC4gQ2xhc3Mgd2hpY2ggaW1wbGVtZW50cyB0aGUK
ICAgICAgICAgICAgUGFnZUNsaWVudCBpbnRlcmZhY2UuICBJdCBpcyBhIHdyYXBwZXIgb3ZlciB0
aGUgbmF0aXZlIEd0a1dpZGdldAogICAgICAgICAgICBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIGVh
Y2ggV0tWaWV3UmVmIGZvciBHVEsgcG9ydC4KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNmI5NjBlMy4uZWZjOTU1
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTAyLTA3ICBBbGVqYW5kcm8gRy4g
Q2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEJhc2VkIG9uIHBhdGNoIGJ5IEFtcnV0aCBSYWogYW5kIFJhdmkg
UGhhbmVlbmRyYSBLYXNpYmhhdGxhCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlZpZXcg
YW5kIFdlYktpdFdlYlZpZXcgY2xhc3NlcyBmb3IgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MDkKKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5jcHA6IEFkZGVk
LiBUaGUgR09iamVjdCBpbnRlcmZhY2UKKyAgICAgICAgZm9yIFdlYlZpZXcuIFRoZSBHT2JqZWN0
IGlzIHRoZSBHdGtXaWRnZXQgaGFuZGxlIHdoaWNoIGlzIHVzZWQgYnkKKyAgICAgICAgV2ViVmll
dyBjbGFzcyBmb3IgR1RLIHBvcnQuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJW
aWV3Lmg6IEFkZGVkLiBUaGUgR09iamVjdCBpbnRlcmZhY2UKKyAgICAgICAgZGVjbGFyYXRpb25z
IGZvciBHdGtXaWRnZXQgaGFuZGxlIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
Z3RrL1dlYlZpZXcuY3BwOiBBZGRlZC4gVGhlIG5hdGl2ZSBHdGtXaWRnZXQgaGFuZGxlCisgICAg
ICAgIGZvciBHVEsgcG9ydCB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBXS1ZpZXdSZWYu
CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJWaWV3Lmg6IEFkZGVkLiBDbGFzcyB3aGljaCBp
bXBsZW1lbnRzIHRoZQorICAgICAgICBQYWdlQ2xpZW50IGludGVyZmFjZS4gIEl0IGlzIGEgd3Jh
cHBlciBvdmVyIHRoZSBuYXRpdmUgR3RrV2lkZ2V0CisgICAgICAgIGhhbmRsZSBhc3NvY2lhdGVk
IHdpdGggZWFjaCBXS1ZpZXdSZWYgZm9yIEdUSyBwb3J0LgorCiAyMDExLTAyLTA5ICBBbGVqYW5k
cm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
cnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggZDU4ZjZiZC4uMTM3ZTJlMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTE3NCw2ICsxNzQsNyBAQCBsaWJXZWJLaXQyX2xhX1NP
VVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ltbXV0YWJsZUFycmF5LmggXAogCVNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVEaWN0aW9uYXJ5LmNwcCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL0ltbXV0YWJsZURpY3Rpb25hcnkuaCBcCisJU291cmNlL1dlYktpdDIvU2hh
cmVkL0xheWVyVHJlZUNvbnRleHQuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL011dGFibGVB
cnJheS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9NdXRhYmxlQXJyYXkuaCBcCiAJU291
cmNlL1dlYktpdDIvU2hhcmVkL011dGFibGVEaWN0aW9uYXJ5LmNwcCBcCkBAIC0zMjQsOCArMzI1
LDEyIEBAIGxpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvR2VuZXJpY0NhbGxiYWNrLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4
dENoZWNrZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3Bl
Y3Rvckd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmll
dy5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5oIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUHJlZmVyZW5jZXNHdGsuY3BwIFwKKwlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYlZpZXcuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF1bmNoZXIvZ3RrL1RocmVhZExhdW5jaGVyR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMmU5MjVlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3LmgiCisK
KyNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIGdwb2ludGVyIHdlYktpdFdlYlZpZXdQ
YXJlbnRDbGFzcyA9IE5VTEw7CisKK3N0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgeworICAg
IFdlYlZpZXcqIHdlYlZpZXdJbnN0YW5jZTsKKyAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dDsK
KyAgICBnYm9vbGVhbiBkaXNwb3NlSGFzUnVuOworfTsKKworc3RhdGljIHZvaWQgd2ViS2l0V2Vi
Vmlld1JlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgZ3RrX3dpZGdldF9zZXRfcmVh
bGl6ZWQod2lkZ2V0LCBUUlVFKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAg
ICBndWludCBib3JkZXJXaWR0aCA9IGd0a19jb250YWluZXJfZ2V0X2JvcmRlcl93aWR0aChHVEtf
Q09OVEFJTkVSKHdpZGdldCkpOworICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0
LCAmYWxsb2NhdGlvbik7CisKKyAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7CisgICAgYXR0
cmlidXRlcy53aW5kb3dfdHlwZSA9IEdES19XSU5ET1dfQ0hJTEQ7CisgICAgYXR0cmlidXRlcy54
ID0gYWxsb2NhdGlvbi54ICsgYm9yZGVyV2lkdGg7CisgICAgYXR0cmlidXRlcy55ID0gYWxsb2Nh
dGlvbi55ICsgYm9yZGVyV2lkdGg7CisgICAgYXR0cmlidXRlcy53aWR0aCA9IGFsbG9jYXRpb24u
d2lkdGggLSBib3JkZXJXaWR0aCAqIDI7CisgICAgYXR0cmlidXRlcy5oZWlnaHQgPSBhbGxvY2F0
aW9uLmhlaWdodCAtIGJvcmRlcldpZHRoICogMjsKKyAgICBhdHRyaWJ1dGVzLndjbGFzcyA9IEdE
S19JTlBVVF9PVVRQVVQ7CisgICAgYXR0cmlidXRlcy52aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92
aXN1YWwod2lkZ2V0KTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGF0dHJpYnV0ZXMu
Y29sb3JtYXAgPSBndGtfd2lkZ2V0X2dldF9jb2xvcm1hcCh3aWRnZXQpOworI2VuZGlmCisgICAg
YXR0cmlidXRlcy5ldmVudF9tYXNrID0gR0RLX1ZJU0lCSUxJVFlfTk9USUZZX01BU0sKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEdES19FWFBPU1VSRV9NQVNLCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OX1BSRVNTX01BU0sKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IEdES19CVVRUT05fUkVMRUFTRV9NQVNLCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBHREtfUE9JTlRFUl9NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgR0RLX0tFWV9QUkVTU19NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBHREtfS0VZX1JFTEVBU0VfTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RL
X0JVVFRPTl9NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JV
VFRPTjFfTU9USU9OX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRU
T04yX01PVElPTl9NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9O
M19NT1RJT05fTUFTSzsKKworICAgIGdpbnQgYXR0cmlidXRlc01hc2sgPSBHREtfV0FfWCB8IEdE
S19XQV9ZIHwgR0RLX1dBX1ZJU1VBTDsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGF0
dHJpYnV0ZXNNYXNrIHw9IEdES19XQV9DT0xPUk1BUDsKKyNlbmRpZgorICAgIEdka1dpbmRvdyog
d2luZG93ID0gZ2RrX3dpbmRvd19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3aWRn
ZXQpLCAmYXR0cmlidXRlcywgYXR0cmlidXRlc01hc2spOworICAgIGd0a193aWRnZXRfc2V0X3dp
bmRvdyh3aWRnZXQsIHdpbmRvdyk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpbmRv
dywgd2lkZ2V0KTsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMiwgMjAsIDApCisgICAgZ3RrX3dpZGdldF9zdHlsZV9hdHRhY2god2lkZ2V0KTsKKyNl
bHNlCisgICAgd2lkZ2V0LT5zdHlsZSA9IGd0a19zdHlsZV9hdHRhY2goZ3RrX3dpZGdldF9nZXRf
c3R5bGUod2lkZ2V0KSwgd2luZG93KTsKKyNlbmRpZgorICAgIGd0a19zdHlsZV9zZXRfYmFja2dy
b3VuZChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCB3aW5kb3csIEdUS19TVEFURV9OT1JN
QUwpOworI2Vsc2UKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfYmFja2dyb3VuZChndGtfd2lk
Z2V0X2dldF9zdHlsZV9jb250ZXh0KHdpZGdldCksIHdpbmRvdyk7CisjZW5kaWYKKworICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAgICBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgZ3RrX2ltX2NvbnRl
eHRfc2V0X2NsaWVudF93aW5kb3cocHJpdi0+aW1Db250ZXh0LCB3aW5kb3cpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJLaXRXZWJWaWV3Q29udGFpbmVyQWRkKEd0a0NvbnRhaW5lciogY29udGFpbmVy
LCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBndGtfd2lkZ2V0X3NldF9wYXJlbnQod2lkZ2V0
LCBHVEtfV0lER0VUKGNvbnRhaW5lcikpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJWaWV3
RGlzcG9zZShHT2JqZWN0KiBnb2JqZWN0KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYktpdFdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ29iamVjdCk7CisgICAgaWYgKHdlYktpdFdlYlZpZXct
PnByaXYtPmRpc3Bvc2VIYXNSdW4pCisgICAgICAgIHJldHVybjsKKworICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYktpdFdlYlZpZXctPnByaXYtPmltQ29udGV4dCk7CisgICAgd2ViS2l0V2ViVmlldy0+
cHJpdi0+ZGlzcG9zZUhhc1J1biA9IFRSVUU7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2ViS2l0V2Vi
Vmlld1BhcmVudENsYXNzKS0+ZGlzcG9zZShnb2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
S2l0V2ViVmlld0luaXQoV2ViS2l0V2ViVmlldyogd2ViS2l0V2ViVmlldykKK3sKKyAgICBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSh3ZWJL
aXRXZWJWaWV3LCBXRUJLSVRfVFlQRV9XRUJfVklFVywgV2ViS2l0V2ViVmlld1ByaXZhdGUpOwor
ICAgIHdlYktpdFdlYlZpZXctPnByaXYgPSBwcml2OworCisgICAgZ3RrX3dpZGdldF9zZXRfY2Fu
X2ZvY3VzKEdUS19XSURHRVQod2ViS2l0V2ViVmlldyksIFRSVUUpOworICAgIHByaXYtPmltQ29u
dGV4dCA9IGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCk7CisgICAgcHJpdi0+ZGlzcG9zZUhhc1J1
biA9IEZBTFNFOworfQorCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3N0YXRpYyBnYm9vbGVh
biB3ZWJWaWV3T25FeHBvc2UoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50RXhwb3NlKiBldmVu
dCkKK3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0
YW5jZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSk7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0
OworICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPnJlZ2lvbiwgJmNsaXBSZWN0KTsK
KworICAgIEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCk7
CisgICAgY2Fpcm9fdCogY3IgPSBnZGtfY2Fpcm9fY3JlYXRlKHdpbmRvdyk7CisKKyAgICB3ZWJW
aWV3LT5wYWludCh3aWRnZXQsIGNsaXAsIGNyKTsKKworICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwor
CisgICAgcmV0dXJuIEZBTFNFOworfQorI2Vsc2UKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3T25E
cmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKK3sKKyAgICBXZWJWaWV3KiB3ZWJW
aWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJRVcod2lk
Z2V0KSk7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworCisgICAgaWYgKCFnZGtfY2Fpcm9f
Z2V0X2NsaXBfcmVjdGFuZ2xlKGNyLCAmY2xpcFJlY3QpKQorICAgICAgICByZXR1cm4gRkFMU0U7
CisKKyAgICB3ZWJWaWV3LT5wYWludCh3aWRnZXQsIGNsaXBSZWN0LCBjcik7CisKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgd2ViVmlld09uU2l6ZUFsbG9jYXRl
KEd0a1dpZGdldCogd2lkZ2V0LCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKQoreworICAgIFdl
YlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9X
RUJfVklFVyh3aWRnZXQpKTsKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYktpdFdlYlZpZXdQYXJl
bnRDbGFzcyktPnNpemVfYWxsb2NhdGUod2lkZ2V0LCBhbGxvY2F0aW9uKTsKKyAgICB3ZWJWaWV3
LT5yZXNpemUod2lkZ2V0LCBJbnRTaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5o
ZWlnaHQpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYlZpZXdGb2N1c0luRXZlbnQoR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50KQoreworICAgIFdlYktpdFdlYlZpZXcq
IHdlYktpdFdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAgICBXZWJWaWV3KiB3
ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZSh3ZWJLaXRXZWJWaWV3KTsK
KworICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCh3aWRn
ZXQpOworICAgIGlmIChndGtfd2lkZ2V0X2lzX3RvcGxldmVsICh0b3BsZXZlbCkgJiYgZ3RrX3dp
bmRvd19oYXNfdG9wbGV2ZWxfZm9jdXMoR1RLX1dJTkRPVyh0b3BsZXZlbCkpKSB7CisgICAgICAg
IGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKHdlYktpdFdlYlZpZXdHZXRJTUNvbnRleHQod2ViS2l0
V2ViVmlldykpOworICAgICAgICB3ZWJWaWV3LT5oYW5kbGVGb2N1c0luRXZlbnQod2lkZ2V0KTsK
KyAgICB9CisKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJLaXRXZWJWaWV3UGFyZW50
Q2xhc3MpLT5mb2N1c19pbl9ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYlZpZXdGb2N1c091dEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEZvY3Vz
KiBldmVudCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdpZGdldCk7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYktpdFdlYlZpZXdHZXRX
ZWJWaWV3SW5zdGFuY2Uod2ViS2l0V2ViVmlldyk7CisKKyAgICB3ZWJWaWV3LT5oYW5kbGVGb2N1
c091dEV2ZW50KHdpZGdldCk7CisgICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQgPSB3ZWJLaXRX
ZWJWaWV3R2V0SU1Db250ZXh0KHdlYktpdFdlYlZpZXcpOworICAgIGlmIChpbUNvbnRleHQpCisg
ICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX291dChpbUNvbnRleHQpOworCisgICAgcmV0dXJu
IEdUS19XSURHRVRfQ0xBU1Mod2ViS2l0V2ViVmlld1BhcmVudENsYXNzKS0+Zm9jdXNfb3V0X2V2
ZW50KHdpZGdldCwgZXZlbnQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0tleVByZXNz
RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKK3sKKyAgICBXZWJW
aWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VC
X1ZJRVcod2lkZ2V0KSk7CisgICAgd2ViVmlldy0+a2V5UHJlc3MoZXZlbnQpOworCisgICAgcmV0
dXJuIEdUS19XSURHRVRfQ0xBU1Mod2ViS2l0V2ViVmlld1BhcmVudENsYXNzKS0+a2V5X3ByZXNz
X2V2ZW50KHdpZGdldCwgZXZlbnQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0tleVJl
bGVhc2VFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAg
IFdlYktpdFdlYlZpZXcqIHdlYktpdFdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsK
KyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZSh3
ZWJLaXRXZWJWaWV3KTsKKworICAgIGlmIChndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3Mo
d2ViS2l0V2ViVmlld0dldElNQ29udGV4dCh3ZWJLaXRXZWJWaWV3KSwgZXZlbnQpKQorICAgICAg
ICByZXR1cm4gVFJVRTsKKworICAgIHdlYlZpZXctPmtleVByZXNzKGV2ZW50KTsKKworICAgIHJl
dHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYktpdFdlYlZpZXdQYXJlbnRDbGFzcyktPmtleV9yZWxl
YXNlX2V2ZW50KHdpZGdldCwgZXZlbnQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0J1
dHRvblByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBldmVudCkK
K3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5j
ZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSk7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdp
ZGdldCk7CisgICAgd2ViVmlldy0+bW91c2VBY3RpdmF0ZShyZWludGVycHJldF9jYXN0PEdka0V2
ZW50QW55Kj4oZXZlbnQpKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYlZpZXdCdXR0b25SZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
QnV0dG9uKiBldmVudCkKK3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dl
dFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSk7CisgICAgZ3RrX3dpZGdl
dF9ncmFiX2ZvY3VzKHdpZGdldCk7CisgICAgd2ViVmlldy0+bW91c2VBY3RpdmF0ZShyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50QW55Kj4oZXZlbnQpKTsKKworICAgIHJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYlZpZXdTY3JvbGxFdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRTY3JvbGwqIGV2ZW50KQoreworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRX
ZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9XRUJfVklFVyh3aWRnZXQpKTsKKyAgICB3
ZWJWaWV3LT5zY3JvbGwoZXZlbnQpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2ViVmlld01vdGlvbk5vdGlmeUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtF
dmVudE1vdGlvbiogZXZlbnQpCit7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYktpdFdlYlZp
ZXdHZXRXZWJWaWV3SW5zdGFuY2UoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpOworICAgIHdlYlZp
ZXctPm1vdXNlQWN0aXZhdGUocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudEFueSo+KGV2ZW50KSk7
CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYlZpZXdDbGFz
c0luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJLaXRXZWJWaWV3Q2xhc3MpCit7CisgICAgd2Vi
S2l0V2ViVmlld1BhcmVudENsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50KHdlYktpdFdl
YlZpZXdDbGFzcyk7CisKKyAgICBHdGtXaWRnZXRDbGFzcyogd2lkZ2V0Q2xhc3MgPSBHVEtfV0lE
R0VUX0NMQVNTKHdlYktpdFdlYlZpZXdDbGFzcyk7CisgICAgd2lkZ2V0Q2xhc3MtPnJlYWxpemUg
PSB3ZWJLaXRXZWJWaWV3UmVhbGl6ZTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIHdp
ZGdldENsYXNzLT5leHBvc2VfZXZlbnQgPSB3ZWJWaWV3T25FeHBvc2U7CisjZWxzZQorICAgIHdp
ZGdldENsYXNzLT5kcmF3ID0gd2ViVmlld09uRHJhdzsKKyNlbmRpZgorICAgIHdpZGdldENsYXNz
LT5zaXplX2FsbG9jYXRlID0gd2ViVmlld09uU2l6ZUFsbG9jYXRlOworICAgIHdpZGdldENsYXNz
LT5mb2N1c19pbl9ldmVudCA9IHdlYlZpZXdGb2N1c0luRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3Mt
PmZvY3VzX291dF9ldmVudCA9IHdlYlZpZXdGb2N1c091dEV2ZW50OworICAgIHdpZGdldENsYXNz
LT5rZXlfcHJlc3NfZXZlbnQgPSB3ZWJWaWV3S2V5UHJlc3NFdmVudDsKKyAgICB3aWRnZXRDbGFz
cy0+a2V5X3JlbGVhc2VfZXZlbnQgPSB3ZWJWaWV3S2V5UmVsZWFzZUV2ZW50OworICAgIHdpZGdl
dENsYXNzLT5idXR0b25fcHJlc3NfZXZlbnQgPSB3ZWJWaWV3QnV0dG9uUHJlc3NFdmVudDsKKyAg
ICB3aWRnZXRDbGFzcy0+YnV0dG9uX3JlbGVhc2VfZXZlbnQgPSB3ZWJWaWV3QnV0dG9uUmVsZWFz
ZUV2ZW50OworICAgIHdpZGdldENsYXNzLT5zY3JvbGxfZXZlbnQgPSB3ZWJWaWV3U2Nyb2xsRXZl
bnQ7CisgICAgd2lkZ2V0Q2xhc3MtPm1vdGlvbl9ub3RpZnlfZXZlbnQgPSB3ZWJWaWV3TW90aW9u
Tm90aWZ5RXZlbnQ7CisKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKHdlYktpdFdlYlZpZXdDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5kaXNwb3NlID0g
d2ViS2l0V2ViVmlld0Rpc3Bvc2U7CisKKyAgICBHdGtDb250YWluZXJDbGFzcyogY29udGFpbmVy
Q2xhc3MgPSBHVEtfQ09OVEFJTkVSX0NMQVNTKHdlYktpdFdlYlZpZXdDbGFzcyk7CisgICAgY29u
dGFpbmVyQ2xhc3MtPmFkZCA9IHdlYktpdFdlYlZpZXdDb250YWluZXJBZGQ7CisKKyAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViS2l0V2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2Vi
Vmlld1ByaXZhdGUpKTsKK30KKworR1R5cGUgd2ViS2l0V2ViVmlld0dldFR5cGUoKQoreworICAg
IHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBnRGVmaW5lVHlwZUlkVm9sYXRpbGUgPSAwOworICAgIGlm
IChnX29uY2VfaW5pdF9lbnRlcigmZ0RlZmluZVR5cGVJZFZvbGF0aWxlKSkgeworICAgICAgICBH
VHlwZSBnRGVmaW5lVHlwZUlkID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpY19zaW1wbGUoR1RLX1RZ
UEVfQ09OVEFJTkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19pbnRlcm5fc3RhdGljX3N0cmluZygiV2ViS2l0V2ViVmlldyIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKFdlYktpdFdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdD
bGFzc0luaXRGdW5jPih3ZWJLaXRXZWJWaWV3Q2xhc3NJbml0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXZWJLaXRX
ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0luc3RhbmNlSW5pdEZ1bmM+KHdlYktpdFdl
YlZpZXdJbml0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdUeXBlRmxhZ3M+KDApKTsKKyAgICAgICAgZ19v
bmNlX2luaXRfbGVhdmUoJmdEZWZpbmVUeXBlSWRWb2xhdGlsZSwgZ0RlZmluZVR5cGVJZCk7Cisg
ICAgfQorICAgIHJldHVybiBnRGVmaW5lVHlwZUlkVm9sYXRpbGU7Cit9CisKK1dlYlZpZXcqIHdl
YktpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFuY2UoV2ViS2l0V2ViVmlldyogd2ViS2l0V2ViVmll
dykKK3sKKyAgICByZXR1cm4gd2ViS2l0V2ViVmlldy0+cHJpdi0+d2ViVmlld0luc3RhbmNlOwor
fQorCit2b2lkIHdlYktpdFdlYlZpZXdTZXRXZWJWaWV3SW5zdGFuY2UoV2ViS2l0V2ViVmlldyog
d2ViS2l0V2ViVmlldywgV2ViVmlldyogd2ViVmlld0luc3RhbmNlKQoreworICAgIHdlYktpdFdl
YlZpZXctPnByaXYtPndlYlZpZXdJbnN0YW5jZSA9IHdlYlZpZXdJbnN0YW5jZTsKK30KKworR2Rr
V2luZG93KiB3ZWJLaXRXZWJWaWV3R2V0V2luZG93KFdlYktpdFdlYlZpZXcqIHdlYktpdFdlYlZp
ZXcpCit7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHdlYktp
dFdlYlZpZXcpKTsKK30KKworR3RrSU1Db250ZXh0KiB3ZWJLaXRXZWJWaWV3R2V0SU1Db250ZXh0
KFdlYktpdFdlYlZpZXcqIHdlYktpdFdlYlZpZXcpCit7CisgICAgcmV0dXJuIHdlYktpdFdlYlZp
ZXctPnByaXYtPmltQ29udGV4dDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJLaXRXZWJWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhMmRh
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViS2l0
V2ViVmlldy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy
MDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViS2l0V2Vi
Vmlld19oCisjZGVmaW5lIFdlYktpdFdlYlZpZXdfaAorCisjaW5jbHVkZSAiV2ViVmlldy5oIgor
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX1ZJRVcgICAgICAgICAgICAgICAg
KHdlYktpdFdlYlZpZXdHZXRUeXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJfVklFVyhvYmopICAg
ICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZ
UEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXcpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfQ0xB
U1Moa2xhc3MpICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNf
V0VCX1ZJRVcob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9UWVBFX1dFQl9WSUVXKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9WSUVXX0NM
QVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
VFlQRV9XRUJfVklFVykpCisjZGVmaW5lIFdFQktJVF9XRUJfVklFV19HRVRfQ0xBU1Mob2JqKSAg
ICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX1ZJ
RVcsIFdlYktpdFdlYlZpZXdDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3
IFdlYktpdFdlYlZpZXc7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIFdlYktp
dFdlYlZpZXdDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSBXZWJL
aXRXZWJWaWV3UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXZWJWaWV3IHsKKyAgICBHdGtDb250
YWluZXIgcGFyZW50SW5zdGFuY2U7CisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0V2Vi
Vmlld1ByaXZhdGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7Cisg
ICAgR3RrQ29udGFpbmVyQ2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitHVHlwZSB3ZWJLaXRXZWJW
aWV3R2V0VHlwZSgpOworCitXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNl
KFdlYktpdFdlYlZpZXcqKTsKKwordm9pZCB3ZWJLaXRXZWJWaWV3U2V0V2ViVmlld0luc3RhbmNl
KFdlYktpdFdlYlZpZXcqLCBXZWJWaWV3Kik7CisKK0dka1dpbmRvdyogd2ViS2l0V2ViVmlld0dl
dFdpbmRvdyhXZWJLaXRXZWJWaWV3Kik7CisKK0d0a0lNQ29udGV4dCogd2ViS2l0V2ViVmlld0dl
dElNQ29udGV4dChXZWJLaXRXZWJWaWV3Kik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBX
ZWJLaXRXZWJWaWV3X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYjUxYzQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwCkBAIC0wLDAgKzEs
MjkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0
eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmll
dy5oIgorCisjaW5jbHVkZSAiQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNs
dWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94
eS5oIgorI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZp
ZXcuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCisKK3ZvaWQgV2ViVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KEd0a1dpZGdldCogd2lkZ2V0
KQoreworICAgIGlmICghKG1faXNQYWdlQWN0aXZlKSkgeworICAgICAgICBtX2lzUGFnZUFjdGl2
ZSA9IHRydWU7CisgICAgICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94
eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKKyAgICB9CisKKyAgICBtX3BhZ2UtPnZpZXdTdGF0ZURp
ZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQpOworfQorCit2b2lkIFdlYlZpZXc6
OmhhbmRsZUZvY3VzT3V0RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgbV9pc1BhZ2VB
Y3RpdmUgPSBmYWxzZTsKKyAgICBtX3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJv
eHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Cit9CisKK1dlYlZpZXc6OldlYlZpZXcoR2RrUmVjdGFu
Z2xlIHZpZXdSZWN0LCBXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91
cCkKKyAgICA6IG1fdmlld1JlY3Qodmlld1JlY3QpCisgICAgLCBtX2lzUGFnZUFjdGl2ZSh0cnVl
KQoreworICAgIG1fcGFnZSA9IGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UodGhpcywgcGFnZUdyb3Vw
KTsKKworICAgIG1fdmlld1dpZGdldCA9IHN0YXRpY19jYXN0PEd0a1dpZGdldCo+KGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywgTlVMTCkpOworICAgIEFTU0VSVChtX3ZpZXdXaWRn
ZXQpOworCisgICAgbV9wYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOworCisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViS2l0V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhtX3ZpZXdXaWRnZXQpOworICAg
IHdlYktpdFdlYlZpZXdTZXRXZWJWaWV3SW5zdGFuY2Uod2ViS2l0V2ViVmlldywgdGhpcyk7Cit9
CisKK1dlYlZpZXc6On5XZWJWaWV3KCkKK3sKK30KKworR2RrV2luZG93KiBXZWJWaWV3OjpnZXRX
ZWJWaWV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gd2ViS2l0V2ViVmlld0dldFdpbmRvdyhXRUJL
SVRfV0VCX1ZJRVcobV92aWV3V2lkZ2V0KSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFpbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka1JlY3RhbmdsZSByZWN0LCBjYWlyb190KiBjcikKK3sKKyAgICBt
X3BhZ2UtPmRyYXdpbmdBcmVhKCktPnBhaW50KEludFJlY3QocmVjdCksIGNyKTsKK30KKwordm9p
ZCBXZWJWaWV3OjpyZXNpemUoR3RrV2lkZ2V0KiwgSW50U2l6ZSB3aW5kb3dTaXplKQoreworICAg
IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZSh3aW5kb3dTaXplLCBJbnRTaXplKCkpOwor
fQorCit2b2lkIFdlYlZpZXc6OmtleVByZXNzKEdka0V2ZW50S2V5KiBldmVudCkKK3sKKyAgICBt
X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChldmVudCkp
OworfQorCit2b2lkIFdlYlZpZXc6Om1vdXNlQWN0aXZhdGUoR2RrRXZlbnRBbnkqIGV2ZW50KQor
eworICAgIG1fcGFnZS0+aGFuZGxlTW91c2VFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdl
Yk1vdXNlRXZlbnQoZXZlbnQpKTsKK30KKwordm9pZCBXZWJWaWV3OjpzY3JvbGwoR2RrRXZlbnRT
Y3JvbGwqIGV2ZW50KQoreworICAgIG1fcGFnZS0+aGFuZGxlV2hlZWxFdmVudChXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQpKTsKK30KKworYm9vbCBXZWJWaWV3Ojpp
c0FjdGl2ZSgpCit7CisgICAgcmV0dXJuIG1faXNQYWdlQWN0aXZlOworfQorCit2b2lkIFdlYlZp
ZXc6OmNsb3NlKCkKK3sKKyAgICBtX3BhZ2UtPmNsb3NlKCk7Cit9CisKKy8vIFBhZ2VDbGllbnQn
cyBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zCitQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IFdl
YlZpZXc6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQoreworICAgIHJldHVybiBDaHVua2VkVXBk
YXRlRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5nZXQoKSk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmRpc3BsYXlWaWV3
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNjcm9sbFZp
ZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1dlYkNv
cmU6OkludFNpemUgV2ViVmlldzo6dmlld1NpemUoKQoreworICAgIHJldHVybiBJbnRSZWN0KG1f
dmlld1JlY3QpLnNpemUoKTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViVmlldzo6aXNWaWV3Rm9jdXNlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXc6Omlz
Vmlld0luV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFdlYlZpZXc6OldlYlZpZXc6OnByb2Nlc3NEaWRDcmFzaCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRSZWxhdW5jaFByb2Nlc3Mo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6dGFrZUZvY3Vz
KGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp0b29s
VGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRWaWV3cG9ydEFy
Z3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpyZWdpc3RlckVkaXRDb21tYW5kKFBhc3NS
ZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmNsZWFyQWxsRWRpdENv
bW1hbmRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNl
dEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiwgYm9vbCwgaW50KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBXZWJWaWV3Ojpjb252ZXJ0VG9EZXZpY2VTcGFj
ZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIHZpZXdSZWN0OworfQorCitGbG9hdFJlY3QgV2ViVmlldzo6Y29udmVydFRvVXNl
clNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1JlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gdmlld1JlY3Q7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZG9uZVdpdGhLZXlF
dmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWROb3RIYW5k
bGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBXZWJW
aWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQ
cm94eT4gV2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViVmlldzo6
c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKK3ZvaWQgV2ViVmlldzo6cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpwYWdlRGlk
TGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwordm9pZCBXZWJWaWV3
OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVzZW50YXRpb24p
Cit7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXBy
ZXNlbnRhdGlvbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKK3sKK30KKworZG91Ymxl
IFdlYlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRDdXN0b21S
ZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFnZUNsb3NlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZThmYzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaApA
QCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3Jv
bGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWaWV3X2gKKyNkZWZpbmUg
V2ViVmlld19oCisKKyNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8Z2RrL2dkay5o
PgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERyYXdpbmdBcmVhUHJv
eHk7CitjbGFzcyBXZWJQYWdlTmFtZXNwYWNlOworCitjbGFzcyBXZWJWaWV3IDogcHVibGljIFJl
ZkNvdW50ZWQ8V2ViVmlldz4sIHB1YmxpYyBQYWdlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB+V2Vi
VmlldygpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZpZXc+IGNyZWF0ZShHZGtSZWN0YW5n
bGUgdmlld1JlY3QsIFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3Vw
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJWaWV3KHZpZXdSZWN0LCBj
b250ZXh0LCBwYWdlR3JvdXApKTsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQqIHdpbmRvdygpIGNv
bnN0IHsgcmV0dXJuIG1fdmlld1dpZGdldDsgfQorCisgICAgV2ViUGFnZVByb3h5KiBwYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9CisKKyAgICB2b2lkIGhhbmRsZUZvY3VzSW5F
dmVudChHdGtXaWRnZXQqKTsKKyAgICB2b2lkIGhhbmRsZUZvY3VzT3V0RXZlbnQoR3RrV2lkZ2V0
Kik7CisKKyAgICB2b2lkIHBhaW50KEd0a1dpZGdldCosIEdka1JlY3RhbmdsZSwgY2Fpcm9fdCop
OworICAgIHZvaWQgcmVzaXplKEd0a1dpZGdldCosIFdlYkNvcmU6OkludFNpemUpOworICAgIHZv
aWQga2V5UHJlc3MoR2RrRXZlbnRLZXkqKTsKKyAgICB2b2lkIHNjcm9sbChHZGtFdmVudFNjcm9s
bCopOworICAgIHZvaWQgbW91c2VBY3RpdmF0ZShHZGtFdmVudEFueSopOworCitwcml2YXRlOgor
ICAgIFdlYlZpZXcoR2RrUmVjdGFuZ2xlLCBXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7CisK
KyAgICBHZGtXaW5kb3cqIGdldFdlYlZpZXdXaW5kb3coKTsKKworICAgIGJvb2wgaXNBY3RpdmUo
KTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICAvLyBQYWdlQ2xpZW50CisgICAgdmlydHVhbCBQ
YXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BsYXlWaWV3KCk7CisgICAgdmlydHVhbCB2b2lkIHNj
cm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUg
dmlld1NpemUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3V2luZG93QWN0aXZlKCk7CisgICAg
dmlydHVhbCBib29sIGlzVmlld0ZvY3VzZWQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3Vmlz
aWJsZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdJbldpbmRvdygpOworICAgIHZpcnR1YWwg
dm9pZCBwcm9jZXNzRGlkQ3Jhc2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9j
ZXNzKCk7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VDbG9zZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5n
ZWQoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CisgICAgdmlydHVhbCB2b2lk
IHNldFZpZXdwb3J0QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJik7
CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0
Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1h
bmRTdGF0ZShjb25zdCBXVEY6OlN0cmluZyYsIGJvb2wsIGludCk7CisgICAgdmlydHVhbCBXZWJD
b3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtl
eUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxl
ZCk7CisgICAgdmlydHVhbCB2b2lkIGRpZE5vdEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJv
eHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBh
Z2VQcm94eSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8
RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCk7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5G
cmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBDb3JlSVBDOjpE
YXRhUmVmZXJlbmNlJik7CisgICAgdmlydHVhbCBkb3VibGUgY3VzdG9tUmVwcmVzZW50YXRpb25a
b29tRmFjdG9yKCk7CisgICAgdmlydHVhbCB2b2lkIHNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9v
bUZhY3Rvcihkb3VibGUpOworCisgICAgLy8gTWVtYmVycyBvZiBXZWJWaWV3IGNsYXNzCisgICAg
R2RrUmVjdGFuZ2xlIG1fdmlld1JlY3Q7CisgICAgR3RrV2lkZ2V0KiBtX3ZpZXdXaWRnZXQ7Cisg
ICAgYm9vbCBtX2lzUGFnZUFjdGl2ZTsKKyAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3BhZ2U7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlZpZXdfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81961</attachid>
            <date>2011-02-10 05:50:12 -0800</date>
            <delta_ts>2011-02-11 11:03:20 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>webview.patch</filename>
            <type>text/plain</type>
            <size>30877</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDBiMTAxNGUzMjMwNjA1NDFhYzg4NmQ1MDQ4OGE3MzAyMTU0ZDVmNjMKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MjowMjowMyAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMCAgQW1ydXRoIFJhaiAgPGFtcnV0aHJh
akBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2Fz
aWJoYXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2Fs
aWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAg
CiAgICAgICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJWaWV3IGFuZCBXZWJLaXRXZWJWaWV3IGNs
YXNzZXMgZm9yIFdlYktpdDIKICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ4NTA5CiAgICAKICAgICAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKICAg
ICAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOiBBZGRlZC4gVGhlIEdP
YmplY3QgaW50ZXJmYWNlCiAgICAgICAgICAgIGZvciBXZWJWaWV3LiBUaGUgR09iamVjdCBpcyB0
aGUgR3RrV2lkZ2V0IGhhbmRsZSB3aGljaCBpcyB1c2VkIGJ5CiAgICAgICAgICAgIFdlYlZpZXcg
Y2xhc3MgZm9yIEdUSyBwb3J0LgogICAgICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViS2l0V2Vi
Vmlldy5oOiBBZGRlZC4gVGhlIEdPYmplY3QgaW50ZXJmYWNlCiAgICAgICAgICAgIGRlY2xhcmF0
aW9ucyBmb3IgR3RrV2lkZ2V0IGhhbmRsZSBmb3IgR1RLIHBvcnQuCiAgICAgICAgICAgICogVUlQ
cm9jZXNzL2d0ay9XZWJWaWV3LmNwcDogQWRkZWQuIFRoZSBuYXRpdmUgR3RrV2lkZ2V0IGhhbmRs
ZQogICAgICAgICAgICBmb3IgR1RLIHBvcnQgd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGVhY2gg
V0tWaWV3UmVmLgogICAgICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViVmlldy5oOiBBZGRlZC4g
Q2xhc3Mgd2hpY2ggaW1wbGVtZW50cyB0aGUKICAgICAgICAgICAgUGFnZUNsaWVudCBpbnRlcmZh
Y2UuICBJdCBpcyBhIHdyYXBwZXIgb3ZlciB0aGUgbmF0aXZlIEd0a1dpZGdldAogICAgICAgICAg
ICBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIGVhY2ggV0tWaWV3UmVmIGZvciBHVEsgcG9ydC4KCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggNjczMjY2Yi4uMTg5ZDMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDExLTAyLTEwICBBbXJ1dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xhLmNvbT4gYW5kIFJh
dmkgUGhhbmVlbmRyYSBLYXNpYmhhdGxhICA8cmF2aS5rYXNpYmhhdGxhQG1vdG9yb2xhLmNvbT4g
YW5kIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlZp
ZXcgYW5kIFdlYktpdFdlYlZpZXcgY2xhc3NlcyBmb3IgV2ViS2l0MgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg1MDkKKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5jcHA6IEFk
ZGVkLiBUaGUgR09iamVjdCBpbnRlcmZhY2UKKyAgICAgICAgZm9yIFdlYlZpZXcuIFRoZSBHT2Jq
ZWN0IGlzIHRoZSBHdGtXaWRnZXQgaGFuZGxlIHdoaWNoIGlzIHVzZWQgYnkKKyAgICAgICAgV2Vi
VmlldyBjbGFzcyBmb3IgR1RLIHBvcnQuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJLaXRX
ZWJWaWV3Lmg6IEFkZGVkLiBUaGUgR09iamVjdCBpbnRlcmZhY2UKKyAgICAgICAgZGVjbGFyYXRp
b25zIGZvciBHdGtXaWRnZXQgaGFuZGxlIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL1dlYlZpZXcuY3BwOiBBZGRlZC4gVGhlIG5hdGl2ZSBHdGtXaWRnZXQgaGFuZGxlCisg
ICAgICAgIGZvciBHVEsgcG9ydCB3aGljaCBpcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBXS1ZpZXdS
ZWYuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJWaWV3Lmg6IEFkZGVkLiBDbGFzcyB3aGlj
aCBpbXBsZW1lbnRzIHRoZQorICAgICAgICBQYWdlQ2xpZW50IGludGVyZmFjZS4gIEl0IGlzIGEg
d3JhcHBlciBvdmVyIHRoZSBuYXRpdmUgR3RrV2lkZ2V0CisgICAgICAgIGhhbmRsZSBhc3NvY2lh
dGVkIHdpdGggZWFjaCBXS1ZpZXdSZWYgZm9yIEdUSyBwb3J0LgorCiAyMDExLTAyLTEwICBQZXRl
ciBWYXJnYSAgPHB2YXJnYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENzYWJh
IE9zenRyb2dvbsOhYy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggNThhMzg3Ni4uODM4YTE2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTE4NSw2ICsxODUsNyBAQCBsaWJXZWJLaXQyX2xhX1NP
VVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ltbXV0YWJsZUFycmF5LmggXAogCVNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVEaWN0aW9uYXJ5LmNwcCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL0ltbXV0YWJsZURpY3Rpb25hcnkuaCBcCisJU291cmNlL1dlYktpdDIvU2hh
cmVkL0xheWVyVHJlZUNvbnRleHQuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL011dGFibGVB
cnJheS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9NdXRhYmxlQXJyYXkuaCBcCiAJU291
cmNlL1dlYktpdDIvU2hhcmVkL011dGFibGVEaWN0aW9uYXJ5LmNwcCBcCkBAIC0zNDcsOCArMzQ4
LDEyIEBAIGxpYldlYktpdDJfbGFfU09VUkNFUyA9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5R3RrLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yR3RrLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJLaXRXZWJWaWV3LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
UGFnZVByb3h5R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQcmVm
ZXJlbmNlc0d0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5j
cHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvVGhyZWFkTGF1bmNoZXJHdGsu
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVy
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGI5Y2NjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApA
QCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3Jv
bGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdFdlYlZpZXcuaCIKKworI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMg
Z3BvaW50ZXIgd2ViS2l0V2ViVmlld1BhcmVudENsYXNzID0gMDsKKworc3RydWN0IF9XZWJLaXRX
ZWJWaWV3UHJpdmF0ZSB7CisgICAgV2ViVmlldyogd2ViVmlld0luc3RhbmNlOworICAgIEd0a0lN
Q29udGV4dCogaW1Db250ZXh0OworICAgIGdib29sZWFuIGRpc3Bvc2VIYXNSdW47Cit9OworCitz
dGF0aWMgdm9pZCB3ZWJLaXRXZWJWaWV3UmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICBndGtfd2lkZ2V0X3NldF9yZWFsaXplZCh3aWRnZXQsIFRSVUUpOworCisgICAgR3RrQWxsb2Nh
dGlvbiBhbGxvY2F0aW9uOworICAgIGd1aW50IGJvcmRlcldpZHRoID0gZ3RrX2NvbnRhaW5lcl9n
ZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIod2lkZ2V0KSk7CisgICAgZ3RrX3dpZGdldF9n
ZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKKworICAgIEdka1dpbmRvd0F0dHIg
YXR0cmlidXRlczsKKyAgICBhdHRyaWJ1dGVzLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19DSElM
RDsKKyAgICBhdHRyaWJ1dGVzLnggPSBhbGxvY2F0aW9uLnggKyBib3JkZXJXaWR0aDsKKyAgICBh
dHRyaWJ1dGVzLnkgPSBhbGxvY2F0aW9uLnkgKyBib3JkZXJXaWR0aDsKKyAgICBhdHRyaWJ1dGVz
LndpZHRoID0gYWxsb2NhdGlvbi53aWR0aCAtIGJvcmRlcldpZHRoICogMjsKKyAgICBhdHRyaWJ1
dGVzLmhlaWdodCA9IGFsbG9jYXRpb24uaGVpZ2h0IC0gYm9yZGVyV2lkdGggKiAyOworICAgIGF0
dHJpYnV0ZXMud2NsYXNzID0gR0RLX0lOUFVUX09VVFBVVDsKKyAgICBhdHRyaWJ1dGVzLnZpc3Vh
bCA9IGd0a193aWRnZXRfZ2V0X3Zpc3VhbCh3aWRnZXQpOworI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCisgICAgYXR0cmlidXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwKHdp
ZGdldCk7CisjZW5kaWYKKyAgICBhdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBHREtfVklTSUJJTElU
WV9OT1RJRllfTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0VYUE9TVVJF
X01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fUFJFU1NfTUFT
SworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19QT0lOVEVSX01PVElPTl9NQVNLCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfS0VZX1BSRVNTX01BU0sKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEdES19LRVlfUkVMRUFTRV9NQVNLCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OX01PVElPTl9NQVNLCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEdES19CVVRUT04zX01PVElPTl9NQVNLOworCisgICAgZ2ludCBhdHRyaWJ1dGVz
TWFzayA9IEdES19XQV9YIHwgR0RLX1dBX1kgfCBHREtfV0FfVklTVUFMOworI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCisgICAgYXR0cmlidXRlc01hc2sgfD0gR0RLX1dBX0NPTE9STUFQOworI2Vu
ZGlmCisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0X2dl
dF9wYXJlbnRfd2luZG93KHdpZGdldCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzTWFzayk7Cisg
ICAgZ3RrX3dpZGdldF9zZXRfd2luZG93KHdpZGdldCwgd2luZG93KTsKKyAgICBnZGtfd2luZG93
X3NldF91c2VyX2RhdGEod2luZG93LCB3aWRnZXQpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMCwgMCkKKyAgICBndGtfd2lkZ2V0X3N0eWxl
X2F0dGFjaCh3aWRnZXQpOworI2Vsc2UKKyAgICB3aWRnZXQtPnN0eWxlID0gZ3RrX3N0eWxlX2F0
dGFjaChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCB3aW5kb3cpOworI2VuZGlmCisgICAg
Z3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIHdp
bmRvdywgR1RLX1NUQVRFX05PUk1BTCk7CisjZWxzZQorICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9iYWNrZ3JvdW5kKGd0a193aWRnZXRfZ2V0X3N0eWxlX2NvbnRleHQod2lkZ2V0KSwgd2luZG93
KTsKKyNlbmRpZgorCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJp
djsKKyAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhwcml2LT5pbUNvbnRleHQs
IHdpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYlZpZXdDb250YWluZXJBZGQoR3Rr
Q29udGFpbmVyKiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIGd0a193aWRn
ZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYktpdFdlYlZpZXdEaXNwb3NlKEdPYmplY3QqIGdvYmplY3QpCit7CisgICAgV2Vi
S2l0V2ViVmlldyogd2ViS2l0V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnb2JqZWN0KTsKKyAg
ICBpZiAod2ViS2l0V2ViVmlldy0+cHJpdi0+ZGlzcG9zZUhhc1J1bikKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ19vYmplY3RfdW5yZWYod2ViS2l0V2ViVmlldy0+cHJpdi0+aW1Db250ZXh0KTsK
KyAgICB3ZWJLaXRXZWJWaWV3LT5wcml2LT5kaXNwb3NlSGFzUnVuID0gVFJVRTsKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MpLT5kaXNwb3NlKGdvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJWaWV3SW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJLaXRX
ZWJWaWV3KQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFKHdlYktpdFdlYlZpZXcsIFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSk7CisgICAgd2ViS2l0V2ViVmlldy0+cHJpdiA9IHByaXY7CisKKyAg
ICBndGtfd2lkZ2V0X3NldF9jYW5fZm9jdXMoR1RLX1dJREdFVCh3ZWJLaXRXZWJWaWV3KSwgVFJV
RSk7CisgICAgcHJpdi0+aW1Db250ZXh0ID0gZ3RrX2ltX211bHRpY29udGV4dF9uZXcoKTsKKyAg
ICBwcml2LT5kaXNwb3NlSGFzUnVuID0gRkFMU0U7Cit9CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgorc3RhdGljIGdib29sZWFuIHdlYlZpZXdPbkV4cG9zZShHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRFeHBvc2UqIGV2ZW50KQoreworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRX
ZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9XRUJfVklFVyh3aWRnZXQpKTsKKyAgICBH
ZGtSZWN0YW5nbGUgY2xpcFJlY3Q7CisgICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChldmVudC0+
cmVnaW9uLCAmY2xpcFJlY3QpOworCisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0
X2dldF93aW5kb3cod2lkZ2V0KTsKKyAgICBjYWlyb190KiBjciA9IGdka19jYWlyb19jcmVhdGUo
d2luZG93KTsKKworICAgIHdlYlZpZXctPnBhaW50KHdpZGdldCwgY2xpcFJlY3QsIGNyKTsKKwor
ICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorI2Vsc2UKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJWaWV3T25EcmF3KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBj
cikKK3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0
YW5jZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSk7CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0
OworCisgICAgaWYgKCFnZGtfY2Fpcm9fZ2V0X2NsaXBfcmVjdGFuZ2xlKGNyLCAmY2xpcFJlY3Qp
KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICB3ZWJWaWV3LT5wYWludCh3aWRnZXQsIGNs
aXBSZWN0LCBjcik7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZW5kaWYKKworc3RhdGljIHZv
aWQgd2ViVmlld09uU2l6ZUFsbG9jYXRlKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtBbGxvY2F0aW9u
KiBhbGxvY2F0aW9uKQoreworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0
V2ViVmlld0luc3RhbmNlKFdFQktJVF9XRUJfVklFVyh3aWRnZXQpKTsKKyAgICBHVEtfV0lER0VU
X0NMQVNTKHdlYktpdFdlYlZpZXdQYXJlbnRDbGFzcyktPnNpemVfYWxsb2NhdGUod2lkZ2V0LCBh
bGxvY2F0aW9uKTsKKyAgICB3ZWJWaWV3LT5yZXNpemUod2lkZ2V0LCBJbnRTaXplKGFsbG9jYXRp
b24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YlZpZXdGb2N1c0luRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50
KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYktpdFdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2lkZ2V0KTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJ
bnN0YW5jZSh3ZWJLaXRXZWJWaWV3KTsKKworICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtf
d2lkZ2V0X2dldF90b3BsZXZlbCh3aWRnZXQpOworICAgIGlmIChndGtfd2lkZ2V0X2lzX3RvcGxl
dmVsKHRvcGxldmVsKSAmJiBndGtfd2luZG93X2hhc190b3BsZXZlbF9mb2N1cyhHVEtfV0lORE9X
KHRvcGxldmVsKSkpIHsKKyAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfaW4od2ViS2l0V2Vi
Vmlld0dldElNQ29udGV4dCh3ZWJLaXRXZWJWaWV3KSk7CisgICAgICAgIHdlYlZpZXctPmhhbmRs
ZUZvY3VzSW5FdmVudCh3aWRnZXQpOworICAgIH0KKworICAgIHJldHVybiBHVEtfV0lER0VUX0NM
QVNTKHdlYktpdFdlYlZpZXdQYXJlbnRDbGFzcyktPmZvY3VzX2luX2V2ZW50KHdpZGdldCwgZXZl
bnQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0ZvY3VzT3V0RXZlbnQoR3RrV2lkZ2V0
KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdl
YktpdFdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAgICBXZWJWaWV3KiB3ZWJW
aWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZSh3ZWJLaXRXZWJWaWV3KTsKKwor
ICAgIHdlYlZpZXctPmhhbmRsZUZvY3VzT3V0RXZlbnQod2lkZ2V0KTsKKyAgICBHdGtJTUNvbnRl
eHQqIGltQ29udGV4dCA9IHdlYktpdFdlYlZpZXdHZXRJTUNvbnRleHQod2ViS2l0V2ViVmlldyk7
CisgICAgaWYgKGltQ29udGV4dCkKKyAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KGlt
Q29udGV4dCk7CisKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJLaXRXZWJWaWV3UGFy
ZW50Q2xhc3MpLT5mb2N1c19vdXRfZXZlbnQod2lkZ2V0LCBldmVudCk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJWaWV3S2V5UHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRL
ZXkqIGV2ZW50KQoreworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2Vi
Vmlld0luc3RhbmNlKFdFQktJVF9XRUJfVklFVyh3aWRnZXQpKTsKKyAgICB3ZWJWaWV3LT5rZXlQ
cmVzcyhldmVudCk7CisKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJLaXRXZWJWaWV3
UGFyZW50Q2xhc3MpLT5rZXlfcHJlc3NfZXZlbnQod2lkZ2V0LCBldmVudCk7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJWaWV3S2V5UmVsZWFzZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtF
dmVudEtleSogZXZlbnQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViS2l0V2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3aWRnZXQpOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRXZWJW
aWV3R2V0V2ViVmlld0luc3RhbmNlKHdlYktpdFdlYlZpZXcpOworCisgICAgaWYgKGd0a19pbV9j
b250ZXh0X2ZpbHRlcl9rZXlwcmVzcyh3ZWJLaXRXZWJWaWV3R2V0SU1Db250ZXh0KHdlYktpdFdl
YlZpZXcpLCBldmVudCkpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgd2ViVmlldy0+a2V5
UHJlc3MoZXZlbnQpOworCisgICAgcmV0dXJuIEdUS19XSURHRVRfQ0xBU1Mod2ViS2l0V2ViVmll
d1BhcmVudENsYXNzKS0+a2V5X3JlbGVhc2VfZXZlbnQod2lkZ2V0LCBldmVudCk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJWaWV3QnV0dG9uUHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRCdXR0b24qIGV2ZW50KQoreworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRX
ZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9XRUJfVklFVyh3aWRnZXQpKTsKKyAgICBn
dGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKKyAgICB3ZWJWaWV3LT5tb3VzZUFjdGl2YXRl
KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRBbnkqPihldmVudCkpOworCisgICAgcmV0dXJuIEZB
TFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0J1dHRvblJlbGVhc2VFdmVudChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRXZlbnRCdXR0b24qIGV2ZW50KQoreworICAgIFdlYlZpZXcqIHdl
YlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9XRUJfVklFVyh3
aWRnZXQpKTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKKyAgICB3ZWJWaWV3
LT5tb3VzZUFjdGl2YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnRBbnkqPihldmVudCkpOwor
CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld1Njcm9sbEV2
ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudFNjcm9sbCogZXZlbnQpCit7CisgICAgV2Vi
Vmlldyogd2ViVmlldyA9IHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFuY2UoV0VCS0lUX1dF
Ql9WSUVXKHdpZGdldCkpOworICAgIHdlYlZpZXctPnNjcm9sbChldmVudCk7CisKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3TW90aW9uTm90aWZ5RXZlbnQo
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCkKK3sKKyAgICBXZWJWaWV3
KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJ
RVcod2lkZ2V0KSk7CisgICAgd2ViVmlldy0+bW91c2VBY3RpdmF0ZShyZWludGVycHJldF9jYXN0
PEdka0V2ZW50QW55Kj4oZXZlbnQpKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGlj
IHZvaWQgd2ViS2l0V2ViVmlld0NsYXNzSW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYktpdFdl
YlZpZXdDbGFzcykKK3sKKyAgICB3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MgPSBnX3R5cGVfY2xh
c3NfcGVla19wYXJlbnQod2ViS2l0V2ViVmlld0NsYXNzKTsKKworICAgIEd0a1dpZGdldENsYXNz
KiB3aWRnZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Mod2ViS2l0V2ViVmlld0NsYXNzKTsKKyAg
ICB3aWRnZXRDbGFzcy0+cmVhbGl6ZSA9IHdlYktpdFdlYlZpZXdSZWFsaXplOworI2lmZGVmIEdU
S19BUElfVkVSU0lPTl8yCisgICAgd2lkZ2V0Q2xhc3MtPmV4cG9zZV9ldmVudCA9IHdlYlZpZXdP
bkV4cG9zZTsKKyNlbHNlCisgICAgd2lkZ2V0Q2xhc3MtPmRyYXcgPSB3ZWJWaWV3T25EcmF3Owor
I2VuZGlmCisgICAgd2lkZ2V0Q2xhc3MtPnNpemVfYWxsb2NhdGUgPSB3ZWJWaWV3T25TaXplQWxs
b2NhdGU7CisgICAgd2lkZ2V0Q2xhc3MtPmZvY3VzX2luX2V2ZW50ID0gd2ViVmlld0ZvY3VzSW5F
dmVudDsKKyAgICB3aWRnZXRDbGFzcy0+Zm9jdXNfb3V0X2V2ZW50ID0gd2ViVmlld0ZvY3VzT3V0
RXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtleV9wcmVzc19ldmVudCA9IHdlYlZpZXdLZXlQcmVz
c0V2ZW50OworICAgIHdpZGdldENsYXNzLT5rZXlfcmVsZWFzZV9ldmVudCA9IHdlYlZpZXdLZXlS
ZWxlYXNlRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9wcmVzc19ldmVudCA9IHdlYlZp
ZXdCdXR0b25QcmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5idXR0b25fcmVsZWFzZV9ldmVu
dCA9IHdlYlZpZXdCdXR0b25SZWxlYXNlRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPnNjcm9sbF9l
dmVudCA9IHdlYlZpZXdTY3JvbGxFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+bW90aW9uX25vdGlm
eV9ldmVudCA9IHdlYlZpZXdNb3Rpb25Ob3RpZnlFdmVudDsKKworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViS2l0V2ViVmlld0NsYXNzKTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJLaXRXZWJWaWV3RGlzcG9zZTsKKworICAgIEd0a0Nv
bnRhaW5lckNsYXNzKiBjb250YWluZXJDbGFzcyA9IEdUS19DT05UQUlORVJfQ0xBU1Mod2ViS2l0
V2ViVmlld0NsYXNzKTsKKyAgICBjb250YWluZXJDbGFzcy0+YWRkID0gd2ViS2l0V2ViVmlld0Nv
bnRhaW5lckFkZDsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJLaXRXZWJWaWV3
Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3UHJpdmF0ZSkpOworfQorCitHVHlwZSB3ZWJLaXRX
ZWJWaWV3R2V0VHlwZSgpCit7CisgICAgc3RhdGljIHZvbGF0aWxlIGdzaXplIGdEZWZpbmVUeXBl
SWRWb2xhdGlsZSA9IDA7CisgICAgaWYgKGdfb25jZV9pbml0X2VudGVyKCZnRGVmaW5lVHlwZUlk
Vm9sYXRpbGUpKSB7CisgICAgICAgIEdUeXBlIGdEZWZpbmVUeXBlSWQgPSBnX3R5cGVfcmVnaXN0
ZXJfc3RhdGljX3NpbXBsZShHVEtfVFlQRV9DT05UQUlORVIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2ludGVybl9zdGF0aWNf
c3RyaW5nKCJXZWJLaXRXZWJWaWV3IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV2ViS2l0V2ViVmlld0NsYXNzKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0NsYXNzSW5pdEZ1bmM+KHdlYktpdFdlYlZpZXdDbGFzc0lu
aXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZW9mKFdlYktpdFdlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHSW5z
dGFuY2VJbml0RnVuYz4od2ViS2l0V2ViVmlld0luaXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1R5cGVG
bGFncz4oMCkpOworICAgICAgICBnX29uY2VfaW5pdF9sZWF2ZSgmZ0RlZmluZVR5cGVJZFZvbGF0
aWxlLCBnRGVmaW5lVHlwZUlkKTsKKyAgICB9CisgICAgcmV0dXJuIGdEZWZpbmVUeXBlSWRWb2xh
dGlsZTsKK30KKworV2ViVmlldyogd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXZWJL
aXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3KQoreworICAgIHJldHVybiB3ZWJLaXRXZWJWaWV3LT5w
cml2LT53ZWJWaWV3SW5zdGFuY2U7Cit9CisKK3ZvaWQgd2ViS2l0V2ViVmlld1NldFdlYlZpZXdJ
bnN0YW5jZShXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3LCBXZWJWaWV3KiB3ZWJWaWV3SW5z
dGFuY2UpCit7CisgICAgd2ViS2l0V2ViVmlldy0+cHJpdi0+d2ViVmlld0luc3RhbmNlID0gd2Vi
Vmlld0luc3RhbmNlOworfQorCitHdGtJTUNvbnRleHQqIHdlYktpdFdlYlZpZXdHZXRJTUNvbnRl
eHQoV2ViS2l0V2ViVmlldyogd2ViS2l0V2ViVmlldykKK3sKKyAgICByZXR1cm4gd2ViS2l0V2Vi
Vmlldy0+cHJpdi0+aW1Db250ZXh0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYktpdFdlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTlh
MzRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJL
aXRXZWJWaWV3LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp
IDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJLaXRX
ZWJWaWV3X2gKKyNkZWZpbmUgV2ViS2l0V2ViVmlld19oCisKKyNpbmNsdWRlICJXZWJWaWV3Lmgi
CisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFVyAgICAgICAgICAgICAg
ICAod2ViS2l0V2ViVmlld0dldFR5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXKG9iaikg
ICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
VFlQRV9XRUJfVklFVywgV2ViS2l0V2ViVmlldykpCisjZGVmaW5lIFdFQktJVF9XRUJfVklFV19D
TEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdDbGFzcykpCisjZGVmaW5lIFdFQktJVF9J
U19XRUJfVklFVyhvYmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVcpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1ZJRVdf
Q0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX1dFQl9WSUVXKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0dFVF9DTEFTUyhvYmop
ICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9XRUJf
VklFVywgV2ViS2l0V2ViVmlld0NsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXcgV2ViS2l0V2ViVmlldzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2Vi
S2l0V2ViVmlld0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIFdl
YktpdFdlYlZpZXdQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgeworICAgIEd0a0Nv
bnRhaW5lciBwYXJlbnRJbnN0YW5jZTsKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsK
KyAgICBHdGtDb250YWluZXJDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dUeXBlIHdlYktpdFdl
YlZpZXdHZXRUeXBlKCk7CisKK1dlYlZpZXcqIHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFu
Y2UoV2ViS2l0V2ViVmlldyopOworCit2b2lkIHdlYktpdFdlYlZpZXdTZXRXZWJWaWV3SW5zdGFu
Y2UoV2ViS2l0V2ViVmlldyosIFdlYlZpZXcqKTsKKworR3RrSU1Db250ZXh0KiB3ZWJLaXRXZWJW
aWV3R2V0SU1Db250ZXh0KFdlYktpdFdlYlZpZXcqKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8vIFdlYktpdFdlYlZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlMjA3MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5jcHAKQEAgLTAs
MCArMSwyOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3LmgiCisKKyNpbmNsdWRlICJDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oIgor
I2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVu
dVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAiV2ViS2l0
V2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKKwordm9pZCBXZWJWaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoR3RrV2lkZ2V0KiB3
aWRnZXQpCit7CisgICAgaWYgKCEobV9pc1BhZ2VBY3RpdmUpKSB7CisgICAgICAgIG1faXNQYWdl
QWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFn
ZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOworICAgIH0KKworICAgIG1fcGFnZS0+dmlld1N0
YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCk7Cit9CisKK3ZvaWQgV2Vi
Vmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBtX2lz
UGFnZUFjdGl2ZSA9IGZhbHNlOworICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBh
Z2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKK30KKworV2ViVmlldzo6V2ViVmlldyhHZGtS
ZWN0YW5nbGUgdmlld1JlY3QsIFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFn
ZUdyb3VwKQorICAgIDogbV92aWV3UmVjdCh2aWV3UmVjdCkKKyAgICAsIG1faXNQYWdlQWN0aXZl
KHRydWUpCit7CisgICAgbV9wYWdlID0gY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlzLCBwYWdl
R3JvdXApOworCisgICAgbV92aWV3V2lkZ2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0Kj4oZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLCBOVUxMKSk7CisgICAgQVNTRVJUKG1fdmll
d1dpZGdldCk7CisKKyAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7CisKKyAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKG1fdmlld1dpZGdldCk7
CisgICAgd2ViS2l0V2ViVmlld1NldFdlYlZpZXdJbnN0YW5jZSh3ZWJLaXRXZWJWaWV3LCB0aGlz
KTsKK30KKworV2ViVmlldzo6fldlYlZpZXcoKQoreworfQorCitHZGtXaW5kb3cqIFdlYlZpZXc6
OmdldFdlYlZpZXdXaW5kb3coKQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF93aW5kb3co
bV92aWV3V2lkZ2V0KTsKK30KKwordm9pZCBXZWJWaWV3OjpwYWludChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrUmVjdGFuZ2xlIHJlY3QsIGNhaXJvX3QqIGNyKQoreworICAgIG1fcGFnZS0+ZHJhd2lu
Z0FyZWEoKS0+cGFpbnQoSW50UmVjdChyZWN0KSwgY3IpOworfQorCit2b2lkIFdlYlZpZXc6OnJl
c2l6ZShHdGtXaWRnZXQqLCBJbnRTaXplIHdpbmRvd1NpemUpCit7CisgICAgbV9wYWdlLT5kcmF3
aW5nQXJlYSgpLT5zZXRTaXplKHdpbmRvd1NpemUsIEludFNpemUoKSk7Cit9CisKK3ZvaWQgV2Vi
Vmlldzo6a2V5UHJlc3MoR2RrRXZlbnRLZXkqIGV2ZW50KQoreworICAgIG1fcGFnZS0+aGFuZGxl
S2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGV2ZW50KSk7Cit9CisKK3ZvaWQg
V2ViVmlldzo6bW91c2VBY3RpdmF0ZShHZGtFdmVudEFueSogZXZlbnQpCit7CisgICAgbV9wYWdl
LT5oYW5kbGVNb3VzZUV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChl
dmVudCkpOworfQorCit2b2lkIFdlYlZpZXc6OnNjcm9sbChHZGtFdmVudFNjcm9sbCogZXZlbnQp
Cit7CisgICAgbV9wYWdlLT5oYW5kbGVXaGVlbEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRl
V2ViV2hlZWxFdmVudChldmVudCkpOworfQorCitib29sIFdlYlZpZXc6OmlzQWN0aXZlKCkKK3sK
KyAgICByZXR1cm4gbV9pc1BhZ2VBY3RpdmU7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xvc2UoKQor
eworICAgIG1fcGFnZS0+Y2xvc2UoKTsKK30KKworLy8gUGFnZUNsaWVudCdzIHB1cmUgdmlydHVh
bCBmdW5jdGlvbnMKK1Bhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gV2ViVmlldzo6Y3JlYXRl
RHJhd2luZ0FyZWFQcm94eSgpCit7CisgICAgcmV0dXJuIENodW5rZWRVcGRhdGVEcmF3aW5nQXJl
YVByb3h5OjpjcmVhdGUodGhpcywgbV9wYWdlLmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3Ojpz
ZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlzcGxheVZpZXcoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2Nyb2xsVmlldyhjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxP
ZmZzZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworV2ViQ29yZTo6SW50U2l6ZSBX
ZWJWaWV3Ojp2aWV3U2l6ZSgpCit7CisgICAgcmV0dXJuIEludFJlY3QobV92aWV3UmVjdCkuc2l6
ZSgpOworfQorCitib29sIFdlYlZpZXc6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1Zp
ZXdGb2N1c2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFdlYlZpZXc6OmlzVmlld1Zpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVmlldzo6aXNWaWV3SW5XaW5kb3co
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
V2ViVmlldzo6V2ViVmlldzo6cHJvY2Vzc0RpZENyYXNoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmRpZFJlbGF1bmNoUHJvY2VzcygpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp0YWtlRm9jdXMoYm9vbCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnRvb2xUaXBDaGFuZ2VkKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNldFZpZXdwb3J0QXJndW1lbnRzKGNvbnN0
IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0
Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xlYXJBbGxFZGl0Q29tbWFuZHMoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0RWRpdENvbW1hbmRT
dGF0ZShjb25zdCBTdHJpbmcmLCBib29sLCBpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0
UmVjdCYgdmlld1JlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmll
d1JlY3Q7Cit9CisKK0Zsb2F0UmVjdCBXZWJWaWV3Ojpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3Qg
RmxvYXRSZWN0JiB2aWV3UmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biB2aWV3UmVjdDsKK30KKwordm9pZCBXZWJWaWV3Ojpkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmRpZE5vdEhhbmRsZUtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IFdlYlZpZXc6OmNyZWF0ZVBv
cHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBXZWJWaWV3
OjpjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRGaW5kSW5kaWNh
dG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9p
ZCBXZWJWaWV3OjpwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnBhZ2VEaWRMZWF2ZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCit2b2lkIFdlYlZpZXc6OmRpZENvbW1pdExv
YWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbikKK3sKK30KKwordm9p
ZCBXZWJWaWV3OjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNv
bnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKQoreworfQorCitkb3VibGUgV2ViVmlldzo6Y3Vz
dG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYlZpZXc6OnNldEN1c3RvbVJlcHJlc2VudGF0aW9u
Wm9vbUZhY3Rvcihkb3VibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJWaWV3OjpwYWdlQ2xvc2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlOGZjMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5oCkBAIC0wLDAgKzEsMTIy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdfaAorI2RlZmluZSBXZWJWaWV3X2gKKwor
I2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsKK2NsYXNzIFdl
YlBhZ2VOYW1lc3BhY2U7CisKK2NsYXNzIFdlYlZpZXcgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJW
aWV3PiwgcHVibGljIFBhZ2VDbGllbnQgeworcHVibGljOgorICAgIH5XZWJWaWV3KCk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViVmlldz4gY3JlYXRlKEdka1JlY3RhbmdsZSB2aWV3UmVjdCwg
V2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXApCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlZpZXcodmlld1JlY3QsIGNvbnRleHQsIHBhZ2VH
cm91cCkpOworICAgIH0KKworICAgIEd0a1dpZGdldCogd2luZG93KCkgY29uc3QgeyByZXR1cm4g
bV92aWV3V2lkZ2V0OyB9CisKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2UuZ2V0KCk7IH0KKworICAgIHZvaWQgaGFuZGxlRm9jdXNJbkV2ZW50KEd0a1dpZGdl
dCopOworICAgIHZvaWQgaGFuZGxlRm9jdXNPdXRFdmVudChHdGtXaWRnZXQqKTsKKworICAgIHZv
aWQgcGFpbnQoR3RrV2lkZ2V0KiwgR2RrUmVjdGFuZ2xlLCBjYWlyb190Kik7CisgICAgdm9pZCBy
ZXNpemUoR3RrV2lkZ2V0KiwgV2ViQ29yZTo6SW50U2l6ZSk7CisgICAgdm9pZCBrZXlQcmVzcyhH
ZGtFdmVudEtleSopOworICAgIHZvaWQgc2Nyb2xsKEdka0V2ZW50U2Nyb2xsKik7CisgICAgdm9p
ZCBtb3VzZUFjdGl2YXRlKEdka0V2ZW50QW55Kik7CisKK3ByaXZhdGU6CisgICAgV2ViVmlldyhH
ZGtSZWN0YW5nbGUsIFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqKTsKKworICAgIEdka1dpbmRv
dyogZ2V0V2ViVmlld1dpbmRvdygpOworCisgICAgYm9vbCBpc0FjdGl2ZSgpOworICAgIHZvaWQg
Y2xvc2UoKTsKKworICAgIC8vIFBhZ2VDbGllbnQKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8RHJh
d2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzcGxheVZpZXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmlldyhjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
Y3JvbGxPZmZzZXQpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSgpOwor
ICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdXaW5kb3dBY3RpdmUoKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNWaWV3Rm9jdXNlZCgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlKCk7CisgICAg
dmlydHVhbCBib29sIGlzVmlld0luV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NE
aWRDcmFzaCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFnZUNsb3NlZCgpOworICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoYm9v
bCBkaXJlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6
OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNv
cihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRB
cmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+
LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVk
aXRDb21tYW5kcygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZFN0YXRlKGNvbnN0
IFdURjo6U3RyaW5nJiwgYm9vbCwgaW50KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVj
dCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3Qg
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkTm90SGFuZGxlS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dCYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9w
dXBNZW51UHJveHkoV2ViUGFnZVByb3h5Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNv
bnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5Kik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9y
PiwgYm9vbCBmYWRlT3V0KTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOworICAg
IHZpcnR1YWwgdm9pZCBwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisjZW5k
aWYKKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNl
Q3VzdG9tUmVwcmVzZW50YXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
RGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2Um
KTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBjdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKGRvdWJs
ZSk7CisKKyAgICAvLyBNZW1iZXJzIG9mIFdlYlZpZXcgY2xhc3MKKyAgICBHZGtSZWN0YW5nbGUg
bV92aWV3UmVjdDsKKyAgICBHdGtXaWRnZXQqIG1fdmlld1dpZGdldDsKKyAgICBib29sIG1faXNQ
YWdlQWN0aXZlOworICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG1fcGFnZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVmlld19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82145</attachid>
            <date>2011-02-11 11:03:20 -0800</date>
            <delta_ts>2011-02-15 08:54:54 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>webview.patch</filename>
            <type>text/plain</type>
            <size>32517</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IGEwNTFiYWVmZDFhYzdlNmZlZTZmMTEzMWUwNGZlYmM1ODJkMWEzOTIKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MjowMjowMyAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMSAgQW1ydXRoIFJhaiAgPGFtcnV0aHJh
akBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2Fz
aWJoYXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2Fs
aWEuY29tPgogICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAg
CiAgICAgICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJWaWV3IGFuZCBXZWJLaXRXZWJWaWV3IGNs
YXNzZXMgZm9yIFdlYktpdDIKICAgICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ4NTA5CiAgICAKICAgICAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKICAg
ICAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5jcHA6CiAgICAgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuaDogUmVtb3ZlZCBnZGtyZWN0YW5nbGUgZnJvbQog
ICAgICAgICAgICBjb25zdHJ1Y3Rvci4KICAgICAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYktp
dFdlYlZpZXcuY3BwOiBBZGRlZC4gVGhlIEdPYmplY3QgaW50ZXJmYWNlCiAgICAgICAgICAgIGZv
ciBXZWJWaWV3LiBUaGUgR09iamVjdCBpcyB0aGUgR3RrV2lkZ2V0IGhhbmRsZSB3aGljaCBpcyB1
c2VkIGJ5CiAgICAgICAgICAgIFdlYlZpZXcgY2xhc3MgZm9yIEdUSyBwb3J0LgogICAgICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5oOiBBZGRlZC4gVGhlIEdPYmplY3QgaW50
ZXJmYWNlCiAgICAgICAgICAgIGRlY2xhcmF0aW9ucyBmb3IgR3RrV2lkZ2V0IGhhbmRsZSBmb3Ig
R1RLIHBvcnQuCiAgICAgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmNwcDogQWRkZWQu
IFRoZSBuYXRpdmUgR3RrV2lkZ2V0IGhhbmRsZQogICAgICAgICAgICBmb3IgR1RLIHBvcnQgd2hp
Y2ggaXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggV0tWaWV3UmVmLgogICAgICAgICAgICAqIFVJUHJv
Y2Vzcy9ndGsvV2ViVmlldy5oOiBBZGRlZC4gQ2xhc3Mgd2hpY2ggaW1wbGVtZW50cyB0aGUKICAg
ICAgICAgICAgUGFnZUNsaWVudCBpbnRlcmZhY2UuICBJdCBpcyBhIHdyYXBwZXIgb3ZlciB0aGUg
bmF0aXZlIEd0a1dpZGdldAogICAgICAgICAgICBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIGVhY2gg
V0tWaWV3UmVmIGZvciBHVEsgcG9ydC4KCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzQxODUyZC4uZmU0ZDQzYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMS0wMi0xMSAgQW1ydXRoIFJhaiAgPGFt
cnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJh
dmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxl
eEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtHVEtdIEltcGxlbWVudCBXZWJWaWV3IGFuZCBXZWJLaXRXZWJWaWV3IGNsYXNzZXMg
Zm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ4NTA5CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvZ3RrL1dLVmlldy5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2d0ay9X
S1ZpZXcuaDogUmVtb3ZlZCBnZGtyZWN0YW5nbGUgZnJvbQorICAgICAgICBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOiBBZGRlZC4gVGhlIEdP
YmplY3QgaW50ZXJmYWNlCisgICAgICAgIGZvciBXZWJWaWV3LiBUaGUgR09iamVjdCBpcyB0aGUg
R3RrV2lkZ2V0IGhhbmRsZSB3aGljaCBpcyB1c2VkIGJ5CisgICAgICAgIFdlYlZpZXcgY2xhc3Mg
Zm9yIEdUSyBwb3J0LgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5oOiBB
ZGRlZC4gVGhlIEdPYmplY3QgaW50ZXJmYWNlCisgICAgICAgIGRlY2xhcmF0aW9ucyBmb3IgR3Rr
V2lkZ2V0IGhhbmRsZSBmb3IgR1RLIHBvcnQuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJW
aWV3LmNwcDogQWRkZWQuIFRoZSBuYXRpdmUgR3RrV2lkZ2V0IGhhbmRsZQorICAgICAgICBmb3Ig
R1RLIHBvcnQgd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggV0tWaWV3UmVmLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9ndGsvV2ViVmlldy5oOiBBZGRlZC4gQ2xhc3Mgd2hpY2ggaW1wbGVtZW50
cyB0aGUKKyAgICAgICAgUGFnZUNsaWVudCBpbnRlcmZhY2UuICBJdCBpcyBhIHdyYXBwZXIgb3Zl
ciB0aGUgbmF0aXZlIEd0a1dpZGdldAorICAgICAgICBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIGVh
Y2ggV0tWaWV3UmVmIGZvciBHVEsgcG9ydC4KKwogMjAxMS0wMi0xMCAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3Rl
aW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9X
ZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDU4YTM4NzYuLjgzOGExNjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtCkBAIC0xODUsNiArMTg1LDcgQEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAog
CVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVBcnJheS5oIFwKIAlTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9JbW11dGFibGVEaWN0aW9uYXJ5LmggXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRy
ZWVDb250ZXh0LmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9NdXRhYmxlQXJyYXkuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTXV0YWJsZUFycmF5LmggXAogCVNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5jcHAgXApAQCAtMzQ3LDggKzM0OCwxMiBAQCBsaWJX
ZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9DaHVu
a2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYkluc3BlY3Rvckd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViS2l0V2ViVmlldy5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViS2l0
V2ViVmlldy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0
ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUHJlZmVyZW5jZXNHdGsu
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwIFwKKwlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVhZExhdW5jaGVyR3RrLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3BwCmluZGV4IGFhODgx
NTEuLmUzZDZjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9n
dGsvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dL
Vmlldy5jcHAKQEAgLTM3LDkgKzM3LDkgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShHZGtSZWN0YW5n
bGUgcmVjdCwgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91
cFJlZikKK1dLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdL
UGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8V2ViVmlldz4gdmlldyA9
IFdlYlZpZXc6OmNyZWF0ZShyZWN0LCB0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3Jv
dXBSZWYpKTsKKyAgICBSZWZQdHI8V2ViVmlldz4gdmlldyA9IFdlYlZpZXc6OmNyZWF0ZSh0b0lt
cGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKICAgICByZXR1cm4gdG9BUEko
dmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9ndGsvV0tWaWV3LmgKaW5kZXggNTQxNWZkMy4uODJlNTVhYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5oCkBAIC0zNSwxMyArMzUsMTQgQEAK
IGV4dGVybiAiQyIgewogI2VuZGlmCiAKLVdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRl
KEdka1JlY3RhbmdsZSByZWN0LCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwKTsKK1dLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJl
ZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogCiBXS19FWFBPUlQgR3RrV2lk
Z2V0KiBXS1ZpZXdHZXRXaW5kb3coV0tWaWV3UmVmIHZpZXcpOwogCiBXS19FWFBPUlQgV0tQYWdl
UmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpOwogCiBXS19FWFBPUlQgV0tVUkxSZWYg
V0tVUkxDcmVhdGVXaXRoVVJMKGNvbnN0IGNoYXIqKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViS2l0
V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMzQ2ZmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0V2ViVmlldy5oIgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRp
YyBncG9pbnRlciB3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MgPSAwOworCitzdHJ1Y3QgX1dlYktp
dFdlYlZpZXdQcml2YXRlIHsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3SW5zdGFuY2U7CisgICAgR3Rr
SU1Db250ZXh0KiBpbUNvbnRleHQ7Cit9OworCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJWaWV3UmVh
bGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBndGtfd2lkZ2V0X3NldF9yZWFsaXplZCh3
aWRnZXQsIFRSVUUpOworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0a193
aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxsb2NhdGlvbik7CisKKyAgICBHZGtXaW5k
b3dBdHRyIGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlcy53aW5kb3dfdHlwZSA9IEdES19XSU5E
T1dfQ0hJTEQ7CisgICAgYXR0cmlidXRlcy54ID0gYWxsb2NhdGlvbi54OworICAgIGF0dHJpYnV0
ZXMueSA9IGFsbG9jYXRpb24ueTsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0gYWxsb2NhdGlvbi53
aWR0aDsKKyAgICBhdHRyaWJ1dGVzLmhlaWdodCA9IGFsbG9jYXRpb24uaGVpZ2h0OworICAgIGF0
dHJpYnV0ZXMud2NsYXNzID0gR0RLX0lOUFVUX09VVFBVVDsKKyAgICBhdHRyaWJ1dGVzLnZpc3Vh
bCA9IGd0a193aWRnZXRfZ2V0X3Zpc3VhbCh3aWRnZXQpOworI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCisgICAgYXR0cmlidXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwKHdp
ZGdldCk7CisjZW5kaWYKKyAgICBhdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBHREtfVklTSUJJTElU
WV9OT1RJRllfTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0VYUE9TVVJF
X01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fUFJFU1NfTUFT
SworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19QT0lOVEVSX01PVElPTl9NQVNLCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfS0VZX1BSRVNTX01BU0sKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEdES19LRVlfUkVMRUFTRV9NQVNLCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OX01PVElPTl9NQVNLCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEdES19CVVRUT04zX01PVElPTl9NQVNLOworCisgICAgZ2ludCBhdHRyaWJ1dGVz
TWFzayA9IEdES19XQV9YIHwgR0RLX1dBX1kgfCBHREtfV0FfVklTVUFMOworI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCisgICAgYXR0cmlidXRlc01hc2sgfD0gR0RLX1dBX0NPTE9STUFQOworI2Vu
ZGlmCisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0X2dl
dF9wYXJlbnRfd2luZG93KHdpZGdldCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzTWFzayk7Cisg
ICAgZ3RrX3dpZGdldF9zZXRfd2luZG93KHdpZGdldCwgd2luZG93KTsKKyAgICBnZGtfd2luZG93
X3NldF91c2VyX2RhdGEod2luZG93LCB3aWRnZXQpOworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMCwgMCkKKyAgICBndGtfd2lkZ2V0X3N0eWxl
X2F0dGFjaCh3aWRnZXQpOworI2Vsc2UKKyAgICB3aWRnZXQtPnN0eWxlID0gZ3RrX3N0eWxlX2F0
dGFjaChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCB3aW5kb3cpOworI2VuZGlmCisgICAg
Z3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIHdp
bmRvdywgR1RLX1NUQVRFX05PUk1BTCk7CisjZWxzZQorICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9iYWNrZ3JvdW5kKGd0a193aWRnZXRfZ2V0X3N0eWxlX2NvbnRleHQod2lkZ2V0KSwgd2luZG93
KTsKKyNlbmRpZgorCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklF
Vyh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJp
djsKKyAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhwcml2LT5pbUNvbnRleHQs
IHdpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYlZpZXdDb250YWluZXJBZGQoR3Rr
Q29udGFpbmVyKiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIGd0a193aWRn
ZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYktpdFdlYlZpZXdEaXNwb3NlKEdPYmplY3QqIGdvYmplY3QpCit7CisgICAgV2Vi
S2l0V2ViVmlldyogd2ViS2l0V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnb2JqZWN0KTsKKyAg
ICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYktpdFdlYlZpZXctPnByaXY7CisKKyAg
ICBpZiAocHJpdi0+aW1Db250ZXh0KSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPmlt
Q29udGV4dCk7CisgICAgICAgIHByaXYtPmltQ29udGV4dCA9IDA7CisgICAgfQorCisgICAgR19P
QkpFQ1RfQ0xBU1Mod2ViS2l0V2ViVmlld1BhcmVudENsYXNzKS0+ZGlzcG9zZShnb2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2ViS2l0V2ViVmlld0luaXQoV2ViS2l0V2ViVmlldyogd2ViS2l0
V2ViVmlldykKK3sKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURSh3ZWJLaXRXZWJWaWV3LCBXRUJLSVRfVFlQRV9XRUJfVklFVywgV2Vi
S2l0V2ViVmlld1ByaXZhdGUpOworICAgIHdlYktpdFdlYlZpZXctPnByaXYgPSBwcml2OworCisg
ICAgZ3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKEdUS19XSURHRVQod2ViS2l0V2ViVmlldyksIFRS
VUUpOworICAgIHByaXYtPmltQ29udGV4dCA9IGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCk7Cit9
CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorc3RhdGljIGdib29sZWFuIHdlYlZpZXdPbkV4
cG9zZShHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRFeHBvc2UqIGV2ZW50KQoreworICAgIFdl
YlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9X
RUJfVklFVyh3aWRnZXQpKTsKKyAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7CisgICAgZ2RrX3Jl
Z2lvbl9nZXRfY2xpcGJveChldmVudC0+cmVnaW9uLCAmY2xpcFJlY3QpOworCisgICAgR2RrV2lu
ZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KTsKKyAgICBjYWlyb190
KiBjciA9IGdka19jYWlyb19jcmVhdGUod2luZG93KTsKKworICAgIHdlYlZpZXctPnBhaW50KHdp
ZGdldCwgY2xpcFJlY3QsIGNyKTsKKworICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworCisgICAgcmV0
dXJuIEZBTFNFOworfQorI2Vsc2UKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3T25EcmF3KEd0a1dp
ZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKK3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2Vi
S2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSk7Cisg
ICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworCisgICAgaWYgKCFnZGtfY2Fpcm9fZ2V0X2NsaXBf
cmVjdGFuZ2xlKGNyLCAmY2xpcFJlY3QpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICB3
ZWJWaWV3LT5wYWludCh3aWRnZXQsIGNsaXBSZWN0LCBjcik7CisKKyAgICByZXR1cm4gRkFMU0U7
Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgd2ViVmlld09uU2l6ZUFsbG9jYXRlKEd0a1dpZGdl
dCogd2lkZ2V0LCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKQoreworICAgIFdlYlZpZXcqIHdl
YlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9XRUJfVklFVyh3
aWRnZXQpKTsKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYktpdFdlYlZpZXdQYXJlbnRDbGFzcykt
PnNpemVfYWxsb2NhdGUod2lkZ2V0LCBhbGxvY2F0aW9uKTsKKyAgICB3ZWJWaWV3LT5zZXRTaXpl
KHdpZGdldCwgSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KSk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3Rm9jdXNJbkV2ZW50KEd0a1dpZGdldCogd2lk
Z2V0LCBHZGtFdmVudEZvY3VzKiBldmVudCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJLaXRX
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7CisgICAgV2ViVmlldyogd2ViVmlldyA9
IHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFuY2Uod2ViS2l0V2ViVmlldyk7CisKKyAgICBH
dGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwod2lkZ2V0KTsKKyAg
ICBpZiAoZ3RrX3dpZGdldF9pc190b3BsZXZlbCh0b3BsZXZlbCkgJiYgZ3RrX3dpbmRvd19oYXNf
dG9wbGV2ZWxfZm9jdXMoR1RLX1dJTkRPVyh0b3BsZXZlbCkpKSB7CisgICAgICAgIGd0a19pbV9j
b250ZXh0X2ZvY3VzX2luKHdlYktpdFdlYlZpZXdHZXRJTUNvbnRleHQod2ViS2l0V2ViVmlldykp
OworICAgICAgICB3ZWJWaWV3LT5oYW5kbGVGb2N1c0luRXZlbnQod2lkZ2V0KTsKKyAgICB9CisK
KyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MpLT5m
b2N1c19pbl9ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYlZp
ZXdGb2N1c091dEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEZvY3VzKiBldmVudCkK
K3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdp
ZGdldCk7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3SW5z
dGFuY2Uod2ViS2l0V2ViVmlldyk7CisKKyAgICB3ZWJWaWV3LT5oYW5kbGVGb2N1c091dEV2ZW50
KHdpZGdldCk7CisgICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQgPSB3ZWJLaXRXZWJWaWV3R2V0
SU1Db250ZXh0KHdlYktpdFdlYlZpZXcpOworICAgIGlmIChpbUNvbnRleHQpCisgICAgICAgIGd0
a19pbV9jb250ZXh0X2ZvY3VzX291dChpbUNvbnRleHQpOworCisgICAgcmV0dXJuIEdUS19XSURH
RVRfQ0xBU1Mod2ViS2l0V2ViVmlld1BhcmVudENsYXNzKS0+Zm9jdXNfb3V0X2V2ZW50KHdpZGdl
dCwgZXZlbnQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0tleVByZXNzRXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKK3sKKyAgICBXZWJWaWV3KiB3ZWJW
aWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJRVcod2lk
Z2V0KSk7CisgICAgd2ViVmlldy0+aGFuZGxlS2V5Ym9hcmRFdmVudChldmVudCk7CisKKyAgICBy
ZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MpLT5rZXlfcHJl
c3NfZXZlbnQod2lkZ2V0LCBldmVudCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3S2V5
UmVsZWFzZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpCit7Cisg
ICAgV2ViS2l0V2ViVmlldyogd2ViS2l0V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQp
OworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNl
KHdlYktpdFdlYlZpZXcpOworCisgICAgaWYgKGd0a19pbV9jb250ZXh0X2ZpbHRlcl9rZXlwcmVz
cyh3ZWJLaXRXZWJWaWV3R2V0SU1Db250ZXh0KHdlYktpdFdlYlZpZXcpLCBldmVudCkpCisgICAg
ICAgIHJldHVybiBUUlVFOworCisgICAgd2ViVmlldy0+aGFuZGxlS2V5Ym9hcmRFdmVudChldmVu
dCk7CisKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJLaXRXZWJWaWV3UGFyZW50Q2xh
c3MpLT5rZXlfcmVsZWFzZV9ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYlZpZXdCdXR0b25QcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1
dHRvbiogZXZlbnQpCit7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYktpdFdlYlZpZXdHZXRX
ZWJWaWV3SW5zdGFuY2UoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpOworICAgIGd0a193aWRnZXRf
Z3JhYl9mb2N1cyh3aWRnZXQpOworICAgIHdlYlZpZXctPmhhbmRsZU1vdXNlRXZlbnQocmVpbnRl
cnByZXRfY2FzdDxHZGtFdmVudEFueSo+KGV2ZW50KSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3QnV0dG9uUmVsZWFzZUV2ZW50KEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAgV2ViVmlldyogd2ViVmlldyA9
IHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFuY2UoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkp
OworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIHdlYlZpZXctPmhhbmRs
ZU1vdXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudEFueSo+KGV2ZW50KSk7CisKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3U2Nyb2xsRXZlbnQo
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3sKKyAgICBXZWJWaWV3
KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJ
RVcod2lkZ2V0KSk7CisgICAgd2ViVmlldy0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CisKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3TW90aW9uTm90aWZ5
RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCkKK3sKKyAgICBX
ZWJWaWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRf
V0VCX1ZJRVcod2lkZ2V0KSk7CisgICAgd2ViVmlldy0+aGFuZGxlTW91c2VFdmVudChyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50QW55Kj4oZXZlbnQpKTsKKworICAgIHJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIHZvaWQgd2ViS2l0V2ViVmlld0NsYXNzSW5pdChXZWJLaXRXZWJWaWV3Q2xhc3Mq
IHdlYktpdFdlYlZpZXdDbGFzcykKK3sKKyAgICB3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MgPSBn
X3R5cGVfY2xhc3NfcGVla19wYXJlbnQod2ViS2l0V2ViVmlld0NsYXNzKTsKKworICAgIEd0a1dp
ZGdldENsYXNzKiB3aWRnZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Mod2ViS2l0V2ViVmlld0Ns
YXNzKTsKKyAgICB3aWRnZXRDbGFzcy0+cmVhbGl6ZSA9IHdlYktpdFdlYlZpZXdSZWFsaXplOwor
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgd2lkZ2V0Q2xhc3MtPmV4cG9zZV9ldmVudCA9
IHdlYlZpZXdPbkV4cG9zZTsKKyNlbHNlCisgICAgd2lkZ2V0Q2xhc3MtPmRyYXcgPSB3ZWJWaWV3
T25EcmF3OworI2VuZGlmCisgICAgd2lkZ2V0Q2xhc3MtPnNpemVfYWxsb2NhdGUgPSB3ZWJWaWV3
T25TaXplQWxsb2NhdGU7CisgICAgd2lkZ2V0Q2xhc3MtPmZvY3VzX2luX2V2ZW50ID0gd2ViVmll
d0ZvY3VzSW5FdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+Zm9jdXNfb3V0X2V2ZW50ID0gd2ViVmll
d0ZvY3VzT3V0RXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtleV9wcmVzc19ldmVudCA9IHdlYlZp
ZXdLZXlQcmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5rZXlfcmVsZWFzZV9ldmVudCA9IHdl
YlZpZXdLZXlSZWxlYXNlRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9wcmVzc19ldmVu
dCA9IHdlYlZpZXdCdXR0b25QcmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5idXR0b25fcmVs
ZWFzZV9ldmVudCA9IHdlYlZpZXdCdXR0b25SZWxlYXNlRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3Mt
PnNjcm9sbF9ldmVudCA9IHdlYlZpZXdTY3JvbGxFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+bW90
aW9uX25vdGlmeV9ldmVudCA9IHdlYlZpZXdNb3Rpb25Ob3RpZnlFdmVudDsKKworICAgIEdPYmpl
Y3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViS2l0V2ViVmlld0NsYXNz
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJLaXRXZWJWaWV3RGlzcG9zZTsKKwor
ICAgIEd0a0NvbnRhaW5lckNsYXNzKiBjb250YWluZXJDbGFzcyA9IEdUS19DT05UQUlORVJfQ0xB
U1Mod2ViS2l0V2ViVmlld0NsYXNzKTsKKyAgICBjb250YWluZXJDbGFzcy0+YWRkID0gd2ViS2l0
V2ViVmlld0NvbnRhaW5lckFkZDsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJL
aXRXZWJWaWV3Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3UHJpdmF0ZSkpOworfQorCitHVHlw
ZSB3ZWJLaXRXZWJWaWV3R2V0VHlwZSgpCit7CisgICAgc3RhdGljIHZvbGF0aWxlIGdzaXplIGdE
ZWZpbmVUeXBlSWRWb2xhdGlsZSA9IDA7CisgICAgaWYgKGdfb25jZV9pbml0X2VudGVyKCZnRGVm
aW5lVHlwZUlkVm9sYXRpbGUpKSB7CisgICAgICAgIEdUeXBlIGdEZWZpbmVUeXBlSWQgPSBnX3R5
cGVfcmVnaXN0ZXJfc3RhdGljX3NpbXBsZShHVEtfVFlQRV9DT05UQUlORVIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2ludGVy
bl9zdGF0aWNfc3RyaW5nKCJXZWJLaXRXZWJWaWV3IiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV2ViS2l0V2ViVmll
d0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0NsYXNzSW5pdEZ1bmM+KHdlYktpdFdlYlZp
ZXdDbGFzc0luaXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZW9mKFdlYktpdFdlYlZpZXcpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxHSW5zdGFuY2VJbml0RnVuYz4od2ViS2l0V2ViVmlld0luaXQpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8R1R5cGVGbGFncz4oMCkpOworICAgICAgICBnX29uY2VfaW5pdF9sZWF2ZSgmZ0RlZmluZVR5
cGVJZFZvbGF0aWxlLCBnRGVmaW5lVHlwZUlkKTsKKyAgICB9CisgICAgcmV0dXJuIGdEZWZpbmVU
eXBlSWRWb2xhdGlsZTsKK30KKworV2ViVmlldyogd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0
YW5jZShXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3KQoreworICAgIHJldHVybiB3ZWJLaXRX
ZWJWaWV3LT5wcml2LT53ZWJWaWV3SW5zdGFuY2U7Cit9CisKK3ZvaWQgd2ViS2l0V2ViVmlld1Nl
dFdlYlZpZXdJbnN0YW5jZShXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3LCBXZWJWaWV3KiB3
ZWJWaWV3SW5zdGFuY2UpCit7CisgICAgd2ViS2l0V2ViVmlldy0+cHJpdi0+d2ViVmlld0luc3Rh
bmNlID0gd2ViVmlld0luc3RhbmNlOworfQorCitHdGtJTUNvbnRleHQqIHdlYktpdFdlYlZpZXdH
ZXRJTUNvbnRleHQoV2ViS2l0V2ViVmlldyogd2ViS2l0V2ViVmlldykKK3sKKyAgICByZXR1cm4g
d2ViS2l0V2ViVmlldy0+cHJpdi0+aW1Db250ZXh0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yNjcxNzhjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5
cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRXZWJWaWV3X2gKKyNkZWZpbmUgV2ViS2l0V2ViVmlld19oCisKKyNpbmNsdWRlICJX
ZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFVyAgICAg
ICAgICAgICAgKHdlYktpdFdlYlZpZXdHZXRUeXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJfVklF
VyhvYmplY3QpICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iamVjdCks
IFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3KSkKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9WSUVXX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19XRUJfVklFVyhvYmplY3QpICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iamVjdCksIFdFQktJVF9UWVBFX1dFQl9WSUVXKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dF
Ql9WSUVXX0NMQVNTKGtsYXNzKSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfV0VCX1ZJRVcpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfR0VUX0NMQVNT
KG9iamVjdCkgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iamVjdCksICBXRUJLSVRfVFlQ
RV9XRUJfVklFVywgV2ViS2l0V2ViVmlld0NsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xh
c3MgV2ViS2l0V2ViVmlld0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2
YXRlIFdlYktpdFdlYlZpZXdQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgeworICAg
IEd0a0NvbnRhaW5lciBwYXJlbnRJbnN0YW5jZTsKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBX
ZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViVmlld0Ns
YXNzIHsKKyAgICBHdGtDb250YWluZXJDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dUeXBlIHdl
YktpdFdlYlZpZXdHZXRUeXBlKCk7CisKK1dlYlZpZXcqIHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3
SW5zdGFuY2UoV2ViS2l0V2ViVmlldyopOworCit2b2lkIHdlYktpdFdlYlZpZXdTZXRXZWJWaWV3
SW5zdGFuY2UoV2ViS2l0V2ViVmlldyosIFdlYlZpZXcqKTsKKworR3RrSU1Db250ZXh0KiB3ZWJL
aXRXZWJWaWV3R2V0SU1Db250ZXh0KFdlYktpdFdlYlZpZXcqKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8vIFdlYktpdFdlYlZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
Vmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzYmFjOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5jcHAK
QEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9y
b2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlICJDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94
eS5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb250
ZXh0TWVudVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAi
V2ViS2l0V2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKKwordm9pZCBXZWJWaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoR3RrV2lk
Z2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCEobV9pc1BhZ2VBY3RpdmUpKSB7CisgICAgICAgIG1f
aXNQYWdlQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2Uo
V2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOworICAgIH0KKworICAgIG1fcGFnZS0+
dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICBtX2lzUGFnZUFjdGl2ZSA9IGZhbHNlOworICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdl
KFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKK30KKworV2ViVmlldzo6V2ViVmll
dyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKKyAgICA6IG1f
aXNQYWdlQWN0aXZlKHRydWUpCit7CisgICAgbV9wYWdlID0gY29udGV4dC0+Y3JlYXRlV2ViUGFn
ZSh0aGlzLCBwYWdlR3JvdXApOworCisgICAgbV92aWV3V2lkZ2V0ID0gc3RhdGljX2Nhc3Q8R3Rr
V2lkZ2V0Kj4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLCBOVUxMKSk7CisgICAg
QVNTRVJUKG1fdmlld1dpZGdldCk7CisKKyAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7
CisKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKG1f
dmlld1dpZGdldCk7CisgICAgd2ViS2l0V2ViVmlld1NldFdlYlZpZXdJbnN0YW5jZSh3ZWJLaXRX
ZWJWaWV3LCB0aGlzKTsKK30KKworV2ViVmlldzo6fldlYlZpZXcoKQoreworfQorCitHZGtXaW5k
b3cqIFdlYlZpZXc6OmdldFdlYlZpZXdXaW5kb3coKQoreworICAgIHJldHVybiBndGtfd2lkZ2V0
X2dldF93aW5kb3cobV92aWV3V2lkZ2V0KTsKK30KKwordm9pZCBXZWJWaWV3OjpwYWludChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrUmVjdGFuZ2xlIHJlY3QsIGNhaXJvX3QqIGNyKQoreworICAgIG1f
cGFnZS0+ZHJhd2luZ0FyZWEoKS0+cGFpbnQoSW50UmVjdChyZWN0KSwgY3IpOworfQorCit2b2lk
IFdlYlZpZXc6OnNldFNpemUoR3RrV2lkZ2V0KiwgSW50U2l6ZSB3aW5kb3dTaXplKQoreworICAg
IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZSh3aW5kb3dTaXplLCBJbnRTaXplKCkpOwor
fQorCit2b2lkIFdlYlZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50
KQoreworICAgIG1fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2
ZW50KGV2ZW50KSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6aGFuZGxlTW91c2VFdmVudChHZGtFdmVu
dEFueSogZXZlbnQpCit7CisgICAgbV9wYWdlLT5oYW5kbGVNb3VzZUV2ZW50KFdlYkV2ZW50RmFj
dG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudChldmVudCkpOworfQorCit2b2lkIFdlYlZpZXc6Omhh
bmRsZVdoZWVsRXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQoreworICAgIG1fcGFnZS0+aGFu
ZGxlV2hlZWxFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQp
KTsKK30KKworYm9vbCBXZWJWaWV3Ojppc0FjdGl2ZSgpCit7CisgICAgcmV0dXJuIG1faXNQYWdl
QWN0aXZlOworfQorCit2b2lkIFdlYlZpZXc6OmNsb3NlKCkKK3sKKyAgICBtX3BhZ2UtPmNsb3Nl
KCk7Cit9CisKKy8vIFBhZ2VDbGllbnQncyBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zCitQYXNzT3du
UHRyPERyYXdpbmdBcmVhUHJveHk+IFdlYlZpZXc6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQor
eworICAgIHJldHVybiBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlKHRoaXMs
IG1fcGFnZS5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Vmlld05lZWRzRGlzcGxheShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYlZpZXc6OmRpc3BsYXlWaWV3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYlZpZXc6OnNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xs
UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK1dlYkNvcmU6OkludFNpemUgV2ViVmlldzo6dmlld1NpemUoKQor
eworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxv
Y2F0aW9uKG1fdmlld1dpZGdldCwgJmFsbG9jYXRpb24pOworICAgIHJldHVybiBJbnRTaXplKGFs
bG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKK30KKworYm9vbCBXZWJWaWV3Ojpp
c1ZpZXdXaW5kb3dBY3RpdmUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViVmlldzo6aXNWaWV3Rm9jdXNlZCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdW
aXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFdlYlZpZXc6OmlzVmlld0luV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYlZpZXc6OldlYlZpZXc6OnByb2Nlc3NE
aWRDcmFzaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojpk
aWRSZWxhdW5jaFByb2Nlc3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViVmlldzo6dGFrZUZvY3VzKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBXZWJWaWV3Ojp0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Q3Vyc29y
KGNvbnN0IEN1cnNvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJW
aWV3OjpzZXRWaWV3cG9ydEFyZ3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50
cyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpyZWdpc3Rl
ckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94
eTo6VW5kb09yUmVkbykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZp
ZXc6OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYlZpZXc6OnNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiwgYm9vbCwg
aW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBXZWJWaWV3Ojpj
b252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZpZXdSZWN0OworfQorCitGbG9hdFJlY3QgV2Vi
Vmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1JlY3QpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmlld1JlY3Q7Cit9CisKK3ZvaWQgV2Vi
Vmlldzo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9v
bCB3YXNFdmVudEhhbmRsZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJWaWV3OjpkaWROb3RIYW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
JiBldmVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPFdlYlBv
cHVwTWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQ
dHI8V2ViQ29udGV4dE1lbnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShX
ZWJQYWdlUHJveHkqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgV2ViVmlldzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0
b3I+LCBib29sIGZhZGVPdXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViVmlldzo6cGFnZURpZEVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJWaWV3OjpwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKwordm9pZCBXZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3Vz
dG9tUmVwcmVzZW50YXRpb24pCit7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlkRmluaXNoTG9hZGlu
Z0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNl
JikKK3sKK30KKworZG91YmxlIFdlYlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rv
cigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBX
ZWJWaWV3OjpzZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFnZUNsb3NlZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRDaGFuZ2VTY3JvbGxi
YXJzRm9yTWFpbkZyYW1lKCkgY29uc3QKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjk5ZGJhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYlZpZXcuaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJWaWV3X2gKKyNkZWZpbmUgV2ViVmlld19oCisKKyNpbmNsdWRlICJQYWdlQ2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXpl
Lmg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIERyYXdpbmdBcmVhUHJveHk7CitjbGFzcyBXZWJQYWdlTmFtZXNwYWNlOworCitj
bGFzcyBXZWJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlldz4sIHB1YmxpYyBQYWdlQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICB+V2ViVmlldygpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YlZpZXc+IGNyZWF0ZShXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91
cCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViVmlldyhjb250ZXh0LCBw
YWdlR3JvdXApKTsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQqIHdpbmRvdygpIGNvbnN0IHsgcmV0
dXJuIG1fdmlld1dpZGdldDsgfQorCisgICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWdlLmdldCgpOyB9CisKKyAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudChHdGtX
aWRnZXQqKTsKKyAgICB2b2lkIGhhbmRsZUZvY3VzT3V0RXZlbnQoR3RrV2lkZ2V0Kik7CisKKyAg
ICB2b2lkIHBhaW50KEd0a1dpZGdldCosIEdka1JlY3RhbmdsZSwgY2Fpcm9fdCopOworICAgIHZv
aWQgc2V0U2l6ZShHdGtXaWRnZXQqLCBXZWJDb3JlOjpJbnRTaXplKTsKKyAgICB2b2lkIGhhbmRs
ZUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqKTsKKyAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQo
R2RrRXZlbnRTY3JvbGwqKTsKKyAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoR2RrRXZlbnRBbnkq
KTsKKworcHJpdmF0ZToKKyAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqKTsK
KworICAgIEdka1dpbmRvdyogZ2V0V2ViVmlld1dpbmRvdygpOworCisgICAgYm9vbCBpc0FjdGl2
ZSgpOworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIC8vIFBhZ2VDbGllbnQKKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGxheVZpZXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsVmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6
ZSB2aWV3U2l6ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdXaW5kb3dBY3RpdmUoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNWaWV3Rm9jdXNlZCgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdW
aXNpYmxlKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld0luV2luZG93KCk7CisgICAgdmlydHVh
bCB2b2lkIHByb2Nlc3NEaWRDcmFzaCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFBy
b2Nlc3MoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZUNsb3NlZCgpOworICAgIHZpcnR1YWwgdm9p
ZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hh
bmdlZChjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVh
bCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Vmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVk
aXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOworICAgIHZpcnR1YWwg
dm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29t
bWFuZFN0YXRlKGNvbnN0IFdURjo6U3RyaW5nJiwgYm9vbCwgaW50KTsKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3Bh
Y2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRo
S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5k
bGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTm90SGFuZGxlS2V5RXZlbnQoY29uc3QgTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudCYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQ
cm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5Kik7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2Vi
UGFnZVByb3h5Kik7CisgICAgdmlydHVhbCB2b2lkIHNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0
cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZSgpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRMZWF2ZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdExvYWRGb3JN
YWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbik7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgQ29yZUlQ
Qzo6RGF0YVJlZmVyZW5jZSYpOworICAgIHZpcnR1YWwgZG91YmxlIGN1c3RvbVJlcHJlc2VudGF0
aW9uWm9vbUZhY3RvcigpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXN0b21SZXByZXNlbnRhdGlv
blpvb21GYWN0b3IoZG91YmxlKTsKKworICAgIC8vIE1lbWJlcnMgb2YgV2ViVmlldyBjbGFzcwor
ICAgIEd0a1dpZGdldCogbV92aWV3V2lkZ2V0OworICAgIGJvb2wgbV9pc1BhZ2VBY3RpdmU7Cisg
ICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbV9wYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBXZWJWaWV3X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82466</attachid>
            <date>2011-02-15 08:54:54 -0800</date>
            <delta_ts>2011-02-22 01:38:50 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>webkitwebview.patch</filename>
            <type>text/plain</type>
            <size>32691</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDM0ZDE4NzRiMTE2ZGY0ODcwYWIzYTQ4ZjcxMWZhNWVmOGJkNjgyMjEKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MjowMjowMyAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMSBBbXJ1dGggUmFqIDxhbXJ1dGhyYWpA
bW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgPHJhdmkua2FzaWJo
YXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5j
b20+CiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAg
ICAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlZpZXcgYW5kIFdlYktpdFdlYlZpZXcgY2xhc3Nl
cyBmb3IgV2ViS2l0MgogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDg1MDkKICAgIAogICAgICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgogICAgICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcDoKICAgICAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5oOiBSZW1vdmVkIGdka3JlY3RhbmdsZSBmcm9tCiAgICAg
ICAgICAgIGNvbnN0cnVjdG9yLgogICAgICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHA6IEFkZGVkLiBUaGUgR09iamVjdCBpbnRlcmZhY2UKICAgICAgICAgICAgZm9yIFdl
YlZpZXcuIFRoZSBHT2JqZWN0IGlzIHRoZSBHdGtXaWRnZXQgaGFuZGxlIHdoaWNoIGlzIHVzZWQg
YnkKICAgICAgICAgICAgV2ViVmlldyBjbGFzcyBmb3IgR1RLIHBvcnQuCiAgICAgICAgICAgICog
VUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3Lmg6IEFkZGVkLiBUaGUgR09iamVjdCBpbnRlcmZh
Y2UKICAgICAgICAgICAgZGVjbGFyYXRpb25zIGZvciBHdGtXaWRnZXQgaGFuZGxlIGZvciBHVEsg
cG9ydC4KICAgICAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwOiBBZGRlZC4gVGhl
IG5hdGl2ZSBHdGtXaWRnZXQgaGFuZGxlCiAgICAgICAgICAgIGZvciBHVEsgcG9ydCB3aGljaCBp
cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBXS1ZpZXdSZWYuCiAgICAgICAgICAgICogVUlQcm9jZXNz
L2d0ay9XZWJWaWV3Lmg6IEFkZGVkLiBDbGFzcyB3aGljaCBpbXBsZW1lbnRzIHRoZQogICAgICAg
ICAgICBQYWdlQ2xpZW50IGludGVyZmFjZS4gIEl0IGlzIGEgd3JhcHBlciBvdmVyIHRoZSBuYXRp
dmUgR3RrV2lkZ2V0CiAgICAgICAgICAgIGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggZWFjaCBXS1Zp
ZXdSZWYgZm9yIEdUSyBwb3J0LgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjNzM0MTM3Li4yZjQxNTJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDItMTEgIEFtcnV0aCBSYWogIDxhbXJ1dGhy
YWpAbW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmth
c2liaGF0bGFAbW90b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdh
bGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbR1RLXSBJbXBsZW1lbnQgV2ViVmlldyBhbmQgV2ViS2l0V2ViVmlldyBjbGFzc2VzIGZvciBX
ZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
ODUwOQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL2d0ay9XS1ZpZXcuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3
Lmg6IFJlbW92ZWQgZ2RrcmVjdGFuZ2xlIGZyb20KKyAgICAgICAgY29uc3RydWN0b3IuCisgICAg
ICAgICogVUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDogQWRkZWQuIFRoZSBHT2JqZWN0
IGludGVyZmFjZQorICAgICAgICBmb3IgV2ViVmlldy4gVGhlIEdPYmplY3QgaXMgdGhlIEd0a1dp
ZGdldCBoYW5kbGUgd2hpY2ggaXMgdXNlZCBieQorICAgICAgICBXZWJWaWV3IGNsYXNzIGZvciBH
VEsgcG9ydC4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcuaDogQWRkZWQu
IFRoZSBHT2JqZWN0IGludGVyZmFjZQorICAgICAgICBkZWNsYXJhdGlvbnMgZm9yIEd0a1dpZGdl
dCBoYW5kbGUgZm9yIEdUSyBwb3J0LgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViVmlldy5j
cHA6IEFkZGVkLiBUaGUgbmF0aXZlIEd0a1dpZGdldCBoYW5kbGUKKyAgICAgICAgZm9yIEdUSyBw
b3J0IHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFdLVmlld1JlZi4KKyAgICAgICAgKiBV
SVByb2Nlc3MvZ3RrL1dlYlZpZXcuaDogQWRkZWQuIENsYXNzIHdoaWNoIGltcGxlbWVudHMgdGhl
CisgICAgICAgIFBhZ2VDbGllbnQgaW50ZXJmYWNlLiAgSXQgaXMgYSB3cmFwcGVyIG92ZXIgdGhl
IG5hdGl2ZSBHdGtXaWRnZXQKKyAgICAgICAgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFdL
Vmlld1JlZiBmb3IgR1RLIHBvcnQuCisKIDIwMTEtMDItMTUgIEFuZHJhcyBCZWNzaSAgPGFiZWNz
aUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSBDc2FiYSBPc3p0cm9n
b27DoWMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDc4NzRjNjQuLjJmOGZkZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCkBAIC0xODcsNiArMTg3LDcgQEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0g
XAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVBcnJheS5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1No
YXJlZC9JbW11dGFibGVEaWN0aW9uYXJ5LmggXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXll
clRyZWVDb250ZXh0LmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9NdXRhYmxlQXJyYXkuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTXV0YWJsZUFycmF5LmggXAogCVNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5jcHAgXApAQCAtMzQ5LDggKzM1MCwxMiBAQCBs
aWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9D
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkluc3BlY3Rvckd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViS2l0V2ViVmlldy5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
S2l0V2ViVmlldy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQcm94
eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUHJlZmVyZW5jZXNH
dGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVhZExhdW5jaGVyR3RrLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuY3BwCmluZGV4IGFh
ODgxNTEuLmUzZDZjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9ndGsvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3Rr
L1dLVmlldy5jcHAKQEAgLTM3LDkgKzM3LDkgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShHZGtSZWN0
YW5nbGUgcmVjdCwgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZikKK1dLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8V2ViVmlldz4gdmll
dyA9IFdlYlZpZXc6OmNyZWF0ZShyZWN0LCB0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdl
R3JvdXBSZWYpKTsKKyAgICBSZWZQdHI8V2ViVmlldz4gdmlldyA9IFdlYlZpZXc6OmNyZWF0ZSh0
b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKICAgICByZXR1cm4gdG9B
UEkodmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmgKaW5kZXggNTQxNWZkMy4uODJlNTVhYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5oCkBAIC0zNSwxMyArMzUsMTQg
QEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLVdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3Jl
YXRlKEdka1JlY3RhbmdsZSByZWN0LCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwKTsKK1dLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLQ29udGV4
dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogCiBXS19FWFBPUlQgR3Rr
V2lkZ2V0KiBXS1ZpZXdHZXRXaW5kb3coV0tWaWV3UmVmIHZpZXcpOwogCiBXS19FWFBPUlQgV0tQ
YWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpOwogCiBXS19FWFBPUlQgV0tVUkxS
ZWYgV0tVUkxDcmVhdGVXaXRoVVJMKGNvbnN0IGNoYXIqKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVz
CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
S2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZp
ZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNzkwNjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0
YXRpYyBncG9pbnRlciB3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MgPSAwOworCitzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdQcml2YXRlIHsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3SW5zdGFuY2U7CisgICAg
R3RrSU1Db250ZXh0KiBpbUNvbnRleHQ7Cit9OworCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJWaWV3
UmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBndGtfd2lkZ2V0X3NldF9yZWFsaXpl
ZCh3aWRnZXQsIFRSVUUpOworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIGd0
a193aWRnZXRfZ2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxsb2NhdGlvbik7CisKKyAgICBHZGtX
aW5kb3dBdHRyIGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlcy53aW5kb3dfdHlwZSA9IEdES19X
SU5ET1dfQ0hJTEQ7CisgICAgYXR0cmlidXRlcy54ID0gYWxsb2NhdGlvbi54OworICAgIGF0dHJp
YnV0ZXMueSA9IGFsbG9jYXRpb24ueTsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0gYWxsb2NhdGlv
bi53aWR0aDsKKyAgICBhdHRyaWJ1dGVzLmhlaWdodCA9IGFsbG9jYXRpb24uaGVpZ2h0OworICAg
IGF0dHJpYnV0ZXMud2NsYXNzID0gR0RLX0lOUFVUX09VVFBVVDsKKyAgICBhdHRyaWJ1dGVzLnZp
c3VhbCA9IGd0a193aWRnZXRfZ2V0X3Zpc3VhbCh3aWRnZXQpOworI2lmZGVmIEdUS19BUElfVkVS
U0lPTl8yCisgICAgYXR0cmlidXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFw
KHdpZGdldCk7CisjZW5kaWYKKyAgICBhdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBHREtfVklTSUJJ
TElUWV9OT1RJRllfTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0VYUE9T
VVJFX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fUFJFU1Nf
TUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTl9SRUxFQVNFX01B
U0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19QT0lOVEVSX01PVElPTl9NQVNL
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfS0VZX1BSRVNTX01BU0sKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEdES19LRVlfUkVMRUFTRV9NQVNLCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OX01PVElPTl9NQVNLCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IEdES19CVVRUT04zX01PVElPTl9NQVNLOworCisgICAgZ2ludCBhdHRyaWJ1
dGVzTWFzayA9IEdES19XQV9YIHwgR0RLX1dBX1kgfCBHREtfV0FfVklTVUFMOworI2lmZGVmIEdU
S19BUElfVkVSU0lPTl8yCisgICAgYXR0cmlidXRlc01hc2sgfD0gR0RLX1dBX0NPTE9STUFQOwor
I2VuZGlmCisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0
X2dldF9wYXJlbnRfd2luZG93KHdpZGdldCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzTWFzayk7
CisgICAgZ3RrX3dpZGdldF9zZXRfd2luZG93KHdpZGdldCwgd2luZG93KTsKKyAgICBnZGtfd2lu
ZG93X3NldF91c2VyX2RhdGEod2luZG93LCB3aWRnZXQpOworCisjaWZkZWYgR1RLX0FQSV9WRVJT
SU9OXzIKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAyMCwgMCkKKyAgICBndGtfd2lkZ2V0X3N0
eWxlX2F0dGFjaCh3aWRnZXQpOworI2Vsc2UKKyAgICB3aWRnZXQtPnN0eWxlID0gZ3RrX3N0eWxl
X2F0dGFjaChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCB3aW5kb3cpOworI2VuZGlmCisg
ICAgZ3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCks
IHdpbmRvdywgR1RLX1NUQVRFX05PUk1BTCk7CisjZWxzZQorICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9iYWNrZ3JvdW5kKGd0a193aWRnZXRfZ2V0X3N0eWxlX2NvbnRleHQod2lkZ2V0KSwgd2lu
ZG93KTsKKyNlbmRpZgorCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3aWRnZXQpOworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+
cHJpdjsKKyAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhwcml2LT5pbUNvbnRl
eHQsIHdpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYlZpZXdDb250YWluZXJBZGQo
R3RrQ29udGFpbmVyKiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIGd0a193
aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYktpdFdlYlZpZXdEaXNwb3NlKEdPYmplY3QqIGdvYmplY3QpCit7CisgICAg
V2ViS2l0V2ViVmlldyogd2ViS2l0V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnb2JqZWN0KTsK
KyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYktpdFdlYlZpZXctPnByaXY7CisK
KyAgICBpZiAocHJpdi0+aW1Db250ZXh0KSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYt
PmltQ29udGV4dCk7CisgICAgICAgIHByaXYtPmltQ29udGV4dCA9IDA7CisgICAgfQorCisgICAg
R19PQkpFQ1RfQ0xBU1Mod2ViS2l0V2ViVmlld1BhcmVudENsYXNzKS0+ZGlzcG9zZShnb2JqZWN0
KTsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0V2ViVmlld0luaXQoV2ViS2l0V2ViVmlldyogd2Vi
S2l0V2ViVmlldykKK3sKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURSh3ZWJLaXRXZWJWaWV3LCBXRUJLSVRfVFlQRV9XRUJfVklFVywg
V2ViS2l0V2ViVmlld1ByaXZhdGUpOworICAgIHdlYktpdFdlYlZpZXctPnByaXYgPSBwcml2Owor
CisgICAgZ3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKEdUS19XSURHRVQod2ViS2l0V2ViVmlldyks
IFRSVUUpOworICAgIHByaXYtPmltQ29udGV4dCA9IGd0a19pbV9tdWx0aWNvbnRleHRfbmV3KCk7
Cit9CisKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorc3RhdGljIGdib29sZWFuIHdlYlZpZXdP
bkV4cG9zZShHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRFeHBvc2UqIGV2ZW50KQoreworICAg
IFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJ
VF9XRUJfVklFVyh3aWRnZXQpKTsKKyAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7CisgICAgZ2Rr
X3JlZ2lvbl9nZXRfY2xpcGJveChldmVudC0+cmVnaW9uLCAmY2xpcFJlY3QpOworCisgICAgR2Rr
V2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KTsKKyAgICBjYWly
b190KiBjciA9IGdka19jYWlyb19jcmVhdGUod2luZG93KTsKKworICAgIHdlYlZpZXctPnBhaW50
KHdpZGdldCwgY2xpcFJlY3QsIGNyKTsKKworICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworCisgICAg
cmV0dXJuIEZBTFNFOworfQorI2Vsc2UKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3T25EcmF3KEd0
a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKK3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0g
d2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSk7
CisgICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0OworCisgICAgaWYgKCFnZGtfY2Fpcm9fZ2V0X2Ns
aXBfcmVjdGFuZ2xlKGNyLCAmY2xpcFJlY3QpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAg
ICB3ZWJWaWV3LT5wYWludCh3aWRnZXQsIGNsaXBSZWN0LCBjcik7CisKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgd2ViVmlld09uU2l6ZUFsbG9jYXRlKEd0a1dp
ZGdldCogd2lkZ2V0LCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKQoreworICAgIFdlYlZpZXcq
IHdlYlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9XRUJfVklF
Vyh3aWRnZXQpKTsKKyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYktpdFdlYlZpZXdQYXJlbnRDbGFz
cyktPnNpemVfYWxsb2NhdGUod2lkZ2V0LCBhbGxvY2F0aW9uKTsKKyAgICB3ZWJWaWV3LT5zZXRT
aXplKHdpZGdldCwgSW50U2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0
KSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3Rm9jdXNJbkV2ZW50KEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtFdmVudEZvY3VzKiBldmVudCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJL
aXRXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7CisgICAgV2ViVmlldyogd2ViVmll
dyA9IHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFuY2Uod2ViS2l0V2ViVmlldyk7CisKKyAg
ICBHdGtXaWRnZXQqIHRvcGxldmVsID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwod2lkZ2V0KTsK
KyAgICBpZiAoZ3RrX3dpZGdldF9pc190b3BsZXZlbCh0b3BsZXZlbCkgJiYgZ3RrX3dpbmRvd19o
YXNfdG9wbGV2ZWxfZm9jdXMoR1RLX1dJTkRPVyh0b3BsZXZlbCkpKSB7CisgICAgICAgIGd0a19p
bV9jb250ZXh0X2ZvY3VzX2luKHdlYktpdFdlYlZpZXdHZXRJTUNvbnRleHQod2ViS2l0V2ViVmll
dykpOworICAgICAgICB3ZWJWaWV3LT5oYW5kbGVGb2N1c0luRXZlbnQod2lkZ2V0KTsKKyAgICB9
CisKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3Mp
LT5mb2N1c19pbl9ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YlZpZXdGb2N1c091dEV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEZvY3VzKiBldmVu
dCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdpZGdldCk7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3
SW5zdGFuY2Uod2ViS2l0V2ViVmlldyk7CisKKyAgICB3ZWJWaWV3LT5oYW5kbGVGb2N1c091dEV2
ZW50KHdpZGdldCk7CisgICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQgPSB3ZWJLaXRXZWJWaWV3
R2V0SU1Db250ZXh0KHdlYktpdFdlYlZpZXcpOworICAgIGlmIChpbUNvbnRleHQpCisgICAgICAg
IGd0a19pbV9jb250ZXh0X2ZvY3VzX291dChpbUNvbnRleHQpOworCisgICAgcmV0dXJuIEdUS19X
SURHRVRfQ0xBU1Mod2ViS2l0V2ViVmlld1BhcmVudENsYXNzKS0+Zm9jdXNfb3V0X2V2ZW50KHdp
ZGdldCwgZXZlbnQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0tleVByZXNzRXZlbnQo
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKK3sKKyAgICBXZWJWaWV3KiB3
ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJRVco
d2lkZ2V0KSk7CisgICAgd2ViVmlldy0+aGFuZGxlS2V5Ym9hcmRFdmVudChldmVudCk7CisKKyAg
ICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MpLT5rZXlf
cHJlc3NfZXZlbnQod2lkZ2V0LCBldmVudCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3
S2V5UmVsZWFzZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogZXZlbnQpCit7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViS2l0V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRn
ZXQpOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3Rh
bmNlKHdlYktpdFdlYlZpZXcpOworCisgICAgaWYgKGd0a19pbV9jb250ZXh0X2ZpbHRlcl9rZXlw
cmVzcyh3ZWJLaXRXZWJWaWV3R2V0SU1Db250ZXh0KHdlYktpdFdlYlZpZXcpLCBldmVudCkpCisg
ICAgICAgIHJldHVybiBUUlVFOworCisgICAgd2ViVmlldy0+aGFuZGxlS2V5Ym9hcmRFdmVudChl
dmVudCk7CisKKyAgICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJLaXRXZWJWaWV3UGFyZW50
Q2xhc3MpLT5rZXlfcmVsZWFzZV9ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYlZpZXdCdXR0b25QcmVzc0V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVu
dEJ1dHRvbiogZXZlbnQpCit7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYktpdFdlYlZpZXdH
ZXRXZWJWaWV3SW5zdGFuY2UoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpOworICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIHdlYlZpZXctPmhhbmRsZU1vdXNlRXZlbnQocmVp
bnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3QnV0dG9uUmVsZWFzZUV2ZW50KEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAgV2ViVmlldyogd2ViVmlldyA9
IHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFuY2UoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkp
OworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIHdlYlZpZXctPmhhbmRs
ZU1vdXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSk7CisKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3U2Nyb2xsRXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3sKKyAgICBXZWJWaWV3KiB3
ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJRVco
d2lkZ2V0KSk7CisgICAgd2ViVmlldy0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CisKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3TW90aW9uTm90aWZ5RXZl
bnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCkKK3sKKyAgICBXZWJW
aWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VC
X1ZJRVcod2lkZ2V0KSk7CisgICAgd2ViVmlldy0+aGFuZGxlTW91c2VFdmVudChyZWludGVycHJl
dF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3Rh
dGljIHZvaWQgd2ViS2l0V2ViVmlld0NsYXNzSW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYktp
dFdlYlZpZXdDbGFzcykKK3sKKyAgICB3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MgPSBnX3R5cGVf
Y2xhc3NfcGVla19wYXJlbnQod2ViS2l0V2ViVmlld0NsYXNzKTsKKworICAgIEd0a1dpZGdldENs
YXNzKiB3aWRnZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Mod2ViS2l0V2ViVmlld0NsYXNzKTsK
KyAgICB3aWRnZXRDbGFzcy0+cmVhbGl6ZSA9IHdlYktpdFdlYlZpZXdSZWFsaXplOworI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCisgICAgd2lkZ2V0Q2xhc3MtPmV4cG9zZV9ldmVudCA9IHdlYlZp
ZXdPbkV4cG9zZTsKKyNlbHNlCisgICAgd2lkZ2V0Q2xhc3MtPmRyYXcgPSB3ZWJWaWV3T25EcmF3
OworI2VuZGlmCisgICAgd2lkZ2V0Q2xhc3MtPnNpemVfYWxsb2NhdGUgPSB3ZWJWaWV3T25TaXpl
QWxsb2NhdGU7CisgICAgd2lkZ2V0Q2xhc3MtPmZvY3VzX2luX2V2ZW50ID0gd2ViVmlld0ZvY3Vz
SW5FdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+Zm9jdXNfb3V0X2V2ZW50ID0gd2ViVmlld0ZvY3Vz
T3V0RXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtleV9wcmVzc19ldmVudCA9IHdlYlZpZXdLZXlQ
cmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5rZXlfcmVsZWFzZV9ldmVudCA9IHdlYlZpZXdL
ZXlSZWxlYXNlRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9wcmVzc19ldmVudCA9IHdl
YlZpZXdCdXR0b25QcmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5idXR0b25fcmVsZWFzZV9l
dmVudCA9IHdlYlZpZXdCdXR0b25SZWxlYXNlRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPnNjcm9s
bF9ldmVudCA9IHdlYlZpZXdTY3JvbGxFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+bW90aW9uX25v
dGlmeV9ldmVudCA9IHdlYlZpZXdNb3Rpb25Ob3RpZnlFdmVudDsKKworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViS2l0V2ViVmlld0NsYXNzKTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJLaXRXZWJWaWV3RGlzcG9zZTsKKworICAgIEd0
a0NvbnRhaW5lckNsYXNzKiBjb250YWluZXJDbGFzcyA9IEdUS19DT05UQUlORVJfQ0xBU1Mod2Vi
S2l0V2ViVmlld0NsYXNzKTsKKyAgICBjb250YWluZXJDbGFzcy0+YWRkID0gd2ViS2l0V2ViVmll
d0NvbnRhaW5lckFkZDsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJLaXRXZWJW
aWV3Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3UHJpdmF0ZSkpOworfQorCitHVHlwZSB3ZWJL
aXRXZWJWaWV3R2V0VHlwZSgpCit7CisgICAgc3RhdGljIHZvbGF0aWxlIGdzaXplIGdEZWZpbmVU
eXBlSWRWb2xhdGlsZSA9IDA7CisgICAgaWYgKGdfb25jZV9pbml0X2VudGVyKCZnRGVmaW5lVHlw
ZUlkVm9sYXRpbGUpKSB7CisgICAgICAgIEdUeXBlIGdEZWZpbmVUeXBlSWQgPSBnX3R5cGVfcmVn
aXN0ZXJfc3RhdGljX3NpbXBsZShHVEtfVFlQRV9DT05UQUlORVIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2ludGVybl9zdGF0
aWNfc3RyaW5nKCJXZWJLaXRXZWJWaWV3IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV2ViS2l0V2ViVmlld0NsYXNz
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0NsYXNzSW5pdEZ1bmM+KHdlYktpdFdlYlZpZXdDbGFz
c0luaXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZW9mKFdlYktpdFdlYlZpZXcpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxH
SW5zdGFuY2VJbml0RnVuYz4od2ViS2l0V2ViVmlld0luaXQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1R5
cGVGbGFncz4oMCkpOworICAgICAgICBnX29uY2VfaW5pdF9sZWF2ZSgmZ0RlZmluZVR5cGVJZFZv
bGF0aWxlLCBnRGVmaW5lVHlwZUlkKTsKKyAgICB9CisgICAgcmV0dXJuIGdEZWZpbmVUeXBlSWRW
b2xhdGlsZTsKK30KKworV2ViVmlldyogd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShX
ZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3KQoreworICAgIHJldHVybiB3ZWJLaXRXZWJWaWV3
LT5wcml2LT53ZWJWaWV3SW5zdGFuY2U7Cit9CisKK3ZvaWQgd2ViS2l0V2ViVmlld1NldFdlYlZp
ZXdJbnN0YW5jZShXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3LCBXZWJWaWV3KiB3ZWJWaWV3
SW5zdGFuY2UpCit7CisgICAgd2ViS2l0V2ViVmlldy0+cHJpdi0+d2ViVmlld0luc3RhbmNlID0g
d2ViVmlld0luc3RhbmNlOworfQorCitHdGtJTUNvbnRleHQqIHdlYktpdFdlYlZpZXdHZXRJTUNv
bnRleHQoV2ViS2l0V2ViVmlldyogd2ViS2l0V2ViVmlldykKK3sKKyAgICByZXR1cm4gd2ViS2l0
V2ViVmlldy0+cHJpdi0+aW1Db250ZXh0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYktpdFdlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y
NjcxNzhjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJLaXRXZWJWaWV3LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg
KGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRXZWJWaWV3X2gKKyNkZWZpbmUgV2ViS2l0V2ViVmlld19oCisKKyNpbmNsdWRlICJXZWJWaWV3
LmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFVyAgICAgICAgICAg
ICAgKHdlYktpdFdlYlZpZXdHZXRUeXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJfVklFVyhvYmpl
Y3QpICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iamVjdCksIFdFQktJ
VF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3KSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9WSUVX
X0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdDbGFzcykpCisjZGVmaW5lIFdFQktJVF9J
U19XRUJfVklFVyhvYmplY3QpICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
amVjdCksIFdFQktJVF9UWVBFX1dFQl9WSUVXKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9WSUVX
X0NMQVNTKGtsYXNzKSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfV0VCX1ZJRVcpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfR0VUX0NMQVNTKG9iamVj
dCkgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iamVjdCksICBXRUJLSVRfVFlQRV9XRUJf
VklFVywgV2ViS2l0V2ViVmlld0NsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXcgV2ViS2l0V2ViVmlldzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2Vi
S2l0V2ViVmlld0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIFdl
YktpdFdlYlZpZXdQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgeworICAgIEd0a0Nv
bnRhaW5lciBwYXJlbnRJbnN0YW5jZTsKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsK
KyAgICBHdGtDb250YWluZXJDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dUeXBlIHdlYktpdFdl
YlZpZXdHZXRUeXBlKCk7CisKK1dlYlZpZXcqIHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFu
Y2UoV2ViS2l0V2ViVmlldyopOworCit2b2lkIHdlYktpdFdlYlZpZXdTZXRXZWJWaWV3SW5zdGFu
Y2UoV2ViS2l0V2ViVmlldyosIFdlYlZpZXcqKTsKKworR3RrSU1Db250ZXh0KiB3ZWJLaXRXZWJW
aWV3R2V0SU1Db250ZXh0KFdlYktpdFdlYlZpZXcqKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8vIFdlYktpdFdlYlZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxZmUwZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5jcHAKQEAgLTAs
MCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3LmgiCisKKyNpbmNsdWRlICJDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oIgor
I2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVu
dVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAiV2ViS2l0
V2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKKwordm9pZCBXZWJWaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoR3RrV2lkZ2V0KiB3
aWRnZXQpCit7CisgICAgaWYgKCEobV9pc1BhZ2VBY3RpdmUpKSB7CisgICAgICAgIG1faXNQYWdl
QWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFn
ZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOworICAgIH0KKworICAgIG1fcGFnZS0+dmlld1N0
YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCk7Cit9CisKK3ZvaWQgV2Vi
Vmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBtX2lz
UGFnZUFjdGl2ZSA9IGZhbHNlOworICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBh
Z2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKK30KKworV2ViVmlldzo6V2ViVmlldyhXZWJD
b250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKKyAgICA6IG1faXNQYWdl
QWN0aXZlKHRydWUpCit7CisgICAgbV9wYWdlID0gY29udGV4dC0+Y3JlYXRlV2ViUGFnZSh0aGlz
LCBwYWdlR3JvdXApOworCisgICAgbV92aWV3V2lkZ2V0ID0gc3RhdGljX2Nhc3Q8R3RrV2lkZ2V0
Kj4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLCBOVUxMKSk7CisgICAgQVNTRVJU
KG1fdmlld1dpZGdldCk7CisKKyAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7CisKKyAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKG1fdmlld1dp
ZGdldCk7CisgICAgd2ViS2l0V2ViVmlld1NldFdlYlZpZXdJbnN0YW5jZSh3ZWJLaXRXZWJWaWV3
LCB0aGlzKTsKK30KKworV2ViVmlldzo6fldlYlZpZXcoKQoreworfQorCitHZGtXaW5kb3cqIFdl
YlZpZXc6OmdldFdlYlZpZXdXaW5kb3coKQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF93
aW5kb3cobV92aWV3V2lkZ2V0KTsKK30KKwordm9pZCBXZWJWaWV3OjpwYWludChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrUmVjdGFuZ2xlIHJlY3QsIGNhaXJvX3QqIGNyKQoreworICAgIG1fcGFnZS0+
ZHJhd2luZ0FyZWEoKS0+cGFpbnQoSW50UmVjdChyZWN0KSwgY3IpOworfQorCit2b2lkIFdlYlZp
ZXc6OnNldFNpemUoR3RrV2lkZ2V0KiwgSW50U2l6ZSB3aW5kb3dTaXplKQoreworICAgIG1fcGFn
ZS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZSh3aW5kb3dTaXplLCBJbnRTaXplKCkpOworfQorCit2
b2lkIFdlYlZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQorewor
ICAgIG1fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGV2
ZW50KSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6aGFuZGxlTW91c2VFdmVudChHZGtFdmVudCogZXZl
bnQpCit7CisgICAgbV9wYWdlLT5oYW5kbGVNb3VzZUV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViTW91c2VFdmVudChldmVudCkpOworfQorCit2b2lkIFdlYlZpZXc6OmhhbmRsZVdoZWVs
RXZlbnQoR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQoreworICAgIG1fcGFnZS0+aGFuZGxlV2hlZWxF
dmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQpKTsKK30KKwor
Ym9vbCBXZWJWaWV3Ojppc0FjdGl2ZSgpCit7CisgICAgcmV0dXJuIG1faXNQYWdlQWN0aXZlOwor
fQorCit2b2lkIFdlYlZpZXc6OmNsb3NlKCkKK3sKKyAgICBtX3BhZ2UtPmNsb3NlKCk7Cit9CisK
Ky8vIFBhZ2VDbGllbnQncyBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zCitQYXNzT3duUHRyPERyYXdp
bmdBcmVhUHJveHk+IFdlYlZpZXc6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQoreworICAgIHJl
dHVybiBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5n
ZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZp
ZXc6OmRpc3BsYXlWaWV3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
YlZpZXc6OnNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK1dlYkNvcmU6OkludFNpemUgV2ViVmlldzo6dmlld1NpemUoKQoreworICAgIEd0
a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKG1f
dmlld1dpZGdldCwgJmFsbG9jYXRpb24pOworICAgIHJldHVybiBJbnRTaXplKGFsbG9jYXRpb24u
d2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5k
b3dBY3RpdmUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgV2ViVmlldzo6aXNWaWV3Rm9jdXNlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdl
YlZpZXc6OmlzVmlld0luV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFdlYlZpZXc6OldlYlZpZXc6OnByb2Nlc3NEaWRDcmFzaCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRSZWxhdW5j
aFByb2Nlc3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6
dGFrZUZvY3VzKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJW
aWV3Ojp0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1
cnNvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRW
aWV3cG9ydEFyZ3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpyZWdpc3RlckVkaXRDb21t
YW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09y
UmVkbykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmNsZWFy
QWxsRWRpdENvbW1hbmRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
YlZpZXc6OnNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiwgYm9vbCwgaW50KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBXZWJWaWV3Ojpjb252ZXJ0VG9E
ZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIHZpZXdSZWN0OworfQorCitGbG9hdFJlY3QgV2ViVmlldzo6Y29u
dmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1JlY3QpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmlld1JlY3Q7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZG9u
ZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCB3YXNFdmVu
dEhhbmRsZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojpk
aWROb3RIYW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVBy
b3h5PiBXZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29u
dGV4dE1lbnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJv
eHkqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
V2ViVmlldzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29s
IGZhZGVPdXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViVmlldzo6cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3
OjpwYWdlRGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwordm9p
ZCBXZWJWaWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVz
ZW50YXRpb24pCit7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JD
dXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKK3sKK30K
KworZG91YmxlIFdlYlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJWaWV3Ojpz
ZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFnZUNsb3NlZCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFp
bkZyYW1lKCkgY29uc3QKK3sKK30KKwordm9pZCBXZWJWaWV3OjpmbGFzaEJhY2tpbmdTdG9yZVVw
ZGF0ZXMoY29uc3QgVmVjdG9yPEludFJlY3Q+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjQ0MWZkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmgKQEAg
LTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld19oCisjZGVmaW5lIFdl
YlZpZXdfaAorCisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4K
KyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBEcmF3aW5nQXJlYVByb3h5
OworY2xhc3MgV2ViUGFnZU5hbWVzcGFjZTsKKworY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBSZWZD
b3VudGVkPFdlYlZpZXc+LCBwdWJsaWMgUGFnZUNsaWVudCB7CitwdWJsaWM6CisgICAgfldlYlZp
ZXcoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJWaWV3PiBjcmVhdGUoV2ViQ29udGV4dCog
Y29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXApCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYlZpZXcoY29udGV4dCwgcGFnZUdyb3VwKSk7CisgICAgfQorCisgICAg
R3RrV2lkZ2V0KiB3aW5kb3coKSBjb25zdCB7IHJldHVybiBtX3ZpZXdXaWRnZXQ7IH0KKworICAg
IFdlYlBhZ2VQcm94eSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsgfQorCisg
ICAgdm9pZCBoYW5kbGVGb2N1c0luRXZlbnQoR3RrV2lkZ2V0Kik7CisgICAgdm9pZCBoYW5kbGVG
b2N1c091dEV2ZW50KEd0a1dpZGdldCopOworCisgICAgdm9pZCBwYWludChHdGtXaWRnZXQqLCBH
ZGtSZWN0YW5nbGUsIGNhaXJvX3QqKTsKKyAgICB2b2lkIHNldFNpemUoR3RrV2lkZ2V0KiwgV2Vi
Q29yZTo6SW50U2l6ZSk7CisgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5
Kik7CisgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKik7CisgICAgdm9p
ZCBoYW5kbGVNb3VzZUV2ZW50KEdka0V2ZW50Kik7CisKK3ByaXZhdGU6CisgICAgV2ViVmlldyhX
ZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKik7CisKKyAgICBHZGtXaW5kb3cqIGdldFdlYlZpZXdX
aW5kb3coKTsKKworICAgIGJvb2wgaXNBY3RpdmUoKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAg
ICAvLyBQYWdlQ2xpZW50CisgICAgdmlydHVhbCBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+
IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRz
RGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRpc3Bs
YXlWaWV3KCk7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNWaWV3V2luZG93QWN0aXZlKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld0ZvY3VzZWQo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3VmlzaWJsZSgpOworICAgIHZpcnR1YWwgYm9vbCBp
c1ZpZXdJbldpbmRvdygpOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCk7CisgICAgdmlydHVhbCB2b2lkIHBh
Z2VDbG9zZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25z
dCBXVEY6OlN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29y
ZTo6Q3Vyc29yJik7CisgICAgdmlydHVhbCB2b2lkIHNldFZpZXdwb3J0QXJndW1lbnRzKGNvbnN0
IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJik7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
RWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5
OjpVbmRvT3JSZWRvKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBXVEY6OlN0cmluZyYs
IGJvb2wsIGludCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2
aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3Jl
OjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCk7CisgICAgdmlydHVhbCB2b2lkIGRpZE5v
dEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdl
YlBhZ2VQcm94eSopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5
PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wgZmFkZU91
dCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgdXBkYXRlUmVjdHMpOworCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkRW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRMZWF2ZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdExvYWRG
b3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbik7CisgICAgdmlydHVhbCB2
b2lkIGRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgQ29y
ZUlQQzo6RGF0YVJlZmVyZW5jZSYpOworICAgIHZpcnR1YWwgZG91YmxlIGN1c3RvbVJlcHJlc2Vu
dGF0aW9uWm9vbUZhY3RvcigpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXN0b21SZXByZXNlbnRh
dGlvblpvb21GYWN0b3IoZG91YmxlKTsKKworICAgIC8vIE1lbWJlcnMgb2YgV2ViVmlldyBjbGFz
cworICAgIEd0a1dpZGdldCogbV92aWV3V2lkZ2V0OworICAgIGJvb2wgbV9pc1BhZ2VBY3RpdmU7
CisgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbV9wYWdlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBXZWJWaWV3X2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83285</attachid>
            <date>2011-02-22 01:38:50 -0800</date>
            <delta_ts>2011-02-24 10:32:23 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>webview.patch</filename>
            <type>text/plain</type>
            <size>35882</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">Y29tbWl0IDBkY2YyODA4MGEzNThmNTViZjc2YTE3ZTY1YTZhMWEyMTI3ZjAwMzcKQXV0aG9yOiBB
bGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+CkRhdGU6ICAgRnJpIEphbiAyMSAx
MjowMjowMyAyMDExICswMTAwCgogICAgMjAxMS0wMi0xMSBBbXJ1dGggUmFqIDxhbXJ1dGhyYWpA
bW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgPHJhdmkua2FzaWJo
YXRsYUBtb3Rvcm9sYS5jb20+IGFuZCBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5j
b20+CiAgICAKICAgICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAKICAg
ICAgICAgICAgW0dUS10gSW1wbGVtZW50IFdlYlZpZXcgYW5kIFdlYktpdFdlYlZpZXcgY2xhc3Nl
cyBmb3IgV2ViS2l0MgogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDg1MDkKICAgIAogICAgICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgogICAgICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcDoKICAgICAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5oOiBSZW1vdmVkIGdka3JlY3RhbmdsZSBmcm9tCiAgICAg
ICAgICAgIGNvbnN0cnVjdG9yLgogICAgICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHA6IEFkZGVkLiBUaGUgR09iamVjdCBpbnRlcmZhY2UKICAgICAgICAgICAgZm9yIFdl
YlZpZXcuIFRoZSBHT2JqZWN0IGlzIHRoZSBHdGtXaWRnZXQgaGFuZGxlIHdoaWNoIGlzIHVzZWQg
YnkKICAgICAgICAgICAgV2ViVmlldyBjbGFzcyBmb3IgR1RLIHBvcnQuCiAgICAgICAgICAgICog
VUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3Lmg6IEFkZGVkLiBUaGUgR09iamVjdCBpbnRlcmZh
Y2UKICAgICAgICAgICAgZGVjbGFyYXRpb25zIGZvciBHdGtXaWRnZXQgaGFuZGxlIGZvciBHVEsg
cG9ydC4KICAgICAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlZpZXcuY3BwOiBBZGRlZC4gVGhl
IG5hdGl2ZSBHdGtXaWRnZXQgaGFuZGxlCiAgICAgICAgICAgIGZvciBHVEsgcG9ydCB3aGljaCBp
cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBXS1ZpZXdSZWYuCiAgICAgICAgICAgICogVUlQcm9jZXNz
L2d0ay9XZWJWaWV3Lmg6IEFkZGVkLiBDbGFzcyB3aGljaCBpbXBsZW1lbnRzIHRoZQogICAgICAg
ICAgICBQYWdlQ2xpZW50IGludGVyZmFjZS4gIEl0IGlzIGEgd3JhcHBlciBvdmVyIHRoZSBuYXRp
dmUgR3RrV2lkZ2V0CiAgICAgICAgICAgIGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggZWFjaCBXS1Zp
ZXdSZWYgZm9yIEdUSyBwb3J0LgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA0ZTk4OGRlLi40ZjlkNDBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDItMTEgIEFtcnV0aCBSYWogIDxhbXJ1dGhy
YWpAbW90b3JvbGEuY29tPiBhbmQgUmF2aSBQaGFuZWVuZHJhIEthc2liaGF0bGEgIDxyYXZpLmth
c2liaGF0bGFAbW90b3JvbGEuY29tPiBhbmQgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdh
bGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbR1RLXSBJbXBsZW1lbnQgV2ViVmlldyBhbmQgV2ViS2l0V2ViVmlldyBjbGFzc2VzIGZvciBX
ZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
ODUwOQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL2d0ay9XS1ZpZXcuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3
Lmg6IFJlbW92ZWQgZ2RrcmVjdGFuZ2xlIGZyb20KKyAgICAgICAgY29uc3RydWN0b3IuCisgICAg
ICAgICogVUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDogQWRkZWQuIFRoZSBHT2JqZWN0
IGludGVyZmFjZQorICAgICAgICBmb3IgV2ViVmlldy4gVGhlIEdPYmplY3QgaXMgdGhlIEd0a1dp
ZGdldCBoYW5kbGUgd2hpY2ggaXMgdXNlZCBieQorICAgICAgICBXZWJWaWV3IGNsYXNzIGZvciBH
VEsgcG9ydC4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcuaDogQWRkZWQu
IFRoZSBHT2JqZWN0IGludGVyZmFjZQorICAgICAgICBkZWNsYXJhdGlvbnMgZm9yIEd0a1dpZGdl
dCBoYW5kbGUgZm9yIEdUSyBwb3J0LgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2ViVmlldy5j
cHA6IEFkZGVkLiBUaGUgbmF0aXZlIEd0a1dpZGdldCBoYW5kbGUKKyAgICAgICAgZm9yIEdUSyBw
b3J0IHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFdLVmlld1JlZi4KKyAgICAgICAgKiBV
SVByb2Nlc3MvZ3RrL1dlYlZpZXcuaDogQWRkZWQuIENsYXNzIHdoaWNoIGltcGxlbWVudHMgdGhl
CisgICAgICAgIFBhZ2VDbGllbnQgaW50ZXJmYWNlLiAgSXQgaXMgYSB3cmFwcGVyIG92ZXIgdGhl
IG5hdGl2ZSBHdGtXaWRnZXQKKyAgICAgICAgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFdL
Vmlld1JlZiBmb3IgR1RLIHBvcnQuCisKIDIwMTEtMDItMjIgIEtpbW1vIEtpbm51bmVuICA8a2lt
bW8udC5raW5udW5lbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBS
b2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGRjZjUxYzMuLjE1ZDJk
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xODksNiArMTg5LDcgQEAgbGliV2ViS2l0Ml9s
YV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVBcnJheS5oIFwK
IAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvSW1tdXRhYmxlRGljdGlvbmFyeS5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9JbW11dGFibGVEaWN0aW9uYXJ5LmggXAorCVNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9NdXRh
YmxlQXJyYXkuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTXV0YWJsZUFycmF5LmggXAog
CVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5jcHAgXApAQCAtMzU3LDgg
KzM1OCwxMiBAQCBsaWJXZWJLaXQyX2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eUd0ay5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3Rvckd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYlBhZ2VQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
UHJlZmVyZW5jZXNHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZp
ZXcuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvZ3RrL1RocmVhZExhdW5jaGVy
R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVu
Y2hlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0
ay9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcu
Y3BwCmluZGV4IGFhODgxNTEuLmUzZDZjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZ3RrL1dLVmlldy5jcHAKQEAgLTM3LDkgKzM3LDkgQEAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotV0tWaWV3UmVmIFdLVmlld0Ny
ZWF0ZShHZGtSZWN0YW5nbGUgcmVjdCwgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cFJlZikKK1dLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICBSZWZQdHI8
V2ViVmlldz4gdmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyZWN0LCB0b0ltcGwoY29udGV4dFJlZiks
IHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKKyAgICBSZWZQdHI8V2ViVmlldz4gdmlldyA9IFdlYlZp
ZXc6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZiksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKICAg
ICByZXR1cm4gdG9BUEkodmlldy5yZWxlYXNlKCkubGVha1JlZigpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmgKaW5kZXggNTQxNWZkMy4uODJlNTVh
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLVmlldy5oCkBAIC0z
NSwxMyArMzUsMTQgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLVdLX0VYUE9SVCBXS1ZpZXdS
ZWYgV0tWaWV3Q3JlYXRlKEdka1JlY3RhbmdsZSByZWN0LCBXS0NvbnRleHRSZWYgY29udGV4dCwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKK1dLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3Jl
YXRlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogCiBX
S19FWFBPUlQgR3RrV2lkZ2V0KiBXS1ZpZXdHZXRXaW5kb3coV0tWaWV3UmVmIHZpZXcpOwogCiBX
S19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpOwogCiBXS19F
WFBPUlQgV0tVUkxSZWYgV0tVUkxDcmVhdGVXaXRoVVJMKGNvbnN0IGNoYXIqKTsKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQz
MTU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgorCisjaW5jbHVkZSAiR093blB0
ckd0ay5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK3N0YXRpYyBncG9pbnRlciB3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MgPSAwOworCitz
dHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3SW5zdGFu
Y2U7CisgICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQ7CisgICAgZ2ludCBjdXJyZW50Q2xpY2tD
b3VudDsKKyAgICBJbnRQb2ludCBwcmV2aW91c0NsaWNrUG9pbnQ7CisgICAgZ3VpbnQgcHJldmlv
dXNDbGlja0J1dHRvbjsKKyAgICBndWludDMyIHByZXZpb3VzQ2xpY2tUaW1lOworfTsKKworc3Rh
dGljIHZvaWQgd2ViS2l0V2ViVmlld1JlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAg
Z3RrX3dpZGdldF9zZXRfcmVhbGl6ZWQod2lkZ2V0LCBUUlVFKTsKKworICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFs
bG9jYXRpb24pOworCisgICAgR2RrV2luZG93QXR0ciBhdHRyaWJ1dGVzOworICAgIGF0dHJpYnV0
ZXMud2luZG93X3R5cGUgPSBHREtfV0lORE9XX0NISUxEOworICAgIGF0dHJpYnV0ZXMueCA9IGFs
bG9jYXRpb24ueDsKKyAgICBhdHRyaWJ1dGVzLnkgPSBhbGxvY2F0aW9uLnk7CisgICAgYXR0cmli
dXRlcy53aWR0aCA9IGFsbG9jYXRpb24ud2lkdGg7CisgICAgYXR0cmlidXRlcy5oZWlnaHQgPSBh
bGxvY2F0aW9uLmhlaWdodDsKKyAgICBhdHRyaWJ1dGVzLndjbGFzcyA9IEdES19JTlBVVF9PVVRQ
VVQ7CisgICAgYXR0cmlidXRlcy52aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwod2lkZ2V0
KTsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGF0dHJpYnV0ZXMuY29sb3JtYXAgPSBn
dGtfd2lkZ2V0X2dldF9jb2xvcm1hcCh3aWRnZXQpOworI2VuZGlmCisgICAgYXR0cmlidXRlcy5l
dmVudF9tYXNrID0gR0RLX1ZJU0lCSUxJVFlfTk9USUZZX01BU0sKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IEdES19FWFBPU1VSRV9NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBHREtfQlVUVE9OX1BSRVNTX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEdES19CVVRUT05fUkVMRUFTRV9NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBH
REtfUE9JTlRFUl9NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RL
X0tFWV9QUkVTU19NQVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfS0VZX1JF
TEVBU0VfTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTl9NT1RJ
T05fTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTjFfTU9USU9O
X01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT04yX01PVElPTl9N
QVNLCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OM19NT1RJT05fTUFT
SzsKKworICAgIGdpbnQgYXR0cmlidXRlc01hc2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RL
X1dBX1ZJU1VBTDsKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorICAgIGF0dHJpYnV0ZXNNYXNr
IHw9IEdES19XQV9DT0xPUk1BUDsKKyNlbmRpZgorICAgIEdka1dpbmRvdyogd2luZG93ID0gZ2Rr
X3dpbmRvd19uZXcoZ3RrX3dpZGdldF9nZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQpLCAmYXR0cmli
dXRlcywgYXR0cmlidXRlc01hc2spOworICAgIGd0a193aWRnZXRfc2V0X3dpbmRvdyh3aWRnZXQs
IHdpbmRvdyk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpbmRvdywgd2lkZ2V0KTsK
KworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMjAs
IDApCisgICAgZ3RrX3dpZGdldF9zdHlsZV9hdHRhY2god2lkZ2V0KTsKKyNlbHNlCisgICAgd2lk
Z2V0LT5zdHlsZSA9IGd0a19zdHlsZV9hdHRhY2goZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0
KSwgd2luZG93KTsKKyNlbmRpZgorICAgIGd0a19zdHlsZV9zZXRfYmFja2dyb3VuZChndGtfd2lk
Z2V0X2dldF9zdHlsZSh3aWRnZXQpLCB3aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworI2Vsc2UK
KyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfYmFja2dyb3VuZChndGtfd2lkZ2V0X2dldF9zdHls
ZV9jb250ZXh0KHdpZGdldCksIHdpbmRvdyk7CisjZW5kaWYKKworICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgZ3RrX2ltX2NvbnRleHRfc2V0X2NsaWVu
dF93aW5kb3cocHJpdi0+aW1Db250ZXh0LCB3aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCB3ZWJL
aXRXZWJWaWV3Q29udGFpbmVyQWRkKEd0a0NvbnRhaW5lciogY29udGFpbmVyLCBHdGtXaWRnZXQq
IHdpZGdldCkKK3sKKyAgICBndGtfd2lkZ2V0X3NldF9wYXJlbnQod2lkZ2V0LCBHVEtfV0lER0VU
KGNvbnRhaW5lcikpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJWaWV3RGlzcG9zZShHT2Jq
ZWN0KiBnb2JqZWN0KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYktpdFdlYlZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcoZ29iamVjdCk7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3
ZWJLaXRXZWJWaWV3LT5wcml2OworCisgICAgaWYgKHByaXYtPmltQ29udGV4dCkgeworICAgICAg
ICBnX29iamVjdF91bnJlZihwcml2LT5pbUNvbnRleHQpOworICAgICAgICBwcml2LT5pbUNvbnRl
eHQgPSAwOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYktpdFdlYlZpZXdQYXJlbnRD
bGFzcyktPmRpc3Bvc2UoZ29iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYlZpZXdJ
bml0KFdlYktpdFdlYlZpZXcqIHdlYktpdFdlYlZpZXcpCit7CisgICAgV2ViS2l0V2ViVmlld1By
aXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUod2ViS2l0V2ViVmlldywg
V0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdQcml2YXRlKTsKKyAgICB3ZWJLaXRX
ZWJWaWV3LT5wcml2ID0gcHJpdjsKKworICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyhHVEtf
V0lER0VUKHdlYktpdFdlYlZpZXcpLCBUUlVFKTsKKyAgICBwcml2LT5pbUNvbnRleHQgPSBndGtf
aW1fbXVsdGljb250ZXh0X25ldygpOworCisgICAgcHJpdi0+Y3VycmVudENsaWNrQ291bnQgPSAw
OworICAgIHByaXYtPnByZXZpb3VzQ2xpY2tCdXR0b24gPSAwOworICAgIHByaXYtPnByZXZpb3Vz
Q2xpY2tUaW1lID0gMDsKK30KKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgZ2Jv
b2xlYW4gd2ViVmlld09uRXhwb3NlKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSog
ZXZlbnQpCit7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3
SW5zdGFuY2UoV0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpOworICAgIEdka1JlY3RhbmdsZSBjbGlw
UmVjdDsKKyAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlwUmVj
dCk7CisKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRn
ZXQpOworICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0ZSh3aW5kb3cpOworCisgICAg
d2ViVmlldy0+cGFpbnQod2lkZ2V0LCBjbGlwUmVjdCwgY3IpOworCisgICAgY2Fpcm9fZGVzdHJv
eShjcik7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZWxzZQorc3RhdGljIGdib29sZWFuIHdl
YlZpZXdPbkRyYXcoR3RrV2lkZ2V0KiB3aWRnZXQsIGNhaXJvX3QqIGNyKQoreworICAgIFdlYlZp
ZXcqIHdlYlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdFQktJVF9XRUJf
VklFVyh3aWRnZXQpKTsKKyAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3Q7CisKKyAgICBpZiAoIWdk
a19jYWlyb19nZXRfY2xpcF9yZWN0YW5nbGUoY3IsICZjbGlwUmVjdCkpCisgICAgICAgIHJldHVy
biBGQUxTRTsKKworICAgIHdlYlZpZXctPnBhaW50KHdpZGdldCwgY2xpcFJlY3QsIGNyKTsKKwor
ICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB3ZWJWaWV3T25TaXpl
QWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24pCit7
CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFuY2Uo
V0VCS0lUX1dFQl9WSUVXKHdpZGdldCkpOworICAgIEdUS19XSURHRVRfQ0xBU1Mod2ViS2l0V2Vi
Vmlld1BhcmVudENsYXNzKS0+c2l6ZV9hbGxvY2F0ZSh3aWRnZXQsIGFsbG9jYXRpb24pOworICAg
IHdlYlZpZXctPnNldFNpemUod2lkZ2V0LCBJbnRTaXplKGFsbG9jYXRpb24tPndpZHRoLCBhbGxv
Y2F0aW9uLT5oZWlnaHQpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYlZpZXdGb2N1c0luRXZl
bnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50Rm9jdXMqIGV2ZW50KQoreworICAgIFdlYktp
dFdlYlZpZXcqIHdlYktpdFdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAgICBX
ZWJWaWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZSh3ZWJLaXRX
ZWJWaWV3KTsKKworICAgIEd0a1dpZGdldCogdG9wbGV2ZWwgPSBndGtfd2lkZ2V0X2dldF90b3Bs
ZXZlbCh3aWRnZXQpOworICAgIGlmIChndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHRvcGxldmVsKSAm
JiBndGtfd2luZG93X2hhc190b3BsZXZlbF9mb2N1cyhHVEtfV0lORE9XKHRvcGxldmVsKSkpIHsK
KyAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfaW4od2ViS2l0V2ViVmlld0dldElNQ29udGV4
dCh3ZWJLaXRXZWJWaWV3KSk7CisgICAgICAgIHdlYlZpZXctPmhhbmRsZUZvY3VzSW5FdmVudCh3
aWRnZXQpOworICAgIH0KKworICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYktpdFdlYlZp
ZXdQYXJlbnRDbGFzcyktPmZvY3VzX2luX2V2ZW50KHdpZGdldCwgZXZlbnQpOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2ViVmlld0ZvY3VzT3V0RXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2
ZW50Rm9jdXMqIGV2ZW50KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYktpdFdlYlZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2Vi
Vmlld0dldFdlYlZpZXdJbnN0YW5jZSh3ZWJLaXRXZWJWaWV3KTsKKworICAgIHdlYlZpZXctPmhh
bmRsZUZvY3VzT3V0RXZlbnQod2lkZ2V0KTsKKyAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dCA9
IHdlYktpdFdlYlZpZXdHZXRJTUNvbnRleHQod2ViS2l0V2ViVmlldyk7CisgICAgaWYgKGltQ29u
dGV4dCkKKyAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KGltQ29udGV4dCk7CisKKyAg
ICByZXR1cm4gR1RLX1dJREdFVF9DTEFTUyh3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3MpLT5mb2N1
c19vdXRfZXZlbnQod2lkZ2V0LCBldmVudCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3
S2V5UHJlc3NFdmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRLZXkqIGV2ZW50KQorewor
ICAgIFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJLaXRXZWJWaWV3R2V0V2ViVmlld0luc3RhbmNlKFdF
QktJVF9XRUJfVklFVyh3aWRnZXQpKTsKKyAgICB3ZWJWaWV3LT5oYW5kbGVLZXlib2FyZEV2ZW50
KGV2ZW50KTsKKworICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYktpdFdlYlZpZXdQYXJl
bnRDbGFzcyktPmtleV9wcmVzc19ldmVudCh3aWRnZXQsIGV2ZW50KTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYlZpZXdLZXlSZWxlYXNlRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
S2V5KiBldmVudCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdpZGdldCk7CisgICAgV2ViVmlldyogd2ViVmlldyA9IHdlYktpdFdlYlZpZXdH
ZXRXZWJWaWV3SW5zdGFuY2Uod2ViS2l0V2ViVmlldyk7CisKKyAgICBpZiAoZ3RrX2ltX2NvbnRl
eHRfZmlsdGVyX2tleXByZXNzKHdlYktpdFdlYlZpZXdHZXRJTUNvbnRleHQod2ViS2l0V2ViVmll
dyksIGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICB3ZWJWaWV3LT5oYW5kbGVL
ZXlib2FyZEV2ZW50KGV2ZW50KTsKKworICAgIHJldHVybiBHVEtfV0lER0VUX0NMQVNTKHdlYktp
dFdlYlZpZXdQYXJlbnRDbGFzcyktPmtleV9yZWxlYXNlX2V2ZW50KHdpZGdldCwgZXZlbnQpOwor
fQorCisvLyBDb3BpZWQgZnJvbSB3ZWJraXR3ZWJ2aWV3LmNwcAorc3RhdGljIGd1aW50MzIgZ2V0
RXZlbnRUaW1lKEdka0V2ZW50KiBldmVudCkKK3sKKyAgICBndWludDMyIHRpbWUgPSBnZGtfZXZl
bnRfZ2V0X3RpbWUoZXZlbnQpOworICAgIGlmICh0aW1lKQorICAgICAgICByZXR1cm4gdGltZTsK
KworICAgIC8vIFJlYWwgZXZlbnRzIGFsd2F5cyBoYXZlIGEgbm9uLXplcm8gdGltZSwgYnV0IGV2
ZW50cyBzeW50aGVzaXplZAorICAgIC8vIGJ5IHRoZSBEUlQgZG8gbm90IGFuZCB3ZSBtdXN0IGNh
bGN1bGF0ZSBhIHRpbWUgbWFudWFsbHkuIFRoaXMgdGltZQorICAgIC8vIGlzIG5vdCBjYWxjdWxh
dGVkIGluIHRoZSBEUlQsIGJlY2F1c2UgR1RLKyBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aAorICAg
IC8vIGFueXRoaW5nIG90aGVyIHRoYW4gR0RLX0NVUlJFTlRfVElNRSBvbiBzeW50aGVzaXplZCBl
dmVudHMuCisgICAgR1RpbWVWYWwgdGltZVZhbHVlOworICAgIGdfZ2V0X2N1cnJlbnRfdGltZSgm
dGltZVZhbHVlKTsKKyAgICByZXR1cm4gKHRpbWVWYWx1ZS50dl9zZWMgKiAxMDAwKSArICh0aW1l
VmFsdWUudHZfdXNlYyAvIDEwMDApOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0J1dHRv
blByZXNzRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50QnV0dG9uKiBidXR0b25FdmVu
dCkKK3sKKyAgICBpZiAoYnV0dG9uRXZlbnQtPmJ1dHRvbiA9PSAzKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBbR1RLXSBBZGQgY29udGV4dCBtZW51IHN1cHBvcnQgZm9yIFdlYmtpdDIuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDgyNworICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAg
Z3RrX3dpZGdldF9ncmFiX2ZvY3VzKHdpZGdldCk7CisKKyAgICAvLyBGb3IgZG91YmxlIGFuZCB0
cmlwbGUgY2xpY2tzIEdESyBzZW5kcyBib3RoIGEgbm9ybWFsIGJ1dHRvbiBwcmVzcyBldmVudAor
ICAgIC8vIGFuZCBhIHNwZWNpZmljIHR5cGUgKGxpa2UgR0RLXzJCVVRUT05fUFJFU1MpLiBJZiB3
ZSBkZXRlY3QgYSBzcGVjaWFsIHByZXNzCisgICAgLy8gY29taW5nIHVwLCBpZ25vcmUgdGhpcyBl
dmVudCBhcyBpdCBjZXJ0YWlubHkgZ2VuZXJhdGVkIHRoZSBkb3VibGUgb3IgdHJpcGxlCisgICAg
Ly8gY2xpY2suIFRoZSBjb25zZXF1ZW5jZSBvZiBub3QgZWF0aW5nIHRoaXMgZXZlbnQgaXMgdHdv
IERPTSBidXR0b24gcHJlc3MgZXZlbnRzCisgICAgLy8gYXJlIGdlbmVyYXRlZC4KKyAgICBHT3du
UHRyPEdka0V2ZW50PiBuZXh0RXZlbnQoZ2RrX2V2ZW50X3BlZWsoKSk7CisgICAgaWYgKG5leHRF
dmVudCAmJiAobmV4dEV2ZW50LT5hbnkudHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBuZXh0
RXZlbnQtPmFueS50eXBlID09IEdES18zQlVUVE9OX1BSRVNTKSkKKyAgICAgICAgcmV0dXJuIFRS
VUU7CisKKyAgICBnaW50IGRvdWJsZUNsaWNrRGlzdGFuY2UgPSAyNTA7CisgICAgZ2ludCBkb3Vi
bGVDbGlja1RpbWUgPSA1OworICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5n
c19nZXRfZm9yX3NjcmVlbihndGtfd2lkZ2V0X2dldF9zY3JlZW4od2lkZ2V0KSk7CisgICAgZ19v
YmplY3RfZ2V0KHNldHRpbmdzLAorICAgICAgICAiZ3RrLWRvdWJsZS1jbGljay1kaXN0YW5jZSIs
ICZkb3VibGVDbGlja0Rpc3RhbmNlLAorICAgICAgICAiZ3RrLWRvdWJsZS1jbGljay10aW1lIiwg
JmRvdWJsZUNsaWNrVGltZSwgTlVMTCk7CisKKyAgICAvLyBHVEsrIG9ubHkgY291bnRzIHVwIHRv
IHRyaXBsZSBjbGlja3MsIGJ1dCBXZWJDb3JlIHdhbnRzIHRvIGtub3cgYWJvdXQKKyAgICAvLyBx
dWFkcnVwbGUgY2xpY2tzLCBxdWludHVwbGUgY2xpY2tzLCBhZCBpbmZpbml0dW0uIEhlcmUsIHdl
IHJlcGxpY2F0ZSB0aGUKKyAgICAvLyBHREsgbG9naWMgZm9yIGNvdW50aW5nIGNsaWNrcy4KKyAg
ICBHZGtFdmVudCogZXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGJ1dHRvbkV2ZW50
KSk7CisgICAgZ3VpbnQzMiBldmVudFRpbWUgPSBnZXRFdmVudFRpbWUoZXZlbnQpOworICAgIFdl
YktpdFdlYlZpZXcqIHdlYktpdFdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAg
ICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYktpdFdlYlZpZXctPnByaXY7CisgICAg
aWYgKChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUyB8fCBldmVudC0+dHlwZSA9PSBH
REtfM0JVVFRPTl9QUkVTUykKKyAgICAgICAgfHwgKChhYnMoYnV0dG9uRXZlbnQtPnggLSBwcml2
LT5wcmV2aW91c0NsaWNrUG9pbnQueCgpKSA8IGRvdWJsZUNsaWNrRGlzdGFuY2UpCisgICAgICAg
ICAgICAmJiAoYWJzKGJ1dHRvbkV2ZW50LT55IC0gcHJpdi0+cHJldmlvdXNDbGlja1BvaW50Lnko
KSkgPCBkb3VibGVDbGlja0Rpc3RhbmNlKQorICAgICAgICAgICAgJiYgKGV2ZW50VGltZSAtIHBy
aXYtPnByZXZpb3VzQ2xpY2tUaW1lIDwgc3RhdGljX2Nhc3Q8Z3VpbnQ+KGRvdWJsZUNsaWNrVGlt
ZSkpCisgICAgICAgICAgICAmJiAoYnV0dG9uRXZlbnQtPmJ1dHRvbiA9PSBwcml2LT5wcmV2aW91
c0NsaWNrQnV0dG9uKSkpCisgICAgICAgIHByaXYtPmN1cnJlbnRDbGlja0NvdW50Kys7CisgICAg
ZWxzZQorICAgICAgICBwcml2LT5jdXJyZW50Q2xpY2tDb3VudCA9IDE7CisKKyAgICBXZWJWaWV3
KiB3ZWJWaWV3ID0gd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZSh3ZWJLaXRXZWJWaWV3
KTsKKyAgICB3ZWJWaWV3LT5oYW5kbGVNb3VzZUV2ZW50KGV2ZW50LCBwcml2LT5jdXJyZW50Q2xp
Y2tDb3VudCk7CisKKyAgICBnZG91YmxlIHgsIHk7CisgICAgZ2RrX2V2ZW50X2dldF9jb29yZHMo
ZXZlbnQsICZ4LCAmeSk7CisgICAgcHJpdi0+cHJldmlvdXNDbGlja1BvaW50ID0gSW50UG9pbnQo
eCwgeSk7CisgICAgcHJpdi0+cHJldmlvdXNDbGlja0J1dHRvbiA9IGJ1dHRvbkV2ZW50LT5idXR0
b247CisgICAgcHJpdi0+cHJldmlvdXNDbGlja1RpbWUgPSBldmVudFRpbWU7CisKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3QnV0dG9uUmVsZWFzZUV2ZW50
KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAgV2ViVmll
dyogd2ViVmlldyA9IHdlYktpdFdlYlZpZXdHZXRXZWJWaWV3SW5zdGFuY2UoV0VCS0lUX1dFQl9W
SUVXKHdpZGdldCkpOworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIHdl
YlZpZXctPmhhbmRsZU1vdXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50
KSwgMCAvKiBjdXJyZW50Q2xpY2tDb3VudCAqLyk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3U2Nyb2xsRXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0V2ZW50U2Nyb2xsKiBldmVudCkKK3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2ViS2l0V2Vi
Vmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSk7CisgICAgd2Vi
Vmlldy0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3TW90aW9uTm90aWZ5RXZlbnQoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEdka0V2ZW50TW90aW9uKiBldmVudCkKK3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gd2Vi
S2l0V2ViVmlld0dldFdlYlZpZXdJbnN0YW5jZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSk7Cisg
ICAgd2ViVmlldy0+aGFuZGxlTW91c2VFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4o
ZXZlbnQpLCAwIC8qIGN1cnJlbnRDbGlja0NvdW50ICovKTsKKworICAgIHJldHVybiBGQUxTRTsK
K30KKworc3RhdGljIHZvaWQgd2ViS2l0V2ViVmlld0NsYXNzSW5pdChXZWJLaXRXZWJWaWV3Q2xh
c3MqIHdlYktpdFdlYlZpZXdDbGFzcykKK3sKKyAgICB3ZWJLaXRXZWJWaWV3UGFyZW50Q2xhc3Mg
PSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQod2ViS2l0V2ViVmlld0NsYXNzKTsKKworICAgIEd0
a1dpZGdldENsYXNzKiB3aWRnZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Mod2ViS2l0V2ViVmll
d0NsYXNzKTsKKyAgICB3aWRnZXRDbGFzcy0+cmVhbGl6ZSA9IHdlYktpdFdlYlZpZXdSZWFsaXpl
OworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgd2lkZ2V0Q2xhc3MtPmV4cG9zZV9ldmVu
dCA9IHdlYlZpZXdPbkV4cG9zZTsKKyNlbHNlCisgICAgd2lkZ2V0Q2xhc3MtPmRyYXcgPSB3ZWJW
aWV3T25EcmF3OworI2VuZGlmCisgICAgd2lkZ2V0Q2xhc3MtPnNpemVfYWxsb2NhdGUgPSB3ZWJW
aWV3T25TaXplQWxsb2NhdGU7CisgICAgd2lkZ2V0Q2xhc3MtPmZvY3VzX2luX2V2ZW50ID0gd2Vi
Vmlld0ZvY3VzSW5FdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+Zm9jdXNfb3V0X2V2ZW50ID0gd2Vi
Vmlld0ZvY3VzT3V0RXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmtleV9wcmVzc19ldmVudCA9IHdl
YlZpZXdLZXlQcmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5rZXlfcmVsZWFzZV9ldmVudCA9
IHdlYlZpZXdLZXlSZWxlYXNlRXZlbnQ7CisgICAgd2lkZ2V0Q2xhc3MtPmJ1dHRvbl9wcmVzc19l
dmVudCA9IHdlYlZpZXdCdXR0b25QcmVzc0V2ZW50OworICAgIHdpZGdldENsYXNzLT5idXR0b25f
cmVsZWFzZV9ldmVudCA9IHdlYlZpZXdCdXR0b25SZWxlYXNlRXZlbnQ7CisgICAgd2lkZ2V0Q2xh
c3MtPnNjcm9sbF9ldmVudCA9IHdlYlZpZXdTY3JvbGxFdmVudDsKKyAgICB3aWRnZXRDbGFzcy0+
bW90aW9uX25vdGlmeV9ldmVudCA9IHdlYlZpZXdNb3Rpb25Ob3RpZnlFdmVudDsKKworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViS2l0V2ViVmlld0Ns
YXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJLaXRXZWJWaWV3RGlzcG9zZTsK
KworICAgIEd0a0NvbnRhaW5lckNsYXNzKiBjb250YWluZXJDbGFzcyA9IEdUS19DT05UQUlORVJf
Q0xBU1Mod2ViS2l0V2ViVmlld0NsYXNzKTsKKyAgICBjb250YWluZXJDbGFzcy0+YWRkID0gd2Vi
S2l0V2ViVmlld0NvbnRhaW5lckFkZDsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3
ZWJLaXRXZWJWaWV3Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3UHJpdmF0ZSkpOworfQorCitH
VHlwZSB3ZWJLaXRXZWJWaWV3R2V0VHlwZSgpCit7CisgICAgc3RhdGljIHZvbGF0aWxlIGdzaXpl
IGdEZWZpbmVUeXBlSWRWb2xhdGlsZSA9IDA7CisgICAgaWYgKGdfb25jZV9pbml0X2VudGVyKCZn
RGVmaW5lVHlwZUlkVm9sYXRpbGUpKSB7CisgICAgICAgIEdUeXBlIGdEZWZpbmVUeXBlSWQgPSBn
X3R5cGVfcmVnaXN0ZXJfc3RhdGljX3NpbXBsZShHVEtfVFlQRV9DT05UQUlORVIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2lu
dGVybl9zdGF0aWNfc3RyaW5nKCJXZWJLaXRXZWJWaWV3IiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV2ViS2l0V2Vi
Vmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0NsYXNzSW5pdEZ1bmM+KHdlYktpdFdl
YlZpZXdDbGFzc0luaXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFdlYktpdFdlYlZpZXcpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxHSW5zdGFuY2VJbml0RnVuYz4od2ViS2l0V2ViVmlld0luaXQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8R1R5cGVGbGFncz4oMCkpOworICAgICAgICBnX29uY2VfaW5pdF9sZWF2ZSgmZ0RlZmlu
ZVR5cGVJZFZvbGF0aWxlLCBnRGVmaW5lVHlwZUlkKTsKKyAgICB9CisgICAgcmV0dXJuIGdEZWZp
bmVUeXBlSWRWb2xhdGlsZTsKK30KKworV2ViVmlldyogd2ViS2l0V2ViVmlld0dldFdlYlZpZXdJ
bnN0YW5jZShXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3KQoreworICAgIHJldHVybiB3ZWJL
aXRXZWJWaWV3LT5wcml2LT53ZWJWaWV3SW5zdGFuY2U7Cit9CisKK3ZvaWQgd2ViS2l0V2ViVmll
d1NldFdlYlZpZXdJbnN0YW5jZShXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3LCBXZWJWaWV3
KiB3ZWJWaWV3SW5zdGFuY2UpCit7CisgICAgd2ViS2l0V2ViVmlldy0+cHJpdi0+d2ViVmlld0lu
c3RhbmNlID0gd2ViVmlld0luc3RhbmNlOworfQorCitHdGtJTUNvbnRleHQqIHdlYktpdFdlYlZp
ZXdHZXRJTUNvbnRleHQoV2ViS2l0V2ViVmlldyogd2ViS2l0V2ViVmlldykKK3sKKyAgICByZXR1
cm4gd2ViS2l0V2ViVmlldy0+cHJpdi0+aW1Db250ZXh0OworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYktpdFdlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yNjcxNzhjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBD
b3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRXZWJWaWV3X2gKKyNkZWZpbmUgV2ViS2l0V2ViVmlld19oCisKKyNpbmNsdWRl
ICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfVklFVyAg
ICAgICAgICAgICAgKHdlYktpdFdlYlZpZXdHZXRUeXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJf
VklFVyhvYmplY3QpICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iamVj
dCksIFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3KSkKKyNkZWZpbmUgV0VCS0lU
X1dFQl9WSUVXX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdDbGFzcykpCisjZGVmaW5l
IFdFQktJVF9JU19XRUJfVklFVyhvYmplY3QpICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iamVjdCksIFdFQktJVF9UWVBFX1dFQl9WSUVXKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X1dFQl9WSUVXX0NMQVNTKGtsYXNzKSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcpKQorI2RlZmluZSBXRUJLSVRfV0VCX1ZJRVdfR0VUX0NM
QVNTKG9iamVjdCkgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iamVjdCksICBXRUJLSVRf
VFlQRV9XRUJfVklFVywgV2ViS2l0V2ViVmlld0NsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3
Q2xhc3MgV2ViS2l0V2ViVmlld0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQ
cml2YXRlIFdlYktpdFdlYlZpZXdQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgewor
ICAgIEd0a0NvbnRhaW5lciBwYXJlbnRJbnN0YW5jZTsKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAg
ICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViVmll
d0NsYXNzIHsKKyAgICBHdGtDb250YWluZXJDbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dUeXBl
IHdlYktpdFdlYlZpZXdHZXRUeXBlKCk7CisKK1dlYlZpZXcqIHdlYktpdFdlYlZpZXdHZXRXZWJW
aWV3SW5zdGFuY2UoV2ViS2l0V2ViVmlldyopOworCit2b2lkIHdlYktpdFdlYlZpZXdTZXRXZWJW
aWV3SW5zdGFuY2UoV2ViS2l0V2ViVmlldyosIFdlYlZpZXcqKTsKKworR3RrSU1Db250ZXh0KiB3
ZWJLaXRXZWJWaWV3R2V0SU1Db250ZXh0KFdlYktpdFdlYlZpZXcqKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8vIFdlYktpdFdlYlZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViVmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1ZDdmZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViVmlldy5j
cHAKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1v
dG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlICJDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQ
cm94eS5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJD
b250ZXh0TWVudVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCisjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKKwordm9pZCBXZWJWaWV3OjpoYW5kbGVGb2N1c0luRXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCEobV9pc1BhZ2VBY3RpdmUpKSB7CisgICAgICAg
IG1faXNQYWdlQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFu
Z2UoV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOworICAgIH0KKworICAgIG1fcGFn
ZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCk7Cit9CisK
K3ZvaWQgV2ViVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVudChHdGtXaWRnZXQqIHdpZGdldCkKK3sK
KyAgICBtX2lzUGFnZUFjdGl2ZSA9IGZhbHNlOworICAgIG1fcGFnZS0+dmlld1N0YXRlRGlkQ2hh
bmdlKFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKK30KKworV2ViVmlldzo6V2Vi
VmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCkKKyAgICA6
IG1faXNQYWdlQWN0aXZlKHRydWUpCit7CisgICAgbV9wYWdlID0gY29udGV4dC0+Y3JlYXRlV2Vi
UGFnZSh0aGlzLCBwYWdlR3JvdXApOworCisgICAgbV92aWV3V2lkZ2V0ID0gc3RhdGljX2Nhc3Q8
R3RrV2lkZ2V0Kj4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLCBOVUxMKSk7Cisg
ICAgQVNTRVJUKG1fdmlld1dpZGdldCk7CisKKyAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdl
KCk7CisKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJLaXRXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KG1fdmlld1dpZGdldCk7CisgICAgd2ViS2l0V2ViVmlld1NldFdlYlZpZXdJbnN0YW5jZSh3ZWJL
aXRXZWJWaWV3LCB0aGlzKTsKK30KKworV2ViVmlldzo6fldlYlZpZXcoKQoreworfQorCitHZGtX
aW5kb3cqIFdlYlZpZXc6OmdldFdlYlZpZXdXaW5kb3coKQoreworICAgIHJldHVybiBndGtfd2lk
Z2V0X2dldF93aW5kb3cobV92aWV3V2lkZ2V0KTsKK30KKwordm9pZCBXZWJWaWV3OjpwYWludChH
dGtXaWRnZXQqIHdpZGdldCwgR2RrUmVjdGFuZ2xlIHJlY3QsIGNhaXJvX3QqIGNyKQoreworICAg
IG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+cGFpbnQoSW50UmVjdChyZWN0KSwgY3IpOworfQorCit2
b2lkIFdlYlZpZXc6OnNldFNpemUoR3RrV2lkZ2V0KiwgSW50U2l6ZSB3aW5kb3dTaXplKQorewor
ICAgIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+c2V0U2l6ZSh3aW5kb3dTaXplLCBJbnRTaXplKCkp
OworfQorCit2b2lkIFdlYlZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2
ZW50KQoreworICAgIG1fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50KGV2ZW50KSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6aGFuZGxlTW91c2VFdmVudChHZGtF
dmVudCogZXZlbnQsIGludCBjdXJyZW50Q2xpY2tDb3VudCkKK3sKKyAgICBtX3BhZ2UtPmhhbmRs
ZU1vdXNlRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KGV2ZW50LCBj
dXJyZW50Q2xpY2tDb3VudCkpOworfQorCit2b2lkIFdlYlZpZXc6OmhhbmRsZVdoZWVsRXZlbnQo
R2RrRXZlbnRTY3JvbGwqIGV2ZW50KQoreworICAgIG1fcGFnZS0+aGFuZGxlV2hlZWxFdmVudChX
ZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQoZXZlbnQpKTsKK30KKworYm9vbCBX
ZWJWaWV3Ojppc0FjdGl2ZSgpCit7CisgICAgcmV0dXJuIG1faXNQYWdlQWN0aXZlOworfQorCit2
b2lkIFdlYlZpZXc6OmNsb3NlKCkKK3sKKyAgICBtX3BhZ2UtPmNsb3NlKCk7Cit9CisKKy8vIFBh
Z2VDbGllbnQncyBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zCitQYXNzT3duUHRyPERyYXdpbmdBcmVh
UHJveHk+IFdlYlZpZXc6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKQoreworICAgIHJldHVybiBD
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5nZXQoKSk7
Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmRp
c3BsYXlWaWV3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6
OnNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK1dlYkNvcmU6OkludFNpemUgV2ViVmlldzo6dmlld1NpemUoKQoreworICAgIEd0a0FsbG9j
YXRpb24gYWxsb2NhdGlvbjsKKyAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKG1fdmlld1dp
ZGdldCwgJmFsbG9jYXRpb24pOworICAgIHJldHVybiBJbnRTaXplKGFsbG9jYXRpb24ud2lkdGgs
IGFsbG9jYXRpb24uaGVpZ2h0KTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3Rp
dmUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgV2ViVmlldzo6aXNWaWV3Rm9jdXNlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdWaXNpYmxlKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXc6
OmlzVmlld0luV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIFdlYlZpZXc6OldlYlZpZXc6OnByb2Nlc3NEaWRDcmFzaCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRSZWxhdW5jaFByb2Nl
c3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6dGFrZUZv
Y3VzKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp0
b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRWaWV3cG9y
dEFyZ3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpyZWdpc3RlckVkaXRDb21tYW5kKFBh
c3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OmNsZWFyQWxsRWRp
dENvbW1hbmRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6
OnNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiwgYm9vbCwgaW50KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBXZWJWaWV3Ojpjb252ZXJ0VG9EZXZpY2VT
cGFjZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIHZpZXdSZWN0OworfQorCitGbG9hdFJlY3QgV2ViVmlldzo6Y29udmVydFRv
VXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1JlY3QpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gdmlld1JlY3Q7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZG9uZVdpdGhL
ZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRs
ZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWROb3RI
YW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBX
ZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29udGV4dE1l
bnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViVmll
dzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVP
dXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKK3ZvaWQgV2ViVmlldzo6cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpwYWdl
RGlkTGVhdmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwordm9pZCBXZWJW
aWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGJvb2wgdXNlQ3VzdG9tUmVwcmVzZW50YXRp
b24pCit7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21S
ZXByZXNlbnRhdGlvbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKK3sKK30KKworZG91
YmxlIFdlYlZpZXc6OmN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcigpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRDdXN0
b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFnZUNsb3NlZCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1l
KCkgY29uc3QKK3sKK30KKwordm9pZCBXZWJWaWV3OjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMo
Y29uc3QgVmVjdG9yPEludFJlY3Q+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlZpZXcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzVlZjI3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJWaWV3LmgKQEAgLTAsMCAr
MSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld19oCisjZGVmaW5lIFdlYlZpZXdf
aAorCisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBEcmF3aW5nQXJlYVByb3h5OworY2xh
c3MgV2ViUGFnZU5hbWVzcGFjZTsKKworY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBSZWZDb3VudGVk
PFdlYlZpZXc+LCBwdWJsaWMgUGFnZUNsaWVudCB7CitwdWJsaWM6CisgICAgfldlYlZpZXcoKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJWaWV3PiBjcmVhdGUoV2ViQ29udGV4dCogY29udGV4
dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXApCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYlZpZXcoY29udGV4dCwgcGFnZUdyb3VwKSk7CisgICAgfQorCisgICAgR3RrV2lk
Z2V0KiB3aW5kb3coKSBjb25zdCB7IHJldHVybiBtX3ZpZXdXaWRnZXQ7IH0KKworICAgIFdlYlBh
Z2VQcm94eSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsgfQorCisgICAgdm9p
ZCBoYW5kbGVGb2N1c0luRXZlbnQoR3RrV2lkZ2V0Kik7CisgICAgdm9pZCBoYW5kbGVGb2N1c091
dEV2ZW50KEd0a1dpZGdldCopOworCisgICAgdm9pZCBwYWludChHdGtXaWRnZXQqLCBHZGtSZWN0
YW5nbGUsIGNhaXJvX3QqKTsKKyAgICB2b2lkIHNldFNpemUoR3RrV2lkZ2V0KiwgV2ViQ29yZTo6
SW50U2l6ZSk7CisgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5Kik7Cisg
ICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xsKik7CisgICAgdm9pZCBoYW5k
bGVNb3VzZUV2ZW50KEdka0V2ZW50KiwgaW50KTsKKworcHJpdmF0ZToKKyAgICBXZWJWaWV3KFdl
YkNvbnRleHQqLCBXZWJQYWdlR3JvdXAqKTsKKworICAgIEdka1dpbmRvdyogZ2V0V2ViVmlld1dp
bmRvdygpOworCisgICAgYm9vbCBpc0FjdGl2ZSgpOworICAgIHZvaWQgY2xvc2UoKTsKKworICAg
IC8vIFBhZ2VDbGllbnQKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4g
Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNE
aXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGxh
eVZpZXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmlldyhjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSgpOworICAgIHZpcnR1YWwgYm9v
bCBpc1ZpZXdXaW5kb3dBY3RpdmUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3Rm9jdXNlZCgp
OworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlKCk7CisgICAgdmlydHVhbCBib29sIGlz
Vmlld0luV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEaWRDcmFzaCgpOworICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFn
ZUNsb3NlZCgpOworICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pOwor
ICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0
IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3Jl
OjpDdXJzb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRBcmd1bWVudHMoY29uc3Qg
V2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJF
ZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6
OlVuZG9PclJlZG8pOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZFN0YXRlKGNvbnN0IFdURjo6U3RyaW5nJiwg
Ym9vbCwgaW50KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZp
Y2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTm90
SGFuZGxlS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYpOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBNZW51UHJveHkoV2Vi
UGFnZVByb3h5Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+
IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5Kik7CisgICAgdmlydHVhbCB2b2lk
IHNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+JiB1cGRhdGVSZWN0cyk7CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRFbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZExlYXZlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZv
ck1haW5GcmFtZShib29sIHVzZUN1c3RvbVJlcHJlc2VudGF0aW9uKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBDb3Jl
SVBDOjpEYXRhUmVmZXJlbmNlJik7CisgICAgdmlydHVhbCBkb3VibGUgY3VzdG9tUmVwcmVzZW50
YXRpb25ab29tRmFjdG9yKCk7CisgICAgdmlydHVhbCB2b2lkIHNldEN1c3RvbVJlcHJlc2VudGF0
aW9uWm9vbUZhY3Rvcihkb3VibGUpOworCisgICAgLy8gTWVtYmVycyBvZiBXZWJWaWV3IGNsYXNz
CisgICAgR3RrV2lkZ2V0KiBtX3ZpZXdXaWRnZXQ7CisgICAgYm9vbCBtX2lzUGFnZUFjdGl2ZTsK
KyAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3BhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFdlYlZpZXdfaAo=
</data>
<flag name="review"
          id="75066"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>