<?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>96477</bug_id>
          
          <creation_ts>2012-09-12 00:50:16 -0700</creation_ts>
          <short_desc>[WK2][GTK] Add API to get the favicon for a WebKitWebView</short_desc>
          <delta_ts>2012-09-30 11:38:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>96476</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>718012</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-12 00:50:16 -0700</bug_when>
    <thetext>It would be nice if, besides of having a Favicons API implemented in WK2 (mostly as a wrapper of the IconDatabase), we would have also a way to easily get the favicon for a webview and get notified when it changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718244</commentid>
    <comment_count>1</comment_count>
      <attachid>163601</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-12 05:31:30 -0700</bug_when>
    <thetext>Created attachment 163601
Patch proposal (NO Unit tests yet)

Attaching a patch proposal for this issue, based on some work I&apos;ve been already doing locally and some comments/discussions with Carlos as well.

Not asking for a formal review yet because my intention with this attachment is to provide an easy way to review this initial version and to start iterating from it. In case everything kind of makes sense, I will start working on unit tests for this new API.

This patch depends on bug 96476 being fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718306</commentid>
    <comment_count>2</comment_count>
      <attachid>163601</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-12 06:46:09 -0700</bug_when>
    <thetext>Comment on attachment 163601
Patch proposal (NO Unit tests yet)

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

Add webkit_web_view_get_favicon to webkit2gtk-sections.txt file.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:155
&gt; +cairo_surface_t* webkitFaviconDatabaseGetFaviconSync(WebKitFaviconDatabase* database, const CString&amp; pageURL)

Remove the Sync suffix, it&apos;s private api and we know it&apos;s sync.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:254
&gt; +void webkitWebViewIconReadyCallback(WebKitFaviconDatabase *database, const char *uri, WebKitWebView *webView)

This should be static

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1797
&gt; + * Returns favicon currently associated to @web_view, if any. The
&gt; + * favicon might change during a load operation, but you can monitor
&gt; + * those changes by connecting to the notify::favicon signal of
&gt; + * @web_view.

Instead of might change, I would use something similar to other methods in WebKitWebView. 

You can connect to notify::favicon signal of @web_view to be notified when the favicon is available.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1800
&gt; + * Returns: (transfer full): the favicon currently associated the
&gt; + *    @web_view or %NULL if no favicon has been associated yet.

You should mention it&apos;s a #cairo_surface_t what is returned.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:254
&gt; +webkit_web_view_get_favicon                        (WebKitWebView*             webView);

WebKitWebView*             webView -&gt; WebKitWebView             *webView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727548</commentid>
    <comment_count>3</comment_count>
      <attachid>165591</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-25 05:39:23 -0700</bug_when>
    <thetext>Created attachment 165591
Patch proposal + Unit test

New patch proposal, addressing the issues pointed out by Carlos and adding new unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728337</commentid>
    <comment_count>4</comment_count>
      <attachid>165591</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-26 02:12:48 -0700</bug_when>
    <thetext>Comment on attachment 165591
Patch proposal + Unit test

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

Patch looks great, the unit tests part will probably need to be updated to the changes in bug #96476.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:241
&gt; +    iconFromWebView = webkit_web_view_get_favicon(test-&gt;m_webView.get());
&gt; +    g_assert(iconFromWebView);
&gt; +    cairo_surface_destroy(iconFromWebView);

I could check the icon contents, or simply that cairo_image_surface_get_width/height are &gt; 0

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:272
&gt; +    FaviconDatabaseTest::add(&quot;WebKitFaviconDatabase&quot;, &quot;get-favicon-from-webview&quot;, testGetFaviconFromWebView);

This could be FaviconDatabaseTest::add(&quot;WebKitWebView&quot;, &quot;favicon&quot;, testWebViewFavicon); since wew are testing web view api even if it&apos;s run in the favicon database test. We do that in other tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>729491</commentid>
    <comment_count>5</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-27 06:52:21 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 165591 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=165591&amp;action=review
&gt; 
&gt; Patch looks great, the unit tests part will probably need to be updated to the changes in bug #96476.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:241
&gt; &gt; +    iconFromWebView = webkit_web_view_get_favicon(test-&gt;m_webView.get());
&gt; &gt; +    g_assert(iconFromWebView);
&gt; &gt; +    cairo_surface_destroy(iconFromWebView);
&gt; 
&gt; I could check the icon contents, or simply that cairo_image_surface_get_width/height are &gt; 0
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:272
&gt; &gt; +    FaviconDatabaseTest::add(&quot;WebKitFaviconDatabase&quot;, &quot;get-favicon-from-webview&quot;, testGetFaviconFromWebView);
&gt; 
&gt; This could be FaviconDatabaseTest::add(&quot;WebKitWebView&quot;, &quot;favicon&quot;, testWebViewFavicon); since wew are testing web view api even if it&apos;s run in the favicon database test. We do that in other tests.

Thanks for the review. I&apos;ll address those issues when landing, as soon as bug 96476 is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731287</commentid>
    <comment_count>6</comment_count>
      <attachid>165591</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-09-30 01:00:32 -0700</bug_when>
    <thetext>Comment on attachment 165591
Patch proposal + Unit test

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:297
&gt; +    WebKitWebViewPrivate* priv = webView-&gt;priv;
&gt; +    WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv-&gt;context);

I&apos;ve noticed another minor detail here, you could move the webkit_web_context_get_favicon_database() after the early return, since most of the times you won&apos;t need the database.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:314
&gt; +    WebKitWebViewPrivate* priv = webView-&gt;priv;
&gt; +    WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv-&gt;context);
&gt; +
&gt; +    if (priv-&gt;watchForChangesInFaviconHandlerID)
&gt; +        g_signal_handler_disconnect(database, priv-&gt;watchForChangesInFaviconHandlerID);
&gt; +    priv-&gt;watchForChangesInFaviconHandlerID = 0;

Similar here. You could use an early return:

WebKitWebViewPrivate* priv = webView-&gt;priv;
if (!priv-&gt;watchForChangesInFaviconHandlerID)
    return;

WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv-&gt;context);
g_signal_handler_disconnect(database, priv-&gt;watchForChangesInFaviconHandlerID);
priv-&gt;watchForChangesInFaviconHandlerID = 0;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731308</commentid>
    <comment_count>7</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-09-30 11:38:39 -0700</bug_when>
    <thetext>Committed r129994: &lt;http://trac.webkit.org/changeset/129994&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163601</attachid>
            <date>2012-09-12 05:31:30 -0700</date>
            <delta_ts>2012-09-25 05:39:23 -0700</delta_ts>
            <desc>Patch proposal (NO Unit tests yet)</desc>
            <filename>0003-2012-09-12-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>13225</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA5MDgzYmMwZjZlNTM2MzM3ZDIyZTFkM2Y1Zjc1NzJlMmNkMDQwODhlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDEyIFNlcCAyMDEyIDE0OjE0OjAwICswMjAwClN1YmplY3Q6IFtQQVRD
SCAzLzNdIDIwMTItMDktMTIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgoKICAgICAgICBbV0syXVtHVEtdIEFkZCBBUEkgdG8gZ2V0IHRoZSBmYXZpY29uIGZvciBh
IFdlYktpdFdlYlZpZXcKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTY0NzcKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAg
IFByb3ZpZGUgYSBuZXcgc2ltcGxlIEFQSSB0byBzeW5jaHJvbm91c2x5IHRyeSB0byBnZXQgdGhl
IGZhdmljb24KICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSBXZWJWaWV3LCBpZiBhbnksIGFuZCB0
byBrZWVwIHRyYWNrIG9mIGNoYW5nZXMgb24KICAgICAgICBpdCwgdGhyb3VnaCBhIG5ldyBHT2Jq
ZWN0IHByb3BlcnR5LgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwOgogICAgICAgIChfV2ViS2l0V2ViVmlld1ByaXZhdGUpOgogICAgICAgICh3ZWJraXRXZWJW
aWV3SWNvblJlYWR5Q2FsbGJhY2spOiBDYWxsYmFjayB0byBoYW5kbGUgdGhlCiAgICAgICAgJ2lj
b24tcmVhZHknIHNpZ25hbCBjb21pbmcgZnJvbSBXZWJLaXRGYXZpY29uRGF0YWJhc2UuCiAgICAg
ICAgKHdlYmtpdFdlYlZpZXdXYXRjaEZvckNoYW5nZXNJbkZhdmljb24pOiBDb25uZWN0cyB0byB0
aGUKICAgICAgICAnaWNvbi1yZWFkeScgc2lnbmFsIGZyb20gV2ViS2l0RmF2aWNvbkRhdGFiYXNl
LCB0byBrZWVwIHRyYWNrIG9mCiAgICAgICAgY2hhbmdlcyBpbiBmYXZpY29ucywgdGhhdCBtdXN0
IGJlIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgdmlldy4KICAgICAgICAod2Via2l0V2ViVmlld0Rp
c2Nvbm5lY3RGYXZpY29uRGF0YWJhc2VTaWduYWxIYW5kbGVycyk6CiAgICAgICAgRGlzY29ubmVj
dHMgdGhlIGhhbmRsZXIgZm9yICdpY29uLXJlYWR5JyBpZiBuZWVkZWQuCiAgICAgICAgKHdlYmtp
dFdlYlZpZXdHZXRQcm9wZXJ0eSk6IFVwZGF0ZWQgZm9yIHRoZSBuZXcgImZhdmljb24iIHByb3Bl
cnR5IC4KICAgICAgICAod2Via2l0V2ViVmlld0ZpbmFsaXplKTogRGlzY29ubmVjdCB0aGUgbmV3
IHNpZ25hbCBoYW5kbGVyLgogICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IERl
ZmluaXRpb24gb2YgdGhlIG5ldyBwcm9wZXJ0eS4KICAgICAgICAod2Via2l0V2ViVmlld0VtaXRM
b2FkQ2hhbmdlZCk6IE1ha2Ugc3VyZSB3ZSB3aWxsIGJlIHdhdGNoaW5nIGZvcgogICAgICAgIGNo
YW5nZXMgaW4gdGhlIGZhdmljb24gZnJvbSBXRUJLSVRfTE9BRF9TVEFSVEVEIG9uLgogICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24pOiBOZXcgQVBJIGZ1bnRjaW9uLCByZXR1cm5p
bmcgdGhlCiAgICAgICAgY3VycmVudCBmYXZpY29uIGZvciB0aGUgV2ViVmlldywgaWYgYW55LCBv
ciBOVUxMIG90aGVyd2lzZS4KICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuaDoKCiAgICAgICAgSW50ZXJuYWxseSBleHBvc2UgYSB3YXkgdG8gdHJ5IHRvIGdldCB0aGUg
ZmF2aWNvbiBhc3NvY2lhdGVkIHRvIGEKICAgICAgICBwYWdlIFVSTCBzeW5jaHJvbm91c2x5LCB0
aHJvdWdoIFdlYktpdEZhdmljb25EYXRhYmFzZS4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwOgogICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJh
c2VHZXRGYXZpY29uU3luYyk6IE5ldyBpbnRlcm5hbCBmdW5jdGlvbiwgaXQKICAgICAgICB3aWxs
IHJldHVybiBlaXRoZXIgMCBvciBhIHZhbGlkIHBvaW50ZXIgdG8gYSBjYWlyb19zdXJmYWNlX3Qu
CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRl
Lmg6Ci0tLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAzNyArKysrKysrKysrKwogLi4uL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25E
YXRhYmFzZS5jcHAgICAgfCAxMiArKysrCiAuLi4vQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJh
c2VQcml2YXRlLmggICAgICAgICB8ICAxICsKIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXcuY3BwIHwgNzQgKysrKysrKysrKysrKysrKysrKysrLQogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oICAgfCAgMyArCiA1IGZp
bGVzIGNoYW5nZWQsIDEyNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDAzNWVjN2EuLjZjOTBiMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0MiBAQAogMjAxMi0w
OS0xMiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CiAKKyAgICAg
ICAgW1dLMl1bR1RLXSBBZGQgQVBJIHRvIGdldCB0aGUgZmF2aWNvbiBmb3IgYSBXZWJLaXRXZWJW
aWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjQ3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3Zp
ZGUgYSBuZXcgc2ltcGxlIEFQSSB0byBzeW5jaHJvbm91c2x5IHRyeSB0byBnZXQgdGhlIGZhdmlj
b24KKyAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGEgV2ViVmlldywgaWYgYW55LCBhbmQgdG8ga2Vl
cCB0cmFjayBvZiBjaGFuZ2VzIG9uCisgICAgICAgIGl0LCB0aHJvdWdoIGEgbmV3IEdPYmplY3Qg
cHJvcGVydHkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cDoKKyAgICAgICAgKF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRXZWJW
aWV3SWNvblJlYWR5Q2FsbGJhY2spOiBDYWxsYmFjayB0byBoYW5kbGUgdGhlCisgICAgICAgICdp
Y29uLXJlYWR5JyBzaWduYWwgY29taW5nIGZyb20gV2ViS2l0RmF2aWNvbkRhdGFiYXNlLgorICAg
ICAgICAod2Via2l0V2ViVmlld1dhdGNoRm9yQ2hhbmdlc0luRmF2aWNvbik6IENvbm5lY3RzIHRv
IHRoZQorICAgICAgICAnaWNvbi1yZWFkeScgc2lnbmFsIGZyb20gV2ViS2l0RmF2aWNvbkRhdGFi
YXNlLCB0byBrZWVwIHRyYWNrIG9mCisgICAgICAgIGNoYW5nZXMgaW4gZmF2aWNvbnMsIHRoYXQg
bXVzdCBiZSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHZpZXcuCisgICAgICAgICh3ZWJraXRXZWJW
aWV3RGlzY29ubmVjdEZhdmljb25EYXRhYmFzZVNpZ25hbEhhbmRsZXJzKToKKyAgICAgICAgRGlz
Y29ubmVjdHMgdGhlIGhhbmRsZXIgZm9yICdpY29uLXJlYWR5JyBpZiBuZWVkZWQuCisgICAgICAg
ICh3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHkpOiBVcGRhdGVkIGZvciB0aGUgbmV3ICJmYXZpY29u
IiBwcm9wZXJ0eSAuCisgICAgICAgICh3ZWJraXRXZWJWaWV3RmluYWxpemUpOiBEaXNjb25uZWN0
IHRoZSBuZXcgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3Nf
aW5pdCk6IERlZmluaXRpb24gb2YgdGhlIG5ldyBwcm9wZXJ0eS4KKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdFbWl0TG9hZENoYW5nZWQpOiBNYWtlIHN1cmUgd2Ugd2lsbCBiZSB3YXRjaGluZyBmb3IK
KyAgICAgICAgY2hhbmdlcyBpbiB0aGUgZmF2aWNvbiBmcm9tIFdFQktJVF9MT0FEX1NUQVJURUQg
b24uCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24pOiBOZXcgQVBJIGZ1bnRj
aW9uLCByZXR1cm5pbmcgdGhlCisgICAgICAgIGN1cnJlbnQgZmF2aWNvbiBmb3IgdGhlIFdlYlZp
ZXcsIGlmIGFueSwgb3IgTlVMTCBvdGhlcndpc2UuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oOgorCisgICAgICAgIEludGVybmFsbHkgZXhwb3NlIGEgd2F5IHRv
IHRyeSB0byBnZXQgdGhlIGZhdmljb24gYXNzb2NpYXRlZCB0byBhCisgICAgICAgIHBhZ2UgVVJM
IHN5bmNocm9ub3VzbHksIHRocm91Z2ggV2ViS2l0RmF2aWNvbkRhdGFiYXNlLgorCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb25TeW5jKTogTmV3IGludGVybmFsIGZ1bmN0
aW9uLCBpdAorICAgICAgICB3aWxsIHJldHVybiBlaXRoZXIgMCBvciBhIHZhbGlkIHBvaW50ZXIg
dG8gYSBjYWlyb19zdXJmYWNlX3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oOgorCisyMDEyLTA5LTEyICBNYXJpbyBTYW5jaGV6IFBy
YWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKwogICAgICAgICBbV0syXVtHVEtdIEltcGxlbWVu
dCBuZXcgRmF2aWNvbnMgQVBJCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NjQ3NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcAppbmRleCAzZDRjNjc5Li45ZmJj
MjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
YXZpY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKQEAgLTE1Miw2ICsxNTIsMTggQEAgV2ViS2l0RmF2
aWNvbkRhdGFiYXNlKiB3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUoV0tJY29uRGF0YWJhc2VS
ZWYgd2tJY29uRGF0YWIKICAgICByZXR1cm4gZmF2aWNvbkRhdGFiYXNlOwogfQogCitjYWlyb19z
dXJmYWNlX3QqIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb25TeW5jKFdlYktpdEZhdmlj
b25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IENTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgQVNT
RVJUKFdFQktJVF9JU19GQVZJQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7CisgICAgQVNTRVJUKCFw
YWdlVVJMLmlzTnVsbCgpKTsKKworICAgIGNhaXJvX3N1cmZhY2VfdCogaWNvblN1cmZhY2UgPSBn
ZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIFN0cmluZzo6ZnJvbVVURjgocGFn
ZVVSTC5kYXRhKCkpKTsKKyAgICBpZiAoIWljb25TdXJmYWNlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShpY29uU3VyZmFjZSk7Cit9CisK
IHN0YXRpYyBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIHdlYmtpdEZhdmljb25EYXRhYmFzZUdl
dE9yQ3JlYXRlUmVxdWVzdHMoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3Qg
U3RyaW5nJiBwYWdlVVJMKQogewogICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMg
PSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQocGFnZVVSTCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0
YWJhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
YXZpY29uRGF0YWJhc2VQcml2YXRlLmgKaW5kZXggNDRkNmMwYi4uNmI5NjE1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNl
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZh
dmljb25EYXRhYmFzZVByaXZhdGUuaApAQCAtMjYsNSArMjYsNiBAQAogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiB3ZWJraXRGYXZpY29uRGF0
YWJhc2VDcmVhdGUoV0tJY29uRGF0YWJhc2VSZWYpOworY2Fpcm9fc3VyZmFjZV90KiB3ZWJraXRG
YXZpY29uRGF0YWJhc2VHZXRGYXZpY29uU3luYyhXZWJLaXRGYXZpY29uRGF0YWJhc2UqLCBjb25z
dCBDU3RyaW5nJik7CiAKICNlbmRpZiAvLyBXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAKaW5kZXggZWU4NmQ0NC4uMGY4NjE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJXZWJLaXRDb250ZXh0TWVudVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRFbnVtVHlw
ZXMuaCIKICNpbmNsdWRlICJXZWJLaXRFcnJvci5oIgorI2luY2x1ZGUgIldlYktpdEZhdmljb25E
YXRhYmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRGb3JtQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0RnVsbHNjcmVlbkNsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdEhpdFRlc3RSZXN1
bHRQcml2YXRlLmgiCkBAIC0xMDIsNiArMTAzLDcgQEAgZW51bSB7CiAgICAgUFJPUF9XRUJfQ09O
VEVYVCwKICAgICBQUk9QX1RJVExFLAogICAgIFBST1BfRVNUSU1BVEVEX0xPQURfUFJPR1JFU1Ms
CisgICAgUFJPUF9GQVZJQ09OLAogICAgIFBST1BfVVJJLAogICAgIFBST1BfWk9PTV9MRVZFTAog
fTsKQEAgLTExOCw2ICsxMjAsNyBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsKIAog
ICAgIGJvb2wgd2FpdGluZ0Zvck1haW5SZXNvdXJjZTsKICAgICBndWxvbmcgbWFpblJlc291cmNl
UmVzcG9uc2VIYW5kbGVySUQ7CisgICAgZ3Vsb25nIHdhdGNoRm9yQ2hhbmdlc0luRmF2aWNvbkhh
bmRsZXJJRDsKICAgICBXZWJLaXRMb2FkRXZlbnQgbGFzdERlbGF5ZWRFdmVudDsKIAogICAgIEdS
ZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRMaXN0PiBiYWNrRm9yd2FyZExpc3Q7CkBAIC0yNDgsNiAr
MjUxLDE1IEBAIHN0YXRpYyB2b2lkIHpvb21UZXh0T25seUNoYW5nZWQoV2ViS2l0U2V0dGluZ3Mq
IHNldHRpbmdzLCBHUGFyYW1TcGVjKiwgV2ViS2l0V2ViCiAgICAgV0tQYWdlU2V0UGFnZUFuZFRl
eHRab29tRmFjdG9ycyh3a1BhZ2UsIHBhZ2Vab29tTGV2ZWwsIHRleHRab29tTGV2ZWwpOwogfQog
Cit2b2lkIHdlYmtpdFdlYlZpZXdJY29uUmVhZHlDYWxsYmFjayhXZWJLaXRGYXZpY29uRGF0YWJh
c2UgKmRhdGFiYXNlLCBjb25zdCBjaGFyICp1cmksIFdlYktpdFdlYlZpZXcgKndlYlZpZXcpCit7
CisgICAgLy8gQ29uc2lkZXIgb25seSB0aGUgaWNvbiBtYXRjaGluZyB0aGUgYWN0aXZlIFVSSSBm
b3IgdGhpcyB3ZWJ2aWV3LgorICAgIGlmICh3ZWJWaWV3LT5wcml2LT5hY3RpdmVVUkkgIT0gdXJp
KQorICAgICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmll
dyksICJmYXZpY29uIik7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRTZXR0aW5n
cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MsIFdLUGFn
ZVJlZiB3a1BhZ2UpCiB7CiAgICAgd2ViVmlldy0+cHJpdi0+c2V0dGluZ3MgPSBzZXR0aW5nczsK
QEAgLTI3Miw2ICsyODQsMjkgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RN
YWluUmVzb3VyY2VSZXNwb25zZUNoYW5nZWRTaWduYWxIYW5kbGVyKFdlYksKICAgICBwcml2LT5t
YWluUmVzb3VyY2VSZXNwb25zZUhhbmRsZXJJRCA9IDA7CiB9CiAKK3N0YXRpYyB2b2lkIHdlYmtp
dFdlYlZpZXdXYXRjaEZvckNoYW5nZXNJbkZhdmljb24oV2ViS2l0V2ViVmlldyogd2ViVmlldykK
K3sKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAg
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
ZmF2aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB3ZSBv
bmx5IGNvbm5lY3QgdG8gdGhpcyBzaWduYWwgb25jZSBwZXIgdmlldy4KKyAgICBpZiAocHJpdi0+
d2F0Y2hGb3JDaGFuZ2VzSW5GYXZpY29uSGFuZGxlcklEKQorICAgICAgICByZXR1cm47CisKKyAg
ICBwcml2LT53YXRjaEZvckNoYW5nZXNJbkZhdmljb25IYW5kbGVySUQgPQorICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KGRhdGFiYXNlLCAiaWNvbi1yZWFkeSIsIEdfQ0FMTEJBQ0sod2Via2l0V2Vi
Vmlld0ljb25SZWFkeUNhbGxiYWNrKSwgd2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dFdlYlZpZXdEaXNjb25uZWN0RmF2aWNvbkRhdGFiYXNlU2lnbmFsSGFuZGxlcnMoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKK3sKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZp
ZXctPnByaXY7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0KTsKKworICAgIGlm
IChwcml2LT53YXRjaEZvckNoYW5nZXNJbkZhdmljb25IYW5kbGVySUQpCisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJfZGlzY29ubmVjdChkYXRhYmFzZSwgcHJpdi0+d2F0Y2hGb3JDaGFuZ2VzSW5G
YXZpY29uSGFuZGxlcklEKTsKKyAgICBwcml2LT53YXRjaEZvckNoYW5nZXNJbkZhdmljb25IYW5k
bGVySUQgPSAwOworfQorCiBzdGF0aWMgdm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2Fs
bGJhY2soR3RrRGlhbG9nKiBkaWFsb2csIGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNob29z
ZXJSZXF1ZXN0KiByZXF1ZXN0KQogewogICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0PiBhZG9wdGVkUmVxdWVzdCA9IGFkb3B0R1JlZihyZXF1ZXN0KTsKQEAgLTM3Myw2ICs0MDgs
OSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdQogICAgIGNhc2UgUFJPUF9FU1RJTUFURURfTE9B
RF9QUk9HUkVTUzoKICAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2VzdGltYXRlZF9sb2FkX3Byb2dyZXNzKHdlYlZpZXcpKTsKICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0ZBVklDT046CisgICAgICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIo
dmFsdWUsIHdlYmtpdF93ZWJfdmlld19nZXRfZmF2aWNvbih3ZWJWaWV3KSk7CisgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgUFJPUF9VUkk6CiAgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1
ZSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOwogICAgICAgICBicmVhazsKQEAg
LTM5OCw2ICs0MzYsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3RmluYWxpemUoR09iamVj
dCogb2JqZWN0KQogCiAgICAgd2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RNYWluUmVzb3VyY2VSZXNw
b25zZUNoYW5nZWRTaWduYWxIYW5kbGVyKHdlYlZpZXcpOwogICAgIHdlYmtpdFdlYlZpZXdEaXNj
b25uZWN0U2V0dGluZ3NTaWduYWxIYW5kbGVycyh3ZWJWaWV3KTsKKyAgICB3ZWJraXRXZWJWaWV3
RGlzY29ubmVjdEZhdmljb25EYXRhYmFzZVNpZ25hbEhhbmRsZXJzKHdlYlZpZXcpOwogCiAgICAg
cHJpdi0+fldlYktpdFdlYlZpZXdQcml2YXRlKCk7CiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CkBAIC00ODUsNiArNTI0
LDE4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZp
ZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLjAsIDEuMCwgMC4wLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OmZhdmljb246CisgICAgICoKKyAg
ICAgKiBUaGUgZmF2aWNvbiBjdXJyZW50bHkgYXNzb2NpYXRlZCB0byB0aGUgI1dlYktpdFdlYlZp
ZXcuCisgICAgICogU2VlIHdlYmtpdF93ZWJfdmlld19nZXRfZmF2aWNvbigpIGZvciBtb3JlIGRl
dGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnT2Jq
ZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0ZBVklD
T04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfcG9p
bnRlcigiZmF2aWNvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJGYXZpY29uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgZmF2aWNvbiBhc3NvY2lhdGVk
IHRvIHRoZSB2aWV3LCBpZiBhbnkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgIC8q
KgogICAgICAqIFdlYktpdFdlYlZpZXc6dXJpOgogICAgICAqCiAgICAgICogVGhlIGN1cnJlbnQg
YWN0aXZlIFVSSSBvZiB0aGUgI1dlYktpdFdlYlZpZXcuCkBAIC0xMTEwLDcgKzExNjEsOSBAQCBz
dGF0aWMgdm9pZCBzZXRDZXJ0aWZpY2F0ZVRvTWFpblJlc291cmNlKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdFbWl0TG9hZENoYW5nZWQoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCkKIHsKLSAgICBpZiAo
bG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7CisgICAgaWYgKGxvYWRFdmVudCA9
PSBXRUJLSVRfTE9BRF9TVEFSVEVEKSB7CisgICAgICAgIHdlYmtpdFdlYlZpZXdXYXRjaEZvckNo
YW5nZXNJbkZhdmljb24od2ViVmlldyk7CisgICAgfSBlbHNlIGlmIChsb2FkRXZlbnQgPT0gV0VC
S0lUX0xPQURfRklOSVNIRUQpIHsKICAgICAgICAgd2ViVmlldy0+cHJpdi0+d2FpdGluZ0Zvck1h
aW5SZXNvdXJjZSA9IGZhbHNlOwogICAgICAgICB3ZWJraXRXZWJWaWV3RGlzY29ubmVjdE1haW5S
ZXNvdXJjZVJlc3BvbnNlQ2hhbmdlZFNpZ25hbEhhbmRsZXIod2ViVmlldyk7CiAgICAgfSBlbHNl
CkBAIC0xNzM1LDYgKzE3ODgsMjUgQEAgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2Nhbl9nb19m
b3J3YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB9CiAKIC8qKgorICogd2Via2l0X3dlYl92
aWV3X2dldF9mYXZpY29uOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICog
UmV0dXJucyBmYXZpY29uIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIEB3ZWJfdmlldywgaWYgYW55
LiBUaGUKKyAqIGZhdmljb24gbWlnaHQgY2hhbmdlIGR1cmluZyBhIGxvYWQgb3BlcmF0aW9uLCBi
dXQgeW91IGNhbiBtb25pdG9yCisgKiB0aG9zZSBjaGFuZ2VzIGJ5IGNvbm5lY3RpbmcgdG8gdGhl
IG5vdGlmeTo6ZmF2aWNvbiBzaWduYWwgb2YKKyAqIEB3ZWJfdmlldy4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IHRoZSBmYXZpY29uIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRoZQor
ICogICAgQHdlYl92aWV3IG9yICVOVUxMIGlmIG5vIGZhdmljb24gaGFzIGJlZW4gYXNzb2NpYXRl
ZCB5ZXQuCisgKi8KK2NhaXJvX3N1cmZhY2VfdCogd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29u
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2Uq
IGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHdlYlZp
ZXctPnByaXYtPmNvbnRleHQpOworICAgIHJldHVybiB3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRG
YXZpY29uU3luYyhkYXRhYmFzZSwgd2ViVmlldy0+cHJpdi0+YWN0aXZlVVJJKTsKK30KKworLyoq
CiAgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaToKICAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2Vi
VmlldwogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuaAppbmRleCA1NDAwMTRhLi40NzNiNmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0yNTAsNiArMjUwLDkgQEAgd2Vi
a2l0X3dlYl92aWV3X2dvX2ZvcndhcmQgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKncKIFdFQktJVF9BUEkgZ2Jvb2xlYW4KIHdlYmtpdF93ZWJfdmll
d19jYW5fZ29fZm9yd2FyZCAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICp3ZWJfdmlldyk7CiAKK1dFQktJVF9BUEkgY2Fpcm9fc3VyZmFjZV90ICoKK3dlYmtp
dF93ZWJfdmlld19nZXRfZmF2aWNvbiAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJW
aWV3KiAgICAgICAgICAgICB3ZWJWaWV3KTsKKwogV0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2Fy
ZExpc3QgKgogd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCAgICAgICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAotLSAKMS43LjExLjQK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165591</attachid>
            <date>2012-09-25 05:39:23 -0700</date>
            <delta_ts>2012-09-30 01:00:32 -0700</delta_ts>
            <desc>Patch proposal + Unit test</desc>
            <filename>0003-2012-09-12-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>17492</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA5NzIzNTRhZjMxMzgxZWJmMDZlOGMzMTlmYmE4Y2Y3NWE5ZmFiODZmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUdWUsIDI1IFNlcCAyMDEyIDEzOjQwOjQwICswMzAwClN1YmplY3Q6IFtQQVRD
SCAzLzNdIDIwMTItMDktMTIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgoKICAgICAgICBbV0syXVtHVEtdIEFkZCBBUEkgdG8gZ2V0IHRoZSBmYXZpY29uIGZvciBh
IFdlYktpdFdlYlZpZXcKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTY0NzcKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAg
IFByb3ZpZGUgYSBuZXcgc2ltcGxlIEFQSSB0byBzeW5jaHJvbm91c2x5IHRyeSB0byBnZXQgdGhl
IGZhdmljb24KICAgICAgICBhc3NvY2lhdGVkIHdpdGggYSBXZWJWaWV3LCBpZiBhbnksIGFuZCB0
byBrZWVwIHRyYWNrIG9mIGNoYW5nZXMgb24KICAgICAgICBpdCwgdGhyb3VnaCBhIG5ldyBHT2Jq
ZWN0IHByb3BlcnR5LgoKICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwOgogICAgICAgIChfV2ViS2l0V2ViVmlld1ByaXZhdGUpOgogICAgICAgICh3ZWJraXRXZWJW
aWV3SWNvblJlYWR5Q2FsbGJhY2spOiBDYWxsYmFjayB0byBoYW5kbGUgdGhlCiAgICAgICAgJ2lj
b24tcmVhZHknIHNpZ25hbCBjb21pbmcgZnJvbSBXZWJLaXRGYXZpY29uRGF0YWJhc2UuCiAgICAg
ICAgKHdlYmtpdFdlYlZpZXdXYXRjaEZvckNoYW5nZXNJbkZhdmljb24pOiBDb25uZWN0cyB0byB0
aGUKICAgICAgICAnaWNvbi1yZWFkeScgc2lnbmFsIGZyb20gV2ViS2l0RmF2aWNvbkRhdGFiYXNl
LCB0byBrZWVwIHRyYWNrIG9mCiAgICAgICAgY2hhbmdlcyBpbiBmYXZpY29ucywgdGhhdCBtdXN0
IGJlIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgdmlldy4KICAgICAgICAod2Via2l0V2ViVmlld0Rp
c2Nvbm5lY3RGYXZpY29uRGF0YWJhc2VTaWduYWxIYW5kbGVycyk6CiAgICAgICAgRGlzY29ubmVj
dHMgdGhlIGhhbmRsZXIgZm9yICdpY29uLXJlYWR5JyBpZiBuZWVkZWQuCiAgICAgICAgKHdlYmtp
dFdlYlZpZXdHZXRQcm9wZXJ0eSk6IFVwZGF0ZWQgZm9yIHRoZSBuZXcgImZhdmljb24iIHByb3Bl
cnR5IC4KICAgICAgICAod2Via2l0V2ViVmlld0ZpbmFsaXplKTogRGlzY29ubmVjdCB0aGUgbmV3
IHNpZ25hbCBoYW5kbGVyLgogICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IERl
ZmluaXRpb24gb2YgdGhlIG5ldyBwcm9wZXJ0eS4KICAgICAgICAod2Via2l0V2ViVmlld0VtaXRM
b2FkQ2hhbmdlZCk6IE1ha2Ugc3VyZSB3ZSB3aWxsIGJlIHdhdGNoaW5nIGZvcgogICAgICAgIGNo
YW5nZXMgaW4gdGhlIGZhdmljb24gZnJvbSBXRUJLSVRfTE9BRF9TVEFSVEVEIG9uLgogICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24pOiBOZXcgQVBJIGZ1bnRjaW9uLCByZXR1cm5p
bmcgdGhlCiAgICAgICAgY3VycmVudCBmYXZpY29uIGZvciB0aGUgV2ViVmlldywgaWYgYW55LCBv
ciBOVUxMIG90aGVyd2lzZS4KICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuaDoKCiAgICAgICAgSW50ZXJuYWxseSBleHBvc2UgYSB3YXkgdG8gdHJ5IHRvIGdldCB0aGUg
ZmF2aWNvbiBhc3NvY2lhdGVkIHRvIGEKICAgICAgICBwYWdlIFVSTCBzeW5jaHJvbm91c2x5LCB0
aHJvdWdoIFdlYktpdEZhdmljb25EYXRhYmFzZS4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwOgogICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJh
c2VHZXRGYXZpY29uU3luYyk6IE5ldyBpbnRlcm5hbCBmdW5jdGlvbiwgaXQKICAgICAgICB3aWxs
IHJldHVybiBlaXRoZXIgMCBvciBhIHZhbGlkIHBvaW50ZXIgdG8gYSBjYWlyb19zdXJmYWNlX3Qu
CiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRl
Lmg6CgogICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBjaGVja2luZyB0aGlzIG5ldyBBUEkuCgog
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFz
ZS5jcHA6CiAgICAgICAgKHRlc3RHZXRGYXZpY29uRnJvbVdlYlZpZXcpOiBOZXcgdW5pdCB0ZXN0
LgogICAgICAgIChiZWZvcmVBbGwpOiBBZGQgdGhlIHRlc3QgdG8gdGhlIHRlc3Qgc3VpdGUuCi0t
LQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0
MyArKysrKysrKysrKysrCiAuLi4vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFi
YXNlLmNwcCAgICB8IDEyICsrKysKIC4uLi9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVBy
aXZhdGUuaCAgICAgICAgIHwgIDIgKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHAgfCA3MyArKysrKysrKysrKysrKysrKysrKystCiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggICB8ICAzICsKIC4uLi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IHwgIDEgKwogLi4uL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAgICAgfCAyNiArKysrKysr
KwogNyBmaWxlcyBjaGFuZ2VkLCAxNTkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCBjZmFiMDg3Li45YTVmNzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDggQEAK
IDIwMTItMDktMTIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgog
CisgICAgICAgIFtXSzJdW0dUS10gQWRkIEFQSSB0byBnZXQgdGhlIGZhdmljb24gZm9yIGEgV2Vi
S2l0V2ViVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTY0NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcm92aWRlIGEgbmV3IHNpbXBsZSBBUEkgdG8gc3luY2hyb25vdXNseSB0cnkgdG8gZ2V0IHRo
ZSBmYXZpY29uCisgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBhIFdlYlZpZXcsIGlmIGFueSwgYW5k
IHRvIGtlZXAgdHJhY2sgb2YgY2hhbmdlcyBvbgorICAgICAgICBpdCwgdGhyb3VnaCBhIG5ldyBH
T2JqZWN0IHByb3BlcnR5LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHA6CisgICAgICAgIChfV2ViS2l0V2ViVmlld1ByaXZhdGUpOgorICAgICAgICAod2Vi
a2l0V2ViVmlld0ljb25SZWFkeUNhbGxiYWNrKTogQ2FsbGJhY2sgdG8gaGFuZGxlIHRoZQorICAg
ICAgICAnaWNvbi1yZWFkeScgc2lnbmFsIGNvbWluZyBmcm9tIFdlYktpdEZhdmljb25EYXRhYmFz
ZS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdXYXRjaEZvckNoYW5nZXNJbkZhdmljb24pOiBDb25u
ZWN0cyB0byB0aGUKKyAgICAgICAgJ2ljb24tcmVhZHknIHNpZ25hbCBmcm9tIFdlYktpdEZhdmlj
b25EYXRhYmFzZSwgdG8ga2VlcCB0cmFjayBvZgorICAgICAgICBjaGFuZ2VzIGluIGZhdmljb25z
LCB0aGF0IG11c3QgYmUgcmVsYXRlZCB0byB0aGUgY3VycmVudCB2aWV3LgorICAgICAgICAod2Vi
a2l0V2ViVmlld0Rpc2Nvbm5lY3RGYXZpY29uRGF0YWJhc2VTaWduYWxIYW5kbGVycyk6CisgICAg
ICAgIERpc2Nvbm5lY3RzIHRoZSBoYW5kbGVyIGZvciAnaWNvbi1yZWFkeScgaWYgbmVlZGVkLgor
ICAgICAgICAod2Via2l0V2ViVmlld0dldFByb3BlcnR5KTogVXBkYXRlZCBmb3IgdGhlIG5ldyAi
ZmF2aWNvbiIgcHJvcGVydHkgLgorICAgICAgICAod2Via2l0V2ViVmlld0ZpbmFsaXplKTogRGlz
Y29ubmVjdCB0aGUgbmV3IHNpZ25hbCBoYW5kbGVyLgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2NsYXNzX2luaXQpOiBEZWZpbml0aW9uIG9mIHRoZSBuZXcgcHJvcGVydHkuCisgICAgICAgICh3
ZWJraXRXZWJWaWV3RW1pdExvYWRDaGFuZ2VkKTogTWFrZSBzdXJlIHdlIHdpbGwgYmUgd2F0Y2hp
bmcgZm9yCisgICAgICAgIGNoYW5nZXMgaW4gdGhlIGZhdmljb24gZnJvbSBXRUJLSVRfTE9BRF9T
VEFSVEVEIG9uLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKTogTmV3IEFQ
SSBmdW50Y2lvbiwgcmV0dXJuaW5nIHRoZQorICAgICAgICBjdXJyZW50IGZhdmljb24gZm9yIHRo
ZSBXZWJWaWV3LCBpZiBhbnksIG9yIE5VTEwgb3RoZXJ3aXNlLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKworICAgICAgICBJbnRlcm5hbGx5IGV4cG9zZSBh
IHdheSB0byB0cnkgdG8gZ2V0IHRoZSBmYXZpY29uIGFzc29jaWF0ZWQgdG8gYQorICAgICAgICBw
YWdlIFVSTCBzeW5jaHJvbm91c2x5LCB0aHJvdWdoIFdlYktpdEZhdmljb25EYXRhYmFzZS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHA6Cisg
ICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uU3luYyk6IE5ldyBpbnRlcm5h
bCBmdW5jdGlvbiwgaXQKKyAgICAgICAgd2lsbCByZXR1cm4gZWl0aGVyIDAgb3IgYSB2YWxpZCBw
b2ludGVyIHRvIGEgY2Fpcm9fc3VyZmFjZV90LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaDoKKworICAgICAgICBBZGQgdW5pdCB0ZXN0
cyBmb3IgY2hlY2tpbmcgdGhpcyBuZXcgQVBJLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHA6CisgICAgICAgICh0ZXN0R2V0
RmF2aWNvbkZyb21XZWJWaWV3KTogTmV3IHVuaXQgdGVzdC4KKyAgICAgICAgKGJlZm9yZUFsbCk6
IEFkZCB0aGUgdGVzdCB0byB0aGUgdGVzdCBzdWl0ZS4KKworMjAxMi0wOS0xMiAgTWFyaW8gU2Fu
Y2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKICAgICAgICAgW1dLMl1bR1RLXSBJ
bXBsZW1lbnQgbmV3IEZhdmljb25zIEFQSQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTY0NzYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKaW5kZXggNGUwM2Nh
Ny4uNWYzZjA5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCkBAIC0xODcsNiArMTg3LDE4IEBAIFdl
YktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKFdlYkljb25E
YXRhYmFzZSogaWNvbkRhdGFiYXNlCiAgICAgcmV0dXJuIGZhdmljb25EYXRhYmFzZTsKIH0KIAor
Y2Fpcm9fc3VyZmFjZV90KiB3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uKFdlYktpdEZh
dmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IENTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAg
QVNTRVJUKFdFQktJVF9JU19GQVZJQ09OX0RBVEFCQVNFKGRhdGFiYXNlKSk7CisgICAgQVNTRVJU
KCFwYWdlVVJMLmlzTnVsbCgpKTsKKworICAgIGNhaXJvX3N1cmZhY2VfdCogaWNvblN1cmZhY2Ug
PSBnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoZGF0YWJhc2UsIFN0cmluZzo6ZnJvbVVURjgo
cGFnZVVSTC5kYXRhKCkpKTsKKyAgICBpZiAoIWljb25TdXJmYWNlKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShpY29uU3VyZmFjZSk7Cit9
CisKIHN0YXRpYyBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGdldE9yQ3JlYXRlUGVuZGluZ0lj
b25SZXF1ZXN0cyhXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcm
IHBhZ2VVUkwpCiB7CiAgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBpY29ucyA9IGRhdGFi
YXNlLT5wcml2LT5wZW5kaW5nSWNvblJlcXVlc3RzLmdldChwYWdlVVJMKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25E
YXRhYmFzZVByaXZhdGUuaAppbmRleCAwYTk5MzIxLi5lOTIwOTU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRh
dGFiYXNlUHJpdmF0ZS5oCkBAIC0yMiw3ICsyMiw5IEBACiAKICNpbmNsdWRlICJXZWJJY29uRGF0
YWJhc2UuaCIKICNpbmNsdWRlICJXZWJLaXRGYXZpY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIFdlYktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0RmF2aWNv
bkRhdGFiYXNlQ3JlYXRlKFdlYktpdDo6V2ViSWNvbkRhdGFiYXNlKik7CitjYWlyb19zdXJmYWNl
X3QqIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb24oV2ViS2l0RmF2aWNvbkRhdGFiYXNl
KiwgY29uc3QgQ1N0cmluZyYpOwogCiAjZW5kaWYgLy8gV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJp
dmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwCmluZGV4IDFlNmFhN2YuLmZiOTFjMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
RW51bVR5cGVzLmgiCiAjaW5jbHVkZSAiV2ViS2l0RXJyb3IuaCIKKyNpbmNsdWRlICJXZWJLaXRG
YXZpY29uRGF0YWJhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Rm9ybUNsaWVudC5oIgog
I2luY2x1ZGUgIldlYktpdEZ1bGxzY3JlZW5DbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRIaXRU
ZXN0UmVzdWx0UHJpdmF0ZS5oIgpAQCAtMTAyLDYgKzEwMyw3IEBAIGVudW0gewogICAgIFBST1Bf
V0VCX0NPTlRFWFQsCiAgICAgUFJPUF9USVRMRSwKICAgICBQUk9QX0VTVElNQVRFRF9MT0FEX1BS
T0dSRVNTLAorICAgIFBST1BfRkFWSUNPTiwKICAgICBQUk9QX1VSSSwKICAgICBQUk9QX1pPT01f
TEVWRUwKIH07CkBAIC0xMTgsNiArMTIwLDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0
ZSB7CiAKICAgICBib29sIHdhaXRpbmdGb3JNYWluUmVzb3VyY2U7CiAgICAgZ3Vsb25nIG1haW5S
ZXNvdXJjZVJlc3BvbnNlSGFuZGxlcklEOworICAgIGd1bG9uZyB3YXRjaEZvckNoYW5nZXNJbkZh
dmljb25IYW5kbGVySUQ7CiAgICAgV2ViS2l0TG9hZEV2ZW50IGxhc3REZWxheWVkRXZlbnQ7CiAK
ICAgICBHUmVmUHRyPFdlYktpdEJhY2tGb3J3YXJkTGlzdD4gYmFja0ZvcndhcmRMaXN0OwpAQCAt
MjU0LDYgKzI1NywxNSBAQCBzdGF0aWMgdm9pZCB1c2VyQWdlbnRDaGFuZ2VkKFdlYktpdFNldHRp
bmdzKiBzZXR0aW5ncywgR1BhcmFtU3BlYyosIFdlYktpdFdlYlZpZQogICAgIFdLUGFnZVNldEN1
c3RvbVVzZXJBZ2VudCh0b0FQSSh3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9W
SUVXX0JBU0Uod2ViVmlldykpKSwgdXNlckFnZW50LmdldCgpKTsKIH0KIAorc3RhdGljIHZvaWQg
aWNvblJlYWR5Q2FsbGJhY2soV2ViS2l0RmF2aWNvbkRhdGFiYXNlICpkYXRhYmFzZSwgY29uc3Qg
Y2hhciAqdXJpLCBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3KQoreworICAgIC8vIENvbnNpZGVyIG9u
bHkgdGhlIGljb24gbWF0Y2hpbmcgdGhlIGFjdGl2ZSBVUkkgZm9yIHRoaXMgd2Vidmlldy4KKyAg
ICBpZiAod2ViVmlldy0+cHJpdi0+YWN0aXZlVVJJICE9IHVyaSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHdlYlZpZXcpLCAiZmF2aWNvbiIpOworfQor
CiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0U2V0dGluZ3MoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzLCBXS1BhZ2VSZWYgd2tQYWdlKQogewogICAg
IHdlYlZpZXctPnByaXYtPnNldHRpbmdzID0gc2V0dGluZ3M7CkBAIC0yNzksNiArMjkxLDI5IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0TWFpblJlc291cmNlUmVzcG9uc2VD
aGFuZ2VkU2lnbmFsSGFuZGxlcihXZWJLCiAgICAgcHJpdi0+bWFpblJlc291cmNlUmVzcG9uc2VI
YW5kbGVySUQgPSAwOwogfQogCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3V2F0Y2hGb3JDaGFu
Z2VzSW5GYXZpY29uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgV2ViS2l0V2ViVmll
d1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgIFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UocHJp
di0+Y29udGV4dCk7CisKKyAgICAvLyBNYWtlIHN1cmUgd2Ugb25seSBjb25uZWN0IHRvIHRoaXMg
c2lnbmFsIG9uY2UgcGVyIHZpZXcuCisgICAgaWYgKHByaXYtPndhdGNoRm9yQ2hhbmdlc0luRmF2
aWNvbkhhbmRsZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+d2F0Y2hGb3JDaGFu
Z2VzSW5GYXZpY29uSGFuZGxlcklEID0KKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkYXRhYmFz
ZSwgImljb24tcmVhZHkiLCBHX0NBTExCQUNLKGljb25SZWFkeUNhbGxiYWNrKSwgd2ViVmlldyk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0RmF2aWNvbkRhdGFiYXNl
U2lnbmFsSGFuZGxlcnMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBXZWJLaXRXZWJW
aWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgV2ViS2l0RmF2aWNvbkRhdGFi
YXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShw
cml2LT5jb250ZXh0KTsKKworICAgIGlmIChwcml2LT53YXRjaEZvckNoYW5nZXNJbkZhdmljb25I
YW5kbGVySUQpCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChkYXRhYmFzZSwg
cHJpdi0+d2F0Y2hGb3JDaGFuZ2VzSW5GYXZpY29uSGFuZGxlcklEKTsKKyAgICBwcml2LT53YXRj
aEZvckNoYW5nZXNJbkZhdmljb25IYW5kbGVySUQgPSAwOworfQorCiBzdGF0aWMgdm9pZCBmaWxl
Q2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlhbG9nKiBkaWFsb2csIGdpbnQgcmVz
cG9uc2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQogewogICAgIEdSZWZQ
dHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9wdGVkUmVxdWVzdCA9IGFkb3B0R1JlZihy
ZXF1ZXN0KTsKQEAgLTM4MCw2ICs0MTUsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0
UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdQogICAg
IGNhc2UgUFJPUF9FU1RJTUFURURfTE9BRF9QUk9HUkVTUzoKICAgICAgICAgZ192YWx1ZV9zZXRf
ZG91YmxlKHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VzdGltYXRlZF9sb2FkX3Byb2dyZXNz
KHdlYlZpZXcpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZBVklDT046CisgICAg
ICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIodmFsdWUsIHdlYmtpdF93ZWJfdmlld19nZXRfZmF2aWNv
bih3ZWJWaWV3KSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9VUkk6CiAgICAgICAg
IGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmll
dykpOwogICAgICAgICBicmVhazsKQEAgLTQwNSw2ICs0NDMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3RmluYWxpemUoR09iamVjdCogb2JqZWN0KQogCiAgICAgd2Via2l0V2ViVmlld0Rp
c2Nvbm5lY3RNYWluUmVzb3VyY2VSZXNwb25zZUNoYW5nZWRTaWduYWxIYW5kbGVyKHdlYlZpZXcp
OwogICAgIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0U2V0dGluZ3NTaWduYWxIYW5kbGVycyh3ZWJW
aWV3KTsKKyAgICB3ZWJraXRXZWJWaWV3RGlzY29ubmVjdEZhdmljb25EYXRhYmFzZVNpZ25hbEhh
bmRsZXJzKHdlYlZpZXcpOwogCiAgICAgcHJpdi0+fldlYktpdFdlYlZpZXdQcml2YXRlKCk7CiAg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7CkBAIC00OTIsNiArNTMxLDE4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsIDEuMCwg
MC4wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKICAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJW
aWV3OmZhdmljb246CisgICAgICoKKyAgICAgKiBUaGUgZmF2aWNvbiBjdXJyZW50bHkgYXNzb2Np
YXRlZCB0byB0aGUgI1dlYktpdFdlYlZpZXcuCisgICAgICogU2VlIHdlYmtpdF93ZWJfdmlld19n
ZXRfZmF2aWNvbigpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnT2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX0ZBVklDT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfcG9pbnRlcigiZmF2aWNvbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJGYXZpY29uIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJUaGUgZmF2aWNvbiBhc3NvY2lhdGVkIHRvIHRoZSB2aWV3LCBpZiBhbnkiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6dXJpOgogICAg
ICAqCiAgICAgICogVGhlIGN1cnJlbnQgYWN0aXZlIFVSSSBvZiB0aGUgI1dlYktpdFdlYlZpZXcu
CkBAIC0xMTE3LDcgKzExNjgsOSBAQCBzdGF0aWMgdm9pZCBzZXRDZXJ0aWZpY2F0ZVRvTWFpblJl
c291cmNlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdFbWl0TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50
IGxvYWRFdmVudCkKIHsKLSAgICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVE
KSB7CisgICAgaWYgKGxvYWRFdmVudCA9PSBXRUJLSVRfTE9BRF9TVEFSVEVEKSB7CisgICAgICAg
IHdlYmtpdFdlYlZpZXdXYXRjaEZvckNoYW5nZXNJbkZhdmljb24od2ViVmlldyk7CisgICAgfSBl
bHNlIGlmIChsb2FkRXZlbnQgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKICAgICAgICAgd2Vi
Vmlldy0+cHJpdi0+d2FpdGluZ0Zvck1haW5SZXNvdXJjZSA9IGZhbHNlOwogICAgICAgICB3ZWJr
aXRXZWJWaWV3RGlzY29ubmVjdE1haW5SZXNvdXJjZVJlc3BvbnNlQ2hhbmdlZFNpZ25hbEhhbmRs
ZXIod2ViVmlldyk7CiAgICAgfSBlbHNlCkBAIC0xODEwLDYgKzE4NjMsMjQgQEAgY29uc3QgZ2No
YXIqIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB9CiAK
IC8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uOgorICogQHdlYl92aWV3OiBhICNX
ZWJLaXRXZWJWaWV3CisgKgorICogUmV0dXJucyBmYXZpY29uIGN1cnJlbnRseSBhc3NvY2lhdGVk
IHRvIEB3ZWJfdmlldywgaWYgYW55LiBZb3UgY2FuCisgKiBjb25uZWN0IHRvIG5vdGlmeTo6ZmF2
aWNvbiBzaWduYWwgb2YgQHdlYl92aWV3IHRvIGJlIG5vdGlmaWVkIHdoZW4KKyAqIHRoZSBmYXZp
Y29uIGlzIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgcG9p
bnRlciB0byBhICNjYWlyb19zdXJmYWNlX3Qgd2l0aCB0aGUKKyAqICAgIGZhdmljb24gb3IgJU5V
TEwgaWYgdGhlcmUncyBubyBpY29uIGFzc29jaWF0ZWQgd2l0aCBAd2ViX3ZpZXcuCisgKi8KK2Nh
aXJvX3N1cmZhY2VfdCogd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVX
KHdlYlZpZXcpLCAwKTsKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHdlYlZpZXctPnByaXYtPmNvbnRl
eHQpOworICAgIHJldHVybiB3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uKGRhdGFiYXNl
LCB3ZWJWaWV3LT5wcml2LT5hY3RpdmVVUkkpOworfQorCisvKioKICAqIHdlYmtpdF93ZWJfdmll
d19nZXRfY3VzdG9tX2NoYXJzZXQ6CiAgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKICAq
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgK
aW5kZXggNTQwMDE0YS4uZGYxYThmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjU5LDYgKzI1OSw5IEBAIHdlYmtpdF93ZWJf
dmlld19nb190b19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgICAgICp3CiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKIHdlYmtpdF93ZWJfdmlld19n
ZXRfdXJpICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICp3ZWJfdmlldyk7CiAKK1dFQktJVF9BUEkgY2Fpcm9fc3VyZmFjZV90ICoKK3dlYmtpdF93
ZWJfdmlld19nZXRfZmF2aWNvbiAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3
ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgogd2Vi
a2l0X3dlYl92aWV3X2dldF9jdXN0b21fY2hhcnNldCAgICAgICAgICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQK
aW5kZXggYWI2ZjJjNy4uZGViYzNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC05
Nyw2ICs5Nyw3IEBAIHdlYmtpdF93ZWJfdmlld19zZXRfY3VzdG9tX2NoYXJzZXQKIHdlYmtpdF93
ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QKIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNr
X2ZvcndhcmRfbGlzdF9pdGVtCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaQord2Via2l0X3dlYl92
aWV3X2dldF9mYXZpY29uCiB3ZWJraXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzCiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCmluZGV4IGE3ZTUwMDkuLjM3
OTllZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCkBAIC00MCw2
ICs0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Jhc2VVUkkoc291cF91cmlfdG9fc3RyaW5n
KGtTZXJ2ZXItPmJhc2VVUkkoKSwgRkFMU0UpKQogICAgICAgICAsIG1faWNvblJlYWR5U2lnbmFs
UmVjZWl2ZWQoZmFsc2UpCiAgICAgICAgICwgbV9pY29uSXNWYWxpZChmYWxzZSkKKyAgICAgICAg
LCBtX2Zhdmljb25Ob3RpZmljYXRpb25SZWNlaXZlZChmYWxzZSkKICAgICB7CiAgICAgfQogCkBA
IC02MSw2ICs2MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHRlc3QtPm1faWNvblJlYWR5U2lnbmFs
UmVjZWl2ZWQgPSB0cnVlOwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGZhdmljb25DaGFuZ2Vk
Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2lu
dGVyIGRhdGEpCisgICAgeworICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3Rh
dGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOworICAgICAgICBnX2Fzc2VydCh0
ZXN0LT5tX3dlYlZpZXcuZ2V0KCkgPT0gd2ViVmlldyk7CisgICAgICAgIHRlc3QtPm1fZmF2aWNv
bk5vdGlmaWNhdGlvblJlY2VpdmVkID0gdHJ1ZTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9pZCBn
ZXRGYXZpY29uQ2FsbGJhY2soR09iamVjdCogc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJl
c3VsdCwgdm9pZCogZGF0YSkKICAgICB7CiAgICAgICAgIEZhdmljb25EYXRhYmFzZVRlc3QqIHRl
c3QgPSBzdGF0aWNfY2FzdDxGYXZpY29uRGF0YWJhc2VUZXN0Kj4oZGF0YSk7CkBAIC03NCw3ICs4
Miw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0
YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+bV93
ZWJDb250ZXh0KTsKICAgICAgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24o
ZGF0YWJhc2UsIHRlc3QtPm1fYmFzZVVSSS5nZXQoKSwgMCwgZ2V0RmF2aWNvbkNhbGxiYWNrLCB0
ZXN0KTsKKwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiaWNvbi1yZWFkeSIs
IEdfQ0FMTEJBQ0soaWNvblJlYWR5Q2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdCh0ZXN0LT5tX3dlYlZpZXcuZ2V0KCksICJub3RpZnk6OmZhdmljb24iLCBHX0NBTExC
QUNLKGZhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB0ZXN0KTsKICAgICB9CiAKICAgICBzdGF0aWMg
dm9pZCBsb2FkQ2hhbmdlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRMb2FkRXZlbnQg
bG9hZEV2ZW50LCBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQpAQCAtMTQ3LDYgKzE1Nyw3IEBA
IHB1YmxpYzoKICAgICBHT3duUHRyPGNoYXI+IG1fYmFzZVVSSTsKICAgICBib29sIG1faWNvblJl
YWR5U2lnbmFsUmVjZWl2ZWQ7CiAgICAgYm9vbCBtX2ljb25Jc1ZhbGlkOworICAgIGJvb2wgbV9m
YXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQ7CiB9OwogCiBzdGF0aWMgdm9pZApAQCAtMjE2LDYg
KzIyNywyMCBAQCBzdGF0aWMgdm9pZCB0ZXN0Q2xlYXJEYXRhYmFzZShGYXZpY29uRGF0YWJhc2VU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0KCFpY29uVVJJKTsKIH0KIAor
c3RhdGljIHZvaWQgdGVzdEdldEZhdmljb25Gcm9tV2ViVmlldyhGYXZpY29uRGF0YWJhc2VUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGNhaXJvX3N1cmZhY2VfdCogaWNvbkZyb21X
ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldy5nZXQo
KSk7CisgICAgZ19hc3NlcnQoIWljb25Gcm9tV2ViVmlldyk7CisKKyAgICB0ZXN0LT5tX2Zhdmlj
b25Ob3RpZmljYXRpb25SZWNlaXZlZCA9IGZhbHNlOworICAgIHRlc3QtPmFza0Zvckljb25BbmRX
YWl0Rm9ySWNvblJlYWR5U2lnbmFsKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uTm90
aWZpY2F0aW9uUmVjZWl2ZWQpOworCisgICAgaWNvbkZyb21XZWJWaWV3ID0gd2Via2l0X3dlYl92
aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldy5nZXQoKSk7CisgICAgZ19hc3NlcnQoaWNv
bkZyb21XZWJWaWV3KTsKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaWNvbkZyb21XZWJWaWV3
KTsKK30KKwogc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlcygpCiB7CiAgICAgaWYgKCFn
X2ZpbGVfdGVzdChrVGVtcERpcmVjdG9yeSwgR19GSUxFX1RFU1RfSVNfRElSKSkKQEAgLTI0NCw2
ICsyNjksNyBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRk
KCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAiZ2V0LWZhdmljb24iLCB0ZXN0R2V0RmF2aWNvbik7
CiAgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAi
Z2V0LWZhdmljb24tdXJpIiwgdGVzdEdldEZhdmljb25VUkkpOwogICAgIEZhdmljb25EYXRhYmFz
ZVRlc3Q6OmFkZCgiV2ViS2l0RmF2aWNvbkRhdGFiYXNlIiwgImNsZWFyLWRhdGFiYXNlIiwgdGVz
dENsZWFyRGF0YWJhc2UpOworICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6OmFkZCgiV2ViS2l0RmF2
aWNvbkRhdGFiYXNlIiwgImdldC1mYXZpY29uLWZyb20td2VidmlldyIsIHRlc3RHZXRGYXZpY29u
RnJvbVdlYlZpZXcpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkKLS0gCjEuNy4xMS40Cgo=
</data>
<flag name="review"
          id="177679"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="177893"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>