<?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>97324</bug_id>
          
          <creation_ts>2012-09-21 03:58:38 -0700</creation_ts>
          <short_desc>[GTK] Add support for Page Visibility</short_desc>
          <delta_ts>2013-04-10 03:47:07 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, LayoutTestFailure</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="jaybhaskar">jay.bhaskar</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>bedupont</cc>
    
    <cc>cgarcia</cc>
    
    <cc>dbates</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mario</cc>
    
    <cc>mrobinson</cc>
    
    <cc>obzhirov</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>sam</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>725402</commentid>
    <comment_count>0</comment_count>
    <who name="jaybhaskar">jay.bhaskar</who>
    <bug_when>2012-09-21 03:58:38 -0700</bug_when>
    <thetext>MiniBrowser(WebKit2) and Gtklauncher(WebKit) both doesnot support Page Visibility on http://html5test.com</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735846</commentid>
    <comment_count>1</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-05 11:53:10 -0700</bug_when>
    <thetext>Restyling the title a bit to make it clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810705</commentid>
    <comment_count>2</comment_count>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-01-18 09:26:12 -0800</bug_when>
    <thetext>I am going to check and fix this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825334</commentid>
    <comment_count>3</comment_count>
      <attachid>186591</attachid>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-05 03:06:53 -0800</bug_when>
    <thetext>Created attachment 186591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825339</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 03:11:08 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826894</commentid>
    <comment_count>5</comment_count>
      <attachid>186591</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-06 16:56:23 -0800</bug_when>
    <thetext>Comment on attachment 186591
Patch

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

Nice!  I think we should just ask via JavaScript for the page visibility state rather than making API for it. Some more minor comments follow. Didn&apos;t we agree that this would be called something like override_visibility state so that we could have a default implementation that relied on whether or not the widget was mapped?

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1645
&gt; +WebCore::PageVisibilityState WebPageProxy::visibilityState()
&gt; +{
&gt; +#if ENABLE(PAGE_VISIBILITY_API)
&gt; +    return m_visibilityState;
&gt; +#endif
&gt; +}

Are we adding this WebCore API just for the sake of the unit tests? Why not simply ask JavaScript for the value of the page visibility state there?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2955
&gt; + * @initial_state: a flag to specify if the visibility state is initial

Hrm. I&apos;m not sure if I totally understand the initial_state flag here. It could definitely use some more documentation.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2957
&gt; + * Set the page visibility of the page in @webView to @visibility_state.

It&apos;d be a good idea to expand this documentation and potentially include a link to the specification.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:170
&gt; + * WebKitPageVisibilityState:
&gt; + * @WEBKIT_PAGE_VISIBILITY_STATE_VISIBLE: The document contained by the page is at least partially visible at on at least one screen. This is the same condition under which the hidden attribute is set to false.
&gt; + * @WEBKIT_PAGE_VISIBILITY_STATE_HIDDEN: The document contained by the page is not visible at all on any screen.
&gt; + * @WEBKIT_PAGE_VISIBILITY_STATE_PRERENDER: Optional. The document is prerendered by being loaded off-screen and not visibly shown.
&gt; + * @WEBKIT_PAGE_VISIBILITY_STATE_PREVIEW: Optional. The document contained by the page is not visible at all and a preview of the document is visible.
&gt; + *
&gt; + * Enum values to specify the different visibility states for a #WebKitWebView
&gt; + * web page.

This is a bit of a nit, but adding some newlines here would improve readability of the documentation. You could probably omit &quot;Optional.&quot; here.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:1088
&gt; +// To test page visibility API. Currently only &apos;visible&apos; and &apos;hidden&apos; states are implemented fully in WebCore.

If only visible and hidden are implemented in WebCore, maybe it&apos;s better to only expose them? Do the layout tests depend on all states?

&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:881
&gt; +void DumpRenderTreeSupportGtk::setPageVisibility(WebKitWebView *webView, const char* visibility)

An enum would be better than a string here. Watch that the location of your asterisks is correct in this file.

&gt; Tools/Scripts/webkitperl/FeatureList.pm:371
&gt; +      define =&gt; &quot;ENABLE_PAGE_VISIBILITY_API&quot;, default =&gt; (isBlackBerry() || isEfl() || isGtk()), value =&gt; \$pageVisibilityAPISupport },

Since you are enabling it by default you shouldn&apos;t need to override it here as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827630</commentid>
    <comment_count>6</comment_count>
      <attachid>186591</attachid>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-07 09:53:09 -0800</bug_when>
    <thetext>Comment on attachment 186591
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1645
&gt;&gt; +}
&gt; 
&gt; Are we adding this WebCore API just for the sake of the unit tests? Why not simply ask JavaScript for the value of the page visibility state there?

I could do that. I thought if we add webkit_web_view_set_page_visibility to WebKit2 API, shouldn’t we add symmetrically webkit_web_view_get_page_visibility?

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2955
&gt;&gt; + * @initial_state: a flag to specify if the visibility state is initial
&gt; 
&gt; Hrm. I&apos;m not sure if I totally understand the initial_state flag here. It could definitely use some more documentation.

Well, it basically means if the flag is set then override current visibility state with @visibility_state. Will update documentation here.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2957
&gt;&gt; + * Set the page visibility of the page in @webView to @visibility_state.
&gt; 
&gt; It&apos;d be a good idea to expand this documentation and potentially include a link to the specification.

Ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:170
&gt;&gt; + * web page.
&gt; 
&gt; This is a bit of a nit, but adding some newlines here would improve readability of the documentation. You could probably omit &quot;Optional.&quot; here.

ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:1088
&gt;&gt; +// To test page visibility API. Currently only &apos;visible&apos; and &apos;hidden&apos; states are implemented fully in WebCore.
&gt; 
&gt; If only visible and hidden are implemented in WebCore, maybe it&apos;s better to only expose them? Do the layout tests depend on all states?

As far as I know no, they test only visible/hidden states. I was more thinking about future releases.

&gt;&gt; Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:881
&gt;&gt; +void DumpRenderTreeSupportGtk::setPageVisibility(WebKitWebView *webView, const char* visibility)
&gt; 
&gt; An enum would be better than a string here. Watch that the location of your asterisks is correct in this file.

ok

&gt;&gt; Tools/Scripts/webkitperl/FeatureList.pm:371
&gt;&gt; +      define =&gt; &quot;ENABLE_PAGE_VISIBILITY_API&quot;, default =&gt; (isBlackBerry() || isEfl() || isGtk()), value =&gt; \$pageVisibilityAPISupport },
&gt; 
&gt; Since you are enabling it by default you shouldn&apos;t need to override it here as well.

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827636</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-07 09:56:29 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 186591 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186591&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1645
&gt; &gt;&gt; +}
&gt; &gt; 
&gt; &gt; Are we adding this WebCore API just for the sake of the unit tests? Why not simply ask JavaScript for the value of the page visibility state there?
&gt; 
&gt; I could do that. I thought if we add webkit_web_view_set_page_visibility to WebKit2 API, shouldn’t we add symmetrically webkit_web_view_get_page_visibility?

Ah, if WebCore doesn&apos;t support that kind of use, it might better to go with the flow and not use it that way in both WebKit1 and WebKit2.

&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2955
&gt; &gt;&gt; + * @initial_state: a flag to specify if the visibility state is initial
&gt; &gt; 
&gt; &gt; Hrm. I&apos;m not sure if I totally understand the initial_state flag here. It could definitely use some more documentation.
&gt; 
&gt; Well, it basically means if the flag is set then override current visibility state with @visibility_state. Will update documentation here.

If you can only override the current state with a TRUE value here, what happens if you don&apos;t pass the flag? 

&gt; &gt; If only visible and hidden are implemented in WebCore, maybe it&apos;s better to only expose them? Do the layout tests depend on all states?
&gt; 
&gt; As far as I know no, they test only visible/hidden states. I was more thinking about future releases.

It&apos;s very easy to add new ENUM values to the API in a later release, but it&apos;s very difficult to remove them. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827645</commentid>
    <comment_count>8</comment_count>
      <attachid>186591</attachid>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-07 10:04:10 -0800</bug_when>
    <thetext>Comment on attachment 186591
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2955
&gt;&gt;&gt;&gt; + * @initial_state: a flag to specify if the visibility state is initial
&gt;&gt;&gt; 
&gt;&gt;&gt; Hrm. I&apos;m not sure if I totally understand the initial_state flag here. It could definitely use some more documentation.
&gt;&gt; 
&gt;&gt; Well, it basically means if the flag is set then override current visibility state with @visibility_state. Will update documentation here.
&gt; 
&gt; If you can only override the current state with a TRUE value here, what happens if you don&apos;t pass the flag?

It will still change the state but JavaScript onVisibilityChange callback will be triggered additionally to it (may be something else as well, I need to double check). So flag means just update visibility state).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827651</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-07 10:06:28 -0800</bug_when>
    <thetext>(In reply to comment #8)

&gt; It will still change the state but JavaScript onVisibilityChange callback will be triggered additionally to it (may be something else as well, I need to double check). So flag means just update visibility state).

Interesting. So if you change the state and then query the visibility state via JavaScript will it give the old value or the new one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827698</commentid>
    <comment_count>10</comment_count>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-07 10:57:30 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; 
&gt; &gt; It will still change the state but JavaScript onVisibilityChange callback will be triggered additionally to it (may be something else as well, I need to double check). So flag means just update visibility state).
&gt; 
&gt; Interesting. So if you change the state and then query the visibility state via JavaScript will it give the old value or the new one?

I think it will still give you old value. I will need to double check it though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829803</commentid>
    <comment_count>11</comment_count>
      <attachid>186591</attachid>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-11 09:44:23 -0800</bug_when>
    <thetext>Comment on attachment 186591
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitperl/FeatureList.pm:371
&gt;&gt;&gt; +      define =&gt; &quot;ENABLE_PAGE_VISIBILITY_API&quot;, default =&gt; (isBlackBerry() || isEfl() || isGtk()), value =&gt; \$pageVisibilityAPISupport },
&gt;&gt; 
&gt;&gt; Since you are enabling it by default you shouldn&apos;t need to override it here as well.
&gt; 
&gt; ok

It seems I still need to add isGtk() line here because it overrides ENABLE_PAGE_VISIBILITY_API flag here during configure phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830867</commentid>
    <comment_count>12</comment_count>
      <attachid>187854</attachid>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-12 06:17:17 -0800</bug_when>
    <thetext>Created attachment 187854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831983</commentid>
    <comment_count>13</comment_count>
      <attachid>187854</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-13 09:37:39 -0800</bug_when>
    <thetext>Comment on attachment 187854
Patch

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

Looks good, apart from a couple nits.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2947
&gt; + * Override the page visibility in @webView. The page visibility state will be set to @visibility_state.
&gt; + * Can be used to set the page visibility state before @web_view is mapped.
&gt; + *
&gt; + * When the operation is finished, Java Script visibility change event will be triggered unless @initial_state flag is set.
&gt; + * For more information about Page Visibility see http://www.w3.org/TR/2011/WD-page-visibility-20110602/.

For the sake of readability, do you mind making these lines about as long as the other documentation? &quot;Java Script&quot; should be &quot;JavaScript&quot;. :)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:167
&gt; + * @WEBKIT_PAGE_VISIBILITY_STATE_VISIBLE: The document contained by the page is at least partially visible at on at least one screen. This is the same condition under which the hidden attribute is set to false.
&gt; + * @WEBKIT_PAGE_VISIBILITY_STATE_HIDDEN: The document contained by the page is not visible at all on any screen.
&gt; + *
&gt; + * Enum values to specify the different visibility states for a #WebKitWebView

Perhaps make this a bit terser? I&apos;m thinking something like &quot;The page is at least partially visible and the hidden attribute is set to false.&quot; and then &quot;The page is not visible at all on the screen.&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:171
&gt; +typedef enum
&gt; +{

The curly brace here should be on the same line as the enum.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h:49
&gt; +    void showInWindow(GtkWindowType = GTK_WINDOW_POPUP);

You aren&apos;t using the &quot;mapped&quot; state of the widget here, so why do you actually need to show the window?

&gt; Tools/DumpRenderTree/gtk/TestRunnerGtk.cpp:966
&gt; +    WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame);
&gt; +    DumpRenderTreeSupportGtk::resetPageVisibility(webView);

Instead of exposing more API, why not just call  DumpRenderTreeSupportGtk::setPageVisibility(webView, WebCore::PageVisibilityStateVisible);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833113</commentid>
    <comment_count>14</comment_count>
      <attachid>187854</attachid>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-14 08:47:10 -0800</bug_when>
    <thetext>Comment on attachment 187854
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2947
&gt;&gt; + * For more information about Page Visibility see http://www.w3.org/TR/2011/WD-page-visibility-20110602/.
&gt; 
&gt; For the sake of readability, do you mind making these lines about as long as the other documentation? &quot;Java Script&quot; should be &quot;JavaScript&quot;. :)

No problem :)

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:167
&gt;&gt; + * Enum values to specify the different visibility states for a #WebKitWebView
&gt; 
&gt; Perhaps make this a bit terser? I&apos;m thinking something like &quot;The page is at least partially visible and the hidden attribute is set to false.&quot; and then &quot;The page is not visible at all on the screen.&quot;

ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:171
&gt;&gt; +{
&gt; 
&gt; The curly brace here should be on the same line as the enum.

ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h:49
&gt;&gt; +    void showInWindow(GtkWindowType = GTK_WINDOW_POPUP);
&gt; 
&gt; You aren&apos;t using the &quot;mapped&quot; state of the widget here, so why do you actually need to show the window?

To test normal use case (page visibility is changed indirectly via widget API) I want to show the window. To verify that page visibility is updated I need to wait for JavaScript callback and then check the page visibility. I am not sure which event will happen first - &apos;window mapped&apos; or &apos;visibility changed&apos;, so I ignore first one and wait for the visibility change instead.

&gt;&gt; Tools/DumpRenderTree/gtk/TestRunnerGtk.cpp:966
&gt;&gt; +    DumpRenderTreeSupportGtk::resetPageVisibility(webView);
&gt; 
&gt; Instead of exposing more API, why not just call  DumpRenderTreeSupportGtk::setPageVisibility(webView, WebCore::PageVisibilityStateVisible);

will have to add extra parameter in DumpRenderTreeSupportGtk::setPageVisibility(webView, WebCore::PageVisibilityStateVisible,
 bool)
 ^^^^
but yes can do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835536</commentid>
    <comment_count>15</comment_count>
      <attachid>188901</attachid>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-18 09:04:53 -0800</bug_when>
    <thetext>Created attachment 188901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835543</commentid>
    <comment_count>16</comment_count>
      <attachid>188901</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-18 09:14:08 -0800</bug_when>
    <thetext>Comment on attachment 188901
Patch

Removing r+ since this needs to be reviewed by an owner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835566</commentid>
    <comment_count>17</comment_count>
      <attachid>188901</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-02-18 09:39:22 -0800</bug_when>
    <thetext>Comment on attachment 188901
Patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2940
&gt; + * @visibility_state: a #WebKitWebViewPageVisibilityState

This says WebKitWebViewPageVisibilityState but the enum is called WebKitPageVisibilityState. I would avoid using Page here in any case, because it might be confused with WebKitWebPage API that is only available in the web extensions API. Maybe WebKitWebViewVisibiltyState, since our WebView is the equivalent to the WKPage in the C API.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2951
&gt; + * see http://www.w3.org/TR/2011/WD-page-visibility-20110602/.

After reading this it&apos;s still not clear to me why and when a user of the API would call this method. Or is it only useful for testing? In such case it should be added to the C API which is what the tests use.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2960
&gt; +    case WEBKIT_PAGE_VISIBILITY_STATE_VISIBLE:
&gt; +        break;

I think it would be a bit clearer if state is set here instead of relying on the default value.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2965
&gt; +        g_return_if_reached();

This should probably be g_assert_not_reached() instead, or even ASSERT_NOT_REACHED().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835567</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-02-18 09:40:05 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 188901 [details])
&gt; Removing r+ since this needs to be reviewed by an owner.

I think the patch could be split and land the wk1 part if it looks good to you and fixes the layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836282</commentid>
    <comment_count>19</comment_count>
      <attachid>188901</attachid>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-19 05:44:35 -0800</bug_when>
    <thetext>Comment on attachment 188901
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2940
&gt;&gt; + * @visibility_state: a #WebKitWebViewPageVisibilityState
&gt; 
&gt; This says WebKitWebViewPageVisibilityState but the enum is called WebKitPageVisibilityState. I would avoid using Page here in any case, because it might be confused with WebKitWebPage API that is only available in the web extensions API. Maybe WebKitWebViewVisibiltyState, since our WebView is the equivalent to the WKPage in the C API.

ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2951
&gt;&gt; + * see http://www.w3.org/TR/2011/WD-page-visibility-20110602/.
&gt; 
&gt; After reading this it&apos;s still not clear to me why and when a user of the API would call this method. Or is it only useful for testing? In such case it should be added to the C API which is what the tests use.

Well, when the view is in background or is not mapped and you want to update visibility to change web application behaviour (for example on a page with video JavaScript onVisibilityChange callback pauses the video when the page is hidden. To get video playback to continue in background (to hear video audio for example) you can update visibility to &apos;visible&apos;. In general it should be good to have such API for special use cases.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2960
&gt;&gt; +        break;
&gt; 
&gt; I think it would be a bit clearer if state is set here instead of relying on the default value.

ok

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2965
&gt;&gt; +        g_return_if_reached();
&gt; 
&gt; This should probably be g_assert_not_reached() instead, or even ASSERT_NOT_REACHED().

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836292</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-02-19 05:54:53 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2951
&gt; &gt;&gt; + * see http://www.w3.org/TR/2011/WD-page-visibility-20110602/.
&gt; &gt; 
&gt; &gt; After reading this it&apos;s still not clear to me why and when a user of the API would call this method. Or is it only useful for testing? In such case it should be added to the C API which is what the tests use.
&gt; 
&gt; Well, when the view is in background or is not mapped and you want to update visibility to change web application behaviour (for example on a page with video JavaScript onVisibilityChange callback pauses the video when the page is hidden. To get video playback to continue in background (to hear video audio for example) you can update visibility to &apos;visible&apos;. In general it should be good to have such API for special use cases.

Isn&apos;t this a workaround for pages using such javascript callback? Is there already any app needing this API? I would avoid adding new API that is not yet needed and even more at this point of the release cycle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836530</commentid>
    <comment_count>21</comment_count>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-19 10:39:28 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2951
&gt; &gt; &gt;&gt; + * see http://www.w3.org/TR/2011/WD-page-visibility-20110602/.
&gt; &gt; &gt; 
&gt; &gt; &gt; After reading this it&apos;s still not clear to me why and when a user of the API would call this method. Or is it only useful for testing? In such case it should be added to the C API which is what the tests use.
&gt; &gt; 
&gt; &gt; Well, when the view is in background or is not mapped and you want to update visibility to change web application behaviour (for example on a page with video JavaScript onVisibilityChange callback pauses the video when the page is hidden. To get video playback to continue in background (to hear video audio for example) you can update visibility to &apos;visible&apos;. In general it should be good to have such API for special use cases.
&gt; 
&gt; Isn&apos;t this a workaround for pages using such javascript callback? Is there already any app needing this API? I would avoid adding new API that is not yet needed and even more at this point of the release cycle.

Well, as far as I know no such application exist yet. When speaking about C API do you mean UIProcess/API/C/gtk? If so I can move this API there and if in the future we need it in WebKit2 GTK API I can move it back. If everybody is happy with that I&apos;ll do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837221</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-02-19 23:46:58 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2951
&gt; &gt; &gt; &gt;&gt; + * see http://www.w3.org/TR/2011/WD-page-visibility-20110602/.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; After reading this it&apos;s still not clear to me why and when a user of the API would call this method. Or is it only useful for testing? In such case it should be added to the C API which is what the tests use.
&gt; &gt; &gt; 
&gt; &gt; &gt; Well, when the view is in background or is not mapped and you want to update visibility to change web application behaviour (for example on a page with video JavaScript onVisibilityChange callback pauses the video when the page is hidden. To get video playback to continue in background (to hear video audio for example) you can update visibility to &apos;visible&apos;. In general it should be good to have such API for special use cases.
&gt; &gt; 
&gt; &gt; Isn&apos;t this a workaround for pages using such javascript callback? Is there already any app needing this API? I would avoid adding new API that is not yet needed and even more at this point of the release cycle.
&gt; 
&gt; Well, as far as I know no such application exist yet. When speaking about C API do you mean UIProcess/API/C/gtk? If so I can move this API there and if in the future we need it in WebKit2 GTK API I can move it back. If everybody is happy with that I&apos;ll do it.

No, I mean the cross-platform C API that already has such API. In the WebKit1 API there are cases of APIs that I think have never been used, so for wk2 we decided to add API incrementally and only when there&apos;s a real use case or application requiring it, to try to keep the API simple and easier to maintain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837278</commentid>
    <comment_count>23</comment_count>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-20 02:06:02 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; (In reply to comment #20)
&gt; &gt; &gt; (In reply to comment #19)
&gt; &gt; &gt; &gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2951
&gt; &gt; &gt; &gt; &gt;&gt; + * see http://www.w3.org/TR/2011/WD-page-visibility-20110602/.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; After reading this it&apos;s still not clear to me why and when a user of the API would call this method. Or is it only useful for testing? In such case it should be added to the C API which is what the tests use.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Well, when the view is in background or is not mapped and you want to update visibility to change web application behaviour (for example on a page with video JavaScript onVisibilityChange callback pauses the video when the page is hidden. To get video playback to continue in background (to hear video audio for example) you can update visibility to &apos;visible&apos;. In general it should be good to have such API for special use cases.
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn&apos;t this a workaround for pages using such javascript callback? Is there already any app needing this API? I would avoid adding new API that is not yet needed and even more at this point of the release cycle.
&gt; &gt; 
&gt; &gt; Well, as far as I know no such application exist yet. When speaking about C API do you mean UIProcess/API/C/gtk? If so I can move this API there and if in the future we need it in WebKit2 GTK API I can move it back. If everybody is happy with that I&apos;ll do it.
&gt; 
&gt; No, I mean the cross-platform C API that already has such API. In the WebKit1 API there are cases of APIs that I think have never been used, so for wk2 we decided to add API incrementally and only when there&apos;s a real use case or application requiring it, to try to keep the API simple and easier to maintain.

Makes sense. I will update the tests to use existing C API and submit new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838317</commentid>
    <comment_count>24</comment_count>
      <attachid>189506</attachid>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-21 04:09:04 -0800</bug_when>
    <thetext>Created attachment 189506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838428</commentid>
    <comment_count>25</comment_count>
      <attachid>189506</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-21 08:00:33 -0800</bug_when>
    <thetext>Comment on attachment 189506
Patch

Carlos, I think it&apos;s fine that the unit tests for WebKit2 are in the same patch as the WebKit1 DRT support. This patch is small enough and the subject matter is the same: &quot;enable page visibility.&quot; This looks good to me (perhaps Carlos has some comments), but we need a WebKit2 owner to review the WebKit2 bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838431</commentid>
    <comment_count>26</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-02-21 08:05:20 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 189506 [details])
&gt; Carlos, I think it&apos;s fine that the unit tests for WebKit2 are in the same patch as the WebKit1 DRT support. This patch is small enough and the subject matter is the same: &quot;enable page visibility.&quot; This looks good to me (perhaps Carlos has some comments), but we need a WebKit2 owner to review the WebKit2 bits.

Isn&apos;t page visibility already covered by fast/events/page-visibility* layout tests? Unit tests are to test the API and this patch doesn&apos;t include new WebKit2 API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839402</commentid>
    <comment_count>27</comment_count>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-22 02:11:30 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (From update of attachment 189506 [details] [details])
&gt; &gt; Carlos, I think it&apos;s fine that the unit tests for WebKit2 are in the same patch as the WebKit1 DRT support. This patch is small enough and the subject matter is the same: &quot;enable page visibility.&quot; This looks good to me (perhaps Carlos has some comments), but we need a WebKit2 owner to review the WebKit2 bits.
&gt; 
&gt; Isn&apos;t page visibility already covered by fast/events/page-visibility* layout tests? Unit tests are to test the API and this patch doesn&apos;t include new WebKit2 API.

It is covered but from web application (JavaScript) point of view. I think it still should check that changes in GTK widget visibility triggers right JavaScript callbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839571</commentid>
    <comment_count>28</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-22 07:55:47 -0800</bug_when>
    <thetext>(In reply to comment #27)

&gt; It is covered but from web application (JavaScript) point of view. I think it still should check that changes in GTK widget visibility triggers right JavaScript callbacks.

I agree here. Without this test we have no test coverage of this particular aspect of the widget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839576</commentid>
    <comment_count>29</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-02-22 08:01:56 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; 
&gt; &gt; It is covered but from web application (JavaScript) point of view. I think it still should check that changes in GTK widget visibility triggers right JavaScript callbacks.
&gt; 
&gt; I agree here. Without this test we have no test coverage of this particular aspect of the widget.

Ok, if you both think it&apos;s a good idea, I&apos;m fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839592</commentid>
    <comment_count>30</comment_count>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-22 08:28:53 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; (In reply to comment #27)
&gt; &gt; 
&gt; &gt; &gt; It is covered but from web application (JavaScript) point of view. I think it still should check that changes in GTK widget visibility triggers right JavaScript callbacks.
&gt; &gt; 
&gt; &gt; I agree here. Without this test we have no test coverage of this particular aspect of the widget.
&gt; 
&gt; Ok, if you both think it&apos;s a good idea, I&apos;m fine.

I am going to resubmit the patch now to fix build problem (probably happened because of incremental build) .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842122</commentid>
    <comment_count>31</comment_count>
      <attachid>190317</attachid>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-02-26 09:55:46 -0800</bug_when>
    <thetext>Created attachment 190317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845326</commentid>
    <comment_count>32</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-03-01 11:10:54 -0800</bug_when>
    <thetext>This looks good to me, but a WebKit2 owner needs to do the final review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847512</commentid>
    <comment_count>33</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-03-05 03:13:37 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; This looks good to me, but a WebKit2 owner needs to do the final review.

Looks good to me as well, fwiw</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847666</commentid>
    <comment_count>34</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-03-05 07:29:26 -0800</bug_when>
    <thetext>Anders, Sam, do you mind doing a review here for the WebKit2 bits? Two GTK+ reviewers have approved this patch otherwise. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871565</commentid>
    <comment_count>35</comment_count>
    <who name="Anton Obzhirov">obzhirov</who>
    <bug_when>2013-04-09 02:42:55 -0700</bug_when>
    <thetext>Hi, Anders, Sam
do you have something to comment about the patch? If not may be we can just submit it finally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872696</commentid>
    <comment_count>36</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-04-10 03:47:07 -0700</bug_when>
    <thetext>Committed r148088: &lt;http://trac.webkit.org/changeset/148088&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186591</attachid>
            <date>2013-02-05 03:06:53 -0800</date>
            <delta_ts>2013-02-12 06:17:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97324-20130205110319.patch</filename>
            <type>text/plain</type>
            <size>24609</size>
            <attacher name="Anton Obzhirov">obzhirov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTg4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAyLTA1ICBBbnRvbiBP
YnpoaXJvdiAgPGEub2J6aGlyb3ZAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIHN1
cHBvcnQgZm9yIFBhZ2UgVmlzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTczMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQYWdlIFZpc2liaWxpdHkgaGFzIGJlZW4gZW5hYmxlZCBmb3IgR1RL
IHBvcnQuCisgICAgICAgIE5ldyBHVEsgdW5pdHRlc3QgaGFzIGJlZW4gYWRkZWQuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbjoKKwogMjAxMy0wMi0wNSAgSnVsaWVuIEJy
aWFuY2VhdSAgPGpicmlhbmNlYXVAbmRzLmNvbT4KIAogICAgICAgICBCdWlsZCBpcyBicm9rZW4g
c2luY2UgcjE0MTU0MyBmb3IgcGxhdGZvcm1zIHdpdGhvdXQgT3BlbkdMCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbgkocmV2aXNpb24gMTQxNzczKQorKysg
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuZmVhdHVyZXMuYW0uaW4JKHdvcmtpbmcgY29weSkK
QEAgLTcwLDcgKzcwLDcgQEAgZmVhdHVyZV9kZWZpbmVzX2RlZmF1bHRzICs9IFwKIAlFTkFCTEVf
TkVUV09SS19JTkZPPTAgXAogCUVOQUJMRV9OT1RJRklDQVRJT05TPTAgXAogCUVOQUJMRV9PUklF
TlRBVElPTl9FVkVOVFM9MCBcCi0JRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEk9MCBcCisJRU5B
QkxFX1BBR0VfVklTSUJJTElUWV9BUEk9MSBcCiAJRU5BQkxFX1BFUkZPUk1BTkNFX1RJTUVMSU5F
PTAgXAogCUVOQUJMRV9QUk9HUkVTU19FTEVNRU5UPTEgXAogCUVOQUJMRV9QUk9YSU1JVFlfRVZF
TlRTPTAgXApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTQxODgyKQorKysgU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTMtMDItMDUg
IEFudG9uIE9iemhpcm92ICA8YS5vYnpoaXJvdkBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RL
XSBBZGQgc3VwcG9ydCBmb3IgUGFnZSBWaXNpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzMyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIFdlYktpdDIgQVBJIGZvciBwYWdlIHZpc2li
aWxpdHkuCisgICAgICAgIEFkZGVkIG5ldyB1bml0dGVzdCB0byB0ZXN0IHBhZ2UgdmlzaWJpbGl0
eSB1c2luZyBHVEsgV2lkZ2V0IHZpc2liaWxpdHkgQVBJIGFuZCBuZXcgR1RLIFdlYktpdDIgQVBJ
LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfdmlzaWJpbGl0eSk6CisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfc2V0X3BhZ2VfdmlzaWJpbGl0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAodGVzdFdlYlZpZXdQYWdlVmlzaWJp
bGl0eSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYlZpZXdUZXN0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdUZXN0OjpzaG93SW5XaW5k
b3cpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6dmlzaWJpbGl0eVN0YXRlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViUGFnZVByb3h5KToKKwog
MjAxMy0wMi0wNSAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CiAK
ICAgICAgICAgW1F0XVtXSzJdIFJlcGxhY2UgbW9yZSB1c2VzIG9mIFdlYlBhZ2VQcm94eSB3aXRo
IFdLUGFnZSBpbiBRUXVpY2tXZWJWaWV3CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMTQxNzczKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MzcsNiArMTYzNywx
MyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VmlzaWJpbGl0eVN0YXRlKFdlCiAjZW5kaWYKIH0K
IAorV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSBXZWJQYWdlUHJveHk6OnZpc2liaWxpdHlT
dGF0ZSgpCit7CisjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCisgICAgcmV0dXJuIG1f
dmlzaWJpbGl0eVN0YXRlOworI2VuZGlmCit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTdXBw
cmVzc1Njcm9sbGJhckFuaW1hdGlvbnMoYm9vbCBzdXBwcmVzc0FuaW1hdGlvbnMpCiB7CiAgICAg
aWYgKCFpc1ZhbGlkKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCShyZXZpc2lvbiAxNDE3NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDkgQEAKICNlbmRpZgogI2luY2x1
ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXJQcm94eS5oIgorI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKSAm
JiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiUGFnZVZpc2liaWxpdHlTdGF0ZS5oIgorI2VuZGlm
CiAjaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNhbmRi
b3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKQEAgLTQ4Miw2ICs0
ODUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKFdlYkNv
cmU6OkxheW91dE1pbGVzdG9uZXMpOwogCiAgICAgdm9pZCBzZXRWaXNpYmlsaXR5U3RhdGUoV2Vi
Q29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSk7CisgICAgV2Vi
Q29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUoKTsKIAogICAgIGJvb2wg
aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkZyYW1lSGFzSG9y
aXpvbnRhbFNjcm9sbGJhcjsgfQogICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBjb25z
dCB7IHJldHVybiBtX21haW5GcmFtZUhhc1ZlcnRpY2FsU2Nyb2xsYmFyOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAko
cmV2aXNpb24gMTQxNzczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MzMsMyArMjkzMyw0OSBAQCBXZWJL
aXRWaWV3TW9kZSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdfCiAKICAgICByZXR1cm4gd2ViVmll
dy0+cHJpdi0+dmlld01vZGU7CiB9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF9wYWdl
X3Zpc2liaWxpdHk6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBHZXQg
dGhlIHBhZ2UgdmlzaWJpbGl0eSBvZiBAd2ViX3ZpZXcuCisgKgorICogUmV0dXJuczogdGhlICNX
ZWJLaXRXZWJWaWV3UGFnZVZpc2liaWxpdHlTdGF0ZSBvZiBAd2ViX3ZpZXcuCisgKi8KK1dlYktp
dFBhZ2VWaXNpYmlsaXR5U3RhdGUgd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX3Zpc2liaWxpdHko
V2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIFdFQktJVF9QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfVklT
SUJMRSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdFBhZ2VWaXNpYmlsaXR5U3RhdGU+
KGdldFBhZ2Uod2ViVmlldyktPnZpc2liaWxpdHlTdGF0ZSgpKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfd2ViX3ZpZXdfc2V0X3BhZ2VfdmlzaWJpbGl0eToKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0
V2ViVmlldworICogQHZpc2liaWxpdHlfc3RhdGU6IGEgI1dlYktpdFdlYlZpZXdQYWdlVmlzaWJp
bGl0eVN0YXRlCisgKiBAaW5pdGlhbF9zdGF0ZTogYSBmbGFnIHRvIHNwZWNpZnkgaWYgdGhlIHZp
c2liaWxpdHkgc3RhdGUgaXMgaW5pdGlhbAorICoKKyAqIFNldCB0aGUgcGFnZSB2aXNpYmlsaXR5
IG9mIHRoZSBwYWdlIGluIEB3ZWJWaWV3IHRvIEB2aXNpYmlsaXR5X3N0YXRlLgorICovCit2b2lk
IHdlYmtpdF93ZWJfdmlld19zZXRfcGFnZV92aXNpYmlsaXR5KFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYktpdFBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlLCBnYm9vbGVhbiBp
bml0aWFsU3RhdGUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVco
d2ViVmlldykpOworCisgICAgUGFnZVZpc2liaWxpdHlTdGF0ZSBzdGF0ZSA9IFBhZ2VWaXNpYmls
aXR5U3RhdGVWaXNpYmxlOworICAgIHN3aXRjaCAodmlzaWJpbGl0eVN0YXRlKSB7CisgICAgY2Fz
ZSBXRUJLSVRfUEFHRV9WSVNJQklMSVRZX1NUQVRFX1ZJU0lCTEU6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV0VCS0lUX1BBR0VfVklTSUJJTElUWV9TVEFURV9ISURERU46CisgICAgICAgIHN0
YXRlID0gUGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBXRUJLSVRfUEFHRV9WSVNJQklMSVRZX1NUQVRFX1BSRVJFTkRFUjoKKyAgICAgICAgc3RhdGUg
PSBQYWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdFQktJVF9QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfUFJFVklFVzoKKyAgICAgICAgc3RhdGUgPSBQ
YWdlVmlzaWJpbGl0eVN0YXRlUHJldmlldzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgZ19yZXR1cm5faWZfcmVhY2hlZCgpOworICAgIH0KKworICAgIGdldFBhZ2Uod2Vi
VmlldyktPnNldFZpc2liaWxpdHlTdGF0ZShzdGF0ZSwgaW5pdGlhbFN0YXRlKTsKK30KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgJ
KHJldmlzaW9uIDE0MTc3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSwyNCBAQCB0eXBlZGVm
IGVudW0gewogICAgIFdFQktJVF9WSUVXX01PREVfU09VUkNFCiB9IFdlYktpdFZpZXdNb2RlOwog
CisvKioKKyAqIFdlYktpdFBhZ2VWaXNpYmlsaXR5U3RhdGU6CisgKiBAV0VCS0lUX1BBR0VfVklT
SUJJTElUWV9TVEFURV9WSVNJQkxFOiBUaGUgZG9jdW1lbnQgY29udGFpbmVkIGJ5IHRoZSBwYWdl
IGlzIGF0IGxlYXN0IHBhcnRpYWxseSB2aXNpYmxlIGF0IG9uIGF0IGxlYXN0IG9uZSBzY3JlZW4u
IFRoaXMgaXMgdGhlIHNhbWUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIHRoZSBoaWRkZW4gYXR0cmli
dXRlIGlzIHNldCB0byBmYWxzZS4KKyAqIEBXRUJLSVRfUEFHRV9WSVNJQklMSVRZX1NUQVRFX0hJ
RERFTjogVGhlIGRvY3VtZW50IGNvbnRhaW5lZCBieSB0aGUgcGFnZSBpcyBub3QgdmlzaWJsZSBh
dCBhbGwgb24gYW55IHNjcmVlbi4KKyAqIEBXRUJLSVRfUEFHRV9WSVNJQklMSVRZX1NUQVRFX1BS
RVJFTkRFUjogT3B0aW9uYWwuIFRoZSBkb2N1bWVudCBpcyBwcmVyZW5kZXJlZCBieSBiZWluZyBs
b2FkZWQgb2ZmLXNjcmVlbiBhbmQgbm90IHZpc2libHkgc2hvd24uCisgKiBAV0VCS0lUX1BBR0Vf
VklTSUJJTElUWV9TVEFURV9QUkVWSUVXOiBPcHRpb25hbC4gVGhlIGRvY3VtZW50IGNvbnRhaW5l
ZCBieSB0aGUgcGFnZSBpcyBub3QgdmlzaWJsZSBhdCBhbGwgYW5kIGEgcHJldmlldyBvZiB0aGUg
ZG9jdW1lbnQgaXMgdmlzaWJsZS4KKyAqCisgKiBFbnVtIHZhbHVlcyB0byBzcGVjaWZ5IHRoZSBk
aWZmZXJlbnQgdmlzaWJpbGl0eSBzdGF0ZXMgZm9yIGEgI1dlYktpdFdlYlZpZXcKKyAqIHdlYiBw
YWdlLgorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBXRUJLSVRfUEFHRV9WSVNJQklMSVRZX1NU
QVRFX1ZJU0lCTEUsCisgICAgV0VCS0lUX1BBR0VfVklTSUJJTElUWV9TVEFURV9ISURERU4sCisg
ICAgV0VCS0lUX1BBR0VfVklTSUJJTElUWV9TVEFURV9QUkVSRU5ERVIsCisgICAgV0VCS0lUX1BB
R0VfVklTSUJJTElUWV9TVEFURV9QUkVWSUVXCit9IFdlYktpdFBhZ2VWaXNpYmlsaXR5U3RhdGU7
CisKIHN0cnVjdCBfV2ViS2l0V2ViVmlldyB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2UgcGFyZW50
OwogCkBAIC00MTcsNiArNDM1LDE0IEBAIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlCiBX
RUJLSVRfQVBJIFdlYktpdFZpZXdNb2RlCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdfbW9kZSAg
ICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmll
dyk7CiAKK1dFQktJVF9BUEkgV2ViS2l0UGFnZVZpc2liaWxpdHlTdGF0ZQord2Via2l0X3dlYl92
aWV3X2dldF9wYWdlX3Zpc2liaWxpdHkgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAg
ICAgICAgICAgICAqd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmll
d19zZXRfcGFnZV92aXNpYmlsaXR5ICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0UGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5X3N0
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICBpbml0aWFsX3N0YXRlKTsKKwogR19FTkRfREVD
TFMKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstc2VjdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQJKHJldmlzaW9uIDE0
MTc3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAgV2ViS2l0UG9s
aWN5RGVjaXNpb25UeXBlCiBXZWJLaXRTYXZlTW9kZQogV2ViS2l0Vmlld01vZGUKIFdlYktpdElu
c2VjdXJlQ29udGVudEV2ZW50CitXZWJLaXRQYWdlVmlzaWJpbGl0eVN0YXRlCiAKIDxTVUJTRUNU
SU9OIEVkaXRpbmcgQ29tbWFuZHM+CiBXRUJLSVRfRURJVElOR19DT01NQU5EX0NVVApAQCAtMTMz
LDYgKzEzNCw4IEBAIHdlYmtpdF93ZWJfdmlld19zYXZlX3RvX2ZpbGVfZmluaXNoCiB3ZWJraXRf
d2ViX3ZpZXdfZG93bmxvYWRfdXJpCiB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZQogd2Vi
a2l0X3dlYl92aWV3X2dldF92aWV3X21vZGUKK3dlYmtpdF93ZWJfdmlld19nZXRfcGFnZV92aXNp
YmlsaXR5Cit3ZWJraXRfd2ViX3ZpZXdfc2V0X3BhZ2VfdmlzaWJpbGl0eQogCiA8U1VCU0VDVElP
TiBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0PgogV2ViS2l0SmF2YXNjcmlwdFJlc3VsdApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAkocmV2aXNpb24gMTQxNzczKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDg1LDYgKzEwODUsMTM0IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3TW9k
ZShXZWJWaWV3VGVzdCoKICAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09
LCBpbmRleEhUTUwpOwogfQogCisvLyBUbyB0ZXN0IHBhZ2UgdmlzaWJpbGl0eSBBUEkuIEN1cnJl
bnRseSBvbmx5ICd2aXNpYmxlJyBhbmQgJ2hpZGRlbicgc3RhdGVzIGFyZSBpbXBsZW1lbnRlZCBm
dWxseSBpbiBXZWJDb3JlLgorLy8gU2VlIGFsc28gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9X
RC1wYWdlLXZpc2liaWxpdHktMjAxMTA2MDIvIGFuZCBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xl
LmNvbS9jaHJvbWUvd2hpdGVwYXBlcnMvcGFnZXZpc2liaWxpdHkKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3UGFnZVZpc2liaWxpdHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjx0aXRsZT48L3RpdGxlPiIKKyAgICAgICAgIjxi
b2R5PjxwPlRlc3QgV2ViIFBhZ2UgVmlzaWJpbGl0eTwvcD4iCisgICAgICAgICI8c2NyaXB0PiIK
KyAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJraXR2aXNpYmlsaXR5Y2hh
bmdlXCIsIG9uVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpOyIKKyAgICAgICAgImZ1bmN0aW9uIG9u
VmlzaWJpbGl0eUNoYW5nZSgpIHsiCisgICAgICAgICIgICAgZG9jdW1lbnQudGl0bGUgPSBkb2N1
bWVudC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7IgorICAgICAgICAifSIKKyAgICAgICAgIjwvc2Ny
aXB0PiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgMCk7CisKKyAgICAvLyBX
YWl0IHVudGlsbCB0aGUgcGFnZSBpcyBsb2FkZWQuIEluaXRpYWwgdmlzaWJpbGl0eSBzaG91bGQg
YmUgJ2hpZGRlbicuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCogamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9j
dW1lbnQud2Via2l0VmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAg
ICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0
VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVT
dHJpbmcuZ2V0KCksID09LCAiaGlkZGVuIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVz
dC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC53ZWJraXRIaWRk
ZW47IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsK
KyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIC8vIFNo
b3cgdGhlIHBhZ2UuIFRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICd2aXNpYmxl
Jy4KKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKKyAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNo
YW5nZWQoKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5k
V2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdFZpc2liaWxpdHlTdGF0ZTsiLCAmZXJy
b3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNz
ZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZh
c2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAidmlzaWJsZSIpOworCisgICAgamF2YXNjcmlw
dFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1l
bnQud2Via2l0SGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydCgh
V2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkp
OworCisgICAgLy8gSGlkZSB0aGUgcGFnZS4gVGhlIHZpc2liaWxpdHkgc2hvdWxkIGJlIHVwZGF0
ZWQgdG8gJ2hpZGRlbicuCisgICAgZ3RrX3dpZGdldF9oaWRlKEdUS19XSURHRVQodGVzdC0+bV93
ZWJWaWV3KSk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisKKyAgICBqYXZh
c2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJk
b2N1bWVudC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBn
X2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOwor
ICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmlu
ZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdl
dCgpLCA9PSwgImhpZGRlbiIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkph
dmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQud2Via2l0SGlkZGVuOyIsICZl
cnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19h
c3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlw
dFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICAvLyBUZXN0IHZpc2li
aWxpdHkgQVBJIHRvIHNldCBhbGwgNCBzdGF0ZXMuIEl0IGRvZXNuJ3QgYWZmZWN0IGFjdHVhbCB2
aXNpYmlsaXR5IG9mIHRoZSBndGsgd2lkZ2V0CisgICAgLy8gYnV0IHNob3VsZCBjaGFuZ2UgdGhl
IHBhZ2UgdmlzaWJpbGl0eS4KKworICAgIC8vIFNldCBpbml0aWFsIHN0YXRlIHRvIGhpZGRlbiwg
bm8gY2FsbGJhY2sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3BhZ2VfdmlzaWJpbGl0eSh0ZXN0
LT5tX3dlYlZpZXcsIFdFQktJVF9QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfSElEREVOLCAxKTsKKwor
ICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoImRvY3VtZW50LndlYmtpdFZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkp
OworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5n
ZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0
VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVT
dHJpbmcuZ2V0KCksID09LCAiaGlkZGVuIik7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVz
dC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC53ZWJraXRIaWRk
ZW47IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsK
KyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZpZXdUZXN0Ojpq
YXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfcGFnZV92aXNpYmlsaXR5KHRlc3QtPm1fd2ViVmlldykg
PT0gV0VCS0lUX1BBR0VfVklTSUJJTElUWV9TVEFURV9ISURERU4pOworCisgICAgd2Via2l0X3dl
Yl92aWV3X3NldF9wYWdlX3Zpc2liaWxpdHkodGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRfUEFHRV9W
SVNJQklMSVRZX1NUQVRFX1BSRVJFTkRFUiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVD
aGFuZ2VkKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7IiwgJmVy
cm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fz
c2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInByZXJlbmRlciIpOworCisgICAgamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9j
dW1lbnQud2Via2l0SGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2
YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0
KSk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3BhZ2VfdmlzaWJpbGl0eSh0
ZXN0LT5tX3dlYlZpZXcpID09IFdFQktJVF9QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfUFJFUkVOREVS
KTsKKworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfcGFnZV92aXNpYmlsaXR5KHRlc3QtPm1fd2Vi
VmlldywgV0VCS0lUX1BBR0VfVklTSUJJTElUWV9TVEFURV9QUkVWSUVXLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0
LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdFZpc2li
aWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRS
ZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0
KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQp
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAicHJldmlldyIp
OworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50
aWxGaW5pc2hlZCgiZG9jdW1lbnQud2Via2l0SGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7Cisg
ICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgp
KTsKKyAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihq
YXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Bh
Z2VfdmlzaWJpbGl0eSh0ZXN0LT5tX3dlYlZpZXcpID09IFdFQktJVF9QQUdFX1ZJU0lCSUxJVFlf
U1RBVEVfUFJFVklFVyk7CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3BhZ2VfdmlzaWJpbGl0
eSh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfVklTSUJMRSwg
MCk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisKKyAgICBqYXZhc2NyaXB0
UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVu
dC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2Vy
dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZh
bHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZh
c2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9
PSwgInZpc2libGUiKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2Ny
aXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdEhpZGRlbjsiLCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0
KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoIVdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVz
dWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19nZXRfcGFnZV92aXNpYmlsaXR5KHRlc3QtPm1fd2ViVmlldykgPT0gV0VCS0lUX1BB
R0VfVklTSUJJTElUWV9TVEFURV9WSVNJQkxFKTsKK30KKwogdm9pZCBiZWZvcmVBbGwoKQogewog
ICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiZGVmYXVsdC1jb250ZXh0Iiwg
dGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dCk7CkBAIC0xMTA1LDYgKzEyMzMsNyBAQCB2b2lkIGJl
Zm9yZUFsbCgpCiAgICAgRm9ybUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzdWJt
aXQtZm9ybSIsIHRlc3RXZWJWaWV3U3VibWl0Rm9ybSk7CiAgICAgU2F2ZVdlYlZpZXdUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAic2F2ZSIsIHRlc3RXZWJWaWV3U2F2ZSk7CiAgICAgV2ViVmll
d1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ2aWV3LW1vZGUiLCB0ZXN0V2ViVmlld01vZGUp
OworICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicGFnZS12aXNpYmlsaXR5
IiwgdGVzdFdlYlZpZXdQYWdlVmlzaWJpbGl0eSk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwoKQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YlZpZXdUZXN0LmNwcAkocmV2aXNpb24gMTQxNzczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUs
NiArMTc1LDE1IEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJlbnRXaW5kb3dNYXBwZWQoR3RrV2kKICAg
ICByZXR1cm4gRkFMU0U7CiB9CiAKK3ZvaWQgV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRvdyhHdGtX
aW5kb3dUeXBlIHdpbmRvd1R5cGUpCit7CisgICAgZ19hc3NlcnQoIW1fcGFyZW50V2luZG93KTsK
KyAgICBtX3BhcmVudFdpbmRvdyA9IGd0a193aW5kb3dfbmV3KHdpbmRvd1R5cGUpOworICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBHVEtfV0lER0VU
KG1fd2ViVmlldykpOworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKG1fd2ViVmlldykp
OworICAgIGd0a193aWRnZXRfc2hvdyhtX3BhcmVudFdpbmRvdyk7Cit9CisKIHZvaWQgV2ViVmll
d1Rlc3Q6OnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHdGtXaW5kb3dUeXBlIHdpbmRv
d1R5cGUpCiB7CiAgICAgZ19hc3NlcnQoIW1fcGFyZW50V2luZG93KTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAko
cmV2aXNpb24gMTQxNzczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvV2ViVmlld1Rlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKICAgICB2b2lkIHdhaXRVbnRpbFRp
dGxlQ2hhbmdlZFRvKGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpOwogICAgIHZvaWQgd2FpdFVu
dGlsVGl0bGVDaGFuZ2VkKCk7CisgICAgdm9pZCBzaG93SW5XaW5kb3coR3RrV2luZG93VHlwZSA9
IEdUS19XSU5ET1dfUE9QVVApOwogICAgIHZvaWQgc2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFw
cGVkKEd0a1dpbmRvd1R5cGUgPSBHVEtfV0lORE9XX1BPUFVQKTsKICAgICB2b2lkIHJlc2l6ZVZp
ZXcoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBjb25zdCBjaGFyKiBtYWluUmVzb3VyY2VE
YXRhKHNpemVfdCYgbWFpblJlc291cmNlRGF0YVNpemUpOwpJbmRleDogU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwko
cmV2aXNpb24gMTQxODgyKQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMDItMDUgIEFudG9uIE9iemhpcm92ICA8YS5v
YnpoaXJvdkBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgc3VwcG9ydCBmb3IgUGFn
ZSBWaXNpYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NzMyNAorCisgICAgICAgIEltcGxlbWVudGVkIGFjY2VzcyB0byBwYWdlIHZpc2liaWxp
dHkgQVBJIGZvciBHVEsgdGVzdCBydW5uZXIuCisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnJl
c2V0UGFnZVZpc2liaWxpdHkpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpz
ZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrLmg6CisKIDIwMTMtMDItMDUgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNv
bkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0aGUgTkVXUyBhbmQgY29uZmlndXJhdGlv
biBpbiBwcmVwYXJhdGlvbiBmb3IgMS4xMS41LgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
Y3BwCShyZXZpc2lvbiAxNDE3NzMpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjYsMyAr
ODY2LDM5IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRBdXRoZW4KIHsKICAg
ICBzX2F1dGhlbnRpY2F0aW9uQ2FsbGJhY2sgPSBhdXRoZW50aWNhdGlvbkNhbGxiYWNrOwogfQor
Cit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6cmVzZXRQYWdlVmlzaWJpbGl0eShXZWJL
aXRXZWJWaWV3ICp3ZWJWaWV3KQoreworI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKQor
ICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHdlYlZpZXcpOworICAgIGlmICghcGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcGFnZS0+c2V0VmlzaWJpbGl0eVN0YXRlKFBhZ2VWaXNpYmlsaXR5U3Rh
dGVWaXNpYmxlLCB0cnVlKTsKKyNlbmRpZgorfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6c2V0UGFnZVZpc2liaWxpdHkoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgY29uc3QgY2hh
ciogdmlzaWJpbGl0eSkKK3sKKyNpZiBFTkFCTEUoUEFHRV9WSVNJQklMSVRZX0FQSSkKKyAgICBQ
YWdlKiBwYWdlID0gY29yZSh3ZWJWaWV3KTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIFN0cmluZyB2aXNpYmlsaXR5U3RyaW5nKHZpc2liaWxpdHkpOworICAgIFBhZ2VW
aXNpYmlsaXR5U3RhdGUgc3RhdGUgPSBQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZTsKKworICAg
IGlmICh2aXNpYmlsaXR5U3RyaW5nID09ICJ2aXNpYmxlIikKKyAgICAgICAgc3RhdGUgPSBQYWdl
VmlzaWJpbGl0eVN0YXRlVmlzaWJsZTsKKyAgICBlbHNlIGlmICh2aXNpYmlsaXR5U3RyaW5nID09
ICJoaWRkZW4iKQorICAgICAgICBzdGF0ZSA9IFBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW47Cisg
ICAgZWxzZSBpZiAodmlzaWJpbGl0eVN0cmluZyA9PSAicHJlcmVuZGVyIikKKyAgICAgICAgc3Rh
dGUgPSBQYWdlVmlzaWJpbGl0eVN0YXRlUHJlcmVuZGVyOworICAgIGVsc2UgaWYgKHZpc2liaWxp
dHlTdHJpbmcgPT0gInByZXZpZXciKQorICAgICAgICBzdGF0ZSA9IFBhZ2VWaXNpYmlsaXR5U3Rh
dGVQcmV2aWV3OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFnZS0+c2V0Vmlz
aWJpbGl0eVN0YXRlKHN0YXRlLCBmYWxzZSk7CisjZW5kaWYKK30KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5oCShyZXZpc2lvbiAxNDE3NzMpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMTUx
LDYgKzE1MSw4IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIGJvb2wgKCpBdXRoZW50aWNhdGlvbkNh
bGxiYWNrKSAoQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKTsKICAgICBzdGF0
aWMgdm9pZCBzZXRBdXRoZW50aWNhdGlvbkNhbGxiYWNrKEF1dGhlbnRpY2F0aW9uQ2FsbGJhY2sp
OwogICAgIHN0YXRpYyBBdXRoZW50aWNhdGlvbkNhbGxiYWNrIHNfYXV0aGVudGljYXRpb25DYWxs
YmFjazsKKyAgICBzdGF0aWMgdm9pZCByZXNldFBhZ2VWaXNpYmlsaXR5KFdlYktpdFdlYlZpZXcq
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRQYWdlVmlzaWJpbGl0eShXZWJLaXRXZWJWaWV3KiwgY29u
c3QgY2hhciogdmlzaWJpbGl0eSk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgc19kcnRS
dW47CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNDE4ODIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxMy0wMi0wNSAgQW50b24gT2J6aGlyb3YgIDxhLm9iemhpcm92QHNh
bXN1bmcuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQYWdlIFZpc2liaWxp
dHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MzI0
CisKKyAgICAgICAgSW1wbGVtZW50ZWQgdGVzdCBydW5uZXIgQVBJIGZvciBwYWdlIHZpc2liaWxp
dHkgbGF5b3V0IHRlc3RzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwOgorICAgICAg
ICAoVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgIChUZXN0UnVubmVy
OjpzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1
cmVMaXN0LnBtOgorCiAyMDEzLTAyLTA1ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gcmVtb3ZlIHVubmVjY2Vzc2FyeSAwIGNoZWNr
cyBmb3IgdGVzdFJ1bm5lciBub3cgdGhhdCB0aGUgVGVzdFJ1bm5lciBsaWJyYXJ5IG93bnMgaXQK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXN0UnVubmVyR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAJKHJldmlz
aW9uIDE0MTc3MykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXN0UnVubmVyR3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTkyLDEyICs5OTIsMTQgQEAgdm9pZCBUZXN0UnVubmVyOjpz
aW11bGF0ZUxlZ2FjeVdlYk5vdGlmaQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2li
aWxpdHkoKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsK
KyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnJlc2V0UGFnZVZpc2liaWxpdHkod2ViVmll
dyk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hhciop
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IGNoYXIqIHZpc2liaWxp
dHkpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0UGFnZVZpc2liaWxpdHkod2ViVmlldywgdmlz
aWJpbGl0eSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlv
bkVuYWJsZWQoYm9vbCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlz
dC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG0JKHJldmlzaW9uIDE0MTc3MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJl
TGlzdC5wbQkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBAIG15IEBmZWF0dXJlcyA9
ICgKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUyIsIGRlZmF1bHQg
PT4gaXNCbGFja0JlcnJ5KCksIHZhbHVlID0+IFwkb3JpZW50YXRpb25FdmVudHNTdXBwb3J0IH0s
CiAKICAgICB7IG9wdGlvbiA9PiAicGFnZS12aXNpYmlsaXR5LWFwaSIsIGRlc2MgPT4gIlRvZ2ds
ZSBQYWdlIFZpc2liaWxpdHkgQVBJIHN1cHBvcnQiLAotICAgICAgZGVmaW5lID0+ICJFTkFCTEVf
UEFHRV9WSVNJQklMSVRZX0FQSSIsIGRlZmF1bHQgPT4gKGlzQmxhY2tCZXJyeSgpIHx8IGlzRWZs
KCkpLCB2YWx1ZSA9PiBcJHBhZ2VWaXNpYmlsaXR5QVBJU3VwcG9ydCB9LAorICAgICAgZGVmaW5l
ID0+ICJFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSIsIGRlZmF1bHQgPT4gKGlzQmxhY2tCZXJy
eSgpIHx8IGlzRWZsKCkgfHwgaXNHdGsoKSksIHZhbHVlID0+IFwkcGFnZVZpc2liaWxpdHlBUElT
dXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAicGVyZm9ybWFuY2UtdGltZWxpbmUiLCBkZXNj
ID0+ICJUb2dnbGUgUGVyZm9ybWFuY2UgVGltZWxpbmUgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUg
PT4gIkVOQUJMRV9QRVJGT1JNQU5DRV9USU1FTElORSIsIGRlZmF1bHQgPT4gaXNHdGsoKSwgdmFs
dWUgPT4gXCRwZXJmb3JtYW5jZVRpbWVsaW5lU3VwcG9ydCB9LApJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MTQxODgyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTMtMDItMDUgIEFudG9uIE9iemhpcm92ICA8YS5vYnpoaXJvdkBzYW1zdW5n
LmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgc3VwcG9ydCBmb3IgUGFnZSBWaXNpYmlsaXR5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzMyNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3RrL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTMtMDItMDUgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLIGdhcmRlbmluZy4KSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAx
NDE3NzMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwkod29y
a2luZyBjb3B5KQpAQCAtMjgzLDEzICsyODMsNiBAQCB3ZWJraXQub3JnL2IvOTg5NDIgc3RvcmFn
ZS9zdG9yYWdlaW5mby1uCiB3ZWJraXQub3JnL2IvOTg5NDIgc3RvcmFnZS9zdG9yYWdlaW5mby1x
dWVyeS11c2FnZS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvOTg5NDIgc3RvcmFnZS9z
dG9yYWdlaW5mby1yZXF1ZXN0LXF1b3RhLmh0bWwgWyBGYWlsdXJlIF0KIAotIyBUaGlzIHBsYXRm
b3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlIFBhZ2UgVmlzaWJpbGl0eSBBUEkuCi13ZWJraXQub3Jn
L2IvOTczMjQgZmFzdC9ldmVudHMvcGFnZS12aXNpYmlsaXR5LWlmcmFtZS1kZWxldGUtdGVzdC5o
dG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvOTczMjQgZmFzdC9ldmVudHMvcGFnZS12aXNpYmls
aXR5LWlmcmFtZS1tb3ZlLXRlc3QuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzk3MzI0IGZh
c3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS1pZnJhbWUtcHJvcGFnYXRpb24tdGVzdC5odG1sIFsg
U2tpcCBdCi13ZWJraXQub3JnL2IvOTczMjQgZmFzdC9ldmVudHMvcGFnZS12aXNpYmlsaXR5LW51
bGwtdmlldy5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvOTczMjQgZmFzdC9ldmVudHMvcGFn
ZS12aXNpYmlsaXR5LXRyYW5zaXRpb24tdGVzdC5odG1sIFsgU2tpcCBdCi0KICMgR1RLIGRvZXNu
J3Qgc3VwcG9ydCBzbWFydCByZXBsYWNlLgogd2Via2l0Lm9yZy9iLzYxNjYxIGVkaXRpbmcvcGFz
dGVib2FyZC9kcmFnLWRyb3AtbGlzdC5odG1sIFsgRmFpbHVyZSBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187854</attachid>
            <date>2013-02-12 06:17:17 -0800</date>
            <delta_ts>2013-02-18 09:04:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97324-20130212141337.patch</filename>
            <type>text/plain</type>
            <size>20640</size>
            <attacher name="Anton Obzhirov">obzhirov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MjYxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAyLTEyICBBbnRvbiBP
YnpoaXJvdiAgPGEub2J6aGlyb3ZAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIHN1
cHBvcnQgZm9yIFBhZ2UgVmlzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTczMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQYWdlIFZpc2liaWxpdHkgaGFzIGJlZW4gZW5hYmxlZCBmb3IgR1RL
IHBvcnQuCisgICAgICAgIE5ldyBHVEsgdW5pdHRlc3QgaGFzIGJlZW4gYWRkZWQuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbjoKKwogMjAxMy0wMi0xMiAgQW5kcmV5IEx1
c2huaWtvdiAgPGx1c2huaWtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogc2VwYXJhdGUgU3VnZ2VzdEJveCBmcm9tIFRleHRQcm9tcHQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmZlYXR1cmVzLmFtLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmZlYXR1cmVzLmFtLmluCShyZXZpc2lvbiAxNDI0NTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbgkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsNyBAQCBmZWF0dXJlX2RlZmluZXNfZGVmYXVsdHMgKz0gXAogCUVOQUJMRV9ORVRX
T1JLX0lORk89MCBcCiAJRU5BQkxFX05PVElGSUNBVElPTlM9MCBcCiAJRU5BQkxFX09SSUVOVEFU
SU9OX0VWRU5UUz0wIFwKLQlFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQST0wIFwKKwlFTkFCTEVf
UEFHRV9WSVNJQklMSVRZX0FQST0xIFwKIAlFTkFCTEVfUEVSRk9STUFOQ0VfVElNRUxJTkU9MCBc
CiAJRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQ9MSBcCiAJRU5BQkxFX1BST1hJTUlUWV9FVkVOVFM9
MCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDI2MTApCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxMy0wMi0xMiAgQW50
b24gT2J6aGlyb3YgIDxhLm9iemhpcm92QHNhbXN1bmcuY29tPgorCisgICAgICAgIFtHVEtdIEFk
ZCBzdXBwb3J0IGZvciBQYWdlIFZpc2liaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MzI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgV2ViS2l0MiBBUEkgZm9yIHBhZ2UgdmlzaWJpbGl0
eS4KKyAgICAgICAgQWRkZWQgbmV3IHVuaXR0ZXN0IHRvIHRlc3QgcGFnZSB2aXNpYmlsaXR5IHVz
aW5nIEdUSyBXaWRnZXQgdmlzaWJpbGl0eSBBUEkgYW5kIG5ldyBHVEsgV2ViS2l0MiBBUEkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19vdmVycmlkZV9wYWdlX3Zpc2liaWxpdHkpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHRlc3RXZWJWaWV3
UGFnZVZpc2liaWxpdHkpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHA6CisgICAgICAgIChXZWJWaWV3VGVzdDo6
c2hvd0luV2luZG93KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3
VGVzdC5oOgorCiAyMDEzLTAyLTExICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkx
MDAubmV0PgogCiAgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBNYWtlIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSBub3Qga25vdyBjb250ZW50cyBzaXplLgpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAJKHJldmlzaW9u
IDE0MjQ1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMzLDMgKzI5MzMsMzMgQEAgV2ViS2l0Vmlld01v
ZGUgd2Via2l0X3dlYl92aWV3X2dldF92aWV3XwogCiAgICAgcmV0dXJuIHdlYlZpZXctPnByaXYt
PnZpZXdNb2RlOwogfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19vdmVycmlkZV9wYWdlX3Zp
c2liaWxpdHk6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqIEB2aXNpYmlsaXR5
X3N0YXRlOiBhICNXZWJLaXRXZWJWaWV3UGFnZVZpc2liaWxpdHlTdGF0ZQorICogQGluaXRpYWxf
c3RhdGU6IGEgZmxhZyB0byBzcGVjaWZ5IGlmIHRoZSBuZXcgc3RhdGUgaXMgaW5pdGlhbCBzdGF0
ZSAodmlzaWJpbGl0eSBjaGFuZ2UgZXZlbnQgaXMgbm90IGRpc3BhdGNoZWQpCisgKgorICogT3Zl
cnJpZGUgdGhlIHBhZ2UgdmlzaWJpbGl0eSBpbiBAd2ViVmlldy4gVGhlIHBhZ2UgdmlzaWJpbGl0
eSBzdGF0ZSB3aWxsIGJlIHNldCB0byBAdmlzaWJpbGl0eV9zdGF0ZS4KKyAqIENhbiBiZSB1c2Vk
IHRvIHNldCB0aGUgcGFnZSB2aXNpYmlsaXR5IHN0YXRlIGJlZm9yZSBAd2ViX3ZpZXcgaXMgbWFw
cGVkLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZCwgSmF2YSBTY3JpcHQg
dmlzaWJpbGl0eSBjaGFuZ2UgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgdW5sZXNzIEBpbml0aWFs
X3N0YXRlIGZsYWcgaXMgc2V0LgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgUGFnZSBW
aXNpYmlsaXR5IHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELXBhZ2UtdmlzaWJpbGl0
eS0yMDExMDYwMi8uCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X292ZXJyaWRlX3BhZ2Vfdmlz
aWJpbGl0eShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQYWdlVmlzaWJpbGl0eVN0YXRl
IHZpc2liaWxpdHlTdGF0ZSwgZ2Jvb2xlYW4gaW5pdGlhbFN0YXRlKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKworICAgIFBhZ2VWaXNpYmls
aXR5U3RhdGUgc3RhdGUgPSBQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZTsKKyAgICBzd2l0Y2gg
KHZpc2liaWxpdHlTdGF0ZSkgeworICAgIGNhc2UgV0VCS0lUX1BBR0VfVklTSUJJTElUWV9TVEFU
RV9WSVNJQkxFOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9QQUdFX1ZJU0lCSUxJ
VFlfU1RBVEVfSElEREVOOgorICAgICAgICBzdGF0ZSA9IFBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRk
ZW47CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGdfcmV0dXJuX2lmX3Jl
YWNoZWQoKTsKKyAgICB9CisKKyAgICBnZXRQYWdlKHdlYlZpZXcpLT5zZXRWaXNpYmlsaXR5U3Rh
dGUoc3RhdGUsIGluaXRpYWxTdGF0ZSk7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCShyZXZpc2lvbiAxNDI0NTgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OSw2ICsxNTksMjAgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfVklF
V19NT0RFX1NPVVJDRQogfSBXZWJLaXRWaWV3TW9kZTsKIAorLyoqCisgKiBXZWJLaXRQYWdlVmlz
aWJpbGl0eVN0YXRlOgorICogQFdFQktJVF9QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfVklTSUJMRTog
VGhlIGRvY3VtZW50IGNvbnRhaW5lZCBieSB0aGUgcGFnZSBpcyBhdCBsZWFzdCBwYXJ0aWFsbHkg
dmlzaWJsZSBhdCBvbiBhdCBsZWFzdCBvbmUgc2NyZWVuLiBUaGlzIGlzIHRoZSBzYW1lIGNvbmRp
dGlvbiB1bmRlciB3aGljaCB0aGUgaGlkZGVuIGF0dHJpYnV0ZSBpcyBzZXQgdG8gZmFsc2UuCisg
KiBAV0VCS0lUX1BBR0VfVklTSUJJTElUWV9TVEFURV9ISURERU46IFRoZSBkb2N1bWVudCBjb250
YWluZWQgYnkgdGhlIHBhZ2UgaXMgbm90IHZpc2libGUgYXQgYWxsIG9uIGFueSBzY3JlZW4uCisg
KgorICogRW51bSB2YWx1ZXMgdG8gc3BlY2lmeSB0aGUgZGlmZmVyZW50IHZpc2liaWxpdHkgc3Rh
dGVzIGZvciBhICNXZWJLaXRXZWJWaWV3CisgKiB3ZWIgcGFnZS4KKyAqLwordHlwZWRlZiBlbnVt
Cit7CisgICAgV0VCS0lUX1BBR0VfVklTSUJJTElUWV9TVEFURV9WSVNJQkxFLAorICAgIFdFQktJ
VF9QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfSElEREVOCit9IFdlYktpdFBhZ2VWaXNpYmlsaXR5U3Rh
dGU7CisKIHN0cnVjdCBfV2ViS2l0V2ViVmlldyB7CiAgICAgV2ViS2l0V2ViVmlld0Jhc2UgcGFy
ZW50OwogCkBAIC00MTcsNiArNDMxLDExIEBAIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2Rl
CiBXRUJLSVRfQVBJIFdlYktpdFZpZXdNb2RlCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdfbW9k
ZSAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJf
dmlldyk7CiAKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X292ZXJyaWRlX3BhZ2Vf
dmlzaWJpbGl0eSAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3Zp
ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlfc3RhdGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAg
ICAgICAgICAgICAgIGluaXRpYWxfc3RhdGUpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0
aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAkocmV2aXNpb24gMTQyNDU4KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQCBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUK
IFdlYktpdFNhdmVNb2RlCiBXZWJLaXRWaWV3TW9kZQogV2ViS2l0SW5zZWN1cmVDb250ZW50RXZl
bnQKK1dlYktpdFBhZ2VWaXNpYmlsaXR5U3RhdGUKIAogPFNVQlNFQ1RJT04gRWRpdGluZyBDb21t
YW5kcz4KIFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUCkBAIC0xMzMsNiArMTM0LDcgQEAgd2Vi
a2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZV9maW5pc2gKIHdlYmtpdF93ZWJfdmlld19kb3dubG9h
ZF91cmkKIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3ZpZXdfbW9kZQord2Via2l0X3dlYl92aWV3X292ZXJyaWRlX3BhZ2VfdmlzaWJpbGl0eQogCiA8
U1VCU0VDVElPTiBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0PgogV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAkocmV2aXNpb24gMTQyNDU4KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDg1LDYgKzEwODUsMTAzIEBAIHN0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3TW9kZShXZWJWaWV3VGVzdCoKICAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcu
Z2V0KCksID09LCBpbmRleEhUTUwpOwogfQogCisvLyBUbyB0ZXN0IHBhZ2UgdmlzaWJpbGl0eSBB
UEkuIEN1cnJlbnRseSBvbmx5ICd2aXNpYmxlJyBhbmQgJ2hpZGRlbicgc3RhdGVzIGFyZSBpbXBs
ZW1lbnRlZCBmdWxseSBpbiBXZWJDb3JlLgorLy8gU2VlIGFsc28gaHR0cDovL3d3dy53My5vcmcv
VFIvMjAxMS9XRC1wYWdlLXZpc2liaWxpdHktMjAxMTA2MDIvIGFuZCBodHRwczovL2RldmVsb3Bl
cnMuZ29vZ2xlLmNvbS9jaHJvbWUvd2hpdGVwYXBlcnMvcGFnZXZpc2liaWxpdHkKK3N0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3UGFnZVZpc2liaWxpdHkoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjx0aXRsZT48L3RpdGxlPiIKKyAg
ICAgICAgIjxib2R5PjxwPlRlc3QgV2ViIFBhZ2UgVmlzaWJpbGl0eTwvcD4iCisgICAgICAgICI8
c2NyaXB0PiIKKyAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ3ZWJraXR2aXNp
YmlsaXR5Y2hhbmdlXCIsIG9uVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpOyIKKyAgICAgICAgImZ1
bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHsiCisgICAgICAgICIgICAgZG9jdW1lbnQudGl0
bGUgPSBkb2N1bWVudC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7IgorICAgICAgICAifSIKKyAgICAg
ICAgIjwvc2NyaXB0PiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgMCk7CisK
KyAgICAvLyBXYWl0IHVudGlsbCB0aGUgcGFnZSBpcyBsb2FkZWQuIEluaXRpYWwgdmlzaWJpbGl0
eSBzaG91bGQgYmUgJ2hpZGRlbicuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgV2ViS2l0SmF2YXNjcmlwdFJlc3Vs
dCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5p
c2hlZCgiZG9jdW1lbnQud2Via2l0VmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7
CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdl
dCgpKTsKKyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdUZXN0OjpqYXZhc2Ny
aXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaGlkZGVuIik7CisKKyAgICBqYXZhc2NyaXB0UmVz
dWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC53
ZWJraXRIaWRkZW47IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0
UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdlYlZp
ZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKwor
ICAgIC8vIFNob3cgdGhlIHBhZ2UuIFRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRv
ICd2aXNpYmxlJy4KKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdFZpc2liaWxpdHlTdGF0
ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOwor
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcuc2V0KFdlYlZpZXdU
ZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAidmlzaWJsZSIpOworCisgICAg
amF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgiZG9jdW1lbnQud2Via2l0SGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3Nl
cnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBn
X2Fzc2VydCghV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlw
dFJlc3VsdCkpOworCisgICAgLy8gSGlkZSB0aGUgcGFnZS4gVGhlIHZpc2liaWxpdHkgc2hvdWxk
IGJlIHVwZGF0ZWQgdG8gJ2hpZGRlbicuCisgICAgZ3RrX3dpZGdldF9oaWRlKEdUS19XSURHRVQo
dGVzdC0+bV93ZWJWaWV3KSk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisK
KyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZp
bmlzaGVkKCJkb2N1bWVudC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigp
KTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3Iu
Z2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3Vs
dFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVl
U3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRl
c3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQud2Via2l0SGlk
ZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7
CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6
amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICAvLyBU
ZXN0IHZpc2liaWxpdHkgQVBJIHRvIG92ZXJyaWRlIHRoZSBwYWdlIHZpc2liaWxpdHkgc3RhdGUu
IEl0IGRvZXNuJ3QgYWZmZWN0IGFjdHVhbCB2aXNpYmlsaXR5IG9mIHRoZSBndGsgd2lkZ2V0Cisg
ICAgLy8gYnV0IHNob3VsZCBjaGFuZ2UgdGhlIHBhZ2UgdmlzaWJpbGl0eS4KKworICAgIC8vIFNl
dCBpbml0aWFsIHN0YXRlIHRvIHZpc2libGUsIG5vIGNhbGxiYWNrCisgICAgd2Via2l0X3dlYl92
aWV3X292ZXJyaWRlX3BhZ2VfdmlzaWJpbGl0eSh0ZXN0LT5tX3dlYlZpZXcsIFdFQktJVF9QQUdF
X1ZJU0lCSUxJVFlfU1RBVEVfVklTSUJMRSwgMSk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0g
dGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC53ZWJraXRW
aXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2Ny
aXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5n
LnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVz
dWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInZpc2li
bGUiKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdEhpZGRlbjsiLCAmZXJyb3Iub3V0UHRyKCkp
OworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5n
ZXQoKSk7CisgICAgZ19hc3NlcnQoIVdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29s
ZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIC8vIE5vIGNhbGxiYWNrIHdhcyBnZW5lcmF0
ZWQsIHNvIHdlIG5lZWQgdG8gY2hhbmdlIHRpdGxlIG1hbnVhbGx5IGluIG9yZGVyIHRvIGdldCBu
ZXh0IHRlc3Qgd29ya2luZworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2Ny
aXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LnRpdGxlID0gZG9jdW1lbnQud2Via2l0
VmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKworICAgIHdlYmtpdF93
ZWJfdmlld19vdmVycmlkZV9wYWdlX3Zpc2liaWxpdHkodGVzdC0+bV93ZWJWaWV3LCBXRUJLSVRf
UEFHRV9WSVNJQklMSVRZX1NUQVRFX0hJRERFTiwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0
bGVDaGFuZ2VkKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlw
dEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7Iiwg
JmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBn
X2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6
amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOworCisgICAgamF2YXNj
cmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9j
dW1lbnQud2Via2l0SGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2
YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2Vy
dChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0
KSk7Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQp
OwpAQCAtMTEwNSw2ICsxMjAyLDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIEZvcm1DbGllbnRU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3VibWl0LWZvcm0iLCB0ZXN0V2ViVmlld1N1Ym1p
dEZvcm0pOwogICAgIFNhdmVXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInNhdmUi
LCB0ZXN0V2ViVmlld1NhdmUpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAidmlldy1tb2RlIiwgdGVzdFdlYlZpZXdNb2RlKTsKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgInBhZ2UtdmlzaWJpbGl0eSIsIHRlc3RXZWJWaWV3UGFnZVZpc2liaWxp
dHkpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAJKHJldmlzaW9uIDE0
MjQ1OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdU
ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3NSwxNSBAQCBzdGF0aWMgZ2Jvb2xl
YW4gcGFyZW50V2luZG93TWFwcGVkKEd0a1dpCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCit2b2lk
IFdlYlZpZXdUZXN0OjpzaG93SW5XaW5kb3coR3RrV2luZG93VHlwZSB3aW5kb3dUeXBlKQorewor
ICAgIGdfYXNzZXJ0KCFtX3BhcmVudFdpbmRvdyk7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBndGtf
d2luZG93X25ldyh3aW5kb3dUeXBlKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKG1fcGFyZW50V2luZG93KSwgR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBndGtfd2lk
Z2V0X3Nob3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV9w
YXJlbnRXaW5kb3cpOworfQorCiB2b2lkIFdlYlZpZXdUZXN0OjpzaG93SW5XaW5kb3dBbmRXYWl0
VW50aWxNYXBwZWQoR3RrV2luZG93VHlwZSB3aW5kb3dUeXBlKQogewogICAgIGdfYXNzZXJ0KCFt
X3BhcmVudFdpbmRvdyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJWaWV3VGVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgJKHJldmlzaW9uIDE0MjQ1OCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgIHZvaWQgd2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CiAgICAgdm9pZCB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyhjb25zdCBjaGFyKiBl
eHBlY3RlZFRpdGxlKTsKICAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOworICAgIHZv
aWQgc2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgPSBHVEtfV0lORE9XX1BPUFVQKTsKICAgICB2
b2lkIHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHdGtXaW5kb3dUeXBlID0gR1RLX1dJ
TkRPV19QT1BVUCk7CiAgICAgdm9pZCByZXNpemVWaWV3KGludCB3aWR0aCwgaW50IGhlaWdodCk7
CiAgICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YShzaXplX3QmIG1haW5SZXNvdXJjZURh
dGFTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MjYxMCkKKysrIFNvdXJj
ZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisy
MDEzLTAyLTEyICBBbnRvbiBPYnpoaXJvdiAgPGEub2J6aGlyb3ZAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgW0dUS10gQWRkIHN1cHBvcnQgZm9yIFBhZ2UgVmlzaWJpbGl0eQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTczMjQKKworICAgICAgICBJbXBs
ZW1lbnRlZCBhY2Nlc3MgdG8gcGFnZSB2aXNpYmlsaXR5IEFQSSBmb3IgR1RLIHRlc3QgcnVubmVy
LgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpyZXNldFBhZ2VWaXNpYmlsaXR5KToKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0UGFnZVZpc2liaWxpdHkpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oOgorCiAyMDEzLTAy
LTEyICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAg
IFtUZXhNYXBdIEFwcGx5IGZyYW1lcy1wZXItc2Vjb25kIGRlYnVnIGNvdW50ZXIgdG8gV0sxLgpJ
bmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lvbiAxNDI0NTgpCisrKyBTb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MjksMyArODI5LDI1IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpzZXRBdXRoZW4KIHsKICAgICBzX2F1dGhlbnRpY2F0aW9uQ2FsbGJhY2sgPSBh
dXRoZW50aWNhdGlvbkNhbGxiYWNrOwogfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6cmVzZXRQYWdlVmlzaWJpbGl0eShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworI2lmIEVO
QUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKQorICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHdlYlZpZXcp
OworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFnZS0+c2V0VmlzaWJp
bGl0eVN0YXRlKFBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCB0cnVlKTsKKyNlbmRpZgorfQor
Cit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0UGFnZVZpc2liaWxpdHkoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5
U3RhdGUpCit7CisjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCisgICAgUGFnZSogcGFn
ZSA9IGNvcmUod2ViVmlldyk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBwYWdlLT5zZXRWaXNpYmlsaXR5U3RhdGUodmlzaWJpbGl0eVN0YXRlLCBmYWxzZSk7CisjZW5k
aWYKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCShyZXZpc2lvbiAxNDI0NTgpCisrKyBT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
aAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGtfaAogCiAjaW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIKKyNpbmNsdWRlICJQYWdl
VmlzaWJpbGl0eVN0YXRlLmgiCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1ZGUgPGdsaWIu
aD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgpAQCAtMTQ3LDYgKzE0OCw4IEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIGJvb2wgKCpBdXRoZW50aWNhdGlvbkNhbGxiYWNrKSAoQ1N0
cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKTsKICAgICBzdGF0aWMgdm9pZCBzZXRB
dXRoZW50aWNhdGlvbkNhbGxiYWNrKEF1dGhlbnRpY2F0aW9uQ2FsbGJhY2spOwogICAgIHN0YXRp
YyBBdXRoZW50aWNhdGlvbkNhbGxiYWNrIHNfYXV0aGVudGljYXRpb25DYWxsYmFjazsKKyAgICBz
dGF0aWMgdm9pZCByZXNldFBhZ2VWaXNpYmlsaXR5KFdlYktpdFdlYlZpZXcqKTsKKyAgICBzdGF0
aWMgdm9pZCBzZXRQYWdlVmlzaWJpbGl0eShXZWJLaXRXZWJWaWV3KiwgV2ViQ29yZTo6UGFnZVZp
c2liaWxpdHlTdGF0ZSk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgc19kcnRSdW47Cklu
ZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxNDI2MTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMy0wMi0xMiAgQW50b24gT2J6aGlyb3YgIDxhLm9iemhpcm92QHNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQYWdlIFZpc2liaWxpdHkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MzI0CisKKyAg
ICAgICAgSW1wbGVtZW50ZWQgdGVzdCBydW5uZXIgQVBJIGZvciBwYWdlIHZpc2liaWxpdHkgbGF5
b3V0IHRlc3RzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwOgorICAgICAgICAoVGVz
dFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRQ
YWdlVmlzaWJpbGl0eSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0
LnBtOgorCiAyMDEzLTAyLTEyICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4K
IAogICAgICAgICBbR1RLXSBFbmFibGUgQ1NTIFZhcmlhYmxlcyBmZWF0dXJlIGluIGRldmVsb3Bt
ZW50IGJ1aWxkcwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1Rlc3RSdW5uZXJHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXN0UnVubmVyR3Rr
LmNwcAkocmV2aXNpb24gMTQyNDU4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1Rlc3RS
dW5uZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NjIsMTIgKzk2MiwyNCBAQCB2b2lkIFRl
c3RSdW5uZXI6OnNpbXVsYXRlTGVnYWN5V2ViTm90aWZpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVz
ZXRQYWdlVmlzaWJpbGl0eSgpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAg
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyht
YWluRnJhbWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6cmVzZXRQYWdlVmlzaWJp
bGl0eSh3ZWJWaWV3KTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShj
b25zdCBjaGFyKikKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoY29uc3QgY2hh
ciogdmlzaWJpbGl0eSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7CisgICAgU3RyaW5nIHZpc2liaWxpdHlTdHJpbmcodmlzaWJpbGl0eSk7CisgICAgV2Vi
Q29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUgPSBXZWJDb3JlOjpQYWdl
VmlzaWJpbGl0eVN0YXRlVmlzaWJsZTsKKworICAgIGlmICh2aXNpYmlsaXR5U3RyaW5nID09ICJ2
aXNpYmxlIikKKyAgICAgICAgdmlzaWJpbGl0eVN0YXRlID0gV2ViQ29yZTo6UGFnZVZpc2liaWxp
dHlTdGF0ZVZpc2libGU7CisgICAgZWxzZSBpZiAodmlzaWJpbGl0eVN0cmluZyA9PSAiaGlkZGVu
IikKKyAgICAgICAgdmlzaWJpbGl0eVN0YXRlID0gV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0
ZUhpZGRlbjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6c2V0UGFnZVZpc2liaWxpdHkod2ViVmlldywgdmlzaWJpbGl0eVN0YXRlKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChi
b29sKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQkocmV2aXNp
b24gMTQyNDU4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzIsNyArMzcyLDcgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgICAg
ZGVmaW5lID0+ICJFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTIiwgZGVmYXVsdCA9PiBpc0JsYWNr
QmVycnkoKSwgdmFsdWUgPT4gXCRvcmllbnRhdGlvbkV2ZW50c1N1cHBvcnQgfSwKIAogICAgIHsg
b3B0aW9uID0+ICJwYWdlLXZpc2liaWxpdHktYXBpIiwgZGVzYyA9PiAiVG9nZ2xlIFBhZ2UgVmlz
aWJpbGl0eSBBUEkgc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV9QQUdFX1ZJU0lC
SUxJVFlfQVBJIiwgZGVmYXVsdCA9PiAoaXNCbGFja0JlcnJ5KCkgfHwgaXNFZmwoKSksIHZhbHVl
ID0+IFwkcGFnZVZpc2liaWxpdHlBUElTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9QQUdFX1ZJU0lCSUxJVFlfQVBJIiwgZGVmYXVsdCA9PiAoaXNCbGFja0JlcnJ5KCkgfHwgaXNF
ZmwoKSB8fCBpc0d0aygpKSwgdmFsdWUgPT4gXCRwYWdlVmlzaWJpbGl0eUFQSVN1cHBvcnQgfSwK
IAogICAgIHsgb3B0aW9uID0+ICJwZXJmb3JtYW5jZS10aW1lbGluZSIsIGRlc2MgPT4gIlRvZ2ds
ZSBQZXJmb3JtYW5jZSBUaW1lbGluZSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X1BFUkZPUk1BTkNFX1RJTUVMSU5FIiwgZGVmYXVsdCA9PiBpc0d0aygpLCB2YWx1ZSA9PiBcJHBl
cmZvcm1hbmNlVGltZWxpbmVTdXBwb3J0IH0sCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDI2MTApCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAor
MjAxMy0wMi0xMiAgQW50b24gT2J6aGlyb3YgIDxhLm9iemhpcm92QHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQYWdlIFZpc2liaWxpdHkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MzI0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9uczoKKwogMjAxMy0wMi0xMiAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gRW5hYmxlIENTUyBWYXJpYWJsZXMgZmVhdHVyZSBpbiBk
ZXZlbG9wbWVudCBidWlsZHMKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhw
ZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhw
ZWN0YXRpb25zCShyZXZpc2lvbiAxNDI0NTgpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
VGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMjkwLDEzICsyOTAsNiBAQCB3ZWJr
aXQub3JnL2IvOTg5NDIgc3RvcmFnZS9zdG9yYWdlaW5mby1uCiB3ZWJraXQub3JnL2IvOTg5NDIg
c3RvcmFnZS9zdG9yYWdlaW5mby1xdWVyeS11c2FnZS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQu
b3JnL2IvOTg5NDIgc3RvcmFnZS9zdG9yYWdlaW5mby1yZXF1ZXN0LXF1b3RhLmh0bWwgWyBGYWls
dXJlIF0KIAotIyBUaGlzIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgdGhlIFBhZ2UgVmlzaWJp
bGl0eSBBUEkuCi13ZWJraXQub3JnL2IvOTczMjQgZmFzdC9ldmVudHMvcGFnZS12aXNpYmlsaXR5
LWlmcmFtZS1kZWxldGUtdGVzdC5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvOTczMjQgZmFz
dC9ldmVudHMvcGFnZS12aXNpYmlsaXR5LWlmcmFtZS1tb3ZlLXRlc3QuaHRtbCBbIFNraXAgXQot
d2Via2l0Lm9yZy9iLzk3MzI0IGZhc3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS1pZnJhbWUtcHJv
cGFnYXRpb24tdGVzdC5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvOTczMjQgZmFzdC9ldmVu
dHMvcGFnZS12aXNpYmlsaXR5LW51bGwtdmlldy5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2Iv
OTczMjQgZmFzdC9ldmVudHMvcGFnZS12aXNpYmlsaXR5LXRyYW5zaXRpb24tdGVzdC5odG1sIFsg
U2tpcCBdCi0KICMgR1RLIGRvZXNuJ3Qgc3VwcG9ydCBzbWFydCByZXBsYWNlLgogd2Via2l0Lm9y
Zy9iLzYxNjYxIGVkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWRyb3AtbGlzdC5odG1sIFsgRmFpbHVy
ZSBdCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188901</attachid>
            <date>2013-02-18 09:04:53 -0800</date>
            <delta_ts>2013-02-21 04:08:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97324-20130218170107.patch</filename>
            <type>text/plain</type>
            <size>20642</size>
            <attacher name="Anton Obzhirov">obzhirov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzIyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAyLTE4ICBBbnRvbiBP
YnpoaXJvdiAgPGEub2J6aGlyb3ZAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIHN1
cHBvcnQgZm9yIFBhZ2UgVmlzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTczMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQYWdlIFZpc2liaWxpdHkgaGFzIGJlZW4gZW5hYmxlZCBmb3IgR1RL
IHBvcnQuCisgICAgICAgIE5ldyBHVEsgdW5pdHRlc3QgaGFzIGJlZW4gYWRkZWQuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbjoKKwogMjAxMy0wMi0xOCAgQmVhciBUcmF2
aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+CiAKICAgICAgICAgW0NTUyBFeGNsdXNpb25zXSBTdXBw
b3J0IG91dHNpZGUtc2hhcGUgbGF5b3V0IGZvciBzaGFwZS1pbnNpZGUgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmZlYXR1cmVzLmFtLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmZlYXR1cmVzLmFtLmluCShyZXZpc2lvbiAxNDMy
MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBmZWF0dXJlX2RlZmluZXNfZGVmYXVsdHMgKz0gXAog
CUVOQUJMRV9ORVRXT1JLX0lORk89MCBcCiAJRU5BQkxFX05PVElGSUNBVElPTlM9MCBcCiAJRU5B
QkxFX09SSUVOVEFUSU9OX0VWRU5UUz0wIFwKLQlFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQST0w
IFwKKwlFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQST0xIFwKIAlFTkFCTEVfUEVSRk9STUFOQ0Vf
VElNRUxJTkU9MCBcCiAJRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQ9MSBcCiAJRU5BQkxFX1BST1hJ
TUlUWV9FVkVOVFM9MCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDMyMjYpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAx
My0wMi0xOCAgQW50b24gT2J6aGlyb3YgIDxhLm9iemhpcm92QHNhbXN1bmcuY29tPgorCisgICAg
ICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQYWdlIFZpc2liaWxpdHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MzI0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgV2ViS2l0MiBBUEkgZm9yIHBh
Z2UgdmlzaWJpbGl0eS4KKyAgICAgICAgQWRkZWQgbmV3IHVuaXR0ZXN0IHRvIHRlc3QgcGFnZSB2
aXNpYmlsaXR5IHVzaW5nIEdUSyBXaWRnZXQgdmlzaWJpbGl0eSBBUEkgYW5kIG5ldyBHVEsgV2Vi
S2l0MiBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19vdmVycmlkZV9wYWdlX3Zpc2liaWxpdHkpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAg
KHRlc3RXZWJWaWV3UGFnZVZpc2liaWxpdHkpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHA6CisgICAgICAgIChX
ZWJWaWV3VGVzdDo6c2hvd0luV2luZG93KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9XZWJWaWV3VGVzdC5oOgorCiAyMDEzLTAxLTA0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVA
YXBwbGUuY29tPgogCiAgICAgICAgIHBpbmNoLXpvb21pbmcgd2VicGFnZSBtZXNzZXMgdXAgZnVs
bC1zY3JlZW5pbmcgb2YgZW1iZWRkZWQgdmlkZW8KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCShyZXZpc2lvbiAxNDMyMTMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjkzMywzICsyOTMzLDM3IEBAIFdlYktpdFZpZXdNb2RlIHdlYmtp
dF93ZWJfdmlld19nZXRfdmlld18KIAogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT52aWV3TW9k
ZTsKIH0KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfb3ZlcnJpZGVfcGFnZV92aXNpYmlsaXR5
OgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAdmlzaWJpbGl0eV9zdGF0ZTog
YSAjV2ViS2l0V2ViVmlld1BhZ2VWaXNpYmlsaXR5U3RhdGUKKyAqIEBpbml0aWFsX3N0YXRlOiBh
IGZsYWcgdG8gc3BlY2lmeSBpZiB0aGUgbmV3IHN0YXRlIGlzIGluaXRpYWwgc3RhdGUKKyAqICh2
aXNpYmlsaXR5IGNoYW5nZSBldmVudCBpcyBub3QgZGlzcGF0Y2hlZCkuCisgKgorICogT3ZlcnJp
ZGUgdGhlIHBhZ2UgdmlzaWJpbGl0eSBpbiBAd2ViVmlldy4gVGhlIHBhZ2UgdmlzaWJpbGl0eSBz
dGF0ZQorICogd2lsbCBiZSBzZXQgdG8gQHZpc2liaWxpdHlfc3RhdGUuCisgKiBDYW4gYmUgdXNl
ZCB0byBzZXQgdGhlIHBhZ2UgdmlzaWJpbGl0eSBzdGF0ZSBiZWZvcmUgQHdlYl92aWV3IGlzIG1h
cHBlZC4KKyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEphdmFTY3JpcHQg
dmlzaWJpbGl0eSBjaGFuZ2UgZXZlbnQKKyAqIHdpbGwgYmUgdHJpZ2dlcmVkIHVubGVzcyBAaW5p
dGlhbF9zdGF0ZSBmbGFnIGlzIHNldC4KKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFBh
Z2UgVmlzaWJpbGl0eSAKKyAqIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1dELXBhZ2Ut
dmlzaWJpbGl0eS0yMDExMDYwMi8uCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X292ZXJyaWRl
X3BhZ2VfdmlzaWJpbGl0eShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRQYWdlVmlzaWJp
bGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSwgZ2Jvb2xlYW4gaW5pdGlhbFN0YXRlKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKworICAgIFBh
Z2VWaXNpYmlsaXR5U3RhdGUgc3RhdGUgPSBQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZTsKKyAg
ICBzd2l0Y2ggKHZpc2liaWxpdHlTdGF0ZSkgeworICAgIGNhc2UgV0VCS0lUX1BBR0VfVklTSUJJ
TElUWV9TVEFURV9WSVNJQkxFOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9QQUdF
X1ZJU0lCSUxJVFlfU1RBVEVfSElEREVOOgorICAgICAgICBzdGF0ZSA9IFBhZ2VWaXNpYmlsaXR5
U3RhdGVIaWRkZW47CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGdfcmV0
dXJuX2lmX3JlYWNoZWQoKTsKKyAgICB9CisKKyAgICBnZXRQYWdlKHdlYlZpZXcpLT5zZXRWaXNp
YmlsaXR5U3RhdGUoc3RhdGUsIGluaXRpYWxTdGF0ZSk7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCShyZXZpc2lvbiAxNDMy
MTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1OSw2ICsxNTksMjAgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBX
RUJLSVRfVklFV19NT0RFX1NPVVJDRQogfSBXZWJLaXRWaWV3TW9kZTsKIAorLyoqCisgKiBXZWJL
aXRQYWdlVmlzaWJpbGl0eVN0YXRlOgorICogQFdFQktJVF9QQUdFX1ZJU0lCSUxJVFlfU1RBVEVf
VklTSUJMRTogVGhlIHBhZ2UgaXMgYXQgbGVhc3QgcGFydGlhbGx5IHZpc2libGUKKyAqIGFuZCB0
aGUgaGlkZGVuIGF0dHJpYnV0ZSBpcyBzZXQgdG8gZmFsc2UuCisgKiBAV0VCS0lUX1BBR0VfVklT
SUJJTElUWV9TVEFURV9ISURERU46IFRoZSBwYWdlIGlzIG5vdCB2aXNpYmxlIGF0IGFsbCBvbiBh
bnkgc2NyZWVuLgorICoKKyAqIEVudW0gdmFsdWVzIHRvIHNwZWNpZnkgdGhlIGRpZmZlcmVudCB2
aXNpYmlsaXR5IHN0YXRlcyBmb3IgYSAjV2ViS2l0V2ViVmlldworICogd2ViIHBhZ2UuCisgKi8K
K3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX1BBR0VfVklTSUJJTElUWV9TVEFURV9WSVNJQkxF
LAorICAgIFdFQktJVF9QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfSElEREVOCit9IFdlYktpdFBhZ2VW
aXNpYmlsaXR5U3RhdGU7CisKIHN0cnVjdCBfV2ViS2l0V2ViVmlldyB7CiAgICAgV2ViS2l0V2Vi
Vmlld0Jhc2UgcGFyZW50OwogCkBAIC00MTcsNiArNDMxLDExIEBAIHdlYmtpdF93ZWJfdmlld19z
ZXRfdmlld19tb2RlCiBXRUJLSVRfQVBJIFdlYktpdFZpZXdNb2RlCiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3ZpZXdfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICp3ZWJfdmlldyk7CiAKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X292
ZXJyaWRlX3BhZ2VfdmlzaWJpbGl0eSAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlfc3RhdGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
Ym9vbGVhbiAgICAgICAgICAgICAgICAgIGluaXRpYWxfc3RhdGUpOworCiBHX0VORF9ERUNMUwog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1zZWN0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAkocmV2aXNpb24gMTQzMjEz
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNl
Y3Rpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQCBXZWJLaXRQb2xpY3lE
ZWNpc2lvblR5cGUKIFdlYktpdFNhdmVNb2RlCiBXZWJLaXRWaWV3TW9kZQogV2ViS2l0SW5zZWN1
cmVDb250ZW50RXZlbnQKK1dlYktpdFBhZ2VWaXNpYmlsaXR5U3RhdGUKIAogPFNVQlNFQ1RJT04g
RWRpdGluZyBDb21tYW5kcz4KIFdFQktJVF9FRElUSU5HX0NPTU1BTkRfQ1VUCkBAIC0xMzMsNiAr
MTM0LDcgQEAgd2Via2l0X3dlYl92aWV3X3NhdmVfdG9fZmlsZV9maW5pc2gKIHdlYmtpdF93ZWJf
dmlld19kb3dubG9hZF91cmkKIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlCiB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3ZpZXdfbW9kZQord2Via2l0X3dlYl92aWV3X292ZXJyaWRlX3BhZ2Vfdmlz
aWJpbGl0eQogCiA8U1VCU0VDVElPTiBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0PgogV2ViS2l0SmF2
YXNjcmlwdFJlc3VsdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAkocmV2aXNpb24gMTQz
MjEzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg1LDYgKzEwODUsMTAzIEBAIHN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3TW9kZShXZWJWaWV3VGVzdCoKICAgICBnX2Fzc2VydF9jbXBzdHIo
dmFsdWVTdHJpbmcuZ2V0KCksID09LCBpbmRleEhUTUwpOwogfQogCisvLyBUbyB0ZXN0IHBhZ2Ug
dmlzaWJpbGl0eSBBUEkuIEN1cnJlbnRseSBvbmx5ICd2aXNpYmxlJyBhbmQgJ2hpZGRlbicgc3Rh
dGVzIGFyZSBpbXBsZW1lbnRlZCBmdWxseSBpbiBXZWJDb3JlLgorLy8gU2VlIGFsc28gaHR0cDov
L3d3dy53My5vcmcvVFIvMjAxMS9XRC1wYWdlLXZpc2liaWxpdHktMjAxMTA2MDIvIGFuZCBodHRw
czovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9jaHJvbWUvd2hpdGVwYXBlcnMvcGFnZXZpc2liaWxp
dHkKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UGFnZVZpc2liaWxpdHkoV2ViVmlld1Rlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoIjxodG1sPjx0aXRsZT48
L3RpdGxlPiIKKyAgICAgICAgIjxib2R5PjxwPlRlc3QgV2ViIFBhZ2UgVmlzaWJpbGl0eTwvcD4i
CisgICAgICAgICI8c2NyaXB0PiIKKyAgICAgICAgImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo
XCJ3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlXCIsIG9uVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpOyIK
KyAgICAgICAgImZ1bmN0aW9uIG9uVmlzaWJpbGl0eUNoYW5nZSgpIHsiCisgICAgICAgICIgICAg
ZG9jdW1lbnQudGl0bGUgPSBkb2N1bWVudC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7IgorICAgICAg
ICAifSIKKyAgICAgICAgIjwvc2NyaXB0PiIKKyAgICAgICAgIjwvYm9keT48L2h0bWw+IiwKKyAg
ICAgICAgMCk7CisKKyAgICAvLyBXYWl0IHVudGlsbCB0aGUgcGFnZSBpcyBsb2FkZWQuIEluaXRp
YWwgdmlzaWJpbGl0eSBzaG91bGQgYmUgJ2hpZGRlbicuCisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgV2ViS2l0SmF2
YXNjcmlwdFJlc3VsdCogamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRX
YWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQud2Via2l0VmlzaWJpbGl0eVN0YXRlOyIsICZlcnJv
ci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKKyAgICBHT3duUHRyPGNoYXI+IHZhbHVlU3RyaW5nKFdlYlZpZXdU
ZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1bHQpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAiaGlkZGVuIik7CisKKyAgICBq
YXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KCJkb2N1bWVudC53ZWJraXRIaWRkZW47IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2Vy
dChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIGdf
YXNzZXJ0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRS
ZXN1bHQpKTsKKworICAgIC8vIFNob3cgdGhlIHBhZ2UuIFRoZSB2aXNpYmlsaXR5IHNob3VsZCBi
ZSB1cGRhdGVkIHRvICd2aXNpYmxlJy4KKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0
ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdFZp
c2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3Jp
cHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgdmFsdWVTdHJpbmcu
c2V0KFdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9DU3RyaW5nKGphdmFzY3JpcHRSZXN1
bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodmFsdWVTdHJpbmcuZ2V0KCksID09LCAidmlzaWJs
ZSIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0
VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQud2Via2l0SGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7
CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdl
dCgpKTsKKyAgICBnX2Fzc2VydCghV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xl
YW4oamF2YXNjcmlwdFJlc3VsdCkpOworCisgICAgLy8gSGlkZSB0aGUgcGFnZS4gVGhlIHZpc2li
aWxpdHkgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gJ2hpZGRlbicuCisgICAgZ3RrX3dpZGdldF9oaWRl
KEdUS19XSURHRVQodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVD
aGFuZ2VkKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7IiwgJmVy
cm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fz
c2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2
YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOworCisgICAgamF2YXNjcmlw
dFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1l
bnQud2Via2l0SGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNj
cmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydChX
ZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7
CisKKyAgICAvLyBUZXN0IHZpc2liaWxpdHkgQVBJIHRvIG92ZXJyaWRlIHRoZSBwYWdlIHZpc2li
aWxpdHkgc3RhdGUuIEl0IGRvZXNuJ3QgYWZmZWN0IGFjdHVhbCB2aXNpYmlsaXR5IG9mIHRoZSBn
dGsgd2lkZ2V0CisgICAgLy8gYnV0IHNob3VsZCBjaGFuZ2UgdGhlIHBhZ2UgdmlzaWJpbGl0eS4K
KworICAgIC8vIFNldCBpbml0aWFsIHN0YXRlIHRvIHZpc2libGUsIG5vIGNhbGxiYWNrCisgICAg
d2Via2l0X3dlYl92aWV3X292ZXJyaWRlX3BhZ2VfdmlzaWJpbGl0eSh0ZXN0LT5tX3dlYlZpZXcs
IFdFQktJVF9QQUdFX1ZJU0lCSUxJVFlfU1RBVEVfVklTSUJMRSwgMSk7CisKKyAgICBqYXZhc2Ny
aXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1
bWVudC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fz
c2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAg
IHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhq
YXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgp
LCA9PSwgInZpc2libGUiKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZh
U2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdEhpZGRlbjsiLCAmZXJy
b3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNz
ZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoIVdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0
UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIC8vIE5vIGNhbGxiYWNr
IHdhcyBnZW5lcmF0ZWQsIHNvIHdlIG5lZWQgdG8gY2hhbmdlIHRpdGxlIG1hbnVhbGx5IGluIG9y
ZGVyIHRvIGdldCBuZXh0IHRlc3Qgd29ya2luZworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0
LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LnRpdGxlID0gZG9j
dW1lbnQud2Via2l0VmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19h
c3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKwor
ICAgIHdlYmtpdF93ZWJfdmlld19vdmVycmlkZV9wYWdlX3Zpc2liaWxpdHkodGVzdC0+bV93ZWJW
aWV3LCBXRUJLSVRfUEFHRV9WSVNJQklMSVRZX1NUQVRFX0hJRERFTiwgMCk7CisgICAgdGVzdC0+
d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+
cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC53ZWJraXRWaXNpYmls
aXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVz
dWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChX
ZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOwor
CisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxG
aW5pc2hlZCgiZG9jdW1lbnQud2Via2l0SGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAg
Z19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsK
KyAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZh
c2NyaXB0UmVzdWx0KSk7Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsKICAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJWaWV3RGVm
YXVsdENvbnRleHQpOwpAQCAtMTEwNSw2ICsxMjAyLDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAg
IEZvcm1DbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3VibWl0LWZvcm0iLCB0ZXN0
V2ViVmlld1N1Ym1pdEZvcm0pOwogICAgIFNhdmVXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgInNhdmUiLCB0ZXN0V2ViVmlld1NhdmUpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAidmlldy1tb2RlIiwgdGVzdFdlYlZpZXdNb2RlKTsKKyAgICBXZWJWaWV3
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInBhZ2UtdmlzaWJpbGl0eSIsIHRlc3RXZWJWaWV3
UGFnZVZpc2liaWxpdHkpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAJ
KHJldmlzaW9uIDE0MzIxMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3NSwxNSBAQCBz
dGF0aWMgZ2Jvb2xlYW4gcGFyZW50V2luZG93TWFwcGVkKEd0a1dpCiAgICAgcmV0dXJuIEZBTFNF
OwogfQogCit2b2lkIFdlYlZpZXdUZXN0OjpzaG93SW5XaW5kb3coR3RrV2luZG93VHlwZSB3aW5k
b3dUeXBlKQoreworICAgIGdfYXNzZXJ0KCFtX3BhcmVudFdpbmRvdyk7CisgICAgbV9wYXJlbnRX
aW5kb3cgPSBndGtfd2luZG93X25ldyh3aW5kb3dUeXBlKTsKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50V2luZG93KSwgR1RLX1dJREdFVChtX3dlYlZpZXcpKTsK
KyAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBndGtfd2lk
Z2V0X3Nob3cobV9wYXJlbnRXaW5kb3cpOworfQorCiB2b2lkIFdlYlZpZXdUZXN0OjpzaG93SW5X
aW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR3RrV2luZG93VHlwZSB3aW5kb3dUeXBlKQogewogICAg
IGdfYXNzZXJ0KCFtX3BhcmVudFdpbmRvdyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgJKHJldmlzaW9uIDE0MzIx
MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgIHZvaWQgd2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgdm9pZCB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyhj
b25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKTsKICAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdl
ZCgpOworICAgIHZvaWQgc2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgPSBHVEtfV0lORE9XX1BP
UFVQKTsKICAgICB2b2lkIHNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHdGtXaW5kb3dU
eXBlID0gR1RLX1dJTkRPV19QT1BVUCk7CiAgICAgdm9pZCByZXNpemVWaWV3KGludCB3aWR0aCwg
aW50IGhlaWdodCk7CiAgICAgY29uc3QgY2hhciogbWFpblJlc291cmNlRGF0YShzaXplX3QmIG1h
aW5SZXNvdXJjZURhdGFTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzIy
NikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE2IEBACisyMDEzLTAyLTE4ICBBbnRvbiBPYnpoaXJvdiAgPGEub2J6aGlyb3ZAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIHN1cHBvcnQgZm9yIFBhZ2UgVmlzaWJpbGl0eQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTczMjQKKwor
ICAgICAgICBJbXBsZW1lbnRlZCBhY2Nlc3MgdG8gcGFnZSB2aXNpYmlsaXR5IEFQSSBmb3IgR1RL
IHRlc3QgcnVubmVyLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoKKyAg
ICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0UGFnZVZpc2liaWxpdHkpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oOgorCiAyMDEz
LTAyLTE1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBTcHJlYWQgdGhlIGd5cCBidWlsZCBmaWxlcyB0aHJvdWdob3V0IHRoZSB0cmVlCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHJldmlzaW9uIDE0MzIxMykKKysrIFNvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxOSwzICs4MTksMTQgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OnNldEF1dGhlbgogewogICAgIHNfYXV0aGVudGljYXRpb25DYWxsYmFjayA9IGF1
dGhlbnRpY2F0aW9uQ2FsbGJhY2s7CiB9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpzZXRQYWdlVmlzaWJpbGl0eShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJDb3JlOjpQYWdl
VmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSkKK3sK
KyNpZiBFTkFCTEUoUEFHRV9WSVNJQklMSVRZX0FQSSkKKyAgICBQYWdlKiBwYWdlID0gY29yZSh3
ZWJWaWV3KTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIHBhZ2UtPnNl
dFZpc2liaWxpdHlTdGF0ZSh2aXNpYmlsaXR5U3RhdGUsIGlzSW5pdGlhbFN0YXRlKTsKKyNlbmRp
ZgorfQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgJKHJldmlzaW9uIDE0MzIxMykKKysrIFNv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0a19oCiAKICNpbmNsdWRlICJKU1N0cmluZ1JlZi5oIgorI2luY2x1ZGUgIlBhZ2VW
aXNpYmlsaXR5U3RhdGUuaCIKICNpbmNsdWRlIDxhdGsvYXRrLmg+CiAjaW5jbHVkZSA8Z2xpYi5o
PgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CkBAIC0xNDUsNiArMTQ2LDcgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgYm9vbCAoKkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2spIChDU3Ry
aW5nJiB1c2VybmFtZSwgQ1N0cmluZyYgcGFzc3dvcmQpOwogICAgIHN0YXRpYyB2b2lkIHNldEF1
dGhlbnRpY2F0aW9uQ2FsbGJhY2soQXV0aGVudGljYXRpb25DYWxsYmFjayk7CiAgICAgc3RhdGlj
IEF1dGhlbnRpY2F0aW9uQ2FsbGJhY2sgc19hdXRoZW50aWNhdGlvbkNhbGxiYWNrOworICAgIHN0
YXRpYyB2b2lkIHNldFBhZ2VWaXNpYmlsaXR5KFdlYktpdFdlYlZpZXcqLCBXZWJDb3JlOjpQYWdl
VmlzaWJpbGl0eVN0YXRlLCBib29sKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBzX2Ry
dFJ1bjsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE0MzIyNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDEzLTAyLTE4ICBBbnRvbiBPYnpoaXJvdiAgPGEub2J6aGlyb3ZA
c2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIHN1cHBvcnQgZm9yIFBhZ2UgVmlzaWJp
bGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcz
MjQKKworICAgICAgICBJbXBsZW1lbnRlZCB0ZXN0IHJ1bm5lciBBUEkgZm9yIHBhZ2UgdmlzaWJp
bGl0eSBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHA6CisgICAg
ICAgIChUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KToKKyAgICAgICAgKFRlc3RSdW5u
ZXI6OnNldFBhZ2VWaXNpYmlsaXR5KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVh
dHVyZUxpc3QucG06CisKIDIwMTMtMDItMTggIEFkZW5pbHNvbiBDYXZhbGNhbnRpICA8Y2F2YWxj
YW50aWlAZ21haWwuY29tPgogCiAgICAgICAgIFtRdF1bV0syXSBSZW1vdmUgZHVwZWQgdGVzdCBu
YW1lIGFuZCBhcHBlbmQgbmV3IHRlc3QgaW4gcHJvamVjdCBmaWxlCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwCShyZXZpc2lvbiAxNDMyMTMpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk0NywxMiArOTQ3LDI0IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVMZWdhY3lXZWJO
b3RpZmkKIAogdm9pZCBUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNpYmlsaXR5KCkKIHsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrOjpzZXRQYWdlVmlzaWJpbGl0eSh3ZWJWaWV3LCBXZWJDb3JlOjpQYWdlVmlz
aWJpbGl0eVN0YXRlVmlzaWJsZSwgdHJ1ZSk7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0UGFn
ZVZpc2liaWxpdHkoY29uc3QgY2hhciopCit2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmls
aXR5KGNvbnN0IGNoYXIqIHZpc2liaWxpdHkpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgorICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93
ZWJfdmlldyhtYWluRnJhbWUpOworICAgIFN0cmluZyB2aXNpYmlsaXR5U3RyaW5nKHZpc2liaWxp
dHkpOworICAgIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlID0g
V2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGU7CisKKyAgICBpZiAodmlzaWJpbGl0
eVN0cmluZyA9PSAidmlzaWJsZSIpCisgICAgICAgIHZpc2liaWxpdHlTdGF0ZSA9IFdlYkNvcmU6
OlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlOworICAgIGVsc2UgaWYgKHZpc2liaWxpdHlTdHJp
bmcgPT0gImhpZGRlbiIpCisgICAgICAgIHZpc2liaWxpdHlTdGF0ZSA9IFdlYkNvcmU6OlBhZ2VW
aXNpYmlsaXR5U3RhdGVIaWRkZW47CisgICAgZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldFBhZ2VWaXNpYmlsaXR5KHdlYlZpZXcsIHZpc2li
aWxpdHlTdGF0ZSwgZmFsc2UpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dG9tYXRpY0xp
bmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwv
RmVhdHVyZUxpc3QucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0Zl
YXR1cmVMaXN0LnBtCShyZXZpc2lvbiAxNDMyMTMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHBl
cmwvRmVhdHVyZUxpc3QucG0JKHdvcmtpbmcgY29weSkKQEAgLTM2OSw3ICszNjksNyBAQCBteSBA
ZmVhdHVyZXMgPSAoCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFMi
LCBkZWZhdWx0ID0+IGlzQmxhY2tCZXJyeSgpLCB2YWx1ZSA9PiBcJG9yaWVudGF0aW9uRXZlbnRz
U3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gInBhZ2UtdmlzaWJpbGl0eS1hcGkiLCBkZXNj
ID0+ICJUb2dnbGUgUGFnZSBWaXNpYmlsaXR5IEFQSSBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9
PiAiRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkiLCBkZWZhdWx0ID0+IChpc0JsYWNrQmVycnko
KSB8fCBpc0VmbCgpKSwgdmFsdWUgPT4gXCRwYWdlVmlzaWJpbGl0eUFQSVN1cHBvcnQgfSwKKyAg
ICAgIGRlZmluZSA9PiAiRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkiLCBkZWZhdWx0ID0+IChp
c0JsYWNrQmVycnkoKSB8fCBpc0VmbCgpIHx8IGlzR3RrKCkpLCB2YWx1ZSA9PiBcJHBhZ2VWaXNp
YmlsaXR5QVBJU3VwcG9ydCB9LAogCiAgICAgeyBvcHRpb24gPT4gInBlcmZvcm1hbmNlLXRpbWVs
aW5lIiwgZGVzYyA9PiAiVG9nZ2xlIFBlcmZvcm1hbmNlIFRpbWVsaW5lIHN1cHBvcnQiLAogICAg
ICAgZGVmaW5lID0+ICJFTkFCTEVfUEVSRk9STUFOQ0VfVElNRUxJTkUiLCBkZWZhdWx0ID0+IGlz
R3RrKCksIHZhbHVlID0+IFwkcGVyZm9ybWFuY2VUaW1lbGluZVN1cHBvcnQgfSwKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE0MzIyNikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEyIEBACisyMDEzLTAyLTE4ICBBbnRvbiBPYnpoaXJvdiAgPGEub2J6aGly
b3ZAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIHN1cHBvcnQgZm9yIFBhZ2UgVmlz
aWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTczMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEzLTAyLTE4ICBCZWFyIFRyYXZp
cyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIFN1cHBv
cnQgb3V0c2lkZS1zaGFwZSBsYXlvdXQgZm9yIHNoYXBlLWluc2lkZSBwcm9wZXJ0eQpJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDE0MzIx
MykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5n
IGNvcHkpCkBAIC03OCwxOSArNzgsNiBAQCB3ZWJraXQub3JnL2IvMTA3NTY3IHN2Zy9jYXJ0by5u
ZXQvY29tYm9iCiAjIFJlYmFzZWxpbmUgcmVxdWlyZWQgYWZ0ZXIgaHR0cHM6Ly93ZWJraXQub3Jn
L2IvOTU3NzIKIHdlYmtpdC5vcmcvYi8xMDkyMDkgZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvYmlk
aS1pZ25vcmVkLWZvci1maXJzdC1jaGlsZC1pbmxpbmUuaHRtbCBbIEZhaWx1cmUgXQogCi0jIE5l
ZWQgcmViYXNlbGluZSBhZnRlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA5Nzc1Ci13ZWJraXQub3JnL2IvMTA5Nzc1IG1lZGlhL2F1ZGlvLWNvbnRyb2xzLXJlbmRl
cmluZy5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTA5Nzc1IG1lZGlhL2NvbnRyb2xz
LWFmdGVyLXJlbG9hZC5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTA5Nzc1IG1lZGlh
L2NvbnRyb2xzLXN0cmljdC5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTA5Nzc1IG1l
ZGlhL2NvbnRyb2xzLXN0eWxpbmctc3RyaWN0Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcv
Yi8xMDk3NzUgbWVkaWEvY29udHJvbHMtd2l0aG91dC1wcmVsb2FkLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi8xMDk3NzUgbWVkaWEvdmlkZW8tY29udHJvbHMtcmVuZGVyaW5nLmh0bWwg
WyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xMDk3NzUgbWVkaWEvdmlkZW8tZGlzcGxheS10b2dn
bGUuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzEwOTc3NSBtZWRpYS92aWRlby1wbGF5
aW5nLWFuZC1wYXVzZS5odG1sIFsgRmFpbHVyZSBdCi0KLSMgTmV3IHRlc3QsIG5lZWRzIHBsYXRm
b3JtIHJlc3VsdHMKLXdlYmtpdC5vcmcvYi8xMDYyMjEgc3ZnL2ZpbHRlcnMvZmlsdGVyLWhpZGRl
bi1jb250ZW50LnN2ZyBbIEZhaWx1cmUgUGFzcyBdCi0KICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCiAjIEV4cGVjdGVkIGZhaWx1cmVzCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189506</attachid>
            <date>2013-02-21 04:09:04 -0800</date>
            <delta_ts>2013-02-26 09:55:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97324-20130221120518.patch</filename>
            <type>text/plain</type>
            <size>14294</size>
            <attacher name="Anton Obzhirov">obzhirov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzU4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAyLTIxICBBbnRvbiBP
YnpoaXJvdiAgPGEub2J6aGlyb3ZAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIHN1
cHBvcnQgZm9yIFBhZ2UgVmlzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTczMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQYWdlIFZpc2liaWxpdHkgaGFzIGJlZW4gZW5hYmxlZCBmb3IgR1RL
IHBvcnQuCisgICAgICAgIE5ldyBHVEsgdW5pdHRlc3QgaGFzIGJlZW4gYWRkZWQuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbjoKKwogMjAxMy0wMi0xOSAgRXVnZW5lIEts
eXVjaG5pa292ICA8ZXVzdGFzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBbQ29uc29sZV0gQWRkIGNvbnNvbGUgQVBJIG1lc3NhZ2UgdHlwZXMgZm9yIHByb2ZpbGUvcHJv
ZmlsZUVuZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmZlYXR1cmVzLmFtLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmZlYXR1cmVzLmFtLmlu
CShyZXZpc2lvbiAxNDM1NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5mZWF0dXJl
cy5hbS5pbgkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBmZWF0dXJlX2RlZmluZXNf
ZGVmYXVsdHMgKz0gXAogCUVOQUJMRV9ORVRXT1JLX0lORk89MCBcCiAJRU5BQkxFX05PVElGSUNB
VElPTlM9MCBcCiAJRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUz0wIFwKLQlFTkFCTEVfUEFHRV9W
SVNJQklMSVRZX0FQST0wIFwKKwlFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQST0xIFwKIAlFTkFC
TEVfUEVSRk9STUFOQ0VfVElNRUxJTkU9MCBcCiAJRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQ9MSBc
CiAJRU5BQkxFX1BST1hJTUlUWV9FVkVOVFM9MCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NDM1ODApCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOSBAQAorMjAxMy0wMi0yMSAgQW50b24gT2J6aGlyb3YgIDxhLm9iemhpcm92QHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQYWdlIFZpc2liaWxpdHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MzI0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3
IHVuaXR0ZXN0IHRvIHRlc3QgcGFnZSB2aXNpYmlsaXR5IHVzaW5nIEdUSyBXaWRnZXQgdmlzaWJp
bGl0eSBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlldy5jcHA6CisgICAgICAgICh0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KToKKyAgICAg
ICAgKGJlZm9yZUFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuY3BwOgorICAgICAgICAoV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRvdyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaDoKKwogMjAxMy0wMi0yMCAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBQcm92aWRl
IFdLVmlldyBTUEkgdG8gZGVmZXIgdGVsbGluZyB0aGUgV2ViUGFnZVByb3h5IGFuZCBXZWJQcm9j
ZXNzIGFib3V0IGNoYW5nZXMgaW4gdGhlIGhvc3Rpbmcgd2luZG93CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCShyZXZpc2lvbiAxNDM1NzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwODUsNiArMTA4NSw2NyBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld01vZGUoV2ViVmlld1Rl
c3QqCiAgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgaW5kZXhIVE1M
KTsKIH0KIAorLy8gVG8gdGVzdCBwYWdlIHZpc2liaWxpdHkgQVBJLiBDdXJyZW50bHkgb25seSAn
dmlzaWJsZScgYW5kICdoaWRkZW4nIHN0YXRlcyBhcmUgaW1wbGVtZW50ZWQgZnVsbHkgaW4gV2Vi
Q29yZS4KKy8vIFNlZSBhbHNvIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvV0QtcGFnZS12aXNp
YmlsaXR5LTIwMTEwNjAyLyBhbmQgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vY2hyb21l
L3doaXRlcGFwZXJzL3BhZ2V2aXNpYmlsaXR5CitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1BhZ2VW
aXNpYmlsaXR5KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
PmxvYWRIdG1sKCI8aHRtbD48dGl0bGU+PC90aXRsZT4iCisgICAgICAgICI8Ym9keT48cD5UZXN0
IFdlYiBQYWdlIFZpc2liaWxpdHk8L3A+IgorICAgICAgICAiPHNjcmlwdD4iCisgICAgICAgICJk
b2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwid2Via2l0dmlzaWJpbGl0eWNoYW5nZVwiLCBvblZp
c2liaWxpdHlDaGFuZ2UsIGZhbHNlKTsiCisgICAgICAgICJmdW5jdGlvbiBvblZpc2liaWxpdHlD
aGFuZ2UoKSB7IgorICAgICAgICAiICAgIGRvY3VtZW50LnRpdGxlID0gZG9jdW1lbnQud2Via2l0
VmlzaWJpbGl0eVN0YXRlOyIKKyAgICAgICAgIn0iCisgICAgICAgICI8L3NjcmlwdD4iCisgICAg
ICAgICI8L2JvZHk+PC9odG1sPiIsCisgICAgICAgIDApOworCisgICAgLy8gV2FpdCB1bnRpbGwg
dGhlIHBhZ2UgaXMgbG9hZGVkLiBJbml0aWFsIHZpc2liaWxpdHkgc2hvdWxkIGJlICdoaWRkZW4n
LgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgR093blB0cjxHRXJy
b3I+IGVycm9yOworICAgIFdlYktpdEphdmFzY3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQg
PSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtp
dFZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFz
Y3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgR093blB0cjxj
aGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhq
YXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgp
LCA9PSwgImhpZGRlbiIpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFT
Y3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQud2Via2l0SGlkZGVuOyIsICZlcnJv
ci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fzc2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJl
c3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVzdWx0KSk7CisKKyAgICAvLyBTaG93IHRoZSBwYWdl
LiBUaGUgdmlzaWJpbGl0eSBzaG91bGQgYmUgdXBkYXRlZCB0byAndmlzaWJsZScuCisgICAgdGVz
dC0+c2hvd0luV2luZG93KCk7CisgICAgdGVzdC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisK
KyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZp
bmlzaGVkKCJkb2N1bWVudC53ZWJraXRWaXNpYmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigp
KTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3Iu
Z2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNldChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3Vs
dFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVl
U3RyaW5nLmdldCgpLCA9PSwgInZpc2libGUiKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0
ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdEhp
ZGRlbjsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQp
OworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoIVdlYlZpZXdUZXN0
OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFuKGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIC8v
IEhpZGUgdGhlIHBhZ2UuIFRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICdoaWRk
ZW4nLgorICAgIGd0a193aWRnZXRfaGlkZShHVEtfV0lER0VUKHRlc3QtPm1fd2ViVmlldykpOwor
ICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOworCisgICAgamF2YXNjcmlwdFJlc3Vs
dCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQud2Vi
a2l0VmlzaWJpbGl0eVN0YXRlOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2
YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0
cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlw
dFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJo
aWRkZW4iKTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5k
V2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdEhpZGRlbjsiLCAmZXJyb3Iub3V0UHRy
KCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJv
ci5nZXQoKSk7CisgICAgZ19hc3NlcnQoV2ViVmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jv
b2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7CiAgICAg
V2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0
V2ViVmlld0RlZmF1bHRDb250ZXh0KTsKQEAgLTExMDUsNiArMTE2Niw3IEBAIHZvaWQgYmVmb3Jl
QWxsKCkKICAgICBGb3JtQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1pdC1m
b3JtIiwgdGVzdFdlYlZpZXdTdWJtaXRGb3JtKTsKICAgICBTYXZlV2ViVmlld1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJzYXZlIiwgdGVzdFdlYlZpZXdTYXZlKTsKICAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInZpZXctbW9kZSIsIHRlc3RXZWJWaWV3TW9kZSk7Cisg
ICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwYWdlLXZpc2liaWxpdHkiLCB0
ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmll
d1Rlc3QuY3BwCShyZXZpc2lvbiAxNDM1NzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw2ICsx
NzUsMTUgQEAgc3RhdGljIGdib29sZWFuIHBhcmVudFdpbmRvd01hcHBlZChHdGtXaQogICAgIHJl
dHVybiBGQUxTRTsKIH0KIAordm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93KEd0a1dpbmRv
d1R5cGUgd2luZG93VHlwZSkKK3sKKyAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOworICAg
IG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19uZXcod2luZG93VHlwZSk7CisgICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93
ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Cisg
ICAgZ3RrX3dpZGdldF9zaG93KG1fcGFyZW50V2luZG93KTsKK30KKwogdm9pZCBXZWJWaWV3VGVz
dDo6c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgd2luZG93VHlw
ZSkKIHsKICAgICBnX2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOwpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCShyZXZp
c2lvbiAxNDM1NzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwogICAgIHZvaWQgd2FpdFVudGlsVGl0bGVD
aGFuZ2VkVG8oY29uc3QgY2hhciogZXhwZWN0ZWRUaXRsZSk7CiAgICAgdm9pZCB3YWl0VW50aWxU
aXRsZUNoYW5nZWQoKTsKKyAgICB2b2lkIHNob3dJbldpbmRvdyhHdGtXaW5kb3dUeXBlID0gR1RL
X1dJTkRPV19QT1BVUCk7CiAgICAgdm9pZCBzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQo
R3RrV2luZG93VHlwZSA9IEdUS19XSU5ET1dfUE9QVVApOwogICAgIHZvaWQgcmVzaXplVmlldyhp
bnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAgIGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEo
c2l6ZV90JiBtYWluUmVzb3VyY2VEYXRhU2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxNDM1ODApCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0wMi0yMSAgQW50b24gT2J6aGlyb3YgIDxhLm9iemhp
cm92QHNhbXN1bmcuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQYWdlIFZp
c2liaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk3MzI0CisKKyAgICAgICAgSW1wbGVtZW50ZWQgYWNjZXNzIHRvIHBhZ2UgdmlzaWJpbGl0eSBB
UEkgZm9yIEdUSyB0ZXN0IHJ1bm5lci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldFBhZ2VWaXNpYmls
aXR5KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
aDoKKwogMjAxMy0wMi0xNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gU3ByZWFkIHRoZSBneXAgYnVpbGQgZmlsZXMgdGhyb3VnaG91dCB0
aGUgdHJlZQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lvbiAxNDM1Nzkp
CisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTksMyArODE5LDE0IEBAIHZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpzZXRBdXRoZW4KIHsKICAgICBzX2F1dGhlbnRpY2F0aW9uQ2Fs
bGJhY2sgPSBhdXRoZW50aWNhdGlvbkNhbGxiYWNrOwogfQorCit2b2lkIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6c2V0UGFnZVZpc2liaWxpdHkoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2Vi
Q29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWFs
U3RhdGUpCit7CisjaWYgRU5BQkxFKFBBR0VfVklTSUJJTElUWV9BUEkpCisgICAgUGFnZSogcGFn
ZSA9IGNvcmUod2ViVmlldyk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBwYWdlLT5zZXRWaXNpYmlsaXR5U3RhdGUodmlzaWJpbGl0eVN0YXRlLCBpc0luaXRpYWxTdGF0
ZSk7CisjZW5kaWYKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCShyZXZpc2lvbiAxNDM1
NzkpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGtfaAogCiAjaW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIKKyNpbmNs
dWRlICJQYWdlVmlzaWJpbGl0eVN0YXRlLmgiCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1
ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgpAQCAtMTQ1LDYg
KzE0Niw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIGJvb2wgKCpBdXRoZW50aWNhdGlvbkNhbGxi
YWNrKSAoQ1N0cmluZyYgdXNlcm5hbWUsIENTdHJpbmcmIHBhc3N3b3JkKTsKICAgICBzdGF0aWMg
dm9pZCBzZXRBdXRoZW50aWNhdGlvbkNhbGxiYWNrKEF1dGhlbnRpY2F0aW9uQ2FsbGJhY2spOwog
ICAgIHN0YXRpYyBBdXRoZW50aWNhdGlvbkNhbGxiYWNrIHNfYXV0aGVudGljYXRpb25DYWxsYmFj
azsKKyAgICBzdGF0aWMgdm9pZCBzZXRQYWdlVmlzaWJpbGl0eShXZWJLaXRXZWJWaWV3KiwgV2Vi
Q29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSwgYm9vbCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGJvb2wgc19kcnRSdW47CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDM1ODApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0wMi0yMSAgQW50b24gT2J6aGlyb3YgIDxh
Lm9iemhpcm92QHNhbXN1bmcuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQ
YWdlIFZpc2liaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk3MzI0CisKKyAgICAgICAgSW1wbGVtZW50ZWQgdGVzdCBydW5uZXIgQVBJIGZvciBw
YWdlIHZpc2liaWxpdHkgbGF5b3V0IHRlc3RzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL1Rlc3RSdW5uZXJHdGsu
Y3BwOgorICAgICAgICAoVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAg
IChUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eSk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRwZXJsL0ZlYXR1cmVMaXN0LnBtOgorCiAyMDEzLTAyLTIxICBPc3dhbGQgQnVkZGVuaGFnZW4g
IDxvc3dhbGQuYnVkZGVuaGFnZW5AZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gUmVtb3ZlIG9i
c29sZXRlIERFUEVORFBBVEggYXNzaWdubWVudApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL1Rlc3RSdW5uZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9UZXN0UnVubmVyR3RrLmNwcAkocmV2aXNpb24gMTQzNTc5KQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDcsMTIg
Kzk0NywyNCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlTGVnYWN5V2ViTm90aWZpCiAKIHZv
aWQgVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiB7Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzLgorICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2Zy
YW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6c2V0UGFnZVZpc2liaWxpdHkod2ViVmlldywgV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0
ZVZpc2libGUsIHRydWUpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5
KGNvbnN0IGNoYXIqKQordm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBj
aGFyKiB2aXNpYmlsaXR5KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFp
bkZyYW1lKTsKKyAgICBTdHJpbmcgdmlzaWJpbGl0eVN0cmluZyh2aXNpYmlsaXR5KTsKKyAgICBX
ZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSA9IFdlYkNvcmU6OlBh
Z2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlOworCisgICAgaWYgKHZpc2liaWxpdHlTdHJpbmcgPT0g
InZpc2libGUiKQorICAgICAgICB2aXNpYmlsaXR5U3RhdGUgPSBXZWJDb3JlOjpQYWdlVmlzaWJp
bGl0eVN0YXRlVmlzaWJsZTsKKyAgICBlbHNlIGlmICh2aXNpYmlsaXR5U3RyaW5nID09ICJoaWRk
ZW4iKQorICAgICAgICB2aXNpYmlsaXR5U3RhdGUgPSBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0
YXRlSGlkZGVuOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrOjpzZXRQYWdlVmlzaWJpbGl0eSh3ZWJWaWV3LCB2aXNpYmlsaXR5U3RhdGUs
IGZhbHNlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9u
RW5hYmxlZChib29sKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5w
bQkocmV2aXNpb24gMTQzNTc5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVM
aXN0LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNyArMzY5LDcgQEAgbXkgQGZlYXR1cmVzID0g
KAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTIiwgZGVmYXVsdCA9
PiBpc0JsYWNrQmVycnkoKSwgdmFsdWUgPT4gXCRvcmllbnRhdGlvbkV2ZW50c1N1cHBvcnQgfSwK
IAogICAgIHsgb3B0aW9uID0+ICJwYWdlLXZpc2liaWxpdHktYXBpIiwgZGVzYyA9PiAiVG9nZ2xl
IFBhZ2UgVmlzaWJpbGl0eSBBUEkgc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV9Q
QUdFX1ZJU0lCSUxJVFlfQVBJIiwgZGVmYXVsdCA9PiAoaXNCbGFja0JlcnJ5KCkgfHwgaXNFZmwo
KSksIHZhbHVlID0+IFwkcGFnZVZpc2liaWxpdHlBUElTdXBwb3J0IH0sCisgICAgICBkZWZpbmUg
PT4gIkVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJIiwgZGVmYXVsdCA9PiAoaXNCbGFja0JlcnJ5
KCkgfHwgaXNFZmwoKSB8fCBpc0d0aygpKSwgdmFsdWUgPT4gXCRwYWdlVmlzaWJpbGl0eUFQSVN1
cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+ICJwZXJmb3JtYW5jZS10aW1lbGluZSIsIGRlc2Mg
PT4gIlRvZ2dsZSBQZXJmb3JtYW5jZSBUaW1lbGluZSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9
PiAiRU5BQkxFX1BFUkZPUk1BTkNFX1RJTUVMSU5FIiwgZGVmYXVsdCA9PiBpc0d0aygpLCB2YWx1
ZSA9PiBcJHBlcmZvcm1hbmNlVGltZWxpbmVTdXBwb3J0IH0sCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NDM1ODApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMiBAQAorMjAxMy0wMi0yMSAgQW50b24gT2J6aGlyb3YgIDxhLm9iemhpcm92QHNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQYWdlIFZpc2liaWxpdHkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MzI0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxMy0wMi0yMSAgWm9sdGFuIEFydmFpICA8emFydmFp
QGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBbUXRdIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLgpJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9u
IDE0MzU3OSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDgsMTMgKzMwOCw2IEBAIHdlYmtpdC5vcmcvYi85ODk0MiBzdG9y
YWdlL3N0b3JhZ2VpbmZvLW4KIHdlYmtpdC5vcmcvYi85ODk0MiBzdG9yYWdlL3N0b3JhZ2VpbmZv
LXF1ZXJ5LXVzYWdlLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi85ODk0MiBzdG9yYWdl
L3N0b3JhZ2VpbmZvLXJlcXVlc3QtcXVvdGEuaHRtbCBbIEZhaWx1cmUgXQogCi0jIFRoaXMgcGxh
dGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGUgUGFnZSBWaXNpYmlsaXR5IEFQSS4KLXdlYmtpdC5v
cmcvYi85NzMyNCBmYXN0L2V2ZW50cy9wYWdlLXZpc2liaWxpdHktaWZyYW1lLWRlbGV0ZS10ZXN0
Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi85NzMyNCBmYXN0L2V2ZW50cy9wYWdlLXZpc2li
aWxpdHktaWZyYW1lLW1vdmUtdGVzdC5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvOTczMjQg
ZmFzdC9ldmVudHMvcGFnZS12aXNpYmlsaXR5LWlmcmFtZS1wcm9wYWdhdGlvbi10ZXN0Lmh0bWwg
WyBTa2lwIF0KLXdlYmtpdC5vcmcvYi85NzMyNCBmYXN0L2V2ZW50cy9wYWdlLXZpc2liaWxpdHkt
bnVsbC12aWV3Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi85NzMyNCBmYXN0L2V2ZW50cy9w
YWdlLXZpc2liaWxpdHktdHJhbnNpdGlvbi10ZXN0Lmh0bWwgWyBTa2lwIF0KLQogIyBHVEsgZG9l
c24ndCBzdXBwb3J0IHNtYXJ0IHJlcGxhY2UuCiB3ZWJraXQub3JnL2IvNjE2NjEgZWRpdGluZy9w
YXN0ZWJvYXJkL2RyYWctZHJvcC1saXN0Lmh0bWwgWyBGYWlsdXJlIF0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190317</attachid>
            <date>2013-02-26 09:55:46 -0800</date>
            <delta_ts>2013-04-09 13:38:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97324-20130226175145.patch</filename>
            <type>text/plain</type>
            <size>14137</size>
            <attacher name="Anton Obzhirov">obzhirov</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE0NDA2
NykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTAy
LTI2ICBBbnRvbiBPYnpoaXJvdiAgPGEub2J6aGlyb3ZAc2Ftc3VuZy5jb20+CisKKyAgICAgICAg
W0dUS10gQWRkIHN1cHBvcnQgZm9yIFBhZ2UgVmlzaWJpbGl0eQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTczMjQKKworICAgICAgICBQYWdlIFZpc2li
aWxpdHkgaGFzIGJlZW4gZW5hYmxlZCBmb3IgR1RLIHBvcnQuCisgICAgICAgIE5ldyBHVEsgdW5p
dHRlc3QgaGFzIGJlZW4gYWRkZWQuCisKKyAgICAgICAgKiBTb3VyY2UvYXV0b3Rvb2xzL1NldHVw
V2ViS2l0RmVhdHVyZXMubTQ6CisKIDIwMTMtMDItMjQgIExhc3psbyBHb21ib3MgIDxsLmdvbWJv
c0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBSZW5hbWUgRU5BQkxFX1JFR0lPTlMgdG8g
RU5BQkxFX0NTU19SRUdJT05TCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDQwNjcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAor
MjAxMy0wMi0yNiAgQW50b24gT2J6aGlyb3YgIDxhLm9iemhpcm92QHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQYWdlIFZpc2liaWxpdHkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MzI0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3IHVuaXR0ZXN0IHRv
IHRlc3QgcGFnZSB2aXNpYmlsaXR5IHVzaW5nIEdUSyBXaWRnZXQgdmlzaWJpbGl0eSBBUEkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHA6
CisgICAgICAgICh0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KToKKyAgICAgICAgKGJlZm9yZUFs
bCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwOgor
ICAgICAgICAoV2ViVmlld1Rlc3Q6OnNob3dJbldpbmRvdyk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaDoKKwogMjAxMy0wMi0yNiAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgRHJhdyBpbnRlcm1lZGlhdGUgc25hcHNob3Rz
IGlmIHBvc3NpYmxlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCShyZXZpc2lvbiAxNDQw
NTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODUsNiArMTA4NSw2NyBAQCBzdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld01vZGUoV2ViVmlld1Rlc3QqCiAgICAgZ19hc3NlcnRfY21wc3RyKHZh
bHVlU3RyaW5nLmdldCgpLCA9PSwgaW5kZXhIVE1MKTsKIH0KIAorLy8gVG8gdGVzdCBwYWdlIHZp
c2liaWxpdHkgQVBJLiBDdXJyZW50bHkgb25seSAndmlzaWJsZScgYW5kICdoaWRkZW4nIHN0YXRl
cyBhcmUgaW1wbGVtZW50ZWQgZnVsbHkgaW4gV2ViQ29yZS4KKy8vIFNlZSBhbHNvIGh0dHA6Ly93
d3cudzMub3JnL1RSLzIwMTEvV0QtcGFnZS12aXNpYmlsaXR5LTIwMTEwNjAyLyBhbmQgaHR0cHM6
Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vY2hyb21lL3doaXRlcGFwZXJzL3BhZ2V2aXNpYmlsaXR5
CitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48dGl0bGU+PC90
aXRsZT4iCisgICAgICAgICI8Ym9keT48cD5UZXN0IFdlYiBQYWdlIFZpc2liaWxpdHk8L3A+Igor
ICAgICAgICAiPHNjcmlwdD4iCisgICAgICAgICJkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwi
d2Via2l0dmlzaWJpbGl0eWNoYW5nZVwiLCBvblZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTsiCisg
ICAgICAgICJmdW5jdGlvbiBvblZpc2liaWxpdHlDaGFuZ2UoKSB7IgorICAgICAgICAiICAgIGRv
Y3VtZW50LnRpdGxlID0gZG9jdW1lbnQud2Via2l0VmlzaWJpbGl0eVN0YXRlOyIKKyAgICAgICAg
In0iCisgICAgICAgICI8L3NjcmlwdD4iCisgICAgICAgICI8L2JvZHk+PC9odG1sPiIsCisgICAg
ICAgIDApOworCisgICAgLy8gV2FpdCB1bnRpbGwgdGhlIHBhZ2UgaXMgbG9hZGVkLiBJbml0aWFs
IHZpc2liaWxpdHkgc2hvdWxkIGJlICdoaWRkZW4nLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIFdlYktpdEphdmFz
Y3JpcHRSZXN1bHQqIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdFZpc2liaWxpdHlTdGF0ZTsiLCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0
KCFlcnJvci5nZXQoKSk7CisgICAgR093blB0cjxjaGFyPiB2YWx1ZVN0cmluZyhXZWJWaWV3VGVz
dDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0KSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgImhpZGRlbiIpOworCisgICAgamF2
YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgi
ZG9jdW1lbnQud2Via2l0SGlkZGVuOyIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQo
amF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKyAgICBnX2Fz
c2VydChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQm9vbGVhbihqYXZhc2NyaXB0UmVz
dWx0KSk7CisKKyAgICAvLyBTaG93IHRoZSBwYWdlLiBUaGUgdmlzaWJpbGl0eSBzaG91bGQgYmUg
dXBkYXRlZCB0byAndmlzaWJsZScuCisgICAgdGVzdC0+c2hvd0luV2luZG93KCk7CisgICAgdGVz
dC0+d2FpdFVudGlsVGl0bGVDaGFuZ2VkKCk7CisKKyAgICBqYXZhc2NyaXB0UmVzdWx0ID0gdGVz
dC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC53ZWJraXRWaXNp
YmlsaXR5U3RhdGU7IiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBnX2Fzc2VydChqYXZhc2NyaXB0
UmVzdWx0KTsKKyAgICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworICAgIHZhbHVlU3RyaW5nLnNl
dChXZWJWaWV3VGVzdDo6amF2YXNjcmlwdFJlc3VsdFRvQ1N0cmluZyhqYXZhc2NyaXB0UmVzdWx0
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHZhbHVlU3RyaW5nLmdldCgpLCA9PSwgInZpc2libGUi
KTsKKworICAgIGphdmFzY3JpcHRSZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVu
dGlsRmluaXNoZWQoImRvY3VtZW50LndlYmtpdEhpZGRlbjsiLCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgIGdfYXNzZXJ0KGphdmFzY3JpcHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQo
KSk7CisgICAgZ19hc3NlcnQoIVdlYlZpZXdUZXN0OjpqYXZhc2NyaXB0UmVzdWx0VG9Cb29sZWFu
KGphdmFzY3JpcHRSZXN1bHQpKTsKKworICAgIC8vIEhpZGUgdGhlIHBhZ2UuIFRoZSB2aXNpYmls
aXR5IHNob3VsZCBiZSB1cGRhdGVkIHRvICdoaWRkZW4nLgorICAgIGd0a193aWRnZXRfaGlkZShH
VEtfV0lER0VUKHRlc3QtPm1fd2ViVmlldykpOworICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hh
bmdlZCgpOworCisgICAgamF2YXNjcmlwdFJlc3VsdCA9IHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRX
YWl0VW50aWxGaW5pc2hlZCgiZG9jdW1lbnQud2Via2l0VmlzaWJpbGl0eVN0YXRlOyIsICZlcnJv
ci5vdXRQdHIoKSk7CisgICAgZ19hc3NlcnQoamF2YXNjcmlwdFJlc3VsdCk7CisgICAgZ19hc3Nl
cnQoIWVycm9yLmdldCgpKTsKKyAgICB2YWx1ZVN0cmluZy5zZXQoV2ViVmlld1Rlc3Q6OmphdmFz
Y3JpcHRSZXN1bHRUb0NTdHJpbmcoamF2YXNjcmlwdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih2YWx1ZVN0cmluZy5nZXQoKSwgPT0sICJoaWRkZW4iKTsKKworICAgIGphdmFzY3JpcHRS
ZXN1bHQgPSB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50
LndlYmtpdEhpZGRlbjsiLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGdfYXNzZXJ0KGphdmFzY3Jp
cHRSZXN1bHQpOworICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CisgICAgZ19hc3NlcnQoV2Vi
Vmlld1Rlc3Q6OmphdmFzY3JpcHRSZXN1bHRUb0Jvb2xlYW4oamF2YXNjcmlwdFJlc3VsdCkpOwor
fQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KTsKQEAg
LTExMDUsNiArMTE2Niw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBGb3JtQ2xpZW50VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgInN1Ym1pdC1mb3JtIiwgdGVzdFdlYlZpZXdTdWJtaXRGb3Jt
KTsKICAgICBTYXZlV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzYXZlIiwgdGVz
dFdlYlZpZXdTYXZlKTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInZp
ZXctbW9kZSIsIHRlc3RXZWJWaWV3TW9kZSk7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJwYWdlLXZpc2liaWxpdHkiLCB0ZXN0V2ViVmlld1BhZ2VWaXNpYmlsaXR5KTsK
IH0KIAogdm9pZCBhZnRlckFsbCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCShyZXZpc2lvbiAxNDQwNTgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw2ICsxNzUsMTUgQEAgc3RhdGljIGdib29sZWFuIHBh
cmVudFdpbmRvd01hcHBlZChHdGtXaQogICAgIHJldHVybiBGQUxTRTsKIH0KIAordm9pZCBXZWJW
aWV3VGVzdDo6c2hvd0luV2luZG93KEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKK3sKKyAgICBn
X2Fzc2VydCghbV9wYXJlbnRXaW5kb3cpOworICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRv
d19uZXcod2luZG93VHlwZSk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUiht
X3BhcmVudFdpbmRvdyksIEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9z
aG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1fcGFyZW50
V2luZG93KTsKK30KKwogdm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93QW5kV2FpdFVudGls
TWFwcGVkKEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKIHsKICAgICBnX2Fzc2VydCghbV9wYXJl
bnRXaW5kb3cpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
V2ViVmlld1Rlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCShyZXZpc2lvbiAxNDQwNTgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOwogICAgIHZvaWQgd2FpdFVudGlsVGl0bGVDaGFuZ2VkVG8oY29uc3QgY2hhciogZXhwZWN0
ZWRUaXRsZSk7CiAgICAgdm9pZCB3YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKyAgICB2b2lkIHNo
b3dJbldpbmRvdyhHdGtXaW5kb3dUeXBlID0gR1RLX1dJTkRPV19QT1BVUCk7CiAgICAgdm9pZCBz
aG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR3RrV2luZG93VHlwZSA9IEdUS19XSU5ET1df
UE9QVVApOwogICAgIHZvaWQgcmVzaXplVmlldyhpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAg
IGNvbnN0IGNoYXIqIG1haW5SZXNvdXJjZURhdGEoc2l6ZV90JiBtYWluUmVzb3VyY2VEYXRhU2l6
ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDQwNjcpCisrKyBTb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0w
Mi0yNiAgQW50b24gT2J6aGlyb3YgIDxhLm9iemhpcm92QHNhbXN1bmcuY29tPgorCisgICAgICAg
IFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQYWdlIFZpc2liaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MzI0CisKKyAgICAgICAgSW1wbGVtZW50
ZWQgYWNjZXNzIHRvIHBhZ2UgdmlzaWJpbGl0eSBBUEkgZm9yIEdUSyB0ZXN0IHJ1bm5lci4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OnNldFBhZ2VWaXNpYmlsaXR5KToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaDoKKwogMjAxMy0wMi0yNiAgTWFydGluIFJv
Ymluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE0
MzYxOSk6IENyYXNoZXMgaW4gdGhyZWUgbGF5b3V0IHRlc3RzCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAJKHJldmlzaW9uIDE0NDA1OCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgwNiwzICs4MDYsMTQgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldEF1dGhl
bgogewogICAgIHNfYXV0aGVudGljYXRpb25DYWxsYmFjayA9IGF1dGhlbnRpY2F0aW9uQ2FsbGJh
Y2s7CiB9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRQYWdlVmlzaWJpbGl0
eShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlIHZp
c2liaWxpdHlTdGF0ZSwgYm9vbCBpc0luaXRpYWxTdGF0ZSkKK3sKKyNpZiBFTkFCTEUoUEFHRV9W
SVNJQklMSVRZX0FQSSkKKyAgICBQYWdlKiBwYWdlID0gY29yZSh3ZWJWaWV3KTsKKyAgICBpZiAo
IXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIHBhZ2UtPnNldFZpc2liaWxpdHlTdGF0ZSh2
aXNpYmlsaXR5U3RhdGUsIGlzSW5pdGlhbFN0YXRlKTsKKyNlbmRpZgorfQpJbmRleDogU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrLmgJKHJldmlzaW9uIDE0NDA1OCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0a19oCiAKICNp
bmNsdWRlICJKU1N0cmluZ1JlZi5oIgorI2luY2x1ZGUgIlBhZ2VWaXNpYmlsaXR5U3RhdGUuaCIK
ICNpbmNsdWRlIDxhdGsvYXRrLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRkZWZpbmVzLmg+CkBAIC0xNDQsNiArMTQ1LDcgQEAgcHVibGljOgogICAgIHR5cGVk
ZWYgYm9vbCAoKkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2spIChDU3RyaW5nJiB1c2VybmFtZSwgQ1N0
cmluZyYgcGFzc3dvcmQpOwogICAgIHN0YXRpYyB2b2lkIHNldEF1dGhlbnRpY2F0aW9uQ2FsbGJh
Y2soQXV0aGVudGljYXRpb25DYWxsYmFjayk7CiAgICAgc3RhdGljIEF1dGhlbnRpY2F0aW9uQ2Fs
bGJhY2sgc19hdXRoZW50aWNhdGlvbkNhbGxiYWNrOworICAgIHN0YXRpYyB2b2lkIHNldFBhZ2VW
aXNpYmlsaXR5KFdlYktpdFdlYlZpZXcqLCBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlLCBi
b29sKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBzX2RydFJ1bjsKSW5kZXg6IFNvdXJj
ZS9hdXRvdG9vbHMvU2V0dXBXZWJLaXRGZWF0dXJlcy5tNAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
YXV0b3Rvb2xzL1NldHVwV2ViS2l0RmVhdHVyZXMubTQJKHJldmlzaW9uIDE0NDA1OCkKKysrIFNv
dXJjZS9hdXRvdG9vbHMvU2V0dXBXZWJLaXRGZWF0dXJlcy5tNAkod29ya2luZyBjb3B5KQpAQCAt
NzIsNyArNzIsNyBAQCByZWFkIC1kICcnIERFRkFVTFRfRkVBVFVSRV9ERUZJTkVTIDw8IkVPCiAJ
RU5BQkxFX05FVFdPUktfSU5GTz0wCiAJRU5BQkxFX05PVElGSUNBVElPTlM9MAogCUVOQUJMRV9P
UklFTlRBVElPTl9FVkVOVFM9MAotCUVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJPTAKKwlFTkFC
TEVfUEFHRV9WSVNJQklMSVRZX0FQST0xCiAJRU5BQkxFX1BFUkZPUk1BTkNFX1RJTUVMSU5FPTAK
IAlFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVD0xCiAJRU5BQkxFX1BST1hJTUlUWV9FVkVOVFM9MApJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTQ0MDY3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTMtMDItMjYgIEFudG9uIE9iemhpcm92ICA8YS5vYnpoaXJvdkBzYW1zdW5n
LmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgc3VwcG9ydCBmb3IgUGFnZSBWaXNpYmlsaXR5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzMyNAorCisg
ICAgICAgIEltcGxlbWVudGVkIHRlc3QgcnVubmVyIEFQSSBmb3IgcGFnZSB2aXNpYmlsaXR5IGxh
eW91dCB0ZXN0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9UZXN0UnVubmVyR3RrLmNwcDoKKyAgICAgICAgKFRl
c3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkpOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0
UGFnZVZpc2liaWxpdHkpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlz
dC5wbToKKwogMjAxMy0wMi0yNiAgVml2ZWsgR2FsYXRhZ2UgIDx2aXZlay52Z0BzYW1zdW5nLmNv
bT4KIAogICAgICAgICBuZXctY29tbWl0LWJvdDogU29tZSBJUkMgY2xpZW50cyBkb2Vzbid0IGxp
bmtpZnkgcm9sbG91dCBtZXNzYWdlcwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1Rl
c3RSdW5uZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9U
ZXN0UnVubmVyR3RrLmNwcAkocmV2aXNpb24gMTQ0MDU4KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDIsMTIgKzk0Miwy
NCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlTGVnYWN5V2ViTm90aWZpCiAKIHZvaWQgVGVz
dFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgorICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0
UGFnZVZpc2liaWxpdHkod2ViVmlldywgV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZVZpc2li
bGUsIHRydWUpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0
IGNoYXIqKQordm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBjaGFyKiB2
aXNpYmlsaXR5KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKKyAgICBTdHJpbmcgdmlzaWJpbGl0eVN0cmluZyh2aXNpYmlsaXR5KTsKKyAgICBXZWJDb3Jl
OjpQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSA9IFdlYkNvcmU6OlBhZ2VWaXNp
YmlsaXR5U3RhdGVWaXNpYmxlOworCisgICAgaWYgKHZpc2liaWxpdHlTdHJpbmcgPT0gInZpc2li
bGUiKQorICAgICAgICB2aXNpYmlsaXR5U3RhdGUgPSBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0
YXRlVmlzaWJsZTsKKyAgICBlbHNlIGlmICh2aXNpYmlsaXR5U3RyaW5nID09ICJoaWRkZW4iKQor
ICAgICAgICB2aXNpYmlsaXR5U3RhdGUgPSBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlSGlk
ZGVuOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpzZXRQYWdlVmlzaWJpbGl0eSh3ZWJWaWV3LCB2aXNpYmlsaXR5U3RhdGUsIGZhbHNl
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxl
ZChib29sKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQkocmV2
aXNpb24gMTQ0MDU4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBt
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNyArMzY5LDcgQEAgbXkgQGZlYXR1cmVzID0gKAogICAg
ICAgZGVmaW5lID0+ICJFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTIiwgZGVmYXVsdCA9PiBpc0Js
YWNrQmVycnkoKSwgdmFsdWUgPT4gXCRvcmllbnRhdGlvbkV2ZW50c1N1cHBvcnQgfSwKIAogICAg
IHsgb3B0aW9uID0+ICJwYWdlLXZpc2liaWxpdHktYXBpIiwgZGVzYyA9PiAiVG9nZ2xlIFBhZ2Ug
VmlzaWJpbGl0eSBBUEkgc3VwcG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV9QQUdFX1ZJ
U0lCSUxJVFlfQVBJIiwgZGVmYXVsdCA9PiAoaXNCbGFja0JlcnJ5KCkgfHwgaXNFZmwoKSksIHZh
bHVlID0+IFwkcGFnZVZpc2liaWxpdHlBUElTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVO
QUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJIiwgZGVmYXVsdCA9PiAoaXNCbGFja0JlcnJ5KCkgfHwg
aXNFZmwoKSB8fCBpc0d0aygpKSwgdmFsdWUgPT4gXCRwYWdlVmlzaWJpbGl0eUFQSVN1cHBvcnQg
fSwKIAogICAgIHsgb3B0aW9uID0+ICJwZXJmb3JtYW5jZS10aW1lbGluZSIsIGRlc2MgPT4gIlRv
Z2dsZSBQZXJmb3JtYW5jZSBUaW1lbGluZSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5B
QkxFX1BFUkZPUk1BTkNFX1RJTUVMSU5FIiwgZGVmYXVsdCA9PiBpc0d0aygpLCB2YWx1ZSA9PiBc
JHBlcmZvcm1hbmNlVGltZWxpbmVTdXBwb3J0IH0sCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDQwNjcp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBA
QAorMjAxMy0wMi0yNiAgQW50b24gT2J6aGlyb3YgIDxhLm9iemhpcm92QHNhbXN1bmcuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZvciBQYWdlIFZpc2liaWxpdHkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3MzI0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVz
dEV4cGVjdGF0aW9uczoKKwogMjAxMy0wMi0yNiAgU3RlcGhlbiBDaGVubmV5ICA8c2NoZW5uZXlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gTmV3IGJhc2VsaW5lcyBmb3IgY3Nz
My1tb2RzZWwtMTVjCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0
aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0
aW9ucwkocmV2aXNpb24gMTQ0MDU4KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RF
eHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTI1MiwxMyArMjUyLDYgQEAgd2Via2l0Lm9y
Zy9iLzk4OTQyIHN0b3JhZ2Uvc3RvcmFnZWluZm8tbgogd2Via2l0Lm9yZy9iLzk4OTQyIHN0b3Jh
Z2Uvc3RvcmFnZWluZm8tcXVlcnktdXNhZ2UuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9i
Lzk4OTQyIHN0b3JhZ2Uvc3RvcmFnZWluZm8tcmVxdWVzdC1xdW90YS5odG1sIFsgRmFpbHVyZSBd
CiAKLSMgVGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBQYWdlIFZpc2liaWxpdHkg
QVBJLgotd2Via2l0Lm9yZy9iLzk3MzI0IGZhc3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS1pZnJh
bWUtZGVsZXRlLXRlc3QuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzk3MzI0IGZhc3QvZXZl
bnRzL3BhZ2UtdmlzaWJpbGl0eS1pZnJhbWUtbW92ZS10ZXN0Lmh0bWwgWyBTa2lwIF0KLXdlYmtp
dC5vcmcvYi85NzMyNCBmYXN0L2V2ZW50cy9wYWdlLXZpc2liaWxpdHktaWZyYW1lLXByb3BhZ2F0
aW9uLXRlc3QuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzk3MzI0IGZhc3QvZXZlbnRzL3Bh
Z2UtdmlzaWJpbGl0eS1udWxsLXZpZXcuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzk3MzI0
IGZhc3QvZXZlbnRzL3BhZ2UtdmlzaWJpbGl0eS10cmFuc2l0aW9uLXRlc3QuaHRtbCBbIFNraXAg
XQotCiAjIEdUSyBkb2Vzbid0IHN1cHBvcnQgc21hcnQgcmVwbGFjZS4KIHdlYmtpdC5vcmcvYi82
MTY2MSBlZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1kcm9wLWxpc3QuaHRtbCBbIEZhaWx1cmUgXQog
Cg==
</data>
<flag name="review"
          id="210946"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>