<?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>53600</bug_id>
          
          <creation_ts>2011-02-02 08:58:22 -0800</creation_ts>
          <short_desc>[GTK] Add support for window.runModalDialog</short_desc>
          <delta_ts>2012-05-23 11:16:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>mario</cc>
    
    <cc>pnormand</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>343995</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-02 08:58:22 -0800</bug_when>
    <thetext>Tests that use modal dialogs do not work in DRT yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552955</commentid>
    <comment_count>1</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-09 01:24:44 -0800</bug_when>
    <thetext>This requires a complete implementation of ChromeClientGtk::canRunModal and ChromeClientGtk::runModal functions.

Patch incoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552999</commentid>
    <comment_count>2</comment_count>
      <attachid>126265</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-09 02:58:48 -0800</bug_when>
    <thetext>Created attachment 126265
Patch

Adds support for running modal dialogs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553188</commentid>
    <comment_count>3</comment_count>
      <attachid>126265</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-09 08:31:06 -0800</bug_when>
    <thetext>Comment on attachment 126265
Patch

This seems like a fine change. We need another reviewer to approve the API though. CCing some people.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553190</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-09 08:31:45 -0800</bug_when>
    <thetext>CCing some people to approve this new API. This implements modal dialogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553238</commentid>
    <comment_count>5</comment_count>
      <attachid>126265</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-02-09 09:44:29 -0800</bug_when>
    <thetext>Comment on attachment 126265
Patch

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

Looks pretty good to me. I had an implementation of this locally for some demos but you beat me to it :)

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2758
&gt; +            0, 0,

Hrm, it seems more idiomatic to make this a TRUE = handled and use g_signal_accumulator_true_handled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553263</commentid>
    <comment_count>6</comment_count>
      <attachid>126324</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-09 10:10:42 -0800</bug_when>
    <thetext>Created attachment 126324
Patch

Uses g_signal_accumulator_true_handled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553776</commentid>
    <comment_count>7</comment_count>
      <attachid>126324</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-09 20:33:49 -0800</bug_when>
    <thetext>Comment on attachment 126324
Patch

Clearing flags on attachment: 126324

Committed r107351: &lt;http://trac.webkit.org/changeset/107351&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553777</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-09 20:33:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561684</commentid>
    <comment_count>9</comment_count>
      <attachid>126324</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 00:03:41 -0800</bug_when>
    <thetext>Comment on attachment 126324
Patch

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

I know I&apos;m late, but I&apos;ve found several issues in this patch.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2746
&gt;      /*

Double * missing here

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2747
&gt; +     * WebKitWebView::run-modal-dialog

Trailing : missing here. also the name is a bit confusing, it seems this signal is to run a modal dialog, while it actually runs the toplevel window of the web view in modal mode.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2757
&gt; +     * Since: 1.7.6

This version doesn&apos;t exist, it&apos;s 1.7.90

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2759
&gt; +    webkit_web_view_signals[RESOURCE_LOAD_FAILED] = g_signal_new(&quot;run-modal-dialog&quot;,

RESOURCE_LOAD_FAILED -&gt; that should be RUN_MODAL_DIALOG

&gt; Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:962
&gt; +    GtkWindow* viewTopLevel = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(view)));

You should check that returned widget is actually a toplevel and a GdkWindow. We have a method in GtkUtilities to check this properly.

&gt; Tools/GtkLauncher/main.c:134
&gt; +    GtkWidget *window = gtk_widget_get_toplevel(GTK_WIDGET(webView));
&gt; +    gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(openerWindow));
&gt; +    gtk_window_set_modal(GTK_WINDOW(window), TRUE);
&gt; +    return TRUE;

Instead of duplicating this in GtkLauncher and DRT, this should be default implementation when the signal is not handled in WebView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561718</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 00:55:35 -0800</bug_when>
    <thetext>Reverted r107351 for reason:

Several issues introduced in WebKitGTK+ API

Committed r108459: &lt;http://trac.webkit.org/changeset/108459&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561733</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 01:19:14 -0800</bug_when>
    <thetext>Sorry for rolling this out, but we are close to a new release, and I think we have to discuss this a bit more. After reading he code, now I understand what this signal is for. This signal is only called by DOMWindow::showModalDialog(). This method creates a normal popup dialog, so that signals create-web-view are web-view-ready normally, and after the new frame is shown in a window, runModal() is called, to run the newly created view in modal mode, until close() is called (close-web-view signal is emitted). 

The current name of the signal it&apos;s similar to the DOMWindow method (showModalDialog()), but the method does a lot of more things than what the signal is expected to do. So, since the other signals involved refer to the view and not to a window (create-web-view, web-view-ready and close-web-view) this signal could be called run-modal-web-view (or something similar). The documentation should explain also that this signal is always emitted (if emitted) after web-view-ready signal to run the newly created view in modal mode, until close-web-view signal is emitted (and the view is destroyed). 

Does it sound good?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561736</commentid>
    <comment_count>12</comment_count>
      <attachid>126324</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 01:25:35 -0800</bug_when>
    <thetext>Comment on attachment 126324
Patch

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

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2748
&gt; +     * @webView: the object which received the signal

This should be @web_view

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2751
&gt; +     * avoided if FALSE is returned in the signal handler. Otherwise, the

%FALSE

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2752
&gt; +     * @webView (or its toplevel window) should be made transient for its parent,

@web_view

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2753
&gt; +     * set as a modal window, and TRUE should be returned in the signal handler.

%TRUE

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2754
&gt; +     * After that, a loop will be created and run until the @webView is closed

@web_view

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2756
&gt; +     * (i.e. its chrome is destroyed).
&gt; +     *

Signal is true_handled, it should include information about the Return value:

* Return value: %TRUE to stop handlers from being invoked for the event or                                                                                                              
     * %FALSE to propagate the event furter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561754</commentid>
    <comment_count>13</comment_count>
      <attachid>126324</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-22 01:47:56 -0800</bug_when>
    <thetext>Comment on attachment 126324
Patch

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

About the name in the next comment.

&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2746
&gt;&gt;      /*
&gt; 
&gt; Double * missing here

Noted.

&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2747
&gt;&gt; +     * WebKitWebView::run-modal-dialog
&gt; 
&gt; Trailing : missing here. also the name is a bit confusing, it seems this signal is to run a modal dialog, while it actually runs the toplevel window of the web view in modal mode.

Noted about the &apos;:&apos;, I&apos;ll write about the name below.

&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2748
&gt;&gt; +     * @webView: the object which received the signal
&gt; 
&gt; This should be @web_view

Noted.

&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2751
&gt;&gt; +     * avoided if FALSE is returned in the signal handler. Otherwise, the
&gt; 
&gt; %FALSE

Noted.

&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2752
&gt;&gt; +     * @webView (or its toplevel window) should be made transient for its parent,
&gt; 
&gt; @web_view

Noted.

&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2753
&gt;&gt; +     * set as a modal window, and TRUE should be returned in the signal handler.
&gt; 
&gt; %TRUE

Noted.

&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2754
&gt;&gt; +     * After that, a loop will be created and run until the @webView is closed
&gt; 
&gt; @web_view

Noted.

&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2756
&gt;&gt; +     *
&gt; 
&gt; Signal is true_handled, it should include information about the Return value:
&gt; 
&gt; * Return value: %TRUE to stop handlers from being invoked for the event or                                                                                                              
&gt;      * %FALSE to propagate the event furter

I&apos;d like to be more verbose - %TRUE to stop handlers being invoked and run the modal dialog loop, %FALSE to state that the modal dialog should not be run and propagate the event further.

(Not this exact wording, but something similar.)

&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2757
&gt;&gt; +     * Since: 1.7.6
&gt; 
&gt; This version doesn&apos;t exist, it&apos;s 1.7.90

Noted.

&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2759
&gt;&gt; +    webkit_web_view_signals[RESOURCE_LOAD_FAILED] = g_signal_new(&quot;run-modal-dialog&quot;,
&gt; 
&gt; RESOURCE_LOAD_FAILED -&gt; that should be RUN_MODAL_DIALOG

Oops :)

&gt;&gt; Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:962
&gt;&gt; +    GtkWindow* viewTopLevel = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(view)));
&gt; 
&gt; You should check that returned widget is actually a toplevel and a GdkWindow. We have a method in GtkUtilities to check this properly.

I&apos;ll put a similar check in both DRT and GtkLauncher.

&gt;&gt; Tools/GtkLauncher/main.c:134
&gt;&gt; +    gtk_window_set_modal(GTK_WINDOW(window), TRUE);
&gt;&gt; +    return TRUE;
&gt; 
&gt; Instead of duplicating this in GtkLauncher and DRT, this should be default implementation when the signal is not handled in WebView

When signal is not handled (or FALSE is returned), the current implementation interprets this as a request not to run the modal dialog loop, cancelling any further operations in that direction.

I think it wouldn&apos;t be appropriate to force a modal dialog to be shown if the signal is not handled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561757</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 01:53:32 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 126324 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126324&amp;action=review
 
&gt; &gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2756
&gt; &gt;&gt; +     *
&gt; &gt; 
&gt; &gt; Signal is true_handled, it should include information about the Return value:
&gt; &gt; 
&gt; &gt; * Return value: %TRUE to stop handlers from being invoked for the event or                                                                                                              
&gt; &gt;      * %FALSE to propagate the event furter
&gt; 
&gt; I&apos;d like to be more verbose - %TRUE to stop handlers being invoked and run the modal dialog loop, %FALSE to state that the modal dialog should not be run and propagate the event further.
&gt; 
&gt; (Not this exact wording, but something similar.)

Well, this is kind of stantard text we use in every signal that is true_handled.

&gt; &gt;&gt; Tools/GtkLauncher/main.c:134
&gt; &gt;&gt; +    gtk_window_set_modal(GTK_WINDOW(window), TRUE);
&gt; &gt;&gt; +    return TRUE;
&gt; &gt; 
&gt; &gt; Instead of duplicating this in GtkLauncher and DRT, this should be default implementation when the signal is not handled in WebView
&gt; 
&gt; When signal is not handled (or FALSE is returned), the current implementation interprets this as a request not to run the modal dialog loop, cancelling any further operations in that direction.
&gt; 
&gt; I think it wouldn&apos;t be appropriate to force a modal dialog to be shown if the signal is not handled.

You are right, I agree. The same way we don&apos;t have a default impl for web-view-rady and close-web-view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561758</commentid>
    <comment_count>15</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-22 01:54:06 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Sorry for rolling this out, but we are close to a new release, and I think we have to discuss this a bit more. After reading he code, now I understand what this signal is for. This signal is only called by DOMWindow::showModalDialog(). This method creates a normal popup dialog, so that signals create-web-view are web-view-ready normally, and after the new frame is shown in a window, runModal() is called, to run the newly created view in modal mode, until close() is called (close-web-view signal is emitted). 
&gt; 

No problem about the roll-out, but sorry for the mess.

&gt; The current name of the signal it&apos;s similar to the DOMWindow method (showModalDialog()), but the method does a lot of more things than what the signal is expected to do. So, since the other signals involved refer to the view and not to a window (create-web-view, web-view-ready and close-web-view) this signal could be called run-modal-web-view (or something similar). The documentation should explain also that this signal is always emitted (if emitted) after web-view-ready signal to run the newly created view in modal mode, until close-web-view signal is emitted (and the view is destroyed). 
&gt; 

The create-web-view signal is triggered on the originatin web view, creating the new web view - the dialog web view. On this dialog web view are then triggered the web-view-ready and close-web-view signals.

run-modal-web-view sound to me like some other web view will be run as a modal dialog (rather than the one on which the signal was triggered). I&apos;d suggest something like &apos;run-as-modal-web-view&apos; or even simpler, just &apos;run-as-modal&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561761</commentid>
    <comment_count>16</comment_count>
      <attachid>126324</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-22 01:56:27 -0800</bug_when>
    <thetext>Comment on attachment 126324
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:2756
&gt;&gt;&gt;&gt; +     *
&gt;&gt;&gt; 
&gt;&gt;&gt; Signal is true_handled, it should include information about the Return value:
&gt;&gt;&gt; 
&gt;&gt;&gt; * Return value: %TRUE to stop handlers from being invoked for the event or                                                                                                              
&gt;&gt;&gt;      * %FALSE to propagate the event furter
&gt;&gt; 
&gt;&gt; I&apos;d like to be more verbose - %TRUE to stop handlers being invoked and run the modal dialog loop, %FALSE to state that the modal dialog should not be run and propagate the event further.
&gt;&gt; 
&gt;&gt; (Not this exact wording, but something similar.)
&gt; 
&gt; Well, this is kind of stantard text we use in every signal that is true_handled.

OK then, the standard text is fine but the documentation should state clearly what will be going on based on the return value of the handler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561780</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 02:22:31 -0800</bug_when>
    <thetext>(In reply to comment #15)

&gt; &gt; The current name of the signal it&apos;s similar to the DOMWindow method (showModalDialog()), but the method does a lot of more things than what the signal is expected to do. So, since the other signals involved refer to the view and not to a window (create-web-view, web-view-ready and close-web-view) this signal could be called run-modal-web-view (or something similar). The documentation should explain also that this signal is always emitted (if emitted) after web-view-ready signal to run the newly created view in modal mode, until close-web-view signal is emitted (and the view is destroyed). 
&gt; &gt; 
&gt; 
&gt; The create-web-view signal is triggered on the originatin web view, creating the new web view - the dialog web view. On this dialog web view are then triggered the web-view-ready and close-web-view signals.

Exactly, I would move the signal creation and signal value in the enum between web-view-ready and close-web-view signals, to make it clear that they are related. web-view-ready doc says emitted in the newly created view (or something like that). That should be clarified in the doc for run-modal too.

&gt; run-modal-web-view sound to me like some other web view will be run as a modal dialog (rather than the one on which the signal was triggered). I&apos;d suggest something like &apos;run-as-modal-web-view&apos; or even simpler, just &apos;run-as-modal&apos;.

run-as-modal sounds good to me, but I guess it should be web-view-run-as-modal for consistency. I never liked the web-view prefix/suffix in those signals (and we don&apos;t use it in wk2), but I think it helps to understand that those signals are all related, and that a web view can&apos;t be switched to modal mode at any time, but after ready when it has been created by create.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561782</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 02:22:58 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; Well, this is kind of stantard text we use in every signal that is true_handled.
&gt; 
&gt; OK then, the standard text is fine but the documentation should state clearly what will be going on based on the return value of the handler.

Exactly, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561862</commentid>
    <comment_count>19</comment_count>
      <attachid>126324</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-22 05:07:14 -0800</bug_when>
    <thetext>Comment on attachment 126324
Patch

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

Hi,

I started today working on a similar patch for WebKit2GTK+ and this patch has been extremely helpful so far, so thank you. Just have a doubt related to creating a new mainloop, see my comment below...

&gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:206
&gt; +    GMainContext* threadDefaultContext = g_main_context_ref_thread_default();
&gt; +    g_main_context_acquire(threadDefaultContext);
&gt; +
&gt; +    m_modalLoop = g_main_loop_new(threadDefaultContext, FALSE);
&gt; +    g_main_loop_run(m_modalLoop);
&gt; +    g_main_loop_unref(m_modalLoop);
&gt; +    m_modalLoop = 0;
&gt; +
&gt; +    g_main_context_release(threadDefaultContext);
&gt; +    g_main_context_unref(threadDefaultContext);

Is this actually needed? I mean, as far as I can see, calling gtk_window_set_modal(window, TRUE) will already call gtk_grab_add(), which as per documentation does the following:

   &quot;Makes widget the current grabbed widget. This means that interaction with other widgets in the 
    same application is blocked and mouse as well as keyboard events are delivered to this widget.&quot;

So, I wonder if it would be enough emitting the signal so the application can decide whether to call to set_transient_for and set_modal (which would do all the modal magic, I think), or if I&apos;m missing something here, and perhaps creating and running a new main loop would be needed after all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561871</commentid>
    <comment_count>20</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-22 05:17:55 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; [...] So, I wonder if it would be enough emitting the signal so the application can decide whether to call to 
&gt; set_transient_for and set_modal (which would do all the modal magic, I think), or if I&apos;m missing something 
&gt; here, and perhaps creating and running a new main loop would be needed after all.

Also, in case it was needed to create that new mainloop, I wonder whether it should be a decision that the client application should make, in the same way it&apos;s its responsibility to call to gtk_window_set_modal and gtk_window_set_transient_for (and so WKGTK should care only about emitting the signal)

Sorry for the two-comments thing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561928</commentid>
    <comment_count>21</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-22 06:30:19 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; [...] So, I wonder if it would be enough emitting the signal so the application can decide whether to call to 
&gt; &gt; set_transient_for and set_modal (which would do all the modal magic, I think), or if I&apos;m missing something 
&gt; &gt; here, and perhaps creating and running a new main loop would be needed after all.
&gt; 
&gt; Also, in case it was needed to create that new mainloop, I wonder whether it should be a decision that the client application should make, in the same way it&apos;s its responsibility to call to gtk_window_set_modal and gtk_window_set_transient_for (and so WKGTK should care only about emitting the signal)
&gt; 
&gt; Sorry for the two-comments thing

The main loop is required as it serves as the event loop for the web view that is running as the modal dialog. This blocks user input events in the web view from which the dialog originated.

Giving the job of spinning the event loop to the client application may work, but it complicates things for that application implementation-wise. Requesting others&apos; input.

Also please have a look at bug 17171 for modal dialogs in WebKit2Gtk+ - there are some early sketches of what an API for common JavaScript dialogs (alert, confirm, prompt) might look like, and I&apos;ve proposed about perhaps including modal dialogs in there as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561963</commentid>
    <comment_count>22</comment_count>
      <attachid>126324</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-22 07:17:51 -0800</bug_when>
    <thetext>Comment on attachment 126324
Patch

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

&gt;&gt;&gt; Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:962
&gt;&gt;&gt; +    GtkWindow* viewTopLevel = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(view)));
&gt;&gt; 
&gt;&gt; You should check that returned widget is actually a toplevel and a GdkWindow. We have a method in GtkUtilities to check this properly.
&gt; 
&gt; I&apos;ll put a similar check in both DRT and GtkLauncher.

Unfortunately this check is not possible here, because the dialog web view is not a child of a GtkWindow since a newly-created web view is not packed into anything. Because the dialog web view doesn&apos;t have any parents, gtk_widget_get_toplevel returns a pointer to the dialog web view itself. The check would then fail because the pointer does not represent neither a toplevel nor a GtkWindow, causing test failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561968</commentid>
    <comment_count>23</comment_count>
      <attachid>128211</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-22 07:25:40 -0800</bug_when>
    <thetext>Created attachment 128211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562002</commentid>
    <comment_count>24</comment_count>
      <attachid>128211</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-22 08:36:37 -0800</bug_when>
    <thetext>Comment on attachment 128211
Patch

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

One very important thing about this signal is that the client must be able to differentiate between modal dialogs and normal child WebViews. Imagine an application that makes a modal WebView an overlay over an existing one, instead of a new window. 

Is web-view-ready called for modal dialogs? If it is and especially if it&apos;s called before run-web-view-as-modal, it&apos;s going to be really tricky to pack the modal dialog WebView properly.  There is no create-modal-web-view, like in the Mac port, to know to pack the widget differentily.

r- for now, until these issues are worked out or the documentation explains it. Thank you for updating your patch. I think this can definitely go into stable with just a little polish.

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:1690
&gt; +     * made transient for its parent, set as a modal window, and %TRUE should be
&gt; +     * returned in the signal handler. After that, a loop will be created internally
&gt; +     * and run until the @web_view is closed (i.e. its chrome is destroyed) and the
&gt; +     * #WebKitWebView::close-web-view signal is emitted.
&gt; +     *
&gt; +     * Return value: %TRUE to stop handlers from being invoked for the event or
&gt; +     * %FALSE to propagate the event furter
&gt; +     *
&gt; +     * Since: 1.7.90
&gt; +     */

The documentation should make it clear that this is the appropriate time to show the window and not during create-web-view. Another important piece of information is whether or not web-view-ready fires here. You should probably change the Since: line to say &quot;1.8.0,&quot; because I&apos;m not sure at what point this patch will be merged into the stable branch.

&gt; Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:1294
&gt;                       &quot;signal::create-web-view&quot;, webViewCreate, 0,
&gt; +                     &quot;signal::web-view-run-as-modal&quot;, webViewRunModalDialog, 0,
&gt;                       &quot;signal::close-web-view&quot;, webViewClose, 0,

The signal name is not really consistent with create-web-view and close-web-view and also doesn&apos;t scan as an English phrase. I much prefer run-web-view-as-modal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562041</commentid>
    <comment_count>25</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-02-22 09:29:46 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; [...]
&gt; The main loop is required as it serves as the event loop for the web view that is running as the modal dialog. This blocks user input events in the web view from which the dialog originated.

Ok I understand, but I still have a concern (maybe an invalid one, though):

If we block on the modal dialog this way, wouldn&apos;t we getting more than just an user block regarding to the original window (the opener)? For instance, imagine a new window is opened with showModalDialog() _while_ the original window (the opener) has not still finished rendering... wouldn&apos;t this cause the rendering to get blocked (so it never finishes, since the original mainloop won&apos;t be dispatching paint events) once the modal dialog is running?

If that was the case, I&apos;m not sure that&apos;s what we really want... perhaps it would be better to block user input only (as performed by gtk_grab_add()) instead of blocking the original main loop maybe too much.

&gt; Giving the job of spinning the event loop to the client application may work, but it complicates things for that application implementation-wise. Requesting others&apos; input.

Yeah, it&apos;s probably not a good idea to move that stuff to the application. Not 100% sure either, though.
 
&gt; Also please have a look at bug 17171 for modal dialogs in WebKit2Gtk+ - there are some early sketches of what an API for common JavaScript dialogs (alert, confirm, prompt) might look like, and I&apos;ve proposed about perhaps including modal dialogs in there as well.

I&apos;ll take a look, thanks for the pointer!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562052</commentid>
    <comment_count>26</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-22 09:38:13 -0800</bug_when>
    <thetext>(In reply to comment #24)

&gt; Is web-view-ready called for modal dialogs? If it is and especially if it&apos;s called before run-web-view-as-modal, it&apos;s going to be really tricky to pack the modal dialog WebView properly.  There is no create-modal-web-view, like in the Mac port, to know to pack the widget differentily.

Another important usecase is blocking the modal dialog entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562081</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 10:04:11 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 128211 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128211&amp;action=review
&gt; 
&gt; One very important thing about this signal is that the client must be able to differentiate between modal dialogs and normal child WebViews. Imagine an application that makes a modal WebView an overlay over an existing one, instead of a new window. 
&gt; 
&gt; Is web-view-ready called for modal dialogs? If it is and especially if it&apos;s called before run-web-view-as-modal, it&apos;s going to be really tricky to pack the modal dialog WebView properly.  There is no create-modal-web-view, like in the Mac port, to know to pack the widget differentily.

Yes, as I said in comment #11. ShowModaldialog is:

1.- create-web-view
2.- web-view.-ready (on the newly created web view)
3.- run-modal (on the newly created web view)
4.- close

That&apos;s the only way to create a modal web view.

&gt; r- for now, until these issues are worked out or the documentation explains it. Thank you for updating your patch. I think this can definitely go into stable with just a little polish.

I think this patch should include unit tests too before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562102</commentid>
    <comment_count>28</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-22 10:18:22 -0800</bug_when>
    <thetext>(In reply to comment #27)

&gt; That&apos;s the only way to create a modal web view.

What do you mean by this statement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562115</commentid>
    <comment_count>29</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 10:28:59 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; 
&gt; &gt; That&apos;s the only way to create a modal web view.
&gt; 
&gt; What do you mean by this statement?

I mean there&apos;s no other way to create a modal web view. In other words, ChromeClient::runModal() is only called from DOMWindow::showModalDialog(). Please read comment #11.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562123</commentid>
    <comment_count>30</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-22 10:36:12 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; &gt; What do you mean by this statement?
&gt; 
&gt; I mean there&apos;s no other way to create a modal web view. In other words, ChromeClient::runModal() is only called from DOMWindow::showModalDialog(). Please read comment #11.

&quot;there&apos;s no other way to create a modal web view&quot; still makes no sense to me. There&apos;s at least one other way, and that&apos;s to have an API like the Mac port where the creation of a modal WebView happens in a different delegate method than the create of other child-WebViews. 

You sent me this link before: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/WebKit/Protocols/WebUIDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40003838

Note the webView:createWebViewModalDialogWithRequest: method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562127</commentid>
    <comment_count>31</comment_count>
      <attachid>128211</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 10:37:44 -0800</bug_when>
    <thetext>Comment on attachment 128211
Patch

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

&gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:99
&gt; +    if (m_modalLoop)
&gt; +        g_main_loop_quit(m_modalLoop);

You should check the loop is actually running before calling quit with g_main_loop_is_running()

&gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:206
&gt; +    GMainContext* threadDefaultContext = g_main_context_ref_thread_default();
&gt; +    g_main_context_acquire(threadDefaultContext);
&gt; +
&gt; +    m_modalLoop = g_main_loop_new(threadDefaultContext, FALSE);
&gt; +    g_main_loop_run(m_modalLoop);
&gt; +    g_main_loop_unref(m_modalLoop);
&gt; +    m_modalLoop = 0;
&gt; +
&gt; +    g_main_context_release(threadDefaultContext);
&gt; +    g_main_context_unref(threadDefaultContext);

You should call GDK_THREADS_LEAVE() before running the loop and GDK_THREADS_ENTER() when it finishes. Do we really need to get and ref the default context? isn&apos;t it enough to create the main loop with the default context? Something like

m_modalLoop = g_main_loop_new(0, FALSE);
GDK_THREADS_LEAVE();
g_main_loop_run(m_modalLoop);
GDK_THREADS_ENTER();
g_main_loop_unref(m_modalLoop);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562131</commentid>
    <comment_count>32</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 10:40:23 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 126324 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126324&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:962
&gt; &gt;&gt;&gt; +    GtkWindow* viewTopLevel = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(view)));
&gt; &gt;&gt; 
&gt; &gt;&gt; You should check that returned widget is actually a toplevel and a GdkWindow. We have a method in GtkUtilities to check this properly.
&gt; &gt; 
&gt; &gt; I&apos;ll put a similar check in both DRT and GtkLauncher.
&gt; 
&gt; Unfortunately this check is not possible here, because the dialog web view is not a child of a GtkWindow since a newly-created web view is not packed into anything. Because the dialog web view doesn&apos;t have any parents, gtk_widget_get_toplevel returns a pointer to the dialog web view itself. The check would then fail because the pointer does not represent neither a toplevel nor a GtkWindow, causing test failures.

But you are using the toplevel as a GtkWindow without checking neither it&apos;s a toplevel nor a GtkWindow.

gtk_window_set_transient_for(GTK_WINDOW(viewTopLevel), GTK_WINDOW(window));
gtk_window_set_modal(GTK_WINDOW(viewTopLevel), TRUE);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562143</commentid>
    <comment_count>33</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 10:53:07 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; &gt; What do you mean by this statement?
&gt; &gt; 
&gt; &gt; I mean there&apos;s no other way to create a modal web view. In other words, ChromeClient::runModal() is only called from DOMWindow::showModalDialog(). Please read comment #11.
&gt; 
&gt; &quot;there&apos;s no other way to create a modal web view&quot; still makes no sense to me. There&apos;s at least one other way, and that&apos;s to have an API like the Mac port where the creation of a modal WebView happens in a different delegate method than the create of other child-WebViews. 
&gt; 
&gt; You sent me this link before: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/WebKit/Protocols/WebUIDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40003838
&gt; 
&gt; Note the webView:createWebViewModalDialogWithRequest: method.

That&apos;s called from ChromeClient::createWindow() when the dialog feature is present in WindowFeatures. I&apos;m not sure &apos;dialog&apos; is a standard feature, I think it&apos;s mac specific and we don&apos;t support it neither in wk1 nor wk2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562161</commentid>
    <comment_count>34</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-22 11:06:33 -0800</bug_when>
    <thetext>(In reply to comment #33)

&gt; That&apos;s called from ChromeClient::createWindow() when the dialog feature is present in WindowFeatures. I&apos;m not sure &apos;dialog&apos; is a standard feature, I think it&apos;s mac specific and we don&apos;t support it neither in wk1 nor wk2.

I don&apos;t believe it&apos;s the case that it&apos;s Mac-specific. It&apos;s listed here: https://developer.mozilla.org/en/DOM/window.open

Note that runModalDialog and window.open seem to take the same set of features. Some of them are interpreted by WindowFeatures.cpp and it seems others should just be passed on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562167</commentid>
    <comment_count>35</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 11:13:45 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; 
&gt; &gt; That&apos;s called from ChromeClient::createWindow() when the dialog feature is present in WindowFeatures. I&apos;m not sure &apos;dialog&apos; is a standard feature, I think it&apos;s mac specific and we don&apos;t support it neither in wk1 nor wk2.
&gt; 
&gt; I don&apos;t believe it&apos;s the case that it&apos;s Mac-specific. It&apos;s listed here: https://developer.mozilla.org/en/DOM/window.open

Maybe it&apos;s not mac specific, but doesn&apos;t look standard either.

&gt; Note that runModalDialog and window.open seem to take the same set of features. Some of them are interpreted by WindowFeatures.cpp and it seems others should just be passed on.

That&apos;s because runModalDialog has to crated the window first, so it passes the features to createWindow(). If we want to support &apos;dialog&apos;, I think we should emulate showModalDialog, so the result would the same: create-web-view, web-view-ready, run-as-modal, close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562195</commentid>
    <comment_count>36</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-22 11:41:07 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #34)
&gt; &gt; (In reply to comment #33)
&gt; &gt; 
&gt; &gt; &gt; That&apos;s called from ChromeClient::createWindow() when the dialog feature is present in WindowFeatures. I&apos;m not sure &apos;dialog&apos; is a standard feature, I think it&apos;s mac specific and we don&apos;t support it neither in wk1 nor wk2.
&gt; &gt; 
&gt; &gt; I don&apos;t believe it&apos;s the case that it&apos;s Mac-specific. It&apos;s listed here: https://developer.mozilla.org/en/DOM/window.open
&gt; 
&gt; Maybe it&apos;s not mac specific, but doesn&apos;t look standard either.

The standard says this about the features argument: &quot;The third argument, features, has no defined effect and is mentioned for historical reasons only. User agents may interpret this argument as instructions to set the size and position of the browsing context, but are encouraged to instead ignore the argument entirely.&quot; [1]

This isn&apos;t entirely helpful. My feeling is that we should probably pass it along because it&apos;s a property on WindowFeatures and is also exposed in the Qt, Chromium, Mac, Windows, and WebKit2 C APIs.

1. http://www.w3.org/TR/html5/browsers.html#dom-open</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562265</commentid>
    <comment_count>37</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-22 12:40:16 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:1294
&gt; &gt;                       &quot;signal::create-web-view&quot;, webViewCreate, 0,
&gt; &gt; +                     &quot;signal::web-view-run-as-modal&quot;, webViewRunModalDialog, 0,
&gt; &gt;                       &quot;signal::close-web-view&quot;, webViewClose, 0,
&gt; 
&gt; The signal name is not really consistent with create-web-view and close-web-view and also doesn&apos;t scan as an English phrase. I much prefer run-web-view-as-modal.

run-web-view-as-modal seems better indeed.

(In reply to comment #25)
&gt; (In reply to comment #21)
&gt; &gt; [...]
&gt; &gt; The main loop is required as it serves as the event loop for the web view that is running as the modal dialog. This blocks user input events in the web view from which the dialog originated.
&gt; 
&gt; Ok I understand, but I still have a concern (maybe an invalid one, though):
&gt; 
&gt; If we block on the modal dialog this way, wouldn&apos;t we getting more than just an user block regarding to the original window (the opener)? For instance, imagine a new window is opened with showModalDialog() _while_ the original window (the opener) has not still finished rendering... wouldn&apos;t this cause the rendering to get blocked (so it never finishes, since the original mainloop won&apos;t be dispatching paint events) once the modal dialog is running?
&gt; 

I&apos;m not sure how the standard rendering is handled, but requestAnimationFrame callbacks are not invoked during running modal dialogs[1]. This is definitely something to try and test out.

Still, comparing the approach to GtkDialog implementation of gtk_dialog_run, it is pretty similar.[2]

&gt; If that was the case, I&apos;m not sure that&apos;s what we really want... perhaps it would be better to block user input only (as performed by gtk_grab_add()) instead of blocking the original main loop maybe too much.
&gt; 

Blocking only user input is not sufficient, as this causes the showModalDialog function to return immediately an undefined value. An example/testcase of this can be found at [3].

&gt; (From update of attachment 128211 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128211&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:99
&gt; &gt; +    if (m_modalLoop)
&gt; &gt; +        g_main_loop_quit(m_modalLoop);
&gt; 
&gt; You should check the loop is actually running before calling quit with g_main_loop_is_running()
&gt; 
&gt; &gt; Source/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:206
&gt; &gt; +    GMainContext* threadDefaultContext = g_main_context_ref_thread_default();
&gt; &gt; +    g_main_context_acquire(threadDefaultContext);
&gt; &gt; +
&gt; &gt; +    m_modalLoop = g_main_loop_new(threadDefaultContext, FALSE);
&gt; &gt; +    g_main_loop_run(m_modalLoop);
&gt; &gt; +    g_main_loop_unref(m_modalLoop);
&gt; &gt; +    m_modalLoop = 0;
&gt; &gt; +
&gt; &gt; +    g_main_context_release(threadDefaultContext);
&gt; &gt; +    g_main_context_unref(threadDefaultContext);
&gt; 
&gt; You should call GDK_THREADS_LEAVE() before running the loop and GDK_THREADS_ENTER() when it finishes. Do we really need to get and ref the default context? isn&apos;t it enough to create the main loop with the default context? Something like
&gt; 
&gt; m_modalLoop = g_main_loop_new(0, FALSE);
&gt; GDK_THREADS_LEAVE();
&gt; g_main_loop_run(m_modalLoop);
&gt; GDK_THREADS_ENTER();
&gt; g_main_loop_unref(m_modalLoop);

These are all valid points and will be taken into account. These are basically the same steps used in gtk_dialog_run[2], thanks!

(In reply to comment #31(In reply to comment #32)
&gt; (In reply to comment #22)
&gt; &gt; (From update of attachment 126324 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126324&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:962
&gt; &gt; &gt;&gt;&gt; +    GtkWindow* viewTopLevel = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(view)));
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; You should check that returned widget is actually a toplevel and a GdkWindow. We have a method in GtkUtilities to check this properly.
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;ll put a similar check in both DRT and GtkLauncher.
&gt; &gt; 
&gt; &gt; Unfortunately this check is not possible here, because the dialog web view is not a child of a GtkWindow since a newly-created web view is not packed into anything. Because the dialog web view doesn&apos;t have any parents, gtk_widget_get_toplevel returns a pointer to the dialog web view itself. The check would then fail because the pointer does not represent neither a toplevel nor a GtkWindow, causing test failures.
&gt; 
&gt; But you are using the toplevel as a GtkWindow without checking neither it&apos;s a toplevel nor a GtkWindow.
&gt; 
&gt; gtk_window_set_transient_for(GTK_WINDOW(viewTopLevel), GTK_WINDOW(window));
&gt; gtk_window_set_modal(GTK_WINDOW(viewTopLevel), TRUE);

True, yet for some odd reason, it does the job. Without these two steps, test failures occur. There are also no compile-time or run-time complaints.
I&apos;m hoping that after these debates and with subsequent results it will be possible to pack a modal web view into a GtkWindow, so all these calls would make sense. Another way is to pack every newly-created web view in DRT in its GtkWindow.

(In reply to comment #36)
&gt; (In reply to comment #35)
&gt; &gt; (In reply to comment #34)
&gt; &gt; &gt; (In reply to comment #33)
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; That&apos;s called from ChromeClient::createWindow() when the dialog feature is present in WindowFeatures. I&apos;m not sure &apos;dialog&apos; is a standard feature, I think it&apos;s mac specific and we don&apos;t support it neither in wk1 nor wk2.
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t believe it&apos;s the case that it&apos;s Mac-specific. It&apos;s listed here: https://developer.mozilla.org/en/DOM/window.open
&gt; &gt; 
&gt; &gt; Maybe it&apos;s not mac specific, but doesn&apos;t look standard either.
&gt; 
&gt; The standard says this about the features argument: &quot;The third argument, features, has no defined effect and is mentioned for historical reasons only. User agents may interpret this argument as instructions to set the size and position of the browsing context, but are encouraged to instead ignore the argument entirely.&quot; [1]
&gt; 
&gt; This isn&apos;t entirely helpful. My feeling is that we should probably pass it along because it&apos;s a property on WindowFeatures and is also exposed in the Qt, Chromium, Mac, Windows, and WebKit2 C APIs.
&gt; 
&gt; 1. http://www.w3.org/TR/html5/browsers.html#dom-open

While not standardized, it would be extremely helpful to indicate a dialog web view is to be created. The only problem is the possibility of this being removed in the future, because of the not-standardized thing. Luckily we won&apos;t be the only port API affected, which is a bit of reassuring.

[1] http://trac.webkit.org/browser/trunk/LayoutTests/fast/animation/request-animation-frame-during-modal.html

[2] http://git.gnome.org/browse/gtk+/tree/gtk/gtkdialog.c#n1034

[3] https://developer.mozilla.org/en/DOM/window.showModalDialog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562280</commentid>
    <comment_count>38</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-22 12:51:49 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; I think this patch should include unit tests too before landing.

It really should, yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562896</commentid>
    <comment_count>39</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-22 23:44:42 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #35)
&gt; &gt; (In reply to comment #34)
&gt; &gt; &gt; (In reply to comment #33)
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; That&apos;s called from ChromeClient::createWindow() when the dialog feature is present in WindowFeatures. I&apos;m not sure &apos;dialog&apos; is a standard feature, I think it&apos;s mac specific and we don&apos;t support it neither in wk1 nor wk2.
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t believe it&apos;s the case that it&apos;s Mac-specific. It&apos;s listed here: https://developer.mozilla.org/en/DOM/window.open
&gt; &gt; 
&gt; &gt; Maybe it&apos;s not mac specific, but doesn&apos;t look standard either.
&gt; 
&gt; The standard says this about the features argument: &quot;The third argument, features, has no defined effect and is mentioned for historical reasons only. User agents may interpret this argument as instructions to set the size and position of the browsing context, but are encouraged to instead ignore the argument entirely.&quot; [1]
&gt; 
&gt; This isn&apos;t entirely helpful. My feeling is that we should probably pass it along because it&apos;s a property on WindowFeatures and is also exposed in the Qt, Chromium, Mac, Windows, and WebKit2 C APIs.

Yes, but it should be handled by the user like the other features. The result will be the same in the end, user connect to create-web-view and creates the view adding into a toplevel, then web-view-ready is emitted, now is when the user is supposed to handle the features before showing the toplevel. If the window properties object contains &apos;dialog&apos; (we should probably find a better name, though) the user should set the modal hint, transient for and run a nested main loop. But it&apos;s always up to the user whether to handle the window feature or not. This is it&apos;s clear the difference between window.showModalDialog() and window.open() with dialog fature. 
I don&apos;t know objective-c, but it seems to me that mac only handles &apos;dialog&apos; if the normal create-web-view delegate is not hanlded (because dialog is passed in the features dictionary, so the user should handle it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563140</commentid>
    <comment_count>40</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-23 08:51:43 -0800</bug_when>
    <thetext>(In reply to comment #39)

&gt; If the window properties object contains &apos;dialog&apos; (we should probably find a better name, though) the user should set the modal hint, transient for and run a nested main loop.

It&apos;s called &apos;dialog&apos; on every single port and it&apos;s also called &apos;dialog&apos; in web content. If we choose a different name it should be obvious to people to what bit of the DOM API it corresponds, so I think we should be cautious there.

&gt; But it&apos;s always up to the user whether to handle the window feature or not. This is it&apos;s clear the difference between window.showModalDialog() and window.open() with dialog fature. 

From the MDN link I posted above, I believe it&apos;s just an instruction to how the window should look.

&quot;The dialog feature removes all icons (restore, minimize, maximize) from the window&apos;s titlebar, leaving only the close button. Mozilla 1.2+ and Netscape 7.1 will render the other menu system commands (in FF 1.0 and in NS 7.0x, the command system menu is not identified with the Firefox/NS 7.0x icon on the left end of the titlebar: that&apos;s probably a bug. You can access the command system menu with a right-click on the titlebar). Dialog windows are windows which have no minimize system command icon and no maximize/restore down system command icon on the titlebar nor in correspondent menu item in the command system menu. They are said to be dialog because their normal, usual purpose is to only notify info and to be dismissed, closed. On Mac systems, dialog windows have a different window border and they may get turned into a sheet.&quot;

In that sense, I think it&apos;s somewhat orthogonal to showModalDialog, which just controls whether or not there&apos;s an inner main loop while the WebView is showing. showModalDialog has some very specific semantics in the HTML5 spec and the &apos;dialog&apos; window feature isn&apos;t present at all there.

&gt; I don&apos;t know objective-c, but it seems to me that mac only handles &apos;dialog&apos; if the normal create-web-view delegate is not hanlded (because dialog is passed in the features dictionary, so the user should handle it).

The code in question is:

    } else if (features.dialog &amp;&amp; [delegate respondsToSelector:@selector(webView:createWebViewModalDialogWithRequest:)]) {
        newWebView = CallUIDelegate(m_webView, @selector(webView:createWebViewModalDialogWithRequest:), nil);
    } else {
        newWebView = CallUIDelegate(m_webView, @selector(webView:createWebViewWithRequest:), nil);
    }

If the window features has &apos;dialog&apos; and the UIDelegate has a webView:createWebViewModalDialogWithRequest: selector (method), it will be used. Otherwise the webView:createWebViewWithRequest: selector will be used even if &apos;dialog&apos; is present.

For what it&apos;s worth, I don&apos;t think we need to add a new signal, just be sure to expose this somehow in the window features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563157</commentid>
    <comment_count>41</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-23 09:18:36 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #39)
&gt; 
&gt; &gt; If the window properties object contains &apos;dialog&apos; (we should probably find a better name, though) the user should set the modal hint, transient for and run a nested main loop.
&gt; 
&gt; It&apos;s called &apos;dialog&apos; on every single port and it&apos;s also called &apos;dialog&apos; in web content. If we choose a different name it should be obvious to people to what bit of the DOM API it corresponds, so I think we should be cautious there.

Agree, fair enough.

&gt; &gt; But it&apos;s always up to the user whether to handle the window feature or not. This is it&apos;s clear the difference between window.showModalDialog() and window.open() with dialog fature. 
&gt; 
&gt; From the MDN link I posted above, I believe it&apos;s just an instruction to how the window should look.
&gt; 
&gt; &quot;The dialog feature removes all icons (restore, minimize, maximize) from the window&apos;s titlebar, leaving only the close button. Mozilla 1.2+ and Netscape 7.1 will render the other menu system commands (in FF 1.0 and in NS 7.0x, the command system menu is not identified with the Firefox/NS 7.0x icon on the left end of the titlebar: that&apos;s probably a bug. You can access the command system menu with a right-click on the titlebar). Dialog windows are windows which have no minimize system command icon and no maximize/restore down system command icon on the titlebar nor in correspondent menu item in the command system menu. They are said to be dialog because their normal, usual purpose is to only notify info and to be dismissed, closed. On Mac systems, dialog windows have a different window border and they may get turned into a sheet.&quot;
&gt; 
&gt; In that sense, I think it&apos;s somewhat orthogonal to showModalDialog, which just controls whether or not there&apos;s an inner main loop while the WebView is showing. showModalDialog has some very specific semantics in the HTML5 spec and the &apos;dialog&apos; window feature isn&apos;t present at all there.

Exactly, so even more reasons not to emit run-modal in this case.

&gt; &gt; I don&apos;t know objective-c, but it seems to me that mac only handles &apos;dialog&apos; if the normal create-web-view delegate is not hanlded (because dialog is passed in the features dictionary, so the user should handle it).
&gt; 
&gt; The code in question is:
&gt; 
&gt;     } else if (features.dialog &amp;&amp; [delegate respondsToSelector:@selector(webView:createWebViewModalDialogWithRequest:)]) {
&gt;         newWebView = CallUIDelegate(m_webView, @selector(webView:createWebViewModalDialogWithRequest:), nil);
&gt;     } else {
&gt;         newWebView = CallUIDelegate(m_webView, @selector(webView:createWebViewWithRequest:), nil);
&gt;     }
&gt; 
&gt; If the window features has &apos;dialog&apos; and the UIDelegate has a webView:createWebViewModalDialogWithRequest: selector (method), it will be used. Otherwise the webView:createWebViewWithRequest: selector will be used even if &apos;dialog&apos; is present.

So I understood it correctly then. 

&gt; For what it&apos;s worth, I don&apos;t think we need to add a new signal, just be sure to expose this somehow in the window features.

Yes, we should just expose the dialog feature in the WindowProperties object and let the user handle it like all other features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564260</commentid>
    <comment_count>42</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-24 06:05:47 -0800</bug_when>
    <thetext>I&apos;ve just filed:

[GTK] Add dialog feature to WebKitWindowProperties in WebKit2 GTK+ API
https://bugs.webkit.org/show_bug.cgi?id=79483</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565639</commentid>
    <comment_count>43</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-27 07:28:44 -0800</bug_when>
    <thetext>Exposing the dialog property in window features seems fine, but I don&apos;t think this makes it possible for the user to prevent creating a dialog web view. Is this even required/needed? Should we make displaying and running modal dialogs optional through some setting or just signal through ChromeClient::canRunModal that modal dialogs are always going to be run?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565679</commentid>
    <comment_count>44</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-27 08:40:41 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; Exposing the dialog property in window features seems fine, but I don&apos;t think this makes it possible for the user to prevent creating a dialog web view. Is this even required/needed? Should we make displaying and running modal dialogs optional through some setting or just signal through ChromeClient::canRunModal that modal dialogs are always going to be run?

It seems extrememly useful for popup blocking and the like. Do other ports allow this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565827</commentid>
    <comment_count>45</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-02-27 11:05:13 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; (In reply to comment #43)
&gt; &gt; Exposing the dialog property in window features seems fine, but I don&apos;t think this makes it possible for the user to prevent creating a dialog web view. Is this even required/needed? Should we make displaying and running modal dialogs optional through some setting or just signal through ChromeClient::canRunModal that modal dialogs are always going to be run?
&gt; 
&gt; It seems extrememly useful for popup blocking and the like. Do other ports allow this?

The DOMWindow::showModalDialog function aborts if the DOMWindow does not allow popups, that is when &apos;javascript-can-open-windows-automatically&apos; property on WebKitWebSettings is set to FALSE. That should be sufficient, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581687</commentid>
    <comment_count>46</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-19 01:15:03 -0700</bug_when>
    <thetext>*** Bug 81500 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623185</commentid>
    <comment_count>47</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-05-14 12:07:17 -0700</bug_when>
    <thetext>Given the focus is now shifting towards WebKit2 APIs and WebKit2 in general, meaning new API additions to WebKit1 don&apos;t really make sense, I&apos;m willing to close this bug as a WONTFIX.

I&apos;ll do so after I get some additional thumbs-ups in agreement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623231</commentid>
    <comment_count>48</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-14 12:49:24 -0700</bug_when>
    <thetext>I think it makes sense to shift this work to WebKit2. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625753</commentid>
    <comment_count>49</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-05-16 12:40:35 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; I think it makes sense to shift this work to WebKit2. :)

Work getting done on this feature by Mario, bug #79500.

Closing as WONTFIX.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628073</commentid>
    <comment_count>50</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-05-18 14:25:25 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (In reply to comment #48)
&gt; &gt; I think it makes sense to shift this work to WebKit2. :)
&gt; 
&gt; Work getting done on this feature by Mario, bug #79500.

Yes. I have been quite busy with other matters lately, but will hopefully have more time to push it forward during the following weeks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631830</commentid>
    <comment_count>51</comment_count>
      <attachid>128211</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-05-23 11:16:48 -0700</bug_when>
    <thetext>Comment on attachment 128211
Patch

Just clearing the flags on the patch and marking it as obsolete.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126265</attachid>
            <date>2012-02-09 02:58:48 -0800</date>
            <delta_ts>2012-02-09 10:10:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53600-20120209115846.patch</filename>
            <type>text/plain</type>
            <size>15621</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MjA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggOGM1OWJiOTNm
YjUwZDRlY2FjOTEyMzZjODQ3MjgzYmI5Mzg3ZTc3OS4uNGIyOWY4YjIxODc1MTQ5NDE3ZWU1OWNl
OWU2NDU2NGViMDY4Y2EyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEy
LTAyLTA5ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAg
W0dUS10gQWRkIERSVCBzdXBwb3J0IGZvciBtb2RhbCBkaWFsb2dzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzYwMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBydW5uaW5nIG1v
ZGFsIGRpYWxvZ3MuCisKKyAgICAgICAgQSBuZXcgc2lnbmFsIGlzIGFkZGVkIHRvIHRoZSBXZWJL
aXRXZWJWaWV3LiBXaGVuIGVtaXR0ZWQsIHRoZSB3ZWIgdmlldworICAgICAgICBpcyByZXF1ZXN0
aW5nIHRvIGJlIGRpc3BsYXllZCBhcyBhIG1vZGFsIGRpYWxvZy4gSWYgYWNjZXB0ZWQsIHRoZQor
ICAgICAgICBDaHJvbWVDbGllbnQgdGhlbiBlc3RhYmxpc2hlcyBhIGxvb3AgdGhhdCBpcyBydW4g
dW50aWwgdGhlIGNocm9tZSBpcyBkZXN0cm95ZWQuCisgICAgICAgIElmIGRlbmllZCwgbm90aGlu
ZyBpcyBkb25lLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpDaHJvbWVDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OmNocm9tZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJL
aXQ6OkNocm9tZUNsaWVudDo6Y2FuUnVuTW9kYWwpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVD
bGllbnQ6OnJ1bk1vZGFsKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuaDoKKyAgICAgICAgKENocm9tZUNsaWVudCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOgorCiAyMDEy
LTAyLTA4ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR3RrXSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQoKSBmYWlscyB0byBwcm92aWRl
IHRoZSBjb3JyZWN0IGxpbmUgZm9yIGxpc3QgaXRlbXMgd2hvc2UgdGV4dCB3cmFwcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNw
cCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAK
aW5kZXggOTU1YzE2NmE5MGVkY2FmOTUyM2Q0YWIzOGJlOWFmMTg4YmVkNjgwNi4uZDEzNGY5MmU5
MTllOWQ0NzE5Zjg4NDdiNGI4YmVjY2MwMDMxNmVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC03OSw2ICs3OSw3
IEBAIENocm9tZUNsaWVudDo6Q2hyb21lQ2xpZW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAg
ICAgOiBtX3dlYlZpZXcod2ViVmlldykKICAgICAsIG1fYWRqdXN0bWVudFdhdGNoZXIod2ViVmll
dykKICAgICAsIG1fY2xvc2VTb29uVGltZXIoMCkKKyAgICAsIG1fbW9kYWxMb29wKDApCiAgICAg
LCBtX2Rpc3BsYXlUaW1lcih0aGlzLCAmQ2hyb21lQ2xpZW50OjpwYWludCkKICAgICAsIG1fbGFz
dERpc3BsYXlUaW1lKDApCiAgICAgLCBtX3JlcGFpbnRTb29uU291cmNlSWQoMCkKQEAgLTk0LDYg
Kzk1LDkgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmNocm9tZURlc3Ryb3llZCgpCiAgICAgaWYgKG1f
cmVwYWludFNvb25Tb3VyY2VJZCkKICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fcmVwYWludFNv
b25Tb3VyY2VJZCk7CiAKKyAgICBpZiAobV9tb2RhbExvb3ApCisgICAgICAgIGdfbWFpbl9sb29w
X3F1aXQobV9tb2RhbExvb3ApOworCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKQEAgLTE4MCwxMyAr
MTg0LDI2IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpzaG93KCkKIAogYm9vbCBDaHJvbWVDbGllbnQ6
OmNhblJ1bk1vZGFsKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnQ6OnJ1bk1vZGFsKCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGdib29sZWFuIGlzSGFuZGxlZCA9IGZhbHNl
OworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYlZpZXcsICJydW4tbW9kYWwtZGlhbG9n
IiwgJmlzSGFuZGxlZCk7CisgICAgaWYgKCFpc0hhbmRsZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdNYWluQ29udGV4dCogdGhyZWFkRGVmYXVsdENvbnRleHQgPSBnX21haW5fY29udGV4dF9y
ZWZfdGhyZWFkX2RlZmF1bHQoKTsKKyAgICBnX21haW5fY29udGV4dF9hY3F1aXJlKHRocmVhZERl
ZmF1bHRDb250ZXh0KTsKKworICAgIG1fbW9kYWxMb29wID0gZ19tYWluX2xvb3BfbmV3KHRocmVh
ZERlZmF1bHRDb250ZXh0LCBGQUxTRSk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fbW9kYWxMb29w
KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihtX21vZGFsTG9vcCk7CisgICAgbV9tb2RhbExvb3Ag
PSAwOworCisgICAgZ19tYWluX2NvbnRleHRfcmVsZWFzZSh0aHJlYWREZWZhdWx0Q29udGV4dCk7
CisgICAgZ19tYWluX2NvbnRleHRfdW5yZWYodGhyZWFkRGVmYXVsdENvbnRleHQpOwogfQogCiB2
b2lkIENocm9tZUNsaWVudDo6c2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5o
IGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKaW5k
ZXggOGM3Yzg5MjMzOGJkNjQzMzg4NTlkNTY3YWZlY2Q1ZDZiZjgzYTBjNC4uNWQzMDgyZGM1NjRh
MjQ1YjUyNjMxMmFjYjhmYTA2YmU5MTU2ZjI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKQEAgLTE3Niw2ICsxNzYsNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKICAgICAgICAgR3RrQWRqdXN0bWVudFdhdGNoZXIgbV9hZGp1c3Rt
ZW50V2F0Y2hlcjsKICAgICAgICAgS1VSTCBtX2hvdmVyZWRMaW5rVVJMOwogICAgICAgICB1bnNp
Z25lZCBpbnQgbV9jbG9zZVNvb25UaW1lcjsKKyAgICAgICAgR01haW5Mb29wKiBtX21vZGFsTG9v
cDsKIAogICAgICAgICBUaW1lciA8Q2hyb21lQ2xpZW50PiBtX2Rpc3BsYXlUaW1lcjsKICAgICAg
ICAgUmVnaW9uIG1fZGlydHlSZWdpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAKaW5kZXggYzIyNDYxYzc0OTg3NjA4MWQ5N2I0NjA1ZTkyMGMyZjFjNDU3Yjlk
MC4uMjgzNWM4MmY1ZWNjYjEyOGY1OTljY2E1MzNlNDkyMDFlZGZkNzI4YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMjEyLDYgKzIxMiw3IEBAIGVu
dW0gewogICAgIFJFU09VUkNFX0xPQURfRklOSVNIRUQsCiAgICAgUkVTT1VSQ0VfQ09OVEVOVF9M
RU5HVEhfUkVDRUlWRUQsCiAgICAgUkVTT1VSQ0VfTE9BRF9GQUlMRUQsCisgICAgUlVOX01PREFM
X0RJQUxPRywKIAogICAgIExBU1RfU0lHTkFMCiB9OwpAQCAtMjczOCw2ICsyNzM5LDI3IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyog
d2ViVmlld0NsYXNzKQogICAgICAgICAgICAgR19UWVBFX1BPSU5URVIpOwogCiAgICAgLyoKKyAg
ICAgKiBXZWJLaXRXZWJWaWV3OjpydW4tbW9kYWwtZGlhbG9nCisgICAgICogQHdlYlZpZXc6IHRo
ZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqCisgICAgICogSW52b2tl
ZCB3aGVuIHRoZSBAd2ViVmlldyBzaG91bGQgYmUgcnVuIGluIHRoZSBtb2RhbCBtb2RlLiBUaGlz
IGNhbiBiZQorICAgICAqIGF2b2lkZWQgaWYgRkFMU0UgaXMgcmV0dXJuZWQgaW4gdGhlIHNpZ25h
bCBoYW5kbGVyLiBPdGhlcndpc2UsIHRoZQorICAgICAqIEB3ZWJWaWV3IChvciBpdHMgdG9wbGV2
ZWwgd2luZG93KSBzaG91bGQgYmUgbWFkZSB0cmFuc2llbnQgZm9yIGl0cyBwYXJlbnQsCisgICAg
ICogc2V0IGFzIGEgbW9kYWwgd2luZG93LCBhbmQgVFJVRSBzaG91bGQgYmUgcmV0dXJuZWQgaW4g
dGhlIHNpZ25hbCBoYW5kbGVyLgorICAgICAqIEFmdGVyIHRoYXQsIGEgbG9vcCB3aWxsIGJlIGNy
ZWF0ZWQgYW5kIHJ1biB1bnRpbCB0aGUgQHdlYlZpZXcgaXMgY2xvc2VkCisgICAgICogKGkuZS4g
aXRzIGNocm9tZSBpcyBkZXN0cm95ZWQpLgorICAgICAqCisgICAgICogU2luY2U6IDEuNy42Cisg
ICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbUkVTT1VSQ0VfTE9BRF9GQUlMRURd
ID0gZ19zaWduYWxfbmV3KCJydW4tbW9kYWwtZGlhbG9nIiwKKyAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwK
KyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLCAwLAorICAgICAgICAgICAgd2Via2l0X21h
cnNoYWxfQk9PTEVBTl9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAwKTsKKwor
ICAgIC8qCiAgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwogICAgICAq
LwogICAgIHdlYlZpZXdDbGFzcy0+Y3JlYXRlX3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3Jl
YWxfY3JlYXRlX3dlYl92aWV3OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGE0ZmIyZDA2MDZjNjkzOGZiM2UzNWUxNTkwNDU5NGJmNmU5MmI2ZDMu
LjMzOWQ0MTU4ZDY0MTBiNGMwYTI5NzcwNzlkNzZjNDhlODJlZTc1ZDAgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAx
Mi0wMi0wOSAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAg
IFtHVEtdIEFkZCBEUlQgc3VwcG9ydCBmb3IgbW9kYWwgZGlhbG9ncworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM2MDAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIG1vZGFsIGRpYWxv
Z3MgaGFuZGxpbmcgaW4gRHVtcFJlbmRlclRyZWUgYW5kIEd0a0xhdW5jaGVyLgorICAgICAgICBN
b3N0IHNpZ25pZmljYW50bHksIHdoZW4gY3JlYXRpbmcgYSBuZXcgd2ViIHZpZXcgaW4gR3RrTGF1
bmNoZXIsIHRoZSB3aW5kb3cKKyAgICAgICAgb2YgdGhlIHdlYiB2aWV3IG9wZW5lciBpcyBwYXNz
ZWQgYXJvdW5kLiBJbiBEdW1wUmVuZGVyVHJlZSwgdGhlIHdpbmRvdyBvZgorICAgICAgICB0aGUg
bWFpbiB3ZWIgdmlldyBpcyBhbHdheXMgY29uc2lkZXJlZCBhcyB0aGUgb3BlbmVyLiBUaGlzIGlz
IHJlcXVpcmVkIHNvCisgICAgICAgIHRoZSBtb2RhbCBkaWFsb2cncyB0b3BsZXZlbCBjYW4gYmUg
bWFkZSB0cmFuc2llbnQgZm9yIHRoZSBvcGVuZXIncyB0b3BsZXZlbC4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgICh3ZWJWaWV3UnVu
TW9kYWxEaWFsb2cpOgorICAgICAgICAoY3JlYXRlV2ViVmlldyk6CisgICAgICAgICogR3RrTGF1
bmNoZXIvbWFpbi5jOgorICAgICAgICAoY3JlYXRlV2ViVmlld0NiKToKKyAgICAgICAgKHJ1bk1v
ZGFsRGlhbG9nQ2IpOgorICAgICAgICAoY3JlYXRlQnJvd3Nlcik6CisgICAgICAgIChjcmVhdGVX
aW5kb3cpOgorICAgICAgICAobWFpbik6CisKIDIwMTItMDItMDkgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAga2lsbC1vbGQtcHJvY2Vzc2VzIHNob3VsZCBraWxs
IGdjYyBhbmQgY2xhbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUu
Y3BwCmluZGV4IDJlY2YxZGYyMzRmODNlMzQ3N2EyZmJjZTY5MzA3MzliYTU4ODRjY2MuLmUxZGNk
MDQ0MTM5ZWMyMmNjOWVhNGEyYTgzY2YzNzM3NDE3Y2U0YTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtOTU3LDYgKzk1NywxNSBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2ViVmlld0Nsb3NlKFdlYktpdFdlYlZpZXcqIHZpZXcpCiAgICAgcmV0dXJuIFRS
VUU7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3UnVuTW9kYWxEaWFsb2coV2ViS2l0V2Vi
VmlldyogdmlldykKK3sKKyAgICBHdGtXaW5kb3cqIHZpZXdUb3BMZXZlbCA9IEdUS19XSU5ET1co
Z3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVCh2aWV3KSkpOworICAgIGd0a193aW5k
b3dfc2V0X3RyYW5zaWVudF9mb3IoR1RLX1dJTkRPVyh2aWV3VG9wTGV2ZWwpLCBHVEtfV0lORE9X
KHdpbmRvdykpOworICAgIGd0a193aW5kb3dfc2V0X21vZGFsKEdUS19XSU5ET1codmlld1RvcExl
dmVsKSwgVFJVRSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgZGF0YWJh
c2VRdW90YUV4Y2VlZGVkKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgV2ViS2l0V2ViRGF0YWJhc2UgKmRhdGFiYXNlKQogewogICAgIEFTU0VSVCh2aWV3KTsKQEAg
LTEyODIsNiArMTI5MSw3IEBAIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiBjcmVhdGVXZWJWaWV3KCkK
ICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnN0YXR1cy1iYXItdGV4dC1jaGFuZ2VkIiwg
d2ViVmlld1N0YXR1c0JhclRleHRDaGFuZ2VkLCAwLAogICAgICAgICAgICAgICAgICAgICAgInNp
Z25hbDo6Y3JlYXRlLXdlYi12aWV3Iiwgd2ViVmlld0NyZWF0ZSwgMCwKICAgICAgICAgICAgICAg
ICAgICAgICJzaWduYWw6OmNsb3NlLXdlYi12aWV3Iiwgd2ViVmlld0Nsb3NlLCAwLAorICAgICAg
ICAgICAgICAgICAgICAgInNpZ25hbDo6cnVuLW1vZGFsLWRpYWxvZyIsIHdlYlZpZXdSdW5Nb2Rh
bERpYWxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OmRhdGFiYXNlLXF1b3Rh
LWV4Y2VlZGVkIiwgZGF0YWJhc2VRdW90YUV4Y2VlZGVkLCAwLAogICAgICAgICAgICAgICAgICAg
ICAgInNpZ25hbDo6ZG9jdW1lbnQtbG9hZC1maW5pc2hlZCIsIHdlYlZpZXdEb2N1bWVudExvYWRG
aW5pc2hlZCwgMCwKICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omdlb2xvY2F0aW9uLXBv
bGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLCBnZW9sb2NhdGlvblBvbGljeURlY2lzaW9uUmVxdWVz
dGVkLCAwLApkaWZmIC0tZ2l0IGEvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jIGIvVG9vbHMvR3Rr
TGF1bmNoZXIvbWFpbi5jCmluZGV4IGUzYTY2YjAzZTkyM2UxZTE4NDFjZDZiOGE4YzI5OTJjZTEy
YTE2YTEuLmZiZTgzMzFlMTg3MWU2YmZmOWMzOGU0OWJhZWUxOWM3MjExYTljMWYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYworKysgYi9Ub29scy9HdGtMYXVuY2hlci9tYWlu
LmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogc3RhdGljIGdpbnQgd2luZG93Q291bnQgPSAwOwogCi1z
dGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVXaW5kb3coV2ViS2l0V2ViVmlldyoqIG91dFdlYlZpZXcp
Oworc3RhdGljIEd0a1dpZGdldCogY3JlYXRlV2luZG93KFdlYktpdFdlYlZpZXcqKiBvdXRXZWJW
aWV3LCBHdGtXaWRnZXQqIG9wZW5lcldpbmRvdyk7CiAKIHN0YXRpYyB2b2lkIGFjdGl2YXRlVXJp
RW50cnlDYihHdGtXaWRnZXQqIGVudHJ5LCBncG9pbnRlciBkYXRhKQogewpAQCAtMTA1LDcgKzEw
NSw3IEBAIHN0YXRpYyBXZWJLaXRXZWJWaWV3KgogY3JlYXRlV2ViVmlld0NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIEd0a1dpZGdldCogd2luZG93
KQogewogICAgIFdlYktpdFdlYlZpZXcgKm5ld1dlYlZpZXc7Ci0gICAgY3JlYXRlV2luZG93KCZu
ZXdXZWJWaWV3KTsKKyAgICBjcmVhdGVXaW5kb3coJm5ld1dlYlZpZXcsIHdpbmRvdyk7CiAgICAg
d2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhuZXdXZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3NldHRpbmdzKHdlYlZpZXcpKTsKICAgICByZXR1cm4gbmV3V2ViVmlldzsKIH0KQEAgLTEy
Myw3ICsxMjMsMTggQEAgc3RhdGljIGdib29sZWFuIGNsb3NlV2ViVmlld0NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIEd0a1dpZGdldCogd2luZG93KQogICAgIHJldHVybiBUUlVFOwogfQogCi1z
dGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVCcm93c2VyKEd0a1dpZGdldCogd2luZG93LCBHdGtXaWRn
ZXQqIHVyaUVudHJ5LCBHdGtXaWRnZXQqIHN0YXR1c2JhciwgV2ViS2l0V2ViVmlldyogd2ViVmll
dykKK3N0YXRpYyBnYm9vbGVhbiBydW5Nb2RhbERpYWxvZ0NiKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIEd0a1dpZGdldCogb3BlbmVyV2luZG93KQoreworICAgIGlmICghb3BlbmVyV2luZG93KQor
ICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBHdGtXaWRnZXQgKndpbmRvdyA9IGd0a193aWRn
ZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGd0a193aW5kb3dfc2V0
X3RyYW5zaWVudF9mb3IoR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lORE9XKG9wZW5lcldpbmRv
dykpOworICAgIGd0a193aW5kb3dfc2V0X21vZGFsKEdUS19XSU5ET1cod2luZG93KSwgVFJVRSk7
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIo
R3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJpRW50cnksIEd0a1dpZGdldCogc3RhdHVz
YmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtXaWRnZXQqIG9wZW5lcldpbmRvdykKIHsK
ICAgICBHdGtXaWRnZXQgKnNjcm9sbGVkV2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXco
TlVMTCwgTlVMTCk7CiAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JP
TExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLCBHVEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BP
TElDWV9BVVRPTUFUSUMpOwpAQCAtMTM3LDYgKzE0OCw3IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGNy
ZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJpRW50cnksIEd0a1dp
ZGdlCiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY3JlYXRlLXdlYi12aWV3IiwgR19D
QUxMQkFDSyhjcmVhdGVXZWJWaWV3Q2IpLCB3aW5kb3cpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
d2ViVmlldywgIndlYi12aWV3LXJlYWR5IiwgR19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlDYiksIHdp
bmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY2xvc2Utd2ViLXZpZXciLCBH
X0NBTExCQUNLKGNsb3NlV2ViVmlld0NiKSwgd2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHdlYlZpZXcsICJydW4tbW9kYWwtZGlhbG9nIiwgR19DQUxMQkFDSyhydW5Nb2RhbERpYWxvZ0Ni
KSwgb3BlbmVyV2luZG93KTsKIAogICAgIHJldHVybiBzY3JvbGxlZFdpbmRvdzsKIH0KQEAgLTE5
MCw3ICsyMDIsNyBAQCBzdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVUb29sYmFyKEd0a1dpZGdldCog
dXJpRW50cnksIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJuIHRvb2xiYXI7CiB9
CiAKLXN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZVdpbmRvdyhXZWJLaXRXZWJWaWV3Kiogb3V0V2Vi
VmlldykKK3N0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZVdpbmRvdyhXZWJLaXRXZWJWaWV3Kiogb3V0
V2ViVmlldywgR3RrV2lkZ2V0KiBvcGVuZXJXaW5kb3cpCiB7CiAgICAgV2ViS2l0V2ViVmlldyAq
d2ViVmlldzsKICAgICBHdGtXaWRnZXQgKnZib3g7CkBAIC0yMTQsNyArMjI2LDcgQEAgc3RhdGlj
IEd0a1dpZGdldCogY3JlYXRlV2luZG93KFdlYktpdFdlYlZpZXcqKiBvdXRXZWJWaWV3KQogI2Vu
ZGlmCiAgICAgc3RhdHVzYmFyID0gY3JlYXRlU3RhdHVzYmFyKHdlYlZpZXcpOwogICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBjcmVhdGVUb29sYmFyKHVyaUVudHJ5LCB3ZWJW
aWV3KSwgRkFMU0UsIEZBTFNFLCAwKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2
Ym94KSwgY3JlYXRlQnJvd3Nlcih3aW5kb3csIHVyaUVudHJ5LCBzdGF0dXNiYXIsIHdlYlZpZXcp
LCBUUlVFLCBUUlVFLCAwKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwg
Y3JlYXRlQnJvd3Nlcih3aW5kb3csIHVyaUVudHJ5LCBzdGF0dXNiYXIsIHdlYlZpZXcsIG9wZW5l
cldpbmRvdyksIFRSVUUsIFRSVUUsIDApOwogICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KHZib3gpLCBzdGF0dXNiYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiAKICAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpOwpAQCAtNDE3LDcgKzQyOSw3IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAjZW5kaWYKIAogICAgIFdlYktpdFdlYlZp
ZXcgKndlYlZpZXc7Ci0gICAgR3RrV2lkZ2V0ICptYWluX3dpbmRvdyA9IGNyZWF0ZVdpbmRvdygm
d2ViVmlldyk7CisgICAgR3RrV2lkZ2V0ICptYWluX3dpbmRvdyA9IGNyZWF0ZVdpbmRvdygmd2Vi
VmlldywgMCk7CiAKICAgICBpZiAod2Via2l0U2V0dGluZ3MpIHsKICAgICAgICAgd2Via2l0X3dl
Yl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIHdlYmtpdFNldHRp
bmdzKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBlNjMxY2ZkMjM4N2Y0ZDQxYmNlNmY5NmY5MDk2YWVkNGE3YThmODQzLi44
OGU1ZWI2ODA1MzkwM2RlZTUzNTQ5MDY2ZDI2MmJhYWNjNjkzNTkzIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTItMDItMDkgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4K
KworICAgICAgICBbR1RLXSBBZGQgRFJUIHN1cHBvcnQgZm9yIG1vZGFsIGRpYWxvZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNjAwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5za2lwIHRoZSBwYXNz
aW5nIG1vZGFsIGRpYWxvZ3MgdGVzdHMgYW5kIGxvZyB0aGUgcmVtYWluaW5nIHNraXBwZWQgdGVz
dC4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorCiAyMDEyLTAyLTA5ICBQYXZl
bCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIGFkZCBjaHJvbWl1bSBleHBlY3RhdGlvbnMgZm9yIG5ldyB0ZXN0cyBhZGRlZCBpbiByMTA3
MTYwLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCBhMWE0YjE3MzQ4NWVhOGFlOWRkOGZk
ZDFlMTJhMzc5NjIxOWEyN2I3Li5kYzRlNWE4MWM0YTdjNmExYzZjMWRmNjlhOTk4NWY4NGE0NDRh
NzljIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtOTI4LDM1ICs5MjgsOSBAQCBjYW52
YXMvcGhpbGlwL3Rlc3RzLzJkLnBhdHRlcm4ucGFpbnQucmVwZWF0eC5vdXRzaWRlLmh0bWwKIGNh
bnZhcy9waGlsaXAvdGVzdHMvMmQucGF0dGVybi5wYWludC5yZXBlYXR5LmNvb3JkMS5odG1sCiBj
YW52YXMvcGhpbGlwL3Rlc3RzLzJkLnBhdHRlcm4ucGFpbnQucmVwZWF0eS5vdXRzaWRlLmh0bWwK
IAotIyBUZXN0cyB0aGF0IHVzZXIgbW9kYWwgZGlhbG9ncyBmYWlsIGluIHRoZSBEUlQgZm9yIHNv
bWUgcmVhc29uLgotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM2
MDAKLWZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWR1cmluZy1tb2RhbC5o
dG1sCisjIFRoaXMgbW9kYWwgZGlhbG9nIHRlc3Qgc3RpbGwgZmFpbHMgYmVjYXVzZSB0aGUgYmx1
ciBldmVudCBpcyBub3QgZGlzcGF0Y2hlZCBvbiB0aGUgb3BlbmVyCisjIHdpbmRvdyB3aGVuIHJ1
bm5pbmcgdGhlIG1vZGFsIGRpYWxvZy4KIGZhc3QvZXZlbnRzL3Nob3ctbW9kYWwtZGlhbG9nLW9u
Ymx1ci1vbmZvY3VzLmh0bWwKLWZhc3QvZXZlbnRzL3Njcm9sbC1ldmVudC1kdXJpbmctbW9kYWwt
ZGlhbG9nLmh0bWwKLWZhc3QvaGFybmVzcy9zaG93LW1vZGFsLWRpYWxvZy5odG1sCi1pbnNwZWN0
b3IvY29uc29sZS9jb25zb2xlLWxvbmctZXZhbC1jcmFzaC5odG1sCi1zcHV0bmlrL0NvbmZvcm1h
bmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250
ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4yX1QxMC5odG1sCi1zcHV0bmlrL0NvbmZv
cm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9D
b250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4xX1QxMS5odG1sCi1zcHV0bmlrL0Nv
bmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlv
bl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4xX1QyLmh0bWwKLXNwdXRuaWsv
Q29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0
aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjJfVDIuaHRtbAotc3B1dG5p
ay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVj
dXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMV9UNC5odG1sCi1zcHV0
bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4
ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4yX1Q0Lmh0bWwKLXNw
dXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdfQW5f
RXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjFfVDYuaHRtbAot
c3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19B
bl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMl9UNi5odG1s
Ci1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5n
X0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4xX1Q4Lmh0
bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJp
bmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjJfVDgu
aHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRl
cmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMV9U
MTAuaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9F
bnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEu
Ml9UMTEuaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAu
Ml9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJf
QTEuMV9UMS5odG1sCi1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8x
MC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIu
Ml9BMS4yX1QxLmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRz
LzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAu
Mi4yX0ExLjFfVDMuaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4
dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1Mx
MC4yLjJfQTEuMl9UMy5odG1sCi1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250
ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUv
UzEwLjIuMl9BMS4xX1Q1Lmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0Nv
bnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29k
ZS9TMTAuMi4yX0ExLjJfVDUuaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25f
Q29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9D
b2RlL1MxMC4yLjJfQTEuMV9UNy5odG1sCi1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlv
bl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFs
X0NvZGUvUzEwLjIuMl9BMS4yX1Q3Lmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0
aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2
YWxfQ29kZS9TMTAuMi4yX0ExLjFfVDkuaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVj
dXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJf
RXZhbF9Db2RlL1MxMC4yLjJfQTEuMl9UOS5odG1sCiAKICMgcGFzdGVzIGEgc3BhY2UgaW5zdGVh
ZCBvZiBhIHRhYgogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg0
MzcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126324</attachid>
            <date>2012-02-09 10:10:42 -0800</date>
            <delta_ts>2012-02-22 07:25:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53600-20120209191041.patch</filename>
            <type>text/plain</type>
            <size>15619</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNDAwNzlhOGE5
ZTUxODAzM2Y3YjZjM2M3MTYzMmU1ZWUxYzk5MTcyZi4uMWU5ZGRhZGMzNGI0YzdlMzY0YTQxNGNi
MThjOWEzMjE1YWZiNWNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEy
LTAyLTA5ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAg
W0dUS10gQWRkIERSVCBzdXBwb3J0IGZvciBtb2RhbCBkaWFsb2dzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzYwMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBydW5uaW5nIG1v
ZGFsIGRpYWxvZ3MuCisKKyAgICAgICAgQSBuZXcgc2lnbmFsIGlzIGFkZGVkIHRvIHRoZSBXZWJL
aXRXZWJWaWV3LiBXaGVuIGVtaXR0ZWQsIHRoZSB3ZWIgdmlldworICAgICAgICBpcyByZXF1ZXN0
aW5nIHRvIGJlIGRpc3BsYXllZCBhcyBhIG1vZGFsIGRpYWxvZy4gSWYgYWNjZXB0ZWQsIHRoZQor
ICAgICAgICBDaHJvbWVDbGllbnQgdGhlbiBlc3RhYmxpc2hlcyBhIGxvb3AgdGhhdCBpcyBydW4g
dW50aWwgdGhlIGNocm9tZSBpcyBkZXN0cm95ZWQuCisgICAgICAgIElmIGRlbmllZCwgbm90aGlu
ZyBpcyBkb25lLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpDaHJvbWVDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OmNocm9tZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJL
aXQ6OkNocm9tZUNsaWVudDo6Y2FuUnVuTW9kYWwpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVD
bGllbnQ6OnJ1bk1vZGFsKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuaDoKKyAgICAgICAgKENocm9tZUNsaWVudCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOgorCiAyMDEy
LTAyLTA5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBCdWlsZCBmaXggZm9yIEdUSysgMi54IGFmdGVyIG15IHByZXZpb3VzIGNvbW1pdC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3Bw
CmluZGV4IDk1NWMxNjZhOTBlZGNhZjk1MjNkNGFiMzhiZTlhZjE4OGJlZDY4MDYuLmQxMzRmOTJl
OTE5ZTlkNDcxOWY4ODQ3YjRiOGJlY2NjMDAzMTZlYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtNzksNiArNzks
NyBAQCBDaHJvbWVDbGllbnQ6OkNocm9tZUNsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQog
ICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX2FkanVzdG1lbnRXYXRjaGVyKHdlYlZp
ZXcpCiAgICAgLCBtX2Nsb3NlU29vblRpbWVyKDApCisgICAgLCBtX21vZGFsTG9vcCgwKQogICAg
ICwgbV9kaXNwbGF5VGltZXIodGhpcywgJkNocm9tZUNsaWVudDo6cGFpbnQpCiAgICAgLCBtX2xh
c3REaXNwbGF5VGltZSgwKQogICAgICwgbV9yZXBhaW50U29vblNvdXJjZUlkKDApCkBAIC05NCw2
ICs5NSw5IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpjaHJvbWVEZXN0cm95ZWQoKQogICAgIGlmICht
X3JlcGFpbnRTb29uU291cmNlSWQpCiAgICAgICAgIGdfc291cmNlX3JlbW92ZShtX3JlcGFpbnRT
b29uU291cmNlSWQpOwogCisgICAgaWYgKG1fbW9kYWxMb29wKQorICAgICAgICBnX21haW5fbG9v
cF9xdWl0KG1fbW9kYWxMb29wKTsKKwogICAgIGRlbGV0ZSB0aGlzOwogfQogCkBAIC0xODAsMTMg
KzE4NCwyNiBAQCB2b2lkIENocm9tZUNsaWVudDo6c2hvdygpCiAKIGJvb2wgQ2hyb21lQ2xpZW50
OjpjYW5SdW5Nb2RhbCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpydW5Nb2RhbCgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBnYm9vbGVhbiBpc0hhbmRsZWQgPSBmYWxz
ZTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJWaWV3LCAicnVuLW1vZGFsLWRpYWxv
ZyIsICZpc0hhbmRsZWQpOworICAgIGlmICghaXNIYW5kbGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBHTWFpbkNvbnRleHQqIHRocmVhZERlZmF1bHRDb250ZXh0ID0gZ19tYWluX2NvbnRleHRf
cmVmX3RocmVhZF9kZWZhdWx0KCk7CisgICAgZ19tYWluX2NvbnRleHRfYWNxdWlyZSh0aHJlYWRE
ZWZhdWx0Q29udGV4dCk7CisKKyAgICBtX21vZGFsTG9vcCA9IGdfbWFpbl9sb29wX25ldyh0aHJl
YWREZWZhdWx0Q29udGV4dCwgRkFMU0UpOworICAgIGdfbWFpbl9sb29wX3J1bihtX21vZGFsTG9v
cCk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobV9tb2RhbExvb3ApOworICAgIG1fbW9kYWxMb29w
ID0gMDsKKworICAgIGdfbWFpbl9jb250ZXh0X3JlbGVhc2UodGhyZWFkRGVmYXVsdENvbnRleHQp
OworICAgIGdfbWFpbl9jb250ZXh0X3VucmVmKHRocmVhZERlZmF1bHRDb250ZXh0KTsKIH0KIAog
dm9pZCBDaHJvbWVDbGllbnQ6OnNldFRvb2xiYXJzVmlzaWJsZShib29sIHZpc2libGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
aCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCmlu
ZGV4IDhjN2M4OTIzMzhiZDY0MzM4ODU5ZDU2N2FmZWNkNWQ2YmY4M2EwYzQuLjVkMzA4MmRjNTY0
YTI0NWI1MjYzMTJhY2I4ZmEwNmJlOTE1NmYyN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCkBAIC0xNzYsNiArMTc2LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIEd0a0FkanVzdG1lbnRXYXRjaGVyIG1fYWRqdXN0
bWVudFdhdGNoZXI7CiAgICAgICAgIEtVUkwgbV9ob3ZlcmVkTGlua1VSTDsKICAgICAgICAgdW5z
aWduZWQgaW50IG1fY2xvc2VTb29uVGltZXI7CisgICAgICAgIEdNYWluTG9vcCogbV9tb2RhbExv
b3A7CiAKICAgICAgICAgVGltZXIgPENocm9tZUNsaWVudD4gbV9kaXNwbGF5VGltZXI7CiAgICAg
ICAgIFJlZ2lvbiBtX2RpcnR5UmVnaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCmluZGV4IGQ3ZThiYWUwMWY1ODBhNTQ3ODQ1NjMyOTRlMGI3YWE4OTJlY2Jl
YWUuLjM4ZDk0MDEzZjA4ZjFmN2VmOTU3NTc2MDk2OGQ3MWY1N2UyYzM1M2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTIxMiw2ICsyMTIsNyBAQCBl
bnVtIHsKICAgICBSRVNPVVJDRV9MT0FEX0ZJTklTSEVELAogICAgIFJFU09VUkNFX0NPTlRFTlRf
TEVOR1RIX1JFQ0VJVkVELAogICAgIFJFU09VUkNFX0xPQURfRkFJTEVELAorICAgIFJVTl9NT0RB
TF9ESUFMT0csCiAKICAgICBMQVNUX1NJR05BTAogfTsKQEAgLTI3NDMsNiArMjc0NCwyNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3Mq
IHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSKTsKIAogICAgIC8qCisg
ICAgICogV2ViS2l0V2ViVmlldzo6cnVuLW1vZGFsLWRpYWxvZworICAgICAqIEB3ZWJWaWV3OiB0
aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKKyAgICAgKgorICAgICAqIEludm9r
ZWQgd2hlbiB0aGUgQHdlYlZpZXcgc2hvdWxkIGJlIHJ1biBpbiB0aGUgbW9kYWwgbW9kZS4gVGhp
cyBjYW4gYmUKKyAgICAgKiBhdm9pZGVkIGlmIEZBTFNFIGlzIHJldHVybmVkIGluIHRoZSBzaWdu
YWwgaGFuZGxlci4gT3RoZXJ3aXNlLCB0aGUKKyAgICAgKiBAd2ViVmlldyAob3IgaXRzIHRvcGxl
dmVsIHdpbmRvdykgc2hvdWxkIGJlIG1hZGUgdHJhbnNpZW50IGZvciBpdHMgcGFyZW50LAorICAg
ICAqIHNldCBhcyBhIG1vZGFsIHdpbmRvdywgYW5kIFRSVUUgc2hvdWxkIGJlIHJldHVybmVkIGlu
IHRoZSBzaWduYWwgaGFuZGxlci4KKyAgICAgKiBBZnRlciB0aGF0LCBhIGxvb3Agd2lsbCBiZSBj
cmVhdGVkIGFuZCBydW4gdW50aWwgdGhlIEB3ZWJWaWV3IGlzIGNsb3NlZAorICAgICAqIChpLmUu
IGl0cyBjaHJvbWUgaXMgZGVzdHJveWVkKS4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjcuNgor
ICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1JFU09VUkNFX0xPQURfRkFJTEVE
XSA9IGdfc2lnbmFsX25ldygicnVuLW1vZGFsLWRpYWxvZyIsCisgICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1Qs
CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9o
YW5kbGVkLCBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fVk9JRCwK
KyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAwKTsKKworICAgIC8qCiAgICAgICogaW1wbGVt
ZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwogICAgICAqLwogICAgIHdlYlZpZXdDbGFzcy0+
Y3JlYXRlX3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRlX3dlYl92aWV3Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDE2ZWQ0
ZTk1ZDk3ZmIzZDZlOGU2MWY1NmY4YTNiYzY4MGNhMjc1ZDAuLmJhYTJlZTliMTg4N2VhYTM2M2Ez
MzNjYjkxZjQ1ZGNjOGIyNjFmOTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMi0wMi0wOSAgWmFuIERvYmVyc2Vr
ICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBEUlQgc3VwcG9y
dCBmb3IgbW9kYWwgZGlhbG9ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTM2MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbXBsZW1lbnQgdGhlIG1vZGFsIGRpYWxvZ3MgaGFuZGxpbmcgaW4gRHVtcFJl
bmRlclRyZWUgYW5kIEd0a0xhdW5jaGVyLgorICAgICAgICBNb3N0IHNpZ25pZmljYW50bHksIHdo
ZW4gY3JlYXRpbmcgYSBuZXcgd2ViIHZpZXcgaW4gR3RrTGF1bmNoZXIsIHRoZSB3aW5kb3cKKyAg
ICAgICAgb2YgdGhlIHdlYiB2aWV3IG9wZW5lciBpcyBwYXNzZWQgYXJvdW5kLiBJbiBEdW1wUmVu
ZGVyVHJlZSwgdGhlIHdpbmRvdyBvZgorICAgICAgICB0aGUgbWFpbiB3ZWIgdmlldyBpcyBhbHdh
eXMgY29uc2lkZXJlZCBhcyB0aGUgb3BlbmVyLiBUaGlzIGlzIHJlcXVpcmVkIHNvCisgICAgICAg
IHRoZSBtb2RhbCBkaWFsb2cncyB0b3BsZXZlbCBjYW4gYmUgbWFkZSB0cmFuc2llbnQgZm9yIHRo
ZSBvcGVuZXIncyB0b3BsZXZlbC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHA6CisgICAgICAgICh3ZWJWaWV3UnVuTW9kYWxEaWFsb2cpOgorICAgICAg
ICAoY3JlYXRlV2ViVmlldyk6CisgICAgICAgICogR3RrTGF1bmNoZXIvbWFpbi5jOgorICAgICAg
ICAoY3JlYXRlV2ViVmlld0NiKToKKyAgICAgICAgKHJ1bk1vZGFsRGlhbG9nQ2IpOgorICAgICAg
ICAoY3JlYXRlQnJvd3Nlcik6CisgICAgICAgIChjcmVhdGVXaW5kb3cpOgorICAgICAgICAobWFp
bik6CisKIDIwMTItMDItMDkgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBhbHdheXMgaW5pdGlhbGl6ZSBtYWtlQXJncyBpbiBidWls
ZENocm9taXVtTmluamEKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUu
Y3BwCmluZGV4IDJlY2YxZGYyMzRmODNlMzQ3N2EyZmJjZTY5MzA3MzliYTU4ODRjY2MuLmUxZGNk
MDQ0MTM5ZWMyMmNjOWVhNGEyYTgzY2YzNzM3NDE3Y2U0YTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtOTU3LDYgKzk1NywxNSBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2ViVmlld0Nsb3NlKFdlYktpdFdlYlZpZXcqIHZpZXcpCiAgICAgcmV0dXJuIFRS
VUU7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3UnVuTW9kYWxEaWFsb2coV2ViS2l0V2Vi
VmlldyogdmlldykKK3sKKyAgICBHdGtXaW5kb3cqIHZpZXdUb3BMZXZlbCA9IEdUS19XSU5ET1co
Z3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVCh2aWV3KSkpOworICAgIGd0a193aW5k
b3dfc2V0X3RyYW5zaWVudF9mb3IoR1RLX1dJTkRPVyh2aWV3VG9wTGV2ZWwpLCBHVEtfV0lORE9X
KHdpbmRvdykpOworICAgIGd0a193aW5kb3dfc2V0X21vZGFsKEdUS19XSU5ET1codmlld1RvcExl
dmVsKSwgVFJVRSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgZGF0YWJh
c2VRdW90YUV4Y2VlZGVkKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgV2ViS2l0V2ViRGF0YWJhc2UgKmRhdGFiYXNlKQogewogICAgIEFTU0VSVCh2aWV3KTsKQEAg
LTEyODIsNiArMTI5MSw3IEBAIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiBjcmVhdGVXZWJWaWV3KCkK
ICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnN0YXR1cy1iYXItdGV4dC1jaGFuZ2VkIiwg
d2ViVmlld1N0YXR1c0JhclRleHRDaGFuZ2VkLCAwLAogICAgICAgICAgICAgICAgICAgICAgInNp
Z25hbDo6Y3JlYXRlLXdlYi12aWV3Iiwgd2ViVmlld0NyZWF0ZSwgMCwKICAgICAgICAgICAgICAg
ICAgICAgICJzaWduYWw6OmNsb3NlLXdlYi12aWV3Iiwgd2ViVmlld0Nsb3NlLCAwLAorICAgICAg
ICAgICAgICAgICAgICAgInNpZ25hbDo6cnVuLW1vZGFsLWRpYWxvZyIsIHdlYlZpZXdSdW5Nb2Rh
bERpYWxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OmRhdGFiYXNlLXF1b3Rh
LWV4Y2VlZGVkIiwgZGF0YWJhc2VRdW90YUV4Y2VlZGVkLCAwLAogICAgICAgICAgICAgICAgICAg
ICAgInNpZ25hbDo6ZG9jdW1lbnQtbG9hZC1maW5pc2hlZCIsIHdlYlZpZXdEb2N1bWVudExvYWRG
aW5pc2hlZCwgMCwKICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omdlb2xvY2F0aW9uLXBv
bGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLCBnZW9sb2NhdGlvblBvbGljeURlY2lzaW9uUmVxdWVz
dGVkLCAwLApkaWZmIC0tZ2l0IGEvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jIGIvVG9vbHMvR3Rr
TGF1bmNoZXIvbWFpbi5jCmluZGV4IGUzYTY2YjAzZTkyM2UxZTE4NDFjZDZiOGE4YzI5OTJjZTEy
YTE2YTEuLmZiZTgzMzFlMTg3MWU2YmZmOWMzOGU0OWJhZWUxOWM3MjExYTljMWYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYworKysgYi9Ub29scy9HdGtMYXVuY2hlci9tYWlu
LmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogc3RhdGljIGdpbnQgd2luZG93Q291bnQgPSAwOwogCi1z
dGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVXaW5kb3coV2ViS2l0V2ViVmlldyoqIG91dFdlYlZpZXcp
Oworc3RhdGljIEd0a1dpZGdldCogY3JlYXRlV2luZG93KFdlYktpdFdlYlZpZXcqKiBvdXRXZWJW
aWV3LCBHdGtXaWRnZXQqIG9wZW5lcldpbmRvdyk7CiAKIHN0YXRpYyB2b2lkIGFjdGl2YXRlVXJp
RW50cnlDYihHdGtXaWRnZXQqIGVudHJ5LCBncG9pbnRlciBkYXRhKQogewpAQCAtMTA1LDcgKzEw
NSw3IEBAIHN0YXRpYyBXZWJLaXRXZWJWaWV3KgogY3JlYXRlV2ViVmlld0NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIEd0a1dpZGdldCogd2luZG93
KQogewogICAgIFdlYktpdFdlYlZpZXcgKm5ld1dlYlZpZXc7Ci0gICAgY3JlYXRlV2luZG93KCZu
ZXdXZWJWaWV3KTsKKyAgICBjcmVhdGVXaW5kb3coJm5ld1dlYlZpZXcsIHdpbmRvdyk7CiAgICAg
d2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhuZXdXZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3NldHRpbmdzKHdlYlZpZXcpKTsKICAgICByZXR1cm4gbmV3V2ViVmlldzsKIH0KQEAgLTEy
Myw3ICsxMjMsMTggQEAgc3RhdGljIGdib29sZWFuIGNsb3NlV2ViVmlld0NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIEd0a1dpZGdldCogd2luZG93KQogICAgIHJldHVybiBUUlVFOwogfQogCi1z
dGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVCcm93c2VyKEd0a1dpZGdldCogd2luZG93LCBHdGtXaWRn
ZXQqIHVyaUVudHJ5LCBHdGtXaWRnZXQqIHN0YXR1c2JhciwgV2ViS2l0V2ViVmlldyogd2ViVmll
dykKK3N0YXRpYyBnYm9vbGVhbiBydW5Nb2RhbERpYWxvZ0NiKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIEd0a1dpZGdldCogb3BlbmVyV2luZG93KQoreworICAgIGlmICghb3BlbmVyV2luZG93KQor
ICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBHdGtXaWRnZXQgKndpbmRvdyA9IGd0a193aWRn
ZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGd0a193aW5kb3dfc2V0
X3RyYW5zaWVudF9mb3IoR1RLX1dJTkRPVyh3aW5kb3cpLCBHVEtfV0lORE9XKG9wZW5lcldpbmRv
dykpOworICAgIGd0a193aW5kb3dfc2V0X21vZGFsKEdUS19XSU5ET1cod2luZG93KSwgVFJVRSk7
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIo
R3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJpRW50cnksIEd0a1dpZGdldCogc3RhdHVz
YmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtXaWRnZXQqIG9wZW5lcldpbmRvdykKIHsK
ICAgICBHdGtXaWRnZXQgKnNjcm9sbGVkV2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXco
TlVMTCwgTlVMTCk7CiAgICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JP
TExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLCBHVEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BP
TElDWV9BVVRPTUFUSUMpOwpAQCAtMTM3LDYgKzE0OCw3IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGNy
ZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJpRW50cnksIEd0a1dp
ZGdlCiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY3JlYXRlLXdlYi12aWV3IiwgR19D
QUxMQkFDSyhjcmVhdGVXZWJWaWV3Q2IpLCB3aW5kb3cpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
d2ViVmlldywgIndlYi12aWV3LXJlYWR5IiwgR19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlDYiksIHdp
bmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY2xvc2Utd2ViLXZpZXciLCBH
X0NBTExCQUNLKGNsb3NlV2ViVmlld0NiKSwgd2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHdlYlZpZXcsICJydW4tbW9kYWwtZGlhbG9nIiwgR19DQUxMQkFDSyhydW5Nb2RhbERpYWxvZ0Ni
KSwgb3BlbmVyV2luZG93KTsKIAogICAgIHJldHVybiBzY3JvbGxlZFdpbmRvdzsKIH0KQEAgLTE5
MCw3ICsyMDIsNyBAQCBzdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVUb29sYmFyKEd0a1dpZGdldCog
dXJpRW50cnksIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJuIHRvb2xiYXI7CiB9
CiAKLXN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZVdpbmRvdyhXZWJLaXRXZWJWaWV3Kiogb3V0V2Vi
VmlldykKK3N0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZVdpbmRvdyhXZWJLaXRXZWJWaWV3Kiogb3V0
V2ViVmlldywgR3RrV2lkZ2V0KiBvcGVuZXJXaW5kb3cpCiB7CiAgICAgV2ViS2l0V2ViVmlldyAq
d2ViVmlldzsKICAgICBHdGtXaWRnZXQgKnZib3g7CkBAIC0yMTQsNyArMjI2LDcgQEAgc3RhdGlj
IEd0a1dpZGdldCogY3JlYXRlV2luZG93KFdlYktpdFdlYlZpZXcqKiBvdXRXZWJWaWV3KQogI2Vu
ZGlmCiAgICAgc3RhdHVzYmFyID0gY3JlYXRlU3RhdHVzYmFyKHdlYlZpZXcpOwogICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBjcmVhdGVUb29sYmFyKHVyaUVudHJ5LCB3ZWJW
aWV3KSwgRkFMU0UsIEZBTFNFLCAwKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2
Ym94KSwgY3JlYXRlQnJvd3Nlcih3aW5kb3csIHVyaUVudHJ5LCBzdGF0dXNiYXIsIHdlYlZpZXcp
LCBUUlVFLCBUUlVFLCAwKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwg
Y3JlYXRlQnJvd3Nlcih3aW5kb3csIHVyaUVudHJ5LCBzdGF0dXNiYXIsIHdlYlZpZXcsIG9wZW5l
cldpbmRvdyksIFRSVUUsIFRSVUUsIDApOwogICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KHZib3gpLCBzdGF0dXNiYXIsIEZBTFNFLCBGQUxTRSwgMCk7CiAKICAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHZib3gpOwpAQCAtNDE3LDcgKzQyOSw3IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAjZW5kaWYKIAogICAgIFdlYktpdFdlYlZp
ZXcgKndlYlZpZXc7Ci0gICAgR3RrV2lkZ2V0ICptYWluX3dpbmRvdyA9IGNyZWF0ZVdpbmRvdygm
d2ViVmlldyk7CisgICAgR3RrV2lkZ2V0ICptYWluX3dpbmRvdyA9IGNyZWF0ZVdpbmRvdygmd2Vi
VmlldywgMCk7CiAKICAgICBpZiAod2Via2l0U2V0dGluZ3MpIHsKICAgICAgICAgd2Via2l0X3dl
Yl92aWV3X3NldF9zZXR0aW5ncyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIHdlYmtpdFNldHRp
bmdzKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBmZjg5ZjYxMjc2YzYyNDIxYTUxZDZjZTZiN2E3ZGQ0NDE0N2NiNzY4Li42
MDUzM2QzOTM4NDg0Y2EzNzRmYjY0MTlmN2RjZTM3MDFiNjJiOTQ0IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTItMDItMDkgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4K
KworICAgICAgICBbR1RLXSBBZGQgRFJUIHN1cHBvcnQgZm9yIG1vZGFsIGRpYWxvZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNjAwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5za2lwIHRoZSBwYXNz
aW5nIG1vZGFsIGRpYWxvZ3MgdGVzdHMgYW5kIGxvZyB0aGUgcmVtYWluaW5nIHNraXBwZWQgdGVz
dC4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorCiAyMDEyLTAyLTA5ICBKb2No
ZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBtaXNzaW5n
IGZpbGUgZm9yIGZhc3QvZXZlbnRzL3Njcm9sbC1ldmVudC1kdXJpbmctbW9kYWwtZGlhbG9nLmh0
bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggYTFhNGIxNzM0ODVlYThhZTlkZDhmZGQx
ZTEyYTM3OTYyMTlhMjdiNy4uZGM0ZTVhODFjNGE3YzZhMWM2YzFkZjY5YTk5ODVmODRhNDQ0YTc5
YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTkyOCwzNSArOTI4LDkgQEAgY2FudmFz
L3BoaWxpcC90ZXN0cy8yZC5wYXR0ZXJuLnBhaW50LnJlcGVhdHgub3V0c2lkZS5odG1sCiBjYW52
YXMvcGhpbGlwL3Rlc3RzLzJkLnBhdHRlcm4ucGFpbnQucmVwZWF0eS5jb29yZDEuaHRtbAogY2Fu
dmFzL3BoaWxpcC90ZXN0cy8yZC5wYXR0ZXJuLnBhaW50LnJlcGVhdHkub3V0c2lkZS5odG1sCiAK
LSMgVGVzdHMgdGhhdCB1c2VyIG1vZGFsIGRpYWxvZ3MgZmFpbCBpbiB0aGUgRFJUIGZvciBzb21l
IHJlYXNvbi4KLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNjAw
Ci1mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1kdXJpbmctbW9kYWwuaHRt
bAorIyBUaGlzIG1vZGFsIGRpYWxvZyB0ZXN0IHN0aWxsIGZhaWxzIGJlY2F1c2UgdGhlIGJsdXIg
ZXZlbnQgaXMgbm90IGRpc3BhdGNoZWQgb24gdGhlIG9wZW5lcgorIyB3aW5kb3cgd2hlbiBydW5u
aW5nIHRoZSBtb2RhbCBkaWFsb2cuCiBmYXN0L2V2ZW50cy9zaG93LW1vZGFsLWRpYWxvZy1vbmJs
dXItb25mb2N1cy5odG1sCi1mYXN0L2V2ZW50cy9zY3JvbGwtZXZlbnQtZHVyaW5nLW1vZGFsLWRp
YWxvZy5odG1sCi1mYXN0L2hhcm5lc3Mvc2hvdy1tb2RhbC1kaWFsb2cuaHRtbAotaW5zcGVjdG9y
L2NvbnNvbGUvY29uc29sZS1sb25nLWV2YWwtY3Jhc2guaHRtbAotc3B1dG5pay9Db25mb3JtYW5j
ZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4
dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMl9UMTAuaHRtbAotc3B1dG5pay9Db25mb3Jt
YW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29u
dGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMV9UMTEuaHRtbAotc3B1dG5pay9Db25m
b3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25f
Q29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMV9UMi5odG1sCi1zcHV0bmlrL0Nv
bmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlv
bl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4yX1QyLmh0bWwKLXNwdXRuaWsv
Q29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0
aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjFfVDQuaHRtbAotc3B1dG5p
ay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVj
dXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMl9UNC5odG1sCi1zcHV0
bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4
ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4xX1Q2Lmh0bWwKLXNw
dXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdfQW5f
RXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjJfVDYuaHRtbAot
c3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19B
bl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMV9UOC5odG1s
Ci1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5n
X0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4yX1Q4Lmh0
bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJp
bmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjFfVDEw
Lmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50
ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjJf
VDExLmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJf
RW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0Ex
LjFfVDEuaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAu
Ml9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJf
QTEuMl9UMS5odG1sCi1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8x
MC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIu
Ml9BMS4xX1QzLmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRz
LzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAu
Mi4yX0ExLjJfVDMuaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4
dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1Mx
MC4yLjJfQTEuMV9UNS5odG1sCi1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250
ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUv
UzEwLjIuMl9BMS4yX1Q1Lmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0Nv
bnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29k
ZS9TMTAuMi4yX0ExLjFfVDcuaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25f
Q29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9D
b2RlL1MxMC4yLjJfQTEuMl9UNy5odG1sCi1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlv
bl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFs
X0NvZGUvUzEwLjIuMl9BMS4xX1Q5Lmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0
aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2
YWxfQ29kZS9TMTAuMi4yX0ExLjJfVDkuaHRtbAogCiAjIHBhc3RlcyBhIHNwYWNlIGluc3RlYWQg
b2YgYSB0YWIKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NDM3
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128211</attachid>
            <date>2012-02-22 07:25:40 -0800</date>
            <delta_ts>2012-05-23 11:16:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53600-20120222162539.patch</filename>
            <type>text/plain</type>
            <size>16052</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNmFlOThlNjJm
MmIwMmRlMzQ5NzEwNWEwNGFmMDBkOTdkODIwMDZiNi4uMmYzOTY3ZjFkNTdjY2VhZjcxMmZkODU1
Y2YxMTJhY2JkMDBlYzJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEy
LTAyLTIyICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAg
W0dUS10gQWRkIERSVCBzdXBwb3J0IGZvciBtb2RhbCBkaWFsb2dzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzYwMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBydW5uaW5nIG1v
ZGFsIGRpYWxvZ3MuCisKKyAgICAgICAgQSBuZXcgc2lnbmFsIGlzIGFkZGVkIHRvIHRoZSBXZWJL
aXRXZWJWaWV3LiBXaGVuIGVtaXR0ZWQsIHRoZSB3ZWIgdmlldworICAgICAgICBpcyByZXF1ZXN0
aW5nIHRvIGJlIGRpc3BsYXllZCBhcyBhIG1vZGFsIGRpYWxvZy4gSWYgYWNjZXB0ZWQsIHRoZQor
ICAgICAgICBDaHJvbWVDbGllbnQgdGhlbiBlc3RhYmxpc2hlcyBhIGxvb3AgdGhhdCBpcyBydW4g
dW50aWwgdGhlIGNocm9tZSBpcyBkZXN0cm95ZWQuCisgICAgICAgIElmIGRlbmllZCwgbm90aGlu
ZyBpcyBkb25lLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpDaHJvbWVDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OmNocm9tZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJL
aXQ6OkNocm9tZUNsaWVudDo6Y2FuUnVuTW9kYWwpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVD
bGllbnQ6OnJ1bk1vZGFsKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuaDoKKyAgICAgICAgKENocm9tZUNsaWVudCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOgorCiAyMDEy
LTAyLTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92
ZSB0aGUgcmVtYWluaW5nIHVzZXMgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbiBpbiBFZGl0b3IKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwCmluZGV4IDU5MWEwOTI4ZGI0N2QyMTk4ZmJkZDE3ZjdhODE3ZjZjNDRjMGJmYzYuLmM2ZjEw
ODU4NTUxZTdkZDc4OGM1NDg2N2ViMzZiNDEzNzUxYWU3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtNzksNiAr
NzksNyBAQCBDaHJvbWVDbGllbnQ6OkNocm9tZUNsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQogICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX2FkanVzdG1lbnRXYXRjaGVyKHdl
YlZpZXcpCiAgICAgLCBtX2Nsb3NlU29vblRpbWVyKDApCisgICAgLCBtX21vZGFsTG9vcCgwKQog
ICAgICwgbV9kaXNwbGF5VGltZXIodGhpcywgJkNocm9tZUNsaWVudDo6cGFpbnQpCiAgICAgLCBt
X2xhc3REaXNwbGF5VGltZSgwKQogICAgICwgbV9yZXBhaW50U29vblNvdXJjZUlkKDApCkBAIC05
NCw2ICs5NSw5IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpjaHJvbWVEZXN0cm95ZWQoKQogICAgIGlm
IChtX3JlcGFpbnRTb29uU291cmNlSWQpCiAgICAgICAgIGdfc291cmNlX3JlbW92ZShtX3JlcGFp
bnRTb29uU291cmNlSWQpOwogCisgICAgaWYgKG1fbW9kYWxMb29wKQorICAgICAgICBnX21haW5f
bG9vcF9xdWl0KG1fbW9kYWxMb29wKTsKKwogICAgIGRlbGV0ZSB0aGlzOwogfQogCkBAIC0xODAs
MTMgKzE4NCwyNiBAQCB2b2lkIENocm9tZUNsaWVudDo6c2hvdygpCiAKIGJvb2wgQ2hyb21lQ2xp
ZW50OjpjYW5SdW5Nb2RhbCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpydW5Nb2Rh
bCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBnYm9vbGVhbiBpc0hhbmRsZWQgPSBm
YWxzZTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJWaWV3LCAid2ViLXZpZXctcnVu
LWFzLW1vZGFsIiwgJmlzSGFuZGxlZCk7CisgICAgaWYgKCFpc0hhbmRsZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdNYWluQ29udGV4dCogdGhyZWFkRGVmYXVsdENvbnRleHQgPSBnX21haW5f
Y29udGV4dF9yZWZfdGhyZWFkX2RlZmF1bHQoKTsKKyAgICBnX21haW5fY29udGV4dF9hY3F1aXJl
KHRocmVhZERlZmF1bHRDb250ZXh0KTsKKworICAgIG1fbW9kYWxMb29wID0gZ19tYWluX2xvb3Bf
bmV3KHRocmVhZERlZmF1bHRDb250ZXh0LCBGQUxTRSk7CisgICAgZ19tYWluX2xvb3BfcnVuKG1f
bW9kYWxMb29wKTsKKyAgICBnX21haW5fbG9vcF91bnJlZihtX21vZGFsTG9vcCk7CisgICAgbV9t
b2RhbExvb3AgPSAwOworCisgICAgZ19tYWluX2NvbnRleHRfcmVsZWFzZSh0aHJlYWREZWZhdWx0
Q29udGV4dCk7CisgICAgZ19tYWluX2NvbnRleHRfdW5yZWYodGhyZWFkRGVmYXVsdENvbnRleHQp
OwogfQogCiB2b2lkIENocm9tZUNsaWVudDo6c2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wgdmlzaWJs
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
R3RrLmgKaW5kZXggZTQyMzllMzRhNmE4YjUxMDI0MzZjOGUxNGQ0YjUxYzRjNWQ1NzI0ZC4uOWQy
MTA1ZDZkZjdmYzQwZGJlOTcwYzUxYzE4NzBmNWQ5MTA5ZmFkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKQEAgLTE3Nyw2ICsx
NzcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAgICAgR3RrQWRqdXN0bWVudFdhdGNoZXIg
bV9hZGp1c3RtZW50V2F0Y2hlcjsKICAgICAgICAgS1VSTCBtX2hvdmVyZWRMaW5rVVJMOwogICAg
ICAgICB1bnNpZ25lZCBpbnQgbV9jbG9zZVNvb25UaW1lcjsKKyAgICAgICAgR01haW5Mb29wKiBt
X21vZGFsTG9vcDsKIAogICAgICAgICBUaW1lciA8Q2hyb21lQ2xpZW50PiBtX2Rpc3BsYXlUaW1l
cjsKICAgICAgICAgUmVnaW9uIG1fZGlydHlSZWdpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggM2NkM2FiZmYzMWE2NWI0N2E3OTRiYjNiZDcxN2Nk
MTRjMjFjNzg2My4uYjIyNGQwMjk1MTQ5ODk0YWVkYmYzNmY0YWI3YzRkYWJmYzBlYmY2MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMjEyLDYgKzIx
Miw3IEBAIGVudW0gewogICAgIFJFU09VUkNFX0xPQURfRklOSVNIRUQsCiAgICAgUkVTT1VSQ0Vf
Q09OVEVOVF9MRU5HVEhfUkVDRUlWRUQsCiAgICAgUkVTT1VSQ0VfTE9BRF9GQUlMRUQsCisgICAg
UlVOX01PREFMX0RJQUxPRywKIAogICAgIExBU1RfU0lHTkFMCiB9OwpAQCAtMTY3MSw2ICsxNjcy
LDMxIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZp
ZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDApOwog
CiAgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6d2ViLXZpZXctcnVuLWFzLW1vZGFsOgor
ICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0
ZWQKKyAgICAgKgorICAgICAqIEVtaXR0ZWQgYWZ0ZXIgI1dlYktpdFdlYlZpZXc6OndlYi12aWV3
LXJlYWR5IG9ubHkgaWYgdGhlIEB3ZWJfdmlldyBzaG91bGQKKyAgICAgKiBiZSBydW4gaW4gdGhl
IG1vZGFsIG1vZGUuIFRoaXMgY2FuIGJlIGF2b2lkZWQgaWYgJUZBTFNFIGlzIHJldHVybmVkIGlu
IHRoZQorICAgICAqIHNpZ25hbCBoYW5kbGVyLiBPdGhlcndpc2UsIHRoZSBAd2ViX3ZpZXcgKG9y
IGl0cyB0b3BsZXZlbCB3aW5kb3cpIHNob3VsZCBiZQorICAgICAqIG1hZGUgdHJhbnNpZW50IGZv
ciBpdHMgcGFyZW50LCBzZXQgYXMgYSBtb2RhbCB3aW5kb3csIGFuZCAlVFJVRSBzaG91bGQgYmUK
KyAgICAgKiByZXR1cm5lZCBpbiB0aGUgc2lnbmFsIGhhbmRsZXIuIEFmdGVyIHRoYXQsIGEgbG9v
cCB3aWxsIGJlIGNyZWF0ZWQgaW50ZXJuYWxseQorICAgICAqIGFuZCBydW4gdW50aWwgdGhlIEB3
ZWJfdmlldyBpcyBjbG9zZWQgKGkuZS4gaXRzIGNocm9tZSBpcyBkZXN0cm95ZWQpIGFuZCB0aGUK
KyAgICAgKiAjV2ViS2l0V2ViVmlldzo6Y2xvc2Utd2ViLXZpZXcgc2lnbmFsIGlzIGVtaXR0ZWQu
CisgICAgICoKKyAgICAgKiBSZXR1cm4gdmFsdWU6ICVUUlVFIHRvIHN0b3AgaGFuZGxlcnMgZnJv
bSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQgb3IKKyAgICAgKiAlRkFMU0UgdG8gcHJvcGFn
YXRlIHRoZSBldmVudCBmdXJ0ZXIKKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjcuOTAKKyAgICAg
Ki8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tSVU5fTU9EQUxfRElBTE9HXSA9IGdfc2ln
bmFsX25ldygid2ViLXZpZXctcnVuLWFzLW1vZGFsIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRs
ZWQsIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19WT0lELAorICAg
ICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDApOworCisgICAgLyoqCiAgICAgICogV2ViS2l0V2Vi
Vmlldzo6Y2xvc2Utd2ViLXZpZXc6CiAgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdo
aWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAogICAgICAqCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTdlZjAyYmM2NDZlM2FhYzVlYWZiZDFhZTY0
YzI3ZWU3ZWZmZTRiNC4uZDZiNTIwOGZmM2Y0Mjg3MmE5NzI5MDczODcyMDE5ZGQzNzRhMWVjYSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI2IEBACisyMDEyLTAyLTIyICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5j
b20+CisKKyAgICAgICAgW0dUS10gQWRkIERSVCBzdXBwb3J0IGZvciBtb2RhbCBkaWFsb2dzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzYwMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB0
aGUgbW9kYWwgZGlhbG9ncyBoYW5kbGluZyBpbiBEdW1wUmVuZGVyVHJlZSBhbmQgR3RrTGF1bmNo
ZXIuCisgICAgICAgIE1vc3Qgc2lnbmlmaWNhbnRseSwgd2hlbiBjcmVhdGluZyBhIG5ldyB3ZWIg
dmlldyBpbiBHdGtMYXVuY2hlciwgdGhlIHdpbmRvdworICAgICAgICBvZiB0aGUgd2ViIHZpZXcg
b3BlbmVyIGlzIHBhc3NlZCBhcm91bmQuIEluIER1bXBSZW5kZXJUcmVlLCB0aGUgd2luZG93IG9m
CisgICAgICAgIHRoZSBtYWluIHdlYiB2aWV3IGlzIGFsd2F5cyBjb25zaWRlcmVkIGFzIHRoZSBv
cGVuZXIuIFRoaXMgaXMgcmVxdWlyZWQgc28KKyAgICAgICAgdGhlIG1vZGFsIGRpYWxvZydzIHRv
cGxldmVsIGNhbiBiZSBtYWRlIHRyYW5zaWVudCBmb3IgdGhlIG9wZW5lcidzIHRvcGxldmVsLgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAg
ICAgKHdlYlZpZXdSdW5Nb2RhbERpYWxvZyk6CisgICAgICAgIChjcmVhdGVXZWJWaWV3KToKKyAg
ICAgICAgKiBHdGtMYXVuY2hlci9tYWluLmM6CisgICAgICAgIChjcmVhdGVXZWJWaWV3Q2IpOgor
ICAgICAgICAocnVuTW9kYWxEaWFsb2dDYik6CisgICAgICAgIChjcmVhdGVCcm93c2VyKToKKyAg
ICAgICAgKGNyZWF0ZVdpbmRvdyk6CisgICAgICAgIChtYWluKToKKwogMjAxMi0wMi0yMiAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjEwNzM1MS4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVt
cFJlbmRlclRyZWUuY3BwCmluZGV4IDJlY2YxZGYyMzRmODNlMzQ3N2EyZmJjZTY5MzA3MzliYTU4
ODRjY2MuLjBlNmU5NjJhNDBlMWIxOTBhNWY1YzI4Y2VmNjJmY2Y5NjFkN2ZmZTEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtOTU3LDYgKzk1Nywx
NSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0Nsb3NlKFdlYktpdFdlYlZpZXcqIHZpZXcpCiAg
ICAgcmV0dXJuIFRSVUU7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3UnVuTW9kYWxEaWFs
b2coV2ViS2l0V2ViVmlldyogdmlldykKK3sKKyAgICBHdGtXaWRnZXQqIHZpZXdUb3BMZXZlbCA9
IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQodmlldykpOworICAgIGd0a193aW5k
b3dfc2V0X3RyYW5zaWVudF9mb3IoR1RLX1dJTkRPVyh2aWV3VG9wTGV2ZWwpLCBHVEtfV0lORE9X
KHdpbmRvdykpOworICAgIGd0a193aW5kb3dfc2V0X21vZGFsKEdUS19XSU5ET1codmlld1RvcExl
dmVsKSwgVFJVRSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgZGF0YWJh
c2VRdW90YUV4Y2VlZGVkKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgV2ViS2l0V2ViRGF0YWJhc2UgKmRhdGFiYXNlKQogewogICAgIEFTU0VSVCh2aWV3KTsKQEAg
LTEyODEsNiArMTI5MCw3IEBAIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiBjcmVhdGVXZWJWaWV3KCkK
ICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9u
LXJlcXVlc3RlZCIsIHdlYlZpZXdOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25SZXF1ZXN0ZWQsIDAs
CiAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzdGF0dXMtYmFyLXRleHQtY2hhbmdlZCIs
IHdlYlZpZXdTdGF0dXNCYXJUZXh0Q2hhbmdlZCwgMCwKICAgICAgICAgICAgICAgICAgICAgICJz
aWduYWw6OmNyZWF0ZS13ZWItdmlldyIsIHdlYlZpZXdDcmVhdGUsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAic2lnbmFsOjp3ZWItdmlldy1ydW4tYXMtbW9kYWwiLCB3ZWJWaWV3UnVuTW9kYWxE
aWFsb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpjbG9zZS13ZWItdmlldyIs
IHdlYlZpZXdDbG9zZSwgMCwKICAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OmRhdGFiYXNl
LXF1b3RhLWV4Y2VlZGVkIiwgZGF0YWJhc2VRdW90YUV4Y2VlZGVkLCAwLAogICAgICAgICAgICAg
ICAgICAgICAgInNpZ25hbDo6ZG9jdW1lbnQtbG9hZC1maW5pc2hlZCIsIHdlYlZpZXdEb2N1bWVu
dExvYWRGaW5pc2hlZCwgMCwKZGlmZiAtLWdpdCBhL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYyBi
L1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYwppbmRleCBlM2E2NmIwM2U5MjNlMWUxODQxY2Q2Yjhh
OGMyOTkyY2UxMmExNmExLi4yYTI5YWIyZjZjNTExZGExYjU2MzBlMmNhOGZjZjkxZmMzMzNmODEx
IDEwMDY0NAotLS0gYS9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMKKysrIGIvVG9vbHMvR3RrTGF1
bmNoZXIvbWFpbi5jCkBAIC0zMyw3ICszMyw3IEBACiAKIHN0YXRpYyBnaW50IHdpbmRvd0NvdW50
ID0gMDsKIAotc3RhdGljIEd0a1dpZGdldCogY3JlYXRlV2luZG93KFdlYktpdFdlYlZpZXcqKiBv
dXRXZWJWaWV3KTsKK3N0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZVdpbmRvdyhXZWJLaXRXZWJWaWV3
Kiogb3V0V2ViVmlldywgR3RrV2lkZ2V0KiBvcGVuZXJXaW5kb3cpOwogCiBzdGF0aWMgdm9pZCBh
Y3RpdmF0ZVVyaUVudHJ5Q2IoR3RrV2lkZ2V0KiBlbnRyeSwgZ3BvaW50ZXIgZGF0YSkKIHsKQEAg
LTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgV2ViS2l0V2ViVmlldyoKIGNyZWF0ZVdlYlZpZXdDYihX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViX2ZyYW1lLCBHdGtXaWRn
ZXQqIHdpbmRvdykKIHsKICAgICBXZWJLaXRXZWJWaWV3ICpuZXdXZWJWaWV3OwotICAgIGNyZWF0
ZVdpbmRvdygmbmV3V2ViVmlldyk7CisgICAgY3JlYXRlV2luZG93KCZuZXdXZWJWaWV3LCB3aW5k
b3cpOwogICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3MobmV3V2ViVmlldywgd2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSk7CiAgICAgcmV0dXJuIG5ld1dlYlZpZXc7
CiB9CkBAIC0xMjMsNyArMTIzLDIxIEBAIHN0YXRpYyBnYm9vbGVhbiBjbG9zZVdlYlZpZXdDYihX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtXaWRnZXQqIHdpbmRvdykKICAgICByZXR1cm4gVFJV
RTsKIH0KIAotc3RhdGljIEd0a1dpZGdldCogY3JlYXRlQnJvd3NlcihHdGtXaWRnZXQqIHdpbmRv
dywgR3RrV2lkZ2V0KiB1cmlFbnRyeSwgR3RrV2lkZ2V0KiBzdGF0dXNiYXIsIFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCitzdGF0aWMgZ2Jvb2xlYW4gcnVuTW9kYWxEaWFsb2dDYihXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBHdGtXaWRnZXQqIG9wZW5lcldpbmRvdykKK3sKKyAgICBpZiAoIW9wZW5l
cldpbmRvdykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgR3RrV2lkZ2V0ICp3aW5kb3cg
PSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBpZiAo
IWd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2luZG93KSB8fCAhR1RLX0lTX1dJTkRPVyh3aW5kb3cp
IHx8IEdUS19JU19PRkZTQ1JFRU5fV0lORE9XKHdpbmRvdykpCisgICAgICAgIHJldHVybiBGQUxT
RTsKKworICAgIGd0a193aW5kb3dfc2V0X3RyYW5zaWVudF9mb3IoR1RLX1dJTkRPVyh3aW5kb3cp
LCBHVEtfV0lORE9XKG9wZW5lcldpbmRvdykpOworICAgIGd0a193aW5kb3dfc2V0X21vZGFsKEdU
S19XSU5ET1cod2luZG93KSwgVFJVRSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBH
dGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0a1dpZGdldCogdXJp
RW50cnksIEd0a1dpZGdldCogc3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHdGtX
aWRnZXQqIG9wZW5lcldpbmRvdykKIHsKICAgICBHdGtXaWRnZXQgKnNjcm9sbGVkV2luZG93ID0g
Z3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7CiAgICAgZ3RrX3Njcm9sbGVkX3dp
bmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLCBHVEtf
UE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFUSUMpOwpAQCAtMTM2LDYgKzE1MCw3
IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZUJyb3dzZXIoR3RrV2lkZ2V0KiB3aW5kb3csIEd0
a1dpZGdldCogdXJpRW50cnksIEd0a1dpZGdlCiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3
LCAiaG92ZXJpbmctb3Zlci1saW5rIiwgR19DQUxMQkFDSyhsaW5rSG92ZXJDYiksIHN0YXR1c2Jh
cik7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY3JlYXRlLXdlYi12aWV3IiwgR19D
QUxMQkFDSyhjcmVhdGVXZWJWaWV3Q2IpLCB3aW5kb3cpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
d2ViVmlldywgIndlYi12aWV3LXJlYWR5IiwgR19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlDYiksIHdp
bmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAid2ViLXZpZXctcnVuLWFzLW1v
ZGFsIiwgR19DQUxMQkFDSyhydW5Nb2RhbERpYWxvZ0NiKSwgb3BlbmVyV2luZG93KTsKICAgICBn
X3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJjbG9zZS13ZWItdmlldyIsIEdfQ0FMTEJBQ0soY2xv
c2VXZWJWaWV3Q2IpLCB3aW5kb3cpOwogCiAgICAgcmV0dXJuIHNjcm9sbGVkV2luZG93OwpAQCAt
MTkwLDcgKzIwNSw3IEBAIHN0YXRpYyBHdGtXaWRnZXQqIGNyZWF0ZVRvb2xiYXIoR3RrV2lkZ2V0
KiB1cmlFbnRyeSwgV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICByZXR1cm4gdG9vbGJhcjsK
IH0KIAotc3RhdGljIEd0a1dpZGdldCogY3JlYXRlV2luZG93KFdlYktpdFdlYlZpZXcqKiBvdXRX
ZWJWaWV3KQorc3RhdGljIEd0a1dpZGdldCogY3JlYXRlV2luZG93KFdlYktpdFdlYlZpZXcqKiBv
dXRXZWJWaWV3LCBHdGtXaWRnZXQqIG9wZW5lcldpbmRvdykKIHsKICAgICBXZWJLaXRXZWJWaWV3
ICp3ZWJWaWV3OwogICAgIEd0a1dpZGdldCAqdmJveDsKQEAgLTIxNCw3ICsyMjksNyBAQCBzdGF0
aWMgR3RrV2lkZ2V0KiBjcmVhdGVXaW5kb3coV2ViS2l0V2ViVmlldyoqIG91dFdlYlZpZXcpCiAj
ZW5kaWYKICAgICBzdGF0dXNiYXIgPSBjcmVhdGVTdGF0dXNiYXIod2ViVmlldyk7CiAgICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIGNyZWF0ZVRvb2xiYXIodXJpRW50cnksIHdl
YlZpZXcpLCBGQUxTRSwgRkFMU0UsIDApOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KHZib3gpLCBjcmVhdGVCcm93c2VyKHdpbmRvdywgdXJpRW50cnksIHN0YXR1c2Jhciwgd2ViVmll
dyksIFRSVUUsIFRSVUUsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gp
LCBjcmVhdGVCcm93c2VyKHdpbmRvdywgdXJpRW50cnksIHN0YXR1c2Jhciwgd2ViVmlldywgb3Bl
bmVyV2luZG93KSwgVFJVRSwgVFJVRSwgMCk7CiAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19C
T1godmJveCksIHN0YXR1c2JhciwgRkFMU0UsIEZBTFNFLCAwKTsKIAogICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgdmJveCk7CkBAIC00MTcsNyArNDMyLDcgQEAg
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICNlbmRpZgogCiAgICAgV2ViS2l0V2Vi
VmlldyAqd2ViVmlldzsKLSAgICBHdGtXaWRnZXQgKm1haW5fd2luZG93ID0gY3JlYXRlV2luZG93
KCZ3ZWJWaWV3KTsKKyAgICBHdGtXaWRnZXQgKm1haW5fd2luZG93ID0gY3JlYXRlV2luZG93KCZ3
ZWJWaWV3LCAwKTsKIAogICAgIGlmICh3ZWJraXRTZXR0aW5ncykgewogICAgICAgICB3ZWJraXRf
d2ViX3ZpZXdfc2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwgd2Via2l0U2V0
dGluZ3MpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDJmZjIxZDZiMDNmYWZjMzRhYTk5MmY4N2Q0YTdkYzE5OTNjNjZiMzgu
LjNlNzFlZWMxNjYyM2ZiMWQwMzRmMTQwZTc3MDI0NzlkMjE1ZjFiOWUgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAxMi0wMi0yMiAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBEUlQgc3VwcG9ydCBmb3IgbW9kYWwgZGlhbG9ncworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM2MDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbnNraXAgdGhlIHBh
c3NpbmcgbW9kYWwgZGlhbG9ncyB0ZXN0cyBhbmQgbG9nIHRoZSByZW1haW5pbmcgc2tpcHBlZCB0
ZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisKIDIwMTItMDItMjIgIEtl
bmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZGluZyBX
ZWJTb2NrZXQgcGVyLWZyYW1lIERFRkxBVEUgZXh0ZW5zaW9uCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkCmluZGV4IDQxOWViZGMyYzJiMzA0NThhZjNlNDYzZWMzZmEwZjBkZDU5ZGRhYWMuLjgyNmMw
ZmEyZTIyMjMxZWU0OTZiMzhmYTNlMzZiMTgyYzc1NGQ1ZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCkBAIC05NDAsMzUgKzk0MCw5IEBAIGNhbnZhcy9waGlsaXAvdGVzdHMvMmQucGF0dGVy
bi5wYWludC5yZXBlYXR4Lm91dHNpZGUuaHRtbAogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5wYXR0
ZXJuLnBhaW50LnJlcGVhdHkuY29vcmQxLmh0bWwKIGNhbnZhcy9waGlsaXAvdGVzdHMvMmQucGF0
dGVybi5wYWludC5yZXBlYXR5Lm91dHNpZGUuaHRtbAogCi0jIFRlc3RzIHRoYXQgdXNlciBtb2Rh
bCBkaWFsb2dzIGZhaWwgaW4gdGhlIERSVCBmb3Igc29tZSByZWFzb24uCi0jIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzYwMAotZmFzdC9hbmltYXRpb24vcmVxdWVz
dC1hbmltYXRpb24tZnJhbWUtZHVyaW5nLW1vZGFsLmh0bWwKKyMgVGhpcyBtb2RhbCBkaWFsb2cg
dGVzdCBzdGlsbCBmYWlscyBiZWNhdXNlIHRoZSBibHVyIGV2ZW50IGlzIG5vdCBkaXNwYXRjaGVk
IG9uIHRoZSBvcGVuZXIKKyMgd2luZG93IHdoZW4gcnVubmluZyB0aGUgbW9kYWwgZGlhbG9nLgog
ZmFzdC9ldmVudHMvc2hvdy1tb2RhbC1kaWFsb2ctb25ibHVyLW9uZm9jdXMuaHRtbAotZmFzdC9l
dmVudHMvc2Nyb2xsLWV2ZW50LWR1cmluZy1tb2RhbC1kaWFsb2cuaHRtbAotZmFzdC9oYXJuZXNz
L3Nob3ctbW9kYWwtZGlhbG9nLmh0bWwKLWluc3BlY3Rvci9jb25zb2xlL2NvbnNvbGUtbG9uZy1l
dmFsLWNyYXNoLmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRz
LzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAu
Mi4yX0ExLjJfVDEwLmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRl
eHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9T
MTAuMi4yX0ExLjFfVDExLmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0Nv
bnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29k
ZS9TMTAuMi4yX0ExLjFfVDIuaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25f
Q29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9D
b2RlL1MxMC4yLjJfQTEuMl9UMi5odG1sCi1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlv
bl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFs
X0NvZGUvUzEwLjIuMl9BMS4xX1Q0Lmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0
aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2
YWxfQ29kZS9TMTAuMi4yX0ExLjJfVDQuaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVj
dXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJf
RXZhbF9Db2RlL1MxMC4yLjJfQTEuMV9UNi5odG1sCi1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4
ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIu
Ml9FdmFsX0NvZGUvUzEwLjIuMl9BMS4yX1Q2Lmh0bWwKLXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBf
RXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9uX0NvbnRleHQvMTAu
Mi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjFfVDguaHRtbAotc3B1dG5pay9Db25mb3JtYW5jZS8x
MF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRpb25fQ29udGV4dC8x
MC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMl9UOC5odG1sCi1zcHV0bmlrL0NvbmZvcm1hbmNl
LzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250ZXh0
LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4xX1QxMC5odG1sCi1zcHV0bmlrL0NvbmZvcm1h
bmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9Db250
ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4yX1QxMS5odG1sCi1zcHV0bmlrL0NvbmZv
cm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1dGlvbl9D
b250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4xX1QxLmh0bWwKLXNwdXRuaWsvQ29u
Zm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhlY3V0aW9u
X0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjJfVDEuaHRtbAotc3B1dG5pay9D
b25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9FeGVjdXRp
b25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMV9UMy5odG1sCi1zcHV0bmlr
L0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0FuX0V4ZWN1
dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4yX1QzLmh0bWwKLXNwdXRu
aWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdfQW5fRXhl
Y3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjFfVDUuaHRtbAotc3B1
dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmluZ19Bbl9F
eGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMl9UNS5odG1sCi1z
cHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVyaW5nX0Fu
X0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4xX1Q3Lmh0bWwK
LXNwdXRuaWsvQ29uZm9ybWFuY2UvMTBfRXhlY3V0aW9uX0NvbnRleHRzLzEwLjJfRW50ZXJpbmdf
QW5fRXhlY3V0aW9uX0NvbnRleHQvMTAuMi4yX0V2YWxfQ29kZS9TMTAuMi4yX0ExLjJfVDcuaHRt
bAotc3B1dG5pay9Db25mb3JtYW5jZS8xMF9FeGVjdXRpb25fQ29udGV4dHMvMTAuMl9FbnRlcmlu
Z19Bbl9FeGVjdXRpb25fQ29udGV4dC8xMC4yLjJfRXZhbF9Db2RlL1MxMC4yLjJfQTEuMV9UOS5o
dG1sCi1zcHV0bmlrL0NvbmZvcm1hbmNlLzEwX0V4ZWN1dGlvbl9Db250ZXh0cy8xMC4yX0VudGVy
aW5nX0FuX0V4ZWN1dGlvbl9Db250ZXh0LzEwLjIuMl9FdmFsX0NvZGUvUzEwLjIuMl9BMS4yX1Q5
Lmh0bWwKIAogIyBwYXN0ZXMgYSBzcGFjZSBpbnN0ZWFkIG9mIGEgdGFiCiAjIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQzNwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>