<?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>47365</bug_id>
          
          <creation_ts>2010-10-07 11:07:38 -0700</creation_ts>
          <short_desc>getTextAtOffset returns incorrect results if a link includes text and an image</short_desc>
          <delta_ts>2010-10-27 14:03:00 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>25531</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Joanmarie Diggs">jdiggs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>apinheiro</cc>
    
    <cc>eric</cc>
    
    <cc>mario</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>291144</commentid>
    <comment_count>0</comment_count>
      <attachid>70120</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2010-10-07 11:07:38 -0700</bug_when>
    <thetext>Created attachment 70120
test case

Steps to reproduce:

1. View the attached test case in Epiphany.

2. Using Accerciser, obtain the text of each line using pyatspi.TEXT_BOUNDARY_LINE_START.

Expected results: The full line of text for each line would be returned.

Actual results: The full line of text is not returned when there is an image inside of the link.

~~~~~~

Copy and paste from Accerciser&apos;s iPython console, where tn is the AtkText interface for the nth AtkObject of ATK_ROLE_PARAGRAPH:

In [1]: t1 = acc.queryText()
In [2]: t2 = acc.queryText()
In [3]: t3 = acc.queryText()
In [4]: t4 = acc.queryText()
In [5]: t1.getTextAtOffset(0, TEXT_BOUNDARY_LINE_START)
Out[5]: (&apos;One two three&apos;, 0, 13)
In [6]: t2.getTextAtOffset(0, TEXT_BOUNDARY_LINE_START)
Out[6]: (&apos;One two thr&apos;, 0, 11)
In [7]: t3.getTextAtOffset(0, TEXT_BOUNDARY_LINE_START)
Out[7]: (&apos;One two thr&apos;, 0, 11)
In [8]: t4.getTextAtOffset(0, TEXT_BOUNDARY_LINE_START)
Out[8]: (&apos;One two &apos;, 0, 8)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291585</commentid>
    <comment_count>1</comment_count>
      <attachid>70231</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-10-08 05:45:05 -0700</bug_when>
    <thetext>Created attachment 70231
Patch proposal (WIP)

Ataching a WorkInProgress patch that would fix this issue, just for sharing, as currently my devel environment is kind of broken so unit tests won&apos;t run...

As soon as I get it everything properly working back again I&apos;ll write an unit test for this stuff and upload a final patch to be reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296983</commentid>
    <comment_count>2</comment_count>
      <attachid>71330</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-10-20 13:37:03 -0700</bug_when>
    <thetext>Created attachment 71330
Patch proposal + unit test

(In reply to comment #1)
&gt; [...]
&gt; As soon as I get it everything properly working back again I&apos;ll write an unit test for this stuff and upload a final patch to be reviewed.

Back to normality, so attaching a patch proposal with the unit tests I couldn&apos;t implement before.

Hance, asking for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297268</commentid>
    <comment_count>3</comment_count>
      <attachid>71330</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-21 00:44:50 -0700</bug_when>
    <thetext>Comment on attachment 71330
Patch proposal + unit test

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

Looks good, but I have a few concerns.

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:866
&gt; +    GString* str = g_string_new(0);

Please don&apos;t use an abbreviation here.

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:873
&gt; +    for (RenderObject* obj = renderer-&gt;firstChild(); obj; obj = obj-&gt;nextSibling()) {
&gt; +        if (obj-&gt;isBR()) {

Again, we&apos;ve been trying to avoid abbreviations in new code.

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:936
&gt; +        g_string_append(str, textForRenderer(accObject-&gt;renderer()));

Isn&apos;t this a memory leak? textForRenderer returns a newly allocated string.

&gt; WebKit/gtk/tests/testatk.c:975
&gt; +    webkit_web_view_load_string(webView, linksWithInlineImages, NULL, NULL, NULL);

We should follow WebKit style in the tests as much as possible, thus NULL =&gt; 0.

&gt; WebKit/gtk/tests/testatk.c:980
&gt; +    g_idle_add((GSourceFunc)bail_out, loop);
&gt; +    g_main_loop_run(loop);
&gt; +

Didn&apos;t we discover that this approach was unnecessary in a previous patch or does something about this require it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297318</commentid>
    <comment_count>4</comment_count>
      <attachid>71412</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-10-21 02:43:32 -0700</bug_when>
    <thetext>Created attachment 71412
Patch proposal + unit test

(In reply to comment #3)
&gt; (From update of attachment 71330 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71330&amp;action=review
&gt; 
&gt; Looks good, but I have a few concerns.

Thanks. Attaching a new patch trying to address all those issues.

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:866
&gt; &gt; +    GString* str = g_string_new(0);
&gt; 
&gt; Please don&apos;t use an abbreviation here.

Sorry. Fixed using &apos;resultText&apos;

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:873
&gt; &gt; +    for (RenderObject* obj = renderer-&gt;firstChild(); obj; obj = obj-&gt;nextSibling()) {
&gt; &gt; +        if (obj-&gt;isBR()) {
&gt; 
&gt; Again, we&apos;ve been trying to avoid abbreviations in new code.

Fixed. I used &apos;object&apos; instead :P

&gt; &gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:936
&gt; &gt; +        g_string_append(str, textForRenderer(accObject-&gt;renderer()));
&gt; 
&gt; Isn&apos;t this a memory leak? textForRenderer returns a newly allocated string.

Good catch. It actually IS a memory leak. Fixed by using GOwnPtr in there.

&gt; &gt; WebKit/gtk/tests/testatk.c:975
&gt; &gt; +    webkit_web_view_load_string(webView, linksWithInlineImages, NULL, NULL, NULL);
&gt; 
&gt; We should follow WebKit style in the tests as much as possible, thus NULL =&gt; 0.

Fixed.

&gt; &gt; WebKit/gtk/tests/testatk.c:980
&gt; &gt; +    g_idle_add((GSourceFunc)bail_out, loop);
&gt; &gt; +    g_main_loop_run(loop);
&gt; &gt; +
&gt; 
&gt; Didn&apos;t we discover that this approach was unnecessary in a previous patch or does something about this require it?

Actually, what happened back then (in testWebkitAtkTextChangedNotifications()) was that I needed to connect signals from accessible object before entering the main loop, but I couldn&apos;t do it that way since the accessible object wouldn&apos;t be created if the main loop was not started, so it was kind of an egg-chicken problem.

After some digging and numerous experiments manually stopping and restarting the main loop, we (a lot of help from your side :-)) finally realized we could just remove this approach for that test and just manually spin the original main loop to make sure the accessible objects were created before connecting to their signals, with no need to bother about playing with stopping/restarting  the main loop, resulting in the following code:

   [...]
    webkit_web_view_load_string(webView, formWithTextInputs, 0, 0, 0);

    // Manually spin the main context to get the accessible objects
    while (g_main_context_pending(0))
        g_main_context_iteration(0, TRUE);

    AtkObject* obj = gtk_widget_get_accessible(GTK_WIDGET(webView));
    g_assert(obj);

    AtkObject* form = atk_object_ref_accessible_child(obj, 0);
    g_assert(ATK_IS_OBJECT(form));

    AtkObject* textEntry = atk_object_ref_accessible_child(form, 0);
    g_assert(ATK_IS_EDITABLE_TEXT(textEntry));
    g_assert(atk_object_get_role(ATK_OBJECT(textEntry)) == ATK_ROLE_ENTRY);

    g_signal_connect(textEntry, &quot;text-changed::insert&quot;,
                     G_CALLBACK(textChangedCb),
                     (gpointer)&quot;insert&quot;);
    g_signal_connect(textEntry, &quot;text-changed::delete&quot;,
                     G_CALLBACK(textChangedCb),
                     (gpointer)&quot;delete&quot;);
   [...]


However, this case is different as we don&apos;t know to connect to any signals, so the original chicken-egg problem (which led me to experiment with stopping-restarting the mainloop) is not present in this case. However, we&apos;d still need to manually spin the original main loop to get valid accessible objects, in case we want to get rid of that g_main_loop_run() / bail_out() stuff, which would result in the following patch on top of the current proposal:

   --- a/WebKit/gtk/tests/testatk.c
   +++ b/WebKit/gtk/tests/testatk.c
   @@ -972,11 +972,11 @@ static void testWebkitAtkLinksWithInlineImages(void)
        g_object_ref_sink(webView);
        GtkAllocation alloc = { 0, 0, 800, 600 };
        gtk_widget_size_allocate(GTK_WIDGET(webView), &amp;alloc);
        webkit_web_view_load_string(webView, linksWithInlineImages, 0, 0, 0);
   -    GMainLoop* loop = g_main_loop_new(NULL, TRUE);
 
   -    g_idle_add((GSourceFunc)bail_out, loop);
   -    g_main_loop_run(loop);
   +
   +   // Manually spin the main context to get the accessible objects
   +    while (g_main_context_pending(0))
   +        g_main_context_iteration(0, TRUE);
 
     AtkObject* obj = gtk_widget_get_accessible(GTK_WIDGET(webView));
     g_assert(obj);


... and I&apos;m not sure whether that&apos;s more clear than just using the other approach, which is used elsewhere in this file, instead of putting that weird while loop in this test as well (currently that other approach is only being used in testWebkitAtkTextChangedNotifications()).

Hence, I&apos;m not making that change yet in this new patch, just in case you agree with me it&apos;s ok to leave it as it is, because of the rationale above :-)

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298975</commentid>
    <comment_count>5</comment_count>
      <attachid>71412</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-25 11:17:18 -0700</bug_when>
    <thetext>Comment on attachment 71412
Patch proposal + unit test

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

Looks good, but I&apos;m waiting for the reuslts of your experiments to give the final r+. We should switch to iterating the main main loop, if possible.

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:937
&gt; +        GOwnPtr&lt;gchar&gt; rendererText(textForRenderer(accObject-&gt;renderer()));
&gt; +        g_string_append(str, rendererText.get());

Thanks for fixing this. In the future it might make sense for these methods to just return CStrings. Perhaps a cleanup in some other patch.

&gt; WebKit/gtk/tests/testatk.c:979
&gt; +    g_idle_add((GSourceFunc)bail_out, loop);
&gt; +    g_main_loop_run(loop);

I think we should also try to iterate the main main loop here as well. I think you&apos;re exploring that presently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299349</commentid>
    <comment_count>6</comment_count>
      <attachid>71852</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-10-26 02:07:03 -0700</bug_when>
    <thetext>Created attachment 71852
Patch proposal + unit test

Attaching a new patch:

(In reply to comment #5)
&gt; [...]
&gt; &gt; WebKit/gtk/tests/testatk.c:979
&gt; &gt; +    g_idle_add((GSourceFunc)bail_out, loop);
&gt; &gt; +    g_main_loop_run(loop);
&gt; 
&gt; I think we should also try to iterate the main main loop here as well. I think you&apos;re exploring that presently.

Fixed (by manually spinning the loop, which is still needed  to get the accessible objects)

Asking for review again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300049</commentid>
    <comment_count>7</comment_count>
      <attachid>71852</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-27 00:57:47 -0700</bug_when>
    <thetext>Comment on attachment 71852
Patch proposal + unit test

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

Great! Thanks. Perhaps make this small change before landing:

&gt; WebKit/gtk/tests/testatk.c:985
&gt; +    AtkObject* obj = gtk_widget_get_accessible(GTK_WIDGET(webView));
&gt; +    g_assert(obj);
&gt; +
&gt; +    // First paragraph (link at the beginning)
&gt; +    AtkObject* paragraph = atk_object_ref_accessible_child(obj, 0);

Please rename obj to something like &quot;object&quot; to avoid the abbreviation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300113</commentid>
    <comment_count>8</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-10-27 04:24:19 -0700</bug_when>
    <thetext>Landed, http://trac.webkit.org/changeset/70634</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300537</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-27 14:03:00 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/70634 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>70120</attachid>
            <date>2010-10-07 11:07:38 -0700</date>
            <delta_ts>2010-10-07 11:07:38 -0700</delta_ts>
            <desc>test case</desc>
            <filename>image-in-link.html</filename>
            <type>text/html</type>
            <size>304</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8dGl0bGU+VGVzdDwvdGl0bGU+CjxzdHlsZT4KYS5odHRwOmJlZm9yZSB7
Y29udGVudDogdXJsKC4uL2ltZy9tb2luLXd3dy5wbmcpO30KPC9zdHlsZT4KPGJvZHk+CjxwPk9u
ZSB0d28gdGhyZWU8L3A+CjxwPjxhIGNsYXNzPSJodHRwIiBocmVmPSJmb28iPk9uZTwvYT4gdHdv
IHRocmVlPC9wPgo8cD5PbmUgPGEgY2xhc3M9Imh0dHAiIGhyZWY9ImZvbyI+dHdvPC9hPiB0aHJl
ZTwvcD4KPHA+T25lIHR3byA8YSBjbGFzcz0iaHR0cCIgaHJlZj0iZm9vIj50aHJlZTwvYT48L3A+
CjwvYm9keT4KPC9odG1sPgoKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70231</attachid>
            <date>2010-10-08 05:45:05 -0700</date>
            <delta_ts>2010-10-20 13:37:03 -0700</delta_ts>
            <desc>Patch proposal (WIP)</desc>
            <filename>0001-2010-10-08-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>7342</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBlMDE3NmE4ZTc4ZjZmNDNiY2MzY2E4Zjc2MDZiYjJmMzkwZDc1MmNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBGcmksIDggT2N0IDIwMTAgMTQ6Mzk6NTUgKzAyMDAKU3ViamVjdDogW1BBVENI
XSAyMDEwLTEwLTA4ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4K
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIGdldFRleHRBdE9m
ZnNldCByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGlmIGEgbGluayBpbmNsdWRlcyB0ZXh0IGFu
ZCBhbiBpbWFnZQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NzM2NQoKICAgICAgICBQcm9wZXJseSBjb25zaWRlciB0ZXh0IHVuZGVyIGEgbm9uLXRleHQg
cmVuZGVyZXIgaW4gdGV4dEZvck9iamVjdC4KCiAgICAgICAgV2UgbmVlZCB0byBjaGVjayBhbGwg
dGhlIGNoaWxkcmVuIHVuZGVyIGEgbm9uLXRleHQgcmVuZGVyZXIsIGlmCiAgICAgICAgYW55LCB0
byBjb25zaWRlciB3aGVuIGN1cnJlbnQgb2JqZWN0IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBz
b21lCiAgICAgICAgb2YgaXRzIGNoaWxkcmVuIGFyZSwgaW4gb3JkZXIgbm90IHRvIG1pc3MgdGhv
c2UgcG9ydGlvbnMgb2YgdGV4dAogICAgICAgIGJ5IG5vdCBwcm9wZXJseSBoYW5kbGluZyB0aG9z
ZSBzaXR1YXRpb25zLgoKICAgICAgICBObyBuZXcgdGVzdHMgeWV0IChUT0RPKS4KCiAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CiAg
ICAgICAgKHRleHRGb3JSZW5kZXJlcik6IE5ldy4gR2V0IHRoZSB0ZXh0IGZvciBhIFJlbmRlck9i
amVjdCdzIGNoaWxkcmVuLgogICAgICAgICh0ZXh0Rm9yT2JqZWN0KTogVXNlIHRoZSBuZXcgdGV4
dEZvclJlbmRlcmVyIGZ1bmN0aW9uLgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAyMCArKysrCiAuLi4vZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQXRrLmNwcCAgICAgICAgICB8ICAgOTggKysrKysrKysrKystLS0tLS0tLS0K
IDIgZmlsZXMgY2hhbmdlZCwgNzUgaW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMzMx
ODMyLi41YjcxMDhlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEwLTEwLTA4ICBNYXJpbyBTYW5jaGV6IFBy
YWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBnZXRUZXh0QXRPZmZzZXQgcmV0dXJucyBpbmNvcnJlY3QgcmVz
dWx0cyBpZiBhIGxpbmsgaW5jbHVkZXMgdGV4dCBhbmQgYW4gaW1hZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MzY1CisKKyAgICAgICAgUHJvcGVy
bHkgY29uc2lkZXIgdGV4dCB1bmRlciBhIG5vbi10ZXh0IHJlbmRlcmVyIGluIHRleHRGb3JPYmpl
Y3QuCisKKyAgICAgICAgV2UgbmVlZCB0byBjaGVjayBhbGwgdGhlIGNoaWxkcmVuIHVuZGVyIGEg
bm9uLXRleHQgcmVuZGVyZXIsIGlmCisgICAgICAgIGFueSwgdG8gY29uc2lkZXIgd2hlbiBjdXJy
ZW50IG9iamVjdCBpcyBub3QgYSB0ZXh0IG9iamVjdCBidXQgc29tZQorICAgICAgICBvZiBpdHMg
Y2hpbGRyZW4gYXJlLCBpbiBvcmRlciBub3QgdG8gbWlzcyB0aG9zZSBwb3J0aW9ucyBvZiB0ZXh0
CisgICAgICAgIGJ5IG5vdCBwcm9wZXJseSBoYW5kbGluZyB0aG9zZSBzaXR1YXRpb25zLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyB5ZXQgKFRPRE8pCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CisgICAgICAgICh0ZXh0Rm9y
UmVuZGVyZXIpOiBOZXcuIEdldCB0aGUgdGV4dCBmb3IgYSBSZW5kZXJPYmplY3QncyBjaGlsZHJl
bi4KKyAgICAgICAgKHRleHRGb3JPYmplY3QpOiBVc2UgdGhlIG5ldyB0ZXh0Rm9yUmVuZGVyZXIg
ZnVuY3Rpb24uCisKIDIwMTAtMDktMzAgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5j
cHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QXRrLmNwcAppbmRleCBjOWQxM2NjLi44MjYyMjQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApA
QCAtODYxLDYgKzg2MSw1OSBAQCBzdGF0aWMgZ2NoYXIqIGNvbnZlcnRVbmlDaGFyVG9VVEY4KGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBnaW50IGxlbmd0aCwgaW50IGZybwogICAgIHJldHVybiBn
X3N0cmluZ19mcmVlKHJldCwgRkFMU0UpOwogfQogCitnY2hhciogdGV4dEZvclJlbmRlcmVyKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgR1N0cmluZyogc3RyID0gZ19zdHJpbmdfbmV3
KDApOworCisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUo
c3RyLCBGQUxTRSk7CisKKyAgICAvLyBGb3IgUmVuZGVyQmxvY2tzLCBwaWVjZSB0b2dldGhlciB0
aGUgdGV4dCBmcm9tIHRoZSBSZW5kZXJUZXh0IG9iamVjdHMgdGhleSBjb250YWluLgorICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBvYmogPSByZW5kZXJlci0+Zmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9
IG9iai0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAob2JqLT5pc0JSKCkpIHsKKyAgICAg
ICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICJcbiIpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0OworICAgICAgICBp
ZiAob2JqLT5pc1RleHQoKSkKKyAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQo
b2JqKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGNo
aWxkcmVuLCBpZiBhbnksIHRvIGNvbnNpZGVyIHdoZW4KKyAgICAgICAgICAgIC8vIGN1cnJlbnQg
b2JqZWN0IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBzb21lIG9mIGl0cworICAgICAgICAgICAg
Ly8gY2hpbGRyZW4gYXJlLCBpbiBvcmRlciBub3QgdG8gbWlzcyB0aG9zZSBwb3J0aW9ucyBvZgor
ICAgICAgICAgICAgLy8gdGV4dCBieSBub3QgcHJvcGVybHkgaGFuZGxpbmcgdGhvc2Ugc2l0dWF0
aW9ucworICAgICAgICAgICAgaWYgKG9iai0+Zmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgICAg
IGdfc3RyaW5nX2FwcGVuZChzdHIsIHRleHRGb3JSZW5kZXJlcihvYmopKTsKKworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBJbmxpbmVUZXh0Qm94KiBib3ggPSBy
ZW5kZXJUZXh0LT5maXJzdFRleHRCb3goKTsKKyAgICAgICAgd2hpbGUgKGJveCkgeworICAgICAg
ICAgICAgZ2NoYXIqIHRleHQgPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChyZW5kZXJUZXh0LT5jaGFy
YWN0ZXJzKCksIHJlbmRlclRleHQtPnRleHRMZW5ndGgoKSwgYm94LT5zdGFydCgpLCBib3gtPmVu
ZCgpKTsKKyAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIHRleHQpOworICAgICAgICAg
ICAgLy8gTmV3bGluZSBjaGFycyBpbiB0aGUgc291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0ZXh0
IGJveGVzLCBzbyBjaGVjaworICAgICAgICAgICAgLy8gYmVmb3JlIGFkZGluZyBhIG5ld2xpbmUg
aW4gdGhlIGxheW91dC4gU2VlIGJ1ZyAyNTQxNSBjb21tZW50ICM3OC4KKyAgICAgICAgICAgIC8v
IElmIHRoZSBuZXh0IHNpYmxpbmcgaXMgYSBCUiwgd2UnbGwgYWRkIHRoZSBuZXdsaW5lIHdoZW4g
d2UgZXhhbWluZSB0aGF0IGNoaWxkLgorICAgICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxpbmVF
eGlzdHMoKSAmJiAoIW9iai0+bmV4dFNpYmxpbmcoKSB8fCAhb2JqLT5uZXh0U2libGluZygpLT5p
c0JSKCkpKQorICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICJcbiIpOworICAg
ICAgICAgICAgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gSW5zZXJ0IHRoZSB0ZXh0IG9mIHRoZSBtYXJrZXIgZm9yIGxpc3QgaXRlbSBpbiB0aGUg
cmlnaHQgcGxhY2UsIGlmIHByZXNlbnQKKyAgICBpZiAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkg
eworICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIp
LT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOworICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkt
PmRpcmVjdGlvbigpID09IExUUikKKyAgICAgICAgICAgIGdfc3RyaW5nX3ByZXBlbmQoc3RyLCBt
YXJrZXJUZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX3N0
cmluZ19hcHBlbmQoc3RyLCBtYXJrZXJUZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAg
IHJldHVybiBnX3N0cmluZ19mcmVlKHN0ciwgRkFMU0UpOworfQorCiBnY2hhciogdGV4dEZvck9i
amVjdChBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiBhY2NPYmplY3QpCiB7CiAgICAgR1N0cmlu
Zyogc3RyID0gZ19zdHJpbmdfbmV3KDApOwpAQCAtODc5LDQ5ICs5MzIsOCBAQCBnY2hhciogdGV4
dEZvck9iamVjdChBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiBhY2NPYmplY3QpCiAgICAgICAg
ICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKICAgICAgICAgICAgIHJhbmdlID0gYWNj
T2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKCsrbGluZU51bWJlcik7CiAgICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gYWNjT2JqZWN0LT5yZW5k
ZXJlcigpOwotICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAgICAgcmV0dXJuIGdfc3Ry
aW5nX2ZyZWUoc3RyLCBGQUxTRSk7Ci0KLSAgICAgICAgLy8gRm9yIFJlbmRlckJsb2NrcywgcGll
Y2UgdG9nZXRoZXIgdGhlIHRleHQgZnJvbSB0aGUgUmVuZGVyVGV4dCBvYmplY3RzIHRoZXkgY29u
dGFpbi4KLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIG9iaiA9IHJlbmRlcmVyLT5maXJzdENo
aWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAo
b2JqLT5pc0JSKCkpIHsKLSAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4i
KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dDsKLSAgICAgICAgICAgIGlmIChvYmotPmlzVGV4dCgp
KQotICAgICAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQob2JqKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKG9iai0+Zmlyc3RDaGlsZCgpICYmIG9iai0+Zmlyc3RDaGlsZCgpLT5p
c1RleHQoKSkgewotICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBSZW5kZXJJbmxpbmVzIChhbmQg
YW55IG90aGVyIHNpbWlsaWFyIFJlbmRlck9iamVjdHMpLgotICAgICAgICAgICAgICAgIHJlbmRl
clRleHQgPSB0b1JlbmRlclRleHQob2JqLT5maXJzdENoaWxkKCkpOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIElubGluZVRleHRC
b3gqIGJveCA9IHJlbmRlclRleHQtPmZpcnN0VGV4dEJveCgpOwotICAgICAgICAgICAgd2hpbGUg
KGJveCkgewotICAgICAgICAgICAgICAgIGdjaGFyKiB0ZXh0ID0gY29udmVydFVuaUNoYXJUb1VU
RjgocmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCksIGJv
eC0+c3RhcnQoKSwgYm94LT5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5k
KHN0ciwgdGV4dCk7Ci0gICAgICAgICAgICAgICAgLy8gTmV3bGluZSBjaGFycyBpbiB0aGUgc291
cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0ZXh0IGJveGVzLCBzbyBjaGVjawotICAgICAgICAgICAg
ICAgIC8vIGJlZm9yZSBhZGRpbmcgYSBuZXdsaW5lIGluIHRoZSBsYXlvdXQuIFNlZSBidWcgMjU0
MTUgY29tbWVudCAjNzguCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgc2libGluZyBp
cyBhIEJSLCB3ZSdsbCBhZGQgdGhlIG5ld2xpbmUgd2hlbiB3ZSBleGFtaW5lIHRoYXQgY2hpbGQu
Ci0gICAgICAgICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxpbmVFeGlzdHMoKSAmJiAoIW9iai0+
bmV4dFNpYmxpbmcoKSB8fCAhb2JqLT5uZXh0U2libGluZygpLT5pc0JSKCkpKQotICAgICAgICAg
ICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBi
b3ggPSBib3gtPm5leHRUZXh0Qm94KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBJbnNlcnQgdGhlIHRleHQgb2YgdGhlIG1hcmtlciBmb3IgbGlzdCBpdGVtIGluIHRo
ZSByaWdodCBwbGFjZSwgaWYgcHJlc2VudAotICAgICAgICBpZiAocmVuZGVyZXItPmlzTGlzdEl0
ZW0oKSkgewotICAgICAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJdGVt
KHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAgICAgICAgICAgIGlmIChyZW5k
ZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgICAgIGdfc3Ry
aW5nX3ByZXBlbmQoc3RyLCBtYXJrZXJUZXh0LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIG1hcmtlclRleHQudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgfSBlbHNlIGlmIChhY2NPYmplY3Qt
PmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICBnX3N0cmluZ19hcHBlbmQo
c3RyLCB0ZXh0Rm9yUmVuZGVyZXIoYWNjT2JqZWN0LT5yZW5kZXJlcigpKSk7CiAKICAgICByZXR1
cm4gZ19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKTsKIH0KLS0gCjEuNy4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71330</attachid>
            <date>2010-10-20 13:37:03 -0700</date>
            <delta_ts>2010-10-21 02:43:32 -0700</delta_ts>
            <desc>Patch proposal + unit test</desc>
            <filename>0001-2010-10-20-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>12485</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBlNGJlNjg5YTIwZmI4ODM3ZDBmNDU4MTE4ZDcwZTU4ZDBkZDU4ZmIzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDIwIE9jdCAyMDEwIDIyOjMyOjA3ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMC0xMC0yMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBnZXRUZXh0QXRP
ZmZzZXQgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBpZiBhIGxpbmsgaW5jbHVkZXMgdGV4dCBh
bmQgYW4gaW1hZ2UKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDczNjUKCiAgICAgICAgUHJvcGVybHkgY29uc2lkZXIgdGV4dCB1bmRlciBhIG5vbi10ZXh0
IHJlbmRlcmVyIGluIHRleHRGb3JPYmplY3QuCgogICAgICAgIFdlIG5lZWQgdG8gY2hlY2sgYWxs
IHRoZSBjaGlsZHJlbiB1bmRlciBhIG5vbi10ZXh0IHJlbmRlcmVyLCBpZgogICAgICAgIGFueSwg
dG8gY29uc2lkZXIgd2hlbiBjdXJyZW50IG9iamVjdCBpcyBub3QgYSB0ZXh0IG9iamVjdCBidXQg
c29tZQogICAgICAgIG9mIGl0cyBjaGlsZHJlbiBhcmUsIGluIG9yZGVyIG5vdCB0byBtaXNzIHRo
b3NlIHBvcnRpb25zIG9mIHRleHQKICAgICAgICBieSBub3QgcHJvcGVybHkgaGFuZGxpbmcgdGhv
c2Ugc2l0dWF0aW9ucy4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHA6CiAgICAgICAgKHRleHRGb3JSZW5kZXJlcik6IE5ldy4gR2V0
IHRoZSB0ZXh0IGZvciBhIFJlbmRlck9iamVjdCdzIGNoaWxkcmVuLgogICAgICAgICh0ZXh0Rm9y
T2JqZWN0KTogVXNlIHRoZSBuZXcgdGV4dEZvclJlbmRlcmVyIGZ1bmN0aW9uLgoKMjAxMC0xMC0y
MCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBnZXRUZXh0QXRPZmZzZXQgcmV0dXJu
cyBpbmNvcnJlY3QgcmVzdWx0cyBpZiBhIGxpbmsgaW5jbHVkZXMgdGV4dCBhbmQgYW4gaW1hZ2UK
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNjUKCiAg
ICAgICAgTmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoaXMgYnVnIGlzIGFjdHVhbGx5IGZpeGVkLgoK
ICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKICAgICAgICAodGVzdFdlYmtpdEF0a0xpbmtzV2l0
aElubGluZUltYWdlcyk6IE5ldyB0ZXN0LgogICAgICAgIChtYWluKTogQWRkZWQgbmV3IHRlc3Qu
Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDE4ICsrKysKIC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwICAg
ICAgICAgIHwgICA5OCArKysrKysrKysrKy0tLS0tLS0tLQogV2ViS2l0L2d0ay9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsrKwogV2ViS2l0L2d0ay90ZXN0
cy90ZXN0YXRrLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDU2ICsrKysrKysrKysrCiA0
IGZpbGVzIGNoYW5nZWQsIDE0MiBpbnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNiNjZm
ODMuLjIyMmM1NjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMTAtMjAgIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGdldFRleHRBdE9mZnNldCByZXR1cm5zIGluY29ycmVjdCByZXN1
bHRzIGlmIGEgbGluayBpbmNsdWRlcyB0ZXh0IGFuZCBhbiBpbWFnZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNjUKKworICAgICAgICBQcm9wZXJs
eSBjb25zaWRlciB0ZXh0IHVuZGVyIGEgbm9uLXRleHQgcmVuZGVyZXIgaW4gdGV4dEZvck9iamVj
dC4KKworICAgICAgICBXZSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUgY2hpbGRyZW4gdW5kZXIgYSBu
b24tdGV4dCByZW5kZXJlciwgaWYKKyAgICAgICAgYW55LCB0byBjb25zaWRlciB3aGVuIGN1cnJl
bnQgb2JqZWN0IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBzb21lCisgICAgICAgIG9mIGl0cyBj
aGlsZHJlbiBhcmUsIGluIG9yZGVyIG5vdCB0byBtaXNzIHRob3NlIHBvcnRpb25zIG9mIHRleHQK
KyAgICAgICAgYnkgbm90IHByb3Blcmx5IGhhbmRsaW5nIHRob3NlIHNpdHVhdGlvbnMuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5j
cHA6CisgICAgICAgICh0ZXh0Rm9yUmVuZGVyZXIpOiBOZXcuIEdldCB0aGUgdGV4dCBmb3IgYSBS
ZW5kZXJPYmplY3QncyBjaGlsZHJlbi4KKyAgICAgICAgKHRleHRGb3JPYmplY3QpOiBVc2UgdGhl
IG5ldyB0ZXh0Rm9yUmVuZGVyZXIgZnVuY3Rpb24uCisKIDIwMTAtMTAtMTkgIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IChFRkwsIG1heWJl
IG1vcmUpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCBhYTg4MjE3Li5lMmUxOWJjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQXRrLmNwcApAQCAtODYxLDYgKzg2MSw1OSBAQCBzdGF0aWMgZ2NoYXIqIGNv
bnZlcnRVbmlDaGFyVG9VVEY4KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBnaW50IGxlbmd0aCwg
aW50IGZybwogICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJldCwgRkFMU0UpOwogfQogCitnY2hh
ciogdGV4dEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgR1N0cmlu
Zyogc3RyID0gZ19zdHJpbmdfbmV3KDApOworCisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7CisKKyAgICAvLyBGb3IgUmVuZGVyQmxv
Y2tzLCBwaWVjZSB0b2dldGhlciB0aGUgdGV4dCBmcm9tIHRoZSBSZW5kZXJUZXh0IG9iamVjdHMg
dGhleSBjb250YWluLgorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvYmogPSByZW5kZXJlci0+Zmly
c3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAo
b2JqLT5pc0JSKCkpIHsKKyAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsICJcbiIpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJUZXh0KiBy
ZW5kZXJUZXh0OworICAgICAgICBpZiAob2JqLT5pc1RleHQoKSkKKyAgICAgICAgICAgIHJlbmRl
clRleHQgPSB0b1JlbmRlclRleHQob2JqKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIGNoZWNrIGNoaWxkcmVuLCBpZiBhbnksIHRvIGNvbnNpZGVyIHdoZW4KKyAg
ICAgICAgICAgIC8vIGN1cnJlbnQgb2JqZWN0IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBzb21l
IG9mIGl0cworICAgICAgICAgICAgLy8gY2hpbGRyZW4gYXJlLCBpbiBvcmRlciBub3QgdG8gbWlz
cyB0aG9zZSBwb3J0aW9ucyBvZgorICAgICAgICAgICAgLy8gdGV4dCBieSBub3QgcHJvcGVybHkg
aGFuZGxpbmcgdGhvc2Ugc2l0dWF0aW9ucworICAgICAgICAgICAgaWYgKG9iai0+Zmlyc3RDaGls
ZCgpKQorICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIHRleHRGb3JSZW5kZXJl
cihvYmopKTsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBJ
bmxpbmVUZXh0Qm94KiBib3ggPSByZW5kZXJUZXh0LT5maXJzdFRleHRCb3goKTsKKyAgICAgICAg
d2hpbGUgKGJveCkgeworICAgICAgICAgICAgZ2NoYXIqIHRleHQgPSBjb252ZXJ0VW5pQ2hhclRv
VVRGOChyZW5kZXJUZXh0LT5jaGFyYWN0ZXJzKCksIHJlbmRlclRleHQtPnRleHRMZW5ndGgoKSwg
Ym94LT5zdGFydCgpLCBib3gtPmVuZCgpKTsKKyAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChz
dHIsIHRleHQpOworICAgICAgICAgICAgLy8gTmV3bGluZSBjaGFycyBpbiB0aGUgc291cmNlIHJl
c3VsdCBpbiBzZXBhcmF0ZSB0ZXh0IGJveGVzLCBzbyBjaGVjaworICAgICAgICAgICAgLy8gYmVm
b3JlIGFkZGluZyBhIG5ld2xpbmUgaW4gdGhlIGxheW91dC4gU2VlIGJ1ZyAyNTQxNSBjb21tZW50
ICM3OC4KKyAgICAgICAgICAgIC8vIElmIHRoZSBuZXh0IHNpYmxpbmcgaXMgYSBCUiwgd2UnbGwg
YWRkIHRoZSBuZXdsaW5lIHdoZW4gd2UgZXhhbWluZSB0aGF0IGNoaWxkLgorICAgICAgICAgICAg
aWYgKCFib3gtPm5leHRPbkxpbmVFeGlzdHMoKSAmJiAoIW9iai0+bmV4dFNpYmxpbmcoKSB8fCAh
b2JqLT5uZXh0U2libGluZygpLT5pc0JSKCkpKQorICAgICAgICAgICAgICAgIGdfc3RyaW5nX2Fw
cGVuZChzdHIsICJcbiIpOworICAgICAgICAgICAgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gSW5zZXJ0IHRoZSB0ZXh0IG9mIHRoZSBtYXJrZXIg
Zm9yIGxpc3QgaXRlbSBpbiB0aGUgcmlnaHQgcGxhY2UsIGlmIHByZXNlbnQKKyAgICBpZiAocmVu
ZGVyZXItPmlzTGlzdEl0ZW0oKSkgeworICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9IHRvUmVu
ZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOworICAgICAgICBp
ZiAocmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKKyAgICAgICAgICAgIGdf
c3RyaW5nX3ByZXBlbmQoc3RyLCBtYXJrZXJUZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCBtYXJrZXJUZXh0LnV0ZjgoKS5k
YXRhKCkpOworICAgIH0KKworICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHN0ciwgRkFMU0UpOwor
fQorCiBnY2hhciogdGV4dEZvck9iamVjdChBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiBhY2NP
YmplY3QpCiB7CiAgICAgR1N0cmluZyogc3RyID0gZ19zdHJpbmdfbmV3KDApOwpAQCAtODc5LDQ5
ICs5MzIsOCBAQCBnY2hhciogdGV4dEZvck9iamVjdChBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KiBhY2NPYmplY3QpCiAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKICAg
ICAgICAgICAgIHJhbmdlID0gYWNjT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKCsrbGluZU51bWJl
cik7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gYWNjT2JqZWN0LT5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAg
ICAgICAgICAgcmV0dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7Ci0KLSAgICAgICAgLy8g
Rm9yIFJlbmRlckJsb2NrcywgcGllY2UgdG9nZXRoZXIgdGhlIHRleHQgZnJvbSB0aGUgUmVuZGVy
VGV4dCBvYmplY3RzIHRoZXkgY29udGFpbi4KLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIG9i
aiA9IHJlbmRlcmVyLT5maXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygp
KSB7Ci0gICAgICAgICAgICBpZiAob2JqLT5pc0JSKCkpIHsKLSAgICAgICAgICAgICAgICBnX3N0
cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dDsKLSAgICAgICAg
ICAgIGlmIChvYmotPmlzVGV4dCgpKQotICAgICAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1Jl
bmRlclRleHQob2JqKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG9iai0+Zmlyc3RDaGlsZCgpICYm
IG9iai0+Zmlyc3RDaGlsZCgpLT5pc1RleHQoKSkgewotICAgICAgICAgICAgICAgIC8vIEhhbmRs
ZSBSZW5kZXJJbmxpbmVzIChhbmQgYW55IG90aGVyIHNpbWlsaWFyIFJlbmRlck9iamVjdHMpLgot
ICAgICAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQob2JqLT5maXJzdENoaWxk
KCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIElubGluZVRleHRCb3gqIGJveCA9IHJlbmRlclRleHQtPmZpcnN0VGV4dEJveCgp
OwotICAgICAgICAgICAgd2hpbGUgKGJveCkgewotICAgICAgICAgICAgICAgIGdjaGFyKiB0ZXh0
ID0gY29udmVydFVuaUNoYXJUb1VURjgocmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJU
ZXh0LT50ZXh0TGVuZ3RoKCksIGJveC0+c3RhcnQoKSwgYm94LT5lbmQoKSk7Ci0gICAgICAgICAg
ICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgdGV4dCk7Ci0gICAgICAgICAgICAgICAgLy8gTmV3
bGluZSBjaGFycyBpbiB0aGUgc291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0ZXh0IGJveGVzLCBz
byBjaGVjawotICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBhZGRpbmcgYSBuZXdsaW5lIGluIHRo
ZSBsYXlvdXQuIFNlZSBidWcgMjU0MTUgY29tbWVudCAjNzguCi0gICAgICAgICAgICAgICAgLy8g
SWYgdGhlIG5leHQgc2libGluZyBpcyBhIEJSLCB3ZSdsbCBhZGQgdGhlIG5ld2xpbmUgd2hlbiB3
ZSBleGFtaW5lIHRoYXQgY2hpbGQuCi0gICAgICAgICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxp
bmVFeGlzdHMoKSAmJiAoIW9iai0+bmV4dFNpYmxpbmcoKSB8fCAhb2JqLT5uZXh0U2libGluZygp
LT5pc0JSKCkpKQotICAgICAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4i
KTsKLSAgICAgICAgICAgICAgICBib3ggPSBib3gtPm5leHRUZXh0Qm94KCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJbnNlcnQgdGhlIHRleHQgb2YgdGhlIG1hcmtl
ciBmb3IgbGlzdCBpdGVtIGluIHRoZSByaWdodCBwbGFjZSwgaWYgcHJlc2VudAotICAgICAgICBp
ZiAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICAgICAgU3RyaW5nIG1hcmtlclRl
eHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsK
LSAgICAgICAgICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQot
ICAgICAgICAgICAgICAgIGdfc3RyaW5nX3ByZXBlbmQoc3RyLCBtYXJrZXJUZXh0LnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVu
ZChzdHIsIG1hcmtlclRleHQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
fSBlbHNlIGlmIChhY2NPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAg
ICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCB0ZXh0Rm9yUmVuZGVyZXIoYWNjT2JqZWN0LT5yZW5k
ZXJlcigpKSk7CiAKICAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKTsKIH0KZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5k
ZXggZDE5OTAyYy4uM2E1ODkxOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0xMC0yMCAgTWFy
aW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgZ2V0VGV4dEF0T2Zmc2V0IHJldHVybnMg
aW5jb3JyZWN0IHJlc3VsdHMgaWYgYSBsaW5rIGluY2x1ZGVzIHRleHQgYW5kIGFuIGltYWdlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM2NQorCisg
ICAgICAgIE5ldyB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGlzIGJ1ZyBpcyBhY3R1YWxseSBmaXhlZC4K
KworICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKKyAgICAgICAgKHRlc3RXZWJraXRBdGtMaW5r
c1dpdGhJbmxpbmVJbWFnZXMpOiBOZXcgdGVzdC4KKyAgICAgICAgKG1haW4pOiBBZGRlZCBuZXcg
dGVzdC4KKwogMjAxMC0xMC0xOSAgSm9vbmUgSHVyICA8am9vbmVAa2xkcC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90
ZXN0cy90ZXN0YXRrLmMgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwppbmRleCBjOGRmNGVm
Li41ODJiMDlkIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgYi9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwpAQCAtNDYsNiArNDYsOCBAQCBzdGF0aWMgY29uc3Qg
Y2hhciogY29udGVudHNJblRhYmxlV2l0aEhlYWRlcnMgPSAiPGh0bWw+PGJvZHk+PHRhYmxlPjx0
cj48dGg+Zm9vPAogCiBzdGF0aWMgY29uc3QgY2hhciogZm9ybVdpdGhUZXh0SW5wdXRzID0gIjxo
dG1sPjxib2R5Pjxmb3JtPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdlbnRyeScgLz48L2Zvcm0+
PC9ib2R5PjwvaHRtbD4iOwogCitzdGF0aWMgY29uc3QgY2hhciogbGlua3NXaXRoSW5saW5lSW1h
Z2VzID0gIjxodG1sPjxoZWFkPjxzdHlsZT5hLmh0dHA6YmVmb3JlIHtjb250ZW50OiB1cmwobm8t
aW1hZ2UucG5nKTt9PC9zdHlsZT48Ym9keT48cD48YSBjbGFzcz0naHR0cCcgaHJlZj0nZm9vJz5m
b288L2E+IGJhciBiYXo8L3A+PHA+Zm9vIDxhIGNsYXNzPSdodHRwJyBocmVmPSdiYXInPmJhcjwv
YT4gYmF6PC9wPjxwPmZvbyBiYXIgPGEgY2xhc3M9J2h0dHAnIGhyZWY9J2Jheic+YmF6PC9hPjwv
cD48L2JvZHk+PC9odG1sPiI7CisKIHN0YXRpYyBjb25zdCBjaGFyKiBsaXN0c09mSXRlbXMgPSAi
PGh0bWw+PGJvZHk+PHVsPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48YSBocmVmPSdmb28nPmxpbmsg
b25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jhcic+bGluazwvYT48L2xpPjwv
dWw+PG9sPjxsaT50ZXh0IG9ubHk8L2xpPjxsaT48YSBocmVmPSdmb28nPmxpbmsgb25seTwvYT48
L2xpPjxsaT50ZXh0IGFuZCBhIDxhIGhyZWY9J2Jhcic+bGluazwvYT48L2xpPjwvb2w+PC9ib2R5
PjwvaHRtbD4iOwogCiBzdGF0aWMgY29uc3QgY2hhciogdGV4dEZvclNlbGVjdGlvbnMgPSAiPGh0
bWw+PGJvZHk+PHA+QSBwYXJhZ3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9wPjxwPkEgcGFyYWdyYXBo
IHdpdGggPGEgaHJlZj0naHR0cDovL3dlYmtpdC5vcmcnPmEgbGluazwvYT4gaW4gdGhlIG1pZGRs
ZTwvcD48L2JvZHk+PC9odG1sPiI7CkBAIC05NjQsNiArOTY2LDU5IEBAIHN0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtHZXRFeHRlbnRzKHZvaWQpCiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7
CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFnZXModm9p
ZCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtp
dF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAg
R3RrQWxsb2NhdGlvbiBhbGxvYyA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jKTsKKyAgICB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgbGlua3NXaXRoSW5saW5lSW1hZ2VzLCBOVUxM
LCBOVUxMLCBOVUxMKTsKKyAgICBHTWFpbkxvb3AqIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVM
TCwgVFJVRSk7CisKKyAgICBnX2lkbGVfYWRkKChHU291cmNlRnVuYyliYWlsX291dCwgbG9vcCk7
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgQXRrT2JqZWN0KiBvYmogPSBndGtf
d2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdUS19XSURHRVQod2ViVmlldykpOworICAgIGdfYXNzZXJ0
KG9iaik7CisKKyAgICAvLyBGaXJzdCBwYXJhZ3JhcGggKGxpbmsgYXQgdGhlIGJlZ2lubmluZykK
KyAgICBBdGtPYmplY3QqIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob2JqLCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBn
aW50IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQgZW5kT2Zmc2V0OworICAgIGdjaGFyKiB0ZXh0ID0g
YXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19U
RVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAg
Z19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBi
YXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyAgICBn
X29iamVjdF91bnJlZihwYXJhZ3JhcGgpOworCisgICAgLy8gU2Vjb25kIHBhcmFncmFwaCAobGlu
ayBpbiB0aGUgbWlkZGxlKQorICAgIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQob2JqLCAxKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsK
KyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFw
aCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9m
ZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09
LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAw
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0
ZXh0KTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOworCisgICAgLy8gVGhpcmQgcGFy
YWdyYXBoIChsaW5rIGF0IHRoZSBlbmQpCisgICAgcGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmosIDIpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFn
cmFwaCkpOworICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQo
cGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2VydCh0ZXh0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
dGV4dCwgPT0sICJmb28gYmFyIGJheiIpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNl
dCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7CisgICAg
Z19mcmVlKHRleHQpOworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7CisKKyAgICBnX29i
amVjdF91bnJlZih3ZWJWaWV3KTsKK30KKwogc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xpc3Rz
T2ZJdGVtcyh2b2lkKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKQEAgLTExMTYsNiArMTE3MSw3IEBAIGludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQv
YXRrL3RleHRBdHRyaWJ1dGVzIiwgdGVzdFdlYmtpdEF0a1RleHRBdHRyaWJ1dGVzKTsKICAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL3RleHRTZWxlY3Rpb25zIiwgdGVzdFdla2l0QXRr
VGV4dFNlbGVjdGlvbnMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0RXh0
ZW50cyIsIHRlc3RXZWJraXRBdGtHZXRFeHRlbnRzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvYXRrL2xpbmtzV2l0aElubGluZUltYWdlcyIsIHRlc3RXZWJraXRBdGtMaW5rc1dpdGhJ
bmxpbmVJbWFnZXMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvbGlzdHNPZkl0
ZW1zIiwgdGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay90ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbnMiLCB0ZXN0V2Via2l0QXRrVGV4dENo
YW5nZWROb3RpZmljYXRpb25zKTsKICAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLS0gCjEuNy4x
Cgo=
</data>
<flag name="review"
          id="61362"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71412</attachid>
            <date>2010-10-21 02:43:32 -0700</date>
            <delta_ts>2010-10-26 02:07:03 -0700</delta_ts>
            <desc>Patch proposal + unit test</desc>
            <filename>0001-2010-10-20-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>12629</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA0NGY4MWY1N2E3NjQ2MTNlYzM4NGUxNzZmNjFiMGJiYTUzMzFiOWE1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDIwIE9jdCAyMDEwIDIyOjMyOjA3ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMC0xMC0yMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBnZXRUZXh0QXRP
ZmZzZXQgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBpZiBhIGxpbmsgaW5jbHVkZXMgdGV4dCBh
bmQgYW4gaW1hZ2UKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDczNjUKCiAgICAgICAgUHJvcGVybHkgY29uc2lkZXIgdGV4dCB1bmRlciBhIG5vbi10ZXh0
IHJlbmRlcmVyIGluIHRleHRGb3JPYmplY3QuCgogICAgICAgIFdlIG5lZWQgdG8gY2hlY2sgYWxs
IHRoZSBjaGlsZHJlbiB1bmRlciBhIG5vbi10ZXh0IHJlbmRlcmVyLCBpZgogICAgICAgIGFueSwg
dG8gY29uc2lkZXIgd2hlbiBjdXJyZW50IG9iamVjdCBpcyBub3QgYSB0ZXh0IG9iamVjdCBidXQg
c29tZQogICAgICAgIG9mIGl0cyBjaGlsZHJlbiBhcmUsIGluIG9yZGVyIG5vdCB0byBtaXNzIHRo
b3NlIHBvcnRpb25zIG9mIHRleHQKICAgICAgICBieSBub3QgcHJvcGVybHkgaGFuZGxpbmcgdGhv
c2Ugc2l0dWF0aW9ucy4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHA6CiAgICAgICAgKHRleHRGb3JSZW5kZXJlcik6IE5ldy4gR2V0
IHRoZSB0ZXh0IGZvciBhIFJlbmRlck9iamVjdCdzIGNoaWxkcmVuLgogICAgICAgICh0ZXh0Rm9y
T2JqZWN0KTogVXNlIHRoZSBuZXcgdGV4dEZvclJlbmRlcmVyIGZ1bmN0aW9uLgoKMjAxMC0xMC0y
MCAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBnZXRUZXh0QXRPZmZzZXQgcmV0dXJu
cyBpbmNvcnJlY3QgcmVzdWx0cyBpZiBhIGxpbmsgaW5jbHVkZXMgdGV4dCBhbmQgYW4gaW1hZ2UK
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNjUKCiAg
ICAgICAgTmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoaXMgYnVnIGlzIGFjdHVhbGx5IGZpeGVkLgoK
ICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKICAgICAgICAodGVzdFdlYmtpdEF0a0xpbmtzV2l0
aElubGluZUltYWdlcyk6IE5ldyB0ZXN0LgogICAgICAgIChtYWluKTogQWRkZWQgbmV3IHRlc3Qu
Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDE4ICsrKysKIC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwICAg
ICAgICAgIHwgICA5OCArKysrKysrKysrKy0tLS0tLS0tLQogV2ViS2l0L2d0ay9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsrKwogV2ViS2l0L2d0ay90ZXN0
cy90ZXN0YXRrLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDU2ICsrKysrKysrKysrCiA0
IGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNiNjZm
ODMuLjIyMmM1NjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMTAtMjAgIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGdldFRleHRBdE9mZnNldCByZXR1cm5zIGluY29ycmVjdCByZXN1
bHRzIGlmIGEgbGluayBpbmNsdWRlcyB0ZXh0IGFuZCBhbiBpbWFnZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNjUKKworICAgICAgICBQcm9wZXJs
eSBjb25zaWRlciB0ZXh0IHVuZGVyIGEgbm9uLXRleHQgcmVuZGVyZXIgaW4gdGV4dEZvck9iamVj
dC4KKworICAgICAgICBXZSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUgY2hpbGRyZW4gdW5kZXIgYSBu
b24tdGV4dCByZW5kZXJlciwgaWYKKyAgICAgICAgYW55LCB0byBjb25zaWRlciB3aGVuIGN1cnJl
bnQgb2JqZWN0IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBzb21lCisgICAgICAgIG9mIGl0cyBj
aGlsZHJlbiBhcmUsIGluIG9yZGVyIG5vdCB0byBtaXNzIHRob3NlIHBvcnRpb25zIG9mIHRleHQK
KyAgICAgICAgYnkgbm90IHByb3Blcmx5IGhhbmRsaW5nIHRob3NlIHNpdHVhdGlvbnMuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5j
cHA6CisgICAgICAgICh0ZXh0Rm9yUmVuZGVyZXIpOiBOZXcuIEdldCB0aGUgdGV4dCBmb3IgYSBS
ZW5kZXJPYmplY3QncyBjaGlsZHJlbi4KKyAgICAgICAgKHRleHRGb3JPYmplY3QpOiBVc2UgdGhl
IG5ldyB0ZXh0Rm9yUmVuZGVyZXIgZnVuY3Rpb24uCisKIDIwMTAtMTAtMTkgIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IChFRkwsIG1heWJl
IG1vcmUpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRleCBhYTg4MjE3Li4zZjY0MTgyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQXRrLmNwcApAQCAtODYxLDYgKzg2MSw1OSBAQCBzdGF0aWMgZ2NoYXIqIGNv
bnZlcnRVbmlDaGFyVG9VVEY4KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBnaW50IGxlbmd0aCwg
aW50IGZybwogICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJldCwgRkFMU0UpOwogfQogCitnY2hh
ciogdGV4dEZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgR1N0cmlu
ZyogcmVzdWx0VGV4dCA9IGdfc3RyaW5nX25ldygwKTsKKworICAgIGlmICghcmVuZGVyZXIpCisg
ICAgICAgIHJldHVybiBnX3N0cmluZ19mcmVlKHJlc3VsdFRleHQsIEZBTFNFKTsKKworICAgIC8v
IEZvciBSZW5kZXJCbG9ja3MsIHBpZWNlIHRvZ2V0aGVyIHRoZSB0ZXh0IGZyb20gdGhlIFJlbmRl
clRleHQgb2JqZWN0cyB0aGV5IGNvbnRhaW4uCisgICAgZm9yIChSZW5kZXJPYmplY3QqIG9iamVj
dCA9IHJlbmRlcmVyLT5maXJzdENoaWxkKCk7IG9iamVjdDsgb2JqZWN0ID0gb2JqZWN0LT5uZXh0
U2libGluZygpKSB7CisgICAgICAgIGlmIChvYmplY3QtPmlzQlIoKSkgeworICAgICAgICAgICAg
Z19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsICJcbiIpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0OworICAgICAgICBp
ZiAob2JqZWN0LT5pc1RleHQoKSkKKyAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRlclRl
eHQob2JqZWN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNo
ZWNrIGNoaWxkcmVuLCBpZiBhbnksIHRvIGNvbnNpZGVyIHdoZW4KKyAgICAgICAgICAgIC8vIGN1
cnJlbnQgb2JqZWN0IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBzb21lIG9mIGl0cworICAgICAg
ICAgICAgLy8gY2hpbGRyZW4gYXJlLCBpbiBvcmRlciBub3QgdG8gbWlzcyB0aG9zZSBwb3J0aW9u
cyBvZgorICAgICAgICAgICAgLy8gdGV4dCBieSBub3QgcHJvcGVybHkgaGFuZGxpbmcgdGhvc2Ug
c2l0dWF0aW9ucworICAgICAgICAgICAgaWYgKG9iamVjdC0+Zmlyc3RDaGlsZCgpKQorICAgICAg
ICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1bHRUZXh0LCB0ZXh0Rm9yUmVuZGVyZXIob2Jq
ZWN0KSk7CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgSW5s
aW5lVGV4dEJveCogYm94ID0gcmVuZGVyVGV4dC0+Zmlyc3RUZXh0Qm94KCk7CisgICAgICAgIHdo
aWxlIChib3gpIHsKKyAgICAgICAgICAgIGdjaGFyKiB0ZXh0ID0gY29udmVydFVuaUNoYXJUb1VU
RjgocmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCksIGJv
eC0+c3RhcnQoKSwgYm94LT5lbmQoKSk7CisgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQocmVz
dWx0VGV4dCwgdGV4dCk7CisgICAgICAgICAgICAvLyBOZXdsaW5lIGNoYXJzIGluIHRoZSBzb3Vy
Y2UgcmVzdWx0IGluIHNlcGFyYXRlIHRleHQgYm94ZXMsIHNvIGNoZWNrCisgICAgICAgICAgICAv
LyBiZWZvcmUgYWRkaW5nIGEgbmV3bGluZSBpbiB0aGUgbGF5b3V0LiBTZWUgYnVnIDI1NDE1IGNv
bW1lbnQgIzc4LgorICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgc2libGluZyBpcyBhIEJSLCB3
ZSdsbCBhZGQgdGhlIG5ld2xpbmUgd2hlbiB3ZSBleGFtaW5lIHRoYXQgY2hpbGQuCisgICAgICAg
ICAgICBpZiAoIWJveC0+bmV4dE9uTGluZUV4aXN0cygpICYmICghb2JqZWN0LT5uZXh0U2libGlu
ZygpIHx8ICFvYmplY3QtPm5leHRTaWJsaW5nKCktPmlzQlIoKSkpCisgICAgICAgICAgICAgICAg
Z19zdHJpbmdfYXBwZW5kKHJlc3VsdFRleHQsICJcbiIpOworICAgICAgICAgICAgYm94ID0gYm94
LT5uZXh0VGV4dEJveCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSW5zZXJ0IHRoZSB0
ZXh0IG9mIHRoZSBtYXJrZXIgZm9yIGxpc3QgaXRlbSBpbiB0aGUgcmlnaHQgcGxhY2UsIGlmIHBy
ZXNlbnQKKyAgICBpZiAocmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgeworICAgICAgICBTdHJpbmcg
bWFya2VyVGV4dCA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1
ZmZpeCgpOworICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UikKKyAgICAgICAgICAgIGdfc3RyaW5nX3ByZXBlbmQocmVzdWx0VGV4dCwgbWFya2VyVGV4dC51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5k
KHJlc3VsdFRleHQsIG1hcmtlclRleHQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIGdfc3RyaW5nX2ZyZWUocmVzdWx0VGV4dCwgRkFMU0UpOworfQorCiBnY2hhciogdGV4dEZv
ck9iamVjdChBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiBhY2NPYmplY3QpCiB7CiAgICAgR1N0
cmluZyogc3RyID0gZ19zdHJpbmdfbmV3KDApOwpAQCAtODc5LDQ4ICs5MzIsOSBAQCBnY2hhciog
dGV4dEZvck9iamVjdChBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiBhY2NPYmplY3QpCiAgICAg
ICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKICAgICAgICAgICAgIHJhbmdlID0g
YWNjT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKCsrbGluZU51bWJlcik7CiAgICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gYWNjT2JqZWN0LT5y
ZW5kZXJlcigpOwotICAgICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICAgICAgcmV0dXJuIGdf
c3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7Ci0KLSAgICAgICAgLy8gRm9yIFJlbmRlckJsb2Nrcywg
cGllY2UgdG9nZXRoZXIgdGhlIHRleHQgZnJvbSB0aGUgUmVuZGVyVGV4dCBvYmplY3RzIHRoZXkg
Y29udGFpbi4KLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIG9iaiA9IHJlbmRlcmVyLT5maXJz
dENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICBp
ZiAob2JqLT5pc0JSKCkpIHsKLSAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAi
XG4iKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dDsKLSAgICAgICAgICAgIGlmIChvYmotPmlzVGV4
dCgpKQotICAgICAgICAgICAgICAgIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQob2JqKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKG9iai0+Zmlyc3RDaGlsZCgpICYmIG9iai0+Zmlyc3RDaGlsZCgp
LT5pc1RleHQoKSkgewotICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBSZW5kZXJJbmxpbmVzIChh
bmQgYW55IG90aGVyIHNpbWlsaWFyIFJlbmRlck9iamVjdHMpLgotICAgICAgICAgICAgICAgIHJl
bmRlclRleHQgPSB0b1JlbmRlclRleHQob2JqLT5maXJzdENoaWxkKCkpOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIElubGluZVRl
eHRCb3gqIGJveCA9IHJlbmRlclRleHQtPmZpcnN0VGV4dEJveCgpOwotICAgICAgICAgICAgd2hp
bGUgKGJveCkgewotICAgICAgICAgICAgICAgIGdjaGFyKiB0ZXh0ID0gY29udmVydFVuaUNoYXJU
b1VURjgocmVuZGVyVGV4dC0+Y2hhcmFjdGVycygpLCByZW5kZXJUZXh0LT50ZXh0TGVuZ3RoKCks
IGJveC0+c3RhcnQoKSwgYm94LT5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBw
ZW5kKHN0ciwgdGV4dCk7Ci0gICAgICAgICAgICAgICAgLy8gTmV3bGluZSBjaGFycyBpbiB0aGUg
c291cmNlIHJlc3VsdCBpbiBzZXBhcmF0ZSB0ZXh0IGJveGVzLCBzbyBjaGVjawotICAgICAgICAg
ICAgICAgIC8vIGJlZm9yZSBhZGRpbmcgYSBuZXdsaW5lIGluIHRoZSBsYXlvdXQuIFNlZSBidWcg
MjU0MTUgY29tbWVudCAjNzguCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgc2libGlu
ZyBpcyBhIEJSLCB3ZSdsbCBhZGQgdGhlIG5ld2xpbmUgd2hlbiB3ZSBleGFtaW5lIHRoYXQgY2hp
bGQuCi0gICAgICAgICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxpbmVFeGlzdHMoKSAmJiAoIW9i
ai0+bmV4dFNpYmxpbmcoKSB8fCAhb2JqLT5uZXh0U2libGluZygpLT5pc0JSKCkpKQotICAgICAg
ICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCAiXG4iKTsKLSAgICAgICAgICAgICAg
ICBib3ggPSBib3gtPm5leHRUZXh0Qm94KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBJbnNlcnQgdGhlIHRleHQgb2YgdGhlIG1hcmtlciBmb3IgbGlzdCBpdGVtIGlu
IHRoZSByaWdodCBwbGFjZSwgaWYgcHJlc2VudAotICAgICAgICBpZiAocmVuZGVyZXItPmlzTGlz
dEl0ZW0oKSkgewotICAgICAgICAgICAgU3RyaW5nIG1hcmtlclRleHQgPSB0b1JlbmRlckxpc3RJ
dGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgoKTsKLSAgICAgICAgICAgIGlmIChy
ZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgICAgIGdf
c3RyaW5nX3ByZXBlbmQoc3RyLCBtYXJrZXJUZXh0LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIG1hcmtlclRleHQu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGFjY09iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKKyAgICAgICAgR093blB0cjxnY2hhcj4gcmVu
ZGVyZXJUZXh0KHRleHRGb3JSZW5kZXJlcihhY2NPYmplY3QtPnJlbmRlcmVyKCkpKTsKKyAgICAg
ICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgcmVuZGVyZXJUZXh0LmdldCgpKTsKICAgICB9CiAKICAg
ICByZXR1cm4gZ19zdHJpbmdfZnJlZShzdHIsIEZBTFNFKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggZDE5OTAyYy4uM2E1ODkx
OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0xMC0yMCAgTWFyaW8gU2FuY2hleiBQcmFkYSAg
PG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgZ2V0VGV4dEF0T2Zmc2V0IHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdHMg
aWYgYSBsaW5rIGluY2x1ZGVzIHRleHQgYW5kIGFuIGltYWdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM2NQorCisgICAgICAgIE5ldyB0ZXN0IHRv
IG1ha2Ugc3VyZSB0aGlzIGJ1ZyBpcyBhY3R1YWxseSBmaXhlZC4KKworICAgICAgICAqIHRlc3Rz
L3Rlc3RhdGsuYzoKKyAgICAgICAgKHRlc3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFnZXMp
OiBOZXcgdGVzdC4KKyAgICAgICAgKG1haW4pOiBBZGRlZCBuZXcgdGVzdC4KKwogMjAxMC0xMC0x
OSAgSm9vbmUgSHVyICA8am9vbmVAa2xkcC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFy
dGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgYi9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwppbmRleCBjOGRmNGVmLi4zZDVhZTlkIDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3RhdGsuYwpAQCAtNDYsNiArNDYsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNJblRh
YmxlV2l0aEhlYWRlcnMgPSAiPGh0bWw+PGJvZHk+PHRhYmxlPjx0cj48dGg+Zm9vPAogCiBzdGF0
aWMgY29uc3QgY2hhciogZm9ybVdpdGhUZXh0SW5wdXRzID0gIjxodG1sPjxib2R5Pjxmb3JtPjxp
bnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdlbnRyeScgLz48L2Zvcm0+PC9ib2R5PjwvaHRtbD4iOwog
CitzdGF0aWMgY29uc3QgY2hhciogbGlua3NXaXRoSW5saW5lSW1hZ2VzID0gIjxodG1sPjxoZWFk
PjxzdHlsZT5hLmh0dHA6YmVmb3JlIHtjb250ZW50OiB1cmwobm8taW1hZ2UucG5nKTt9PC9zdHls
ZT48Ym9keT48cD48YSBjbGFzcz0naHR0cCcgaHJlZj0nZm9vJz5mb288L2E+IGJhciBiYXo8L3A+
PHA+Zm9vIDxhIGNsYXNzPSdodHRwJyBocmVmPSdiYXInPmJhcjwvYT4gYmF6PC9wPjxwPmZvbyBi
YXIgPGEgY2xhc3M9J2h0dHAnIGhyZWY9J2Jheic+YmF6PC9hPjwvcD48L2JvZHk+PC9odG1sPiI7
CisKIHN0YXRpYyBjb25zdCBjaGFyKiBsaXN0c09mSXRlbXMgPSAiPGh0bWw+PGJvZHk+PHVsPjxs
aT50ZXh0IG9ubHk8L2xpPjxsaT48YSBocmVmPSdmb28nPmxpbmsgb25seTwvYT48L2xpPjxsaT50
ZXh0IGFuZCBhIDxhIGhyZWY9J2Jhcic+bGluazwvYT48L2xpPjwvdWw+PG9sPjxsaT50ZXh0IG9u
bHk8L2xpPjxsaT48YSBocmVmPSdmb28nPmxpbmsgb25seTwvYT48L2xpPjxsaT50ZXh0IGFuZCBh
IDxhIGhyZWY9J2Jhcic+bGluazwvYT48L2xpPjwvb2w+PC9ib2R5PjwvaHRtbD4iOwogCiBzdGF0
aWMgY29uc3QgY2hhciogdGV4dEZvclNlbGVjdGlvbnMgPSAiPGh0bWw+PGJvZHk+PHA+QSBwYXJh
Z3JhcGggd2l0aCBwbGFpbiB0ZXh0PC9wPjxwPkEgcGFyYWdyYXBoIHdpdGggPGEgaHJlZj0naHR0
cDovL3dlYmtpdC5vcmcnPmEgbGluazwvYT4gaW4gdGhlIG1pZGRsZTwvcD48L2JvZHk+PC9odG1s
PiI7CkBAIC05NjQsNiArOTY2LDU5IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtHZXRFeHRl
bnRzKHZvaWQpCiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7CiB9CiAKK3N0YXRpYyB2b2lk
IHRlc3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFnZXModm9pZCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxv
YyA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RL
X1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcod2ViVmlldywgbGlua3NXaXRoSW5saW5lSW1hZ2VzLCAwLCAwLCAwKTsKKyAgICBHTWFpbkxv
b3AqIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBnX2lkbGVfYWRk
KChHU291cmNlRnVuYyliYWlsX291dCwgbG9vcCk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OworCisgICAgQXRrT2JqZWN0KiBvYmogPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdUS19X
SURHRVQod2ViVmlldykpOworICAgIGdfYXNzZXJ0KG9iaik7CisKKyAgICAvLyBGaXJzdCBwYXJh
Z3JhcGggKGxpbmsgYXQgdGhlIGJlZ2lubmluZykKKyAgICBBdGtPYmplY3QqIHBhcmFncmFwaCA9
IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAwKTsKKyAgICBnX2Fzc2VydChB
VEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICBnaW50IHN0YXJ0T2Zmc2V0OworICAgIGdpbnQg
ZW5kT2Zmc2V0OworICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0
KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZz
dGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
c3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwg
MTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOwor
CisgICAgLy8gU2Vjb25kIHBhcmFncmFwaCAobGluayBpbiB0aGUgbWlkZGxlKQorICAgIHBhcmFn
cmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAxKTsKKyAgICBnX2Fz
c2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgpKTsKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3Rl
eHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJ
TkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7
CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5k
T2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJlZSh0ZXh0KTsKKyAgICBnX29iamVjdF91bnJlZihw
YXJhZ3JhcGgpOworCisgICAgLy8gVGhpcmQgcGFyYWdyYXBoIChsaW5rIGF0IHRoZSBlbmQpCisg
ICAgcGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDIpOwor
ICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaCkpOworICAgIHRleHQgPSBhdGtfdGV4
dF9nZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9V
TkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKKyAgICBnX2Fzc2Vy
dCh0ZXh0KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOworICAgIGdfYXNzZXJ0X2Nt
cGludChlbmRPZmZzZXQsID09LCAxMSk7CisgICAgZ19mcmVlKHRleHQpOworICAgIGdfb2JqZWN0
X3VucmVmKHBhcmFncmFwaCk7CisKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKwog
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xpc3RzT2ZJdGVtcyh2b2lkKQogewogICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKQEAgLTExMTYsNiArMTE3MSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
ICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL3RleHRBdHRyaWJ1dGVzIiwgdGVzdFdl
YmtpdEF0a1RleHRBdHRyaWJ1dGVzKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRr
L3RleHRTZWxlY3Rpb25zIiwgdGVzdFdla2l0QXRrVGV4dFNlbGVjdGlvbnMpOwogICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0RXh0ZW50cyIsIHRlc3RXZWJraXRBdGtHZXRFeHRl
bnRzKTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xpbmtzV2l0aElubGluZUlt
YWdlcyIsIHRlc3RXZWJraXRBdGtMaW5rc1dpdGhJbmxpbmVJbWFnZXMpOwogICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC9hdGsvbGlzdHNPZkl0ZW1zIiwgdGVzdFdlYmtpdEF0a0xpc3RzT2ZJ
dGVtcyk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0Q2hhbmdlZE5vdGlm
aWNhdGlvbnMiLCB0ZXN0V2Via2l0QXRrVGV4dENoYW5nZWROb3RpZmljYXRpb25zKTsKICAgICBy
ZXR1cm4gZ190ZXN0X3J1biAoKTsKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71852</attachid>
            <date>2010-10-26 02:07:03 -0700</date>
            <delta_ts>2010-10-27 00:57:46 -0700</delta_ts>
            <desc>Patch proposal + unit test</desc>
            <filename>0001-2010-10-26-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>12651</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBjZTA2OWRkZGExNzFlZGE4ZTFlNzhlYWZhNzFiYmY2MTNkZjFmOTFkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUdWUsIDI2IE9jdCAyMDEwIDExOjAxOjMwICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMC0xMC0yNiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBnZXRUZXh0QXRP
ZmZzZXQgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBpZiBhIGxpbmsgaW5jbHVkZXMgdGV4dCBh
bmQgYW4gaW1hZ2UKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDczNjUKCiAgICAgICAgUHJvcGVybHkgY29uc2lkZXIgdGV4dCB1bmRlciBhIG5vbi10ZXh0
IHJlbmRlcmVyIGluIHRleHRGb3JPYmplY3QuCgogICAgICAgIFdlIG5lZWQgdG8gY2hlY2sgYWxs
IHRoZSBjaGlsZHJlbiB1bmRlciBhIG5vbi10ZXh0IHJlbmRlcmVyLCBpZgogICAgICAgIGFueSwg
dG8gY29uc2lkZXIgd2hlbiBjdXJyZW50IG9iamVjdCBpcyBub3QgYSB0ZXh0IG9iamVjdCBidXQg
c29tZQogICAgICAgIG9mIGl0cyBjaGlsZHJlbiBhcmUsIGluIG9yZGVyIG5vdCB0byBtaXNzIHRo
b3NlIHBvcnRpb25zIG9mIHRleHQKICAgICAgICBieSBub3QgcHJvcGVybHkgaGFuZGxpbmcgdGhv
c2Ugc2l0dWF0aW9ucy4KCiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHA6CiAgICAgICAgKHRleHRGb3JSZW5kZXJlcik6IE5ldy4gR2V0
IHRoZSB0ZXh0IGZvciBhIFJlbmRlck9iamVjdCdzIGNoaWxkcmVuLgogICAgICAgICh0ZXh0Rm9y
T2JqZWN0KTogVXNlIHRoZSBuZXcgdGV4dEZvclJlbmRlcmVyIGZ1bmN0aW9uLgoKMjAxMC0xMC0y
NiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBnZXRUZXh0QXRPZmZzZXQgcmV0dXJu
cyBpbmNvcnJlY3QgcmVzdWx0cyBpZiBhIGxpbmsgaW5jbHVkZXMgdGV4dCBhbmQgYW4gaW1hZ2UK
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNjUKCiAg
ICAgICAgTmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoaXMgYnVnIGlzIGFjdHVhbGx5IGZpeGVkLgoK
ICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKICAgICAgICAodGVzdFdlYmtpdEF0a0xpbmtzV2l0
aElubGluZUltYWdlcyk6IE5ldyB0ZXN0LgogICAgICAgIChtYWluKTogQWRkZWQgbmV3IHRlc3Qu
Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDE4ICsrKysKIC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwICAg
ICAgICAgIHwgICA5OCArKysrKysrKysrKy0tLS0tLS0tLQogV2ViS2l0L2d0ay9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsrKwogV2ViS2l0L2d0ay90ZXN0
cy90ZXN0YXRrLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDU2ICsrKysrKysrKysrCiA0
IGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhlNGJm
ZTguLmE4ZWViYzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMTAtMjYgIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGdldFRleHRBdE9mZnNldCByZXR1cm5zIGluY29ycmVjdCByZXN1
bHRzIGlmIGEgbGluayBpbmNsdWRlcyB0ZXh0IGFuZCBhbiBpbWFnZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNjUKKworICAgICAgICBQcm9wZXJs
eSBjb25zaWRlciB0ZXh0IHVuZGVyIGEgbm9uLXRleHQgcmVuZGVyZXIgaW4gdGV4dEZvck9iamVj
dC4KKworICAgICAgICBXZSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUgY2hpbGRyZW4gdW5kZXIgYSBu
b24tdGV4dCByZW5kZXJlciwgaWYKKyAgICAgICAgYW55LCB0byBjb25zaWRlciB3aGVuIGN1cnJl
bnQgb2JqZWN0IGlzIG5vdCBhIHRleHQgb2JqZWN0IGJ1dCBzb21lCisgICAgICAgIG9mIGl0cyBj
aGlsZHJlbiBhcmUsIGluIG9yZGVyIG5vdCB0byBtaXNzIHRob3NlIHBvcnRpb25zIG9mIHRleHQK
KyAgICAgICAgYnkgbm90IHByb3Blcmx5IGhhbmRsaW5nIHRob3NlIHNpdHVhdGlvbnMuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5j
cHA6CisgICAgICAgICh0ZXh0Rm9yUmVuZGVyZXIpOiBOZXcuIEdldCB0aGUgdGV4dCBmb3IgYSBS
ZW5kZXJPYmplY3QncyBjaGlsZHJlbi4KKyAgICAgICAgKHRleHRGb3JPYmplY3QpOiBVc2UgdGhl
IG5ldyB0ZXh0Rm9yUmVuZGVyZXIgZnVuY3Rpb24uCisKIDIwMTAtMTAtMjQgIE1PUklUQSBIYWpp
bWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFu
Zy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKaW5kZXggYWE4ODIxNy4uM2Y2NDE4MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0
ay5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlckF0ay5jcHAKQEAgLTg2MSw2ICs4NjEsNTkgQEAgc3RhdGljIGdjaGFyKiBjb252ZXJ0
VW5pQ2hhclRvVVRGOChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgZ2ludCBsZW5ndGgsIGludCBm
cm8KICAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShyZXQsIEZBTFNFKTsKIH0KIAorZ2NoYXIqIHRl
eHRGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIEdTdHJpbmcqIHJl
c3VsdFRleHQgPSBnX3N0cmluZ19uZXcoMCk7CisKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAg
ICByZXR1cm4gZ19zdHJpbmdfZnJlZShyZXN1bHRUZXh0LCBGQUxTRSk7CisKKyAgICAvLyBGb3Ig
UmVuZGVyQmxvY2tzLCBwaWVjZSB0b2dldGhlciB0aGUgdGV4dCBmcm9tIHRoZSBSZW5kZXJUZXh0
IG9iamVjdHMgdGhleSBjb250YWluLgorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBy
ZW5kZXJlci0+Zmlyc3RDaGlsZCgpOyBvYmplY3Q7IG9iamVjdCA9IG9iamVjdC0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBpZiAob2JqZWN0LT5pc0JSKCkpIHsKKyAgICAgICAgICAgIGdfc3Ry
aW5nX2FwcGVuZChyZXN1bHRUZXh0LCAiXG4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dDsKKyAgICAgICAgaWYgKG9i
amVjdC0+aXNUZXh0KCkpCisgICAgICAgICAgICByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KG9i
amVjdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBj
aGlsZHJlbiwgaWYgYW55LCB0byBjb25zaWRlciB3aGVuCisgICAgICAgICAgICAvLyBjdXJyZW50
IG9iamVjdCBpcyBub3QgYSB0ZXh0IG9iamVjdCBidXQgc29tZSBvZiBpdHMKKyAgICAgICAgICAg
IC8vIGNoaWxkcmVuIGFyZSwgaW4gb3JkZXIgbm90IHRvIG1pc3MgdGhvc2UgcG9ydGlvbnMgb2YK
KyAgICAgICAgICAgIC8vIHRleHQgYnkgbm90IHByb3Blcmx5IGhhbmRsaW5nIHRob3NlIHNpdHVh
dGlvbnMKKyAgICAgICAgICAgIGlmIChvYmplY3QtPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgICAg
ICAgICBnX3N0cmluZ19hcHBlbmQocmVzdWx0VGV4dCwgdGV4dEZvclJlbmRlcmVyKG9iamVjdCkp
OworCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIElubGluZVRl
eHRCb3gqIGJveCA9IHJlbmRlclRleHQtPmZpcnN0VGV4dEJveCgpOworICAgICAgICB3aGlsZSAo
Ym94KSB7CisgICAgICAgICAgICBnY2hhciogdGV4dCA9IGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJl
bmRlclRleHQtPmNoYXJhY3RlcnMoKSwgcmVuZGVyVGV4dC0+dGV4dExlbmd0aCgpLCBib3gtPnN0
YXJ0KCksIGJveC0+ZW5kKCkpOworICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHJlc3VsdFRl
eHQsIHRleHQpOworICAgICAgICAgICAgLy8gTmV3bGluZSBjaGFycyBpbiB0aGUgc291cmNlIHJl
c3VsdCBpbiBzZXBhcmF0ZSB0ZXh0IGJveGVzLCBzbyBjaGVjaworICAgICAgICAgICAgLy8gYmVm
b3JlIGFkZGluZyBhIG5ld2xpbmUgaW4gdGhlIGxheW91dC4gU2VlIGJ1ZyAyNTQxNSBjb21tZW50
ICM3OC4KKyAgICAgICAgICAgIC8vIElmIHRoZSBuZXh0IHNpYmxpbmcgaXMgYSBCUiwgd2UnbGwg
YWRkIHRoZSBuZXdsaW5lIHdoZW4gd2UgZXhhbWluZSB0aGF0IGNoaWxkLgorICAgICAgICAgICAg
aWYgKCFib3gtPm5leHRPbkxpbmVFeGlzdHMoKSAmJiAoIW9iamVjdC0+bmV4dFNpYmxpbmcoKSB8
fCAhb2JqZWN0LT5uZXh0U2libGluZygpLT5pc0JSKCkpKQorICAgICAgICAgICAgICAgIGdfc3Ry
aW5nX2FwcGVuZChyZXN1bHRUZXh0LCAiXG4iKTsKKyAgICAgICAgICAgIGJveCA9IGJveC0+bmV4
dFRleHRCb3goKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEluc2VydCB0aGUgdGV4dCBv
ZiB0aGUgbWFya2VyIGZvciBsaXN0IGl0ZW0gaW4gdGhlIHJpZ2h0IHBsYWNlLCBpZiBwcmVzZW50
CisgICAgaWYgKHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAgU3RyaW5nIG1hcmtl
clRleHQgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS0+bWFya2VyVGV4dFdpdGhTdWZmaXgo
KTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisg
ICAgICAgICAgICBnX3N0cmluZ19wcmVwZW5kKHJlc3VsdFRleHQsIG1hcmtlclRleHQudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChyZXN1
bHRUZXh0LCBtYXJrZXJUZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHJldHVybiBn
X3N0cmluZ19mcmVlKHJlc3VsdFRleHQsIEZBTFNFKTsKK30KKwogZ2NoYXIqIHRleHRGb3JPYmpl
Y3QoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCogYWNjT2JqZWN0KQogewogICAgIEdTdHJpbmcq
IHN0ciA9IGdfc3RyaW5nX25ldygwKTsKQEAgLTg3OSw0OCArOTMyLDkgQEAgZ2NoYXIqIHRleHRG
b3JPYmplY3QoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCogYWNjT2JqZWN0KQogICAgICAgICAg
ICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgIlxuIik7CiAgICAgICAgICAgICByYW5nZSA9IGFjY09i
amVjdC0+ZG9BWFJhbmdlRm9yTGluZSgrK2xpbmVOdW1iZXIpOwogICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGFjY09iamVjdC0+cmVuZGVy
ZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIHJldHVybiBnX3N0cmlu
Z19mcmVlKHN0ciwgRkFMU0UpOwotCi0gICAgICAgIC8vIEZvciBSZW5kZXJCbG9ja3MsIHBpZWNl
IHRvZ2V0aGVyIHRoZSB0ZXh0IGZyb20gdGhlIFJlbmRlclRleHQgb2JqZWN0cyB0aGV5IGNvbnRh
aW4uCi0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvYmogPSByZW5kZXJlci0+Zmlyc3RDaGls
ZCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKG9i
ai0+aXNCUigpKSB7Ci0gICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgIlxuIik7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IFJlbmRlclRleHQqIHJlbmRlclRleHQ7Ci0gICAgICAgICAgICBpZiAob2JqLT5pc1RleHQoKSkK
LSAgICAgICAgICAgICAgICByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KG9iaik7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChvYmotPmZpcnN0Q2hpbGQoKSAmJiBvYmotPmZpcnN0Q2hpbGQoKS0+aXNU
ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgUmVuZGVySW5saW5lcyAoYW5kIGFu
eSBvdGhlciBzaW1pbGlhciBSZW5kZXJPYmplY3RzKS4KLSAgICAgICAgICAgICAgICByZW5kZXJU
ZXh0ID0gdG9SZW5kZXJUZXh0KG9iai0+Zmlyc3RDaGlsZCgpKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBJbmxpbmVUZXh0Qm94
KiBib3ggPSByZW5kZXJUZXh0LT5maXJzdFRleHRCb3goKTsKLSAgICAgICAgICAgIHdoaWxlIChi
b3gpIHsKLSAgICAgICAgICAgICAgICBnY2hhciogdGV4dCA9IGNvbnZlcnRVbmlDaGFyVG9VVEY4
KHJlbmRlclRleHQtPmNoYXJhY3RlcnMoKSwgcmVuZGVyVGV4dC0+dGV4dExlbmd0aCgpLCBib3gt
PnN0YXJ0KCksIGJveC0+ZW5kKCkpOwotICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChz
dHIsIHRleHQpOwotICAgICAgICAgICAgICAgIC8vIE5ld2xpbmUgY2hhcnMgaW4gdGhlIHNvdXJj
ZSByZXN1bHQgaW4gc2VwYXJhdGUgdGV4dCBib3hlcywgc28gY2hlY2sKLSAgICAgICAgICAgICAg
ICAvLyBiZWZvcmUgYWRkaW5nIGEgbmV3bGluZSBpbiB0aGUgbGF5b3V0LiBTZWUgYnVnIDI1NDE1
IGNvbW1lbnQgIzc4LgotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXh0IHNpYmxpbmcgaXMg
YSBCUiwgd2UnbGwgYWRkIHRoZSBuZXdsaW5lIHdoZW4gd2UgZXhhbWluZSB0aGF0IGNoaWxkLgot
ICAgICAgICAgICAgICAgIGlmICghYm94LT5uZXh0T25MaW5lRXhpc3RzKCkgJiYgKCFvYmotPm5l
eHRTaWJsaW5nKCkgfHwgIW9iai0+bmV4dFNpYmxpbmcoKS0+aXNCUigpKSkKLSAgICAgICAgICAg
ICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgIlxuIik7Ci0gICAgICAgICAgICAgICAgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gSW5zZXJ0IHRoZSB0ZXh0IG9mIHRoZSBtYXJrZXIgZm9yIGxpc3QgaXRlbSBpbiB0aGUg
cmlnaHQgcGxhY2UsIGlmIHByZXNlbnQKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0xpc3RJdGVt
KCkpIHsKLSAgICAgICAgICAgIFN0cmluZyBtYXJrZXJUZXh0ID0gdG9SZW5kZXJMaXN0SXRlbShy
ZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVy
ZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKLSAgICAgICAgICAgICAgICBnX3N0cmlu
Z19wcmVwZW5kKHN0ciwgbWFya2VyVGV4dC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3RyLCBtYXJrZXJUZXh0LnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICB9CisgICAgfSBlbHNlIGlmIChhY2NPYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHJlbmRlcmVy
VGV4dCh0ZXh0Rm9yUmVuZGVyZXIoYWNjT2JqZWN0LT5yZW5kZXJlcigpKSk7CisgICAgICAgIGdf
c3RyaW5nX2FwcGVuZChzdHIsIHJlbmRlcmVyVGV4dC5nZXQoKSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIGdfc3RyaW5nX2ZyZWUoc3RyLCBGQUxTRSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0No
YW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGQxMzA3NjYuLjQwNDgyZTkgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTAtMjYgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2Fu
Y2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGdldFRleHRBdE9mZnNldCByZXR1cm5zIGluY29ycmVjdCByZXN1bHRzIGlmIGEg
bGluayBpbmNsdWRlcyB0ZXh0IGFuZCBhbiBpbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNjUKKworICAgICAgICBOZXcgdGVzdCB0byBtYWtl
IHN1cmUgdGhpcyBidWcgaXMgYWN0dWFsbHkgZml4ZWQuCisKKyAgICAgICAgKiB0ZXN0cy90ZXN0
YXRrLmM6CisgICAgICAgICh0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5lSW1hZ2VzKTogTmV3
IHRlc3QuCisgICAgICAgIChtYWluKTogQWRkZWQgbmV3IHRlc3QuCisKIDIwMTAtMTAtMjIgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMg
Q2FybHNzb24uCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYyBiL1dlYktp
dC9ndGsvdGVzdHMvdGVzdGF0ay5jCmluZGV4IGM4ZGY0ZWYuLmUwZmJiYjcgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jCisrKyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0
ay5jCkBAIC00Niw2ICs0Niw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50c0luVGFibGVX
aXRoSGVhZGVycyA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRyPjx0aD5mb288CiAKIHN0YXRpYyBj
b25zdCBjaGFyKiBmb3JtV2l0aFRleHRJbnB1dHMgPSAiPGh0bWw+PGJvZHk+PGZvcm0+PGlucHV0
IHR5cGU9J3RleHQnIG5hbWU9J2VudHJ5JyAvPjwvZm9ybT48L2JvZHk+PC9odG1sPiI7CiAKK3N0
YXRpYyBjb25zdCBjaGFyKiBsaW5rc1dpdGhJbmxpbmVJbWFnZXMgPSAiPGh0bWw+PGhlYWQ+PHN0
eWxlPmEuaHR0cDpiZWZvcmUge2NvbnRlbnQ6IHVybChuby1pbWFnZS5wbmcpO308L3N0eWxlPjxi
b2R5PjxwPjxhIGNsYXNzPSdodHRwJyBocmVmPSdmb28nPmZvbzwvYT4gYmFyIGJhejwvcD48cD5m
b28gPGEgY2xhc3M9J2h0dHAnIGhyZWY9J2Jhcic+YmFyPC9hPiBiYXo8L3A+PHA+Zm9vIGJhciA8
YSBjbGFzcz0naHR0cCcgaHJlZj0nYmF6Jz5iYXo8L2E+PC9wPjwvYm9keT48L2h0bWw+IjsKKwog
c3RhdGljIGNvbnN0IGNoYXIqIGxpc3RzT2ZJdGVtcyA9ICI8aHRtbD48Ym9keT48dWw+PGxpPnRl
eHQgb25seTwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQg
YW5kIGEgPGEgaHJlZj0nYmFyJz5saW5rPC9hPjwvbGk+PC91bD48b2w+PGxpPnRleHQgb25seTwv
bGk+PGxpPjxhIGhyZWY9J2Zvbyc+bGluayBvbmx5PC9hPjwvbGk+PGxpPnRleHQgYW5kIGEgPGEg
aHJlZj0nYmFyJz5saW5rPC9hPjwvbGk+PC9vbD48L2JvZHk+PC9odG1sPiI7CiAKIHN0YXRpYyBj
b25zdCBjaGFyKiB0ZXh0Rm9yU2VsZWN0aW9ucyA9ICI8aHRtbD48Ym9keT48cD5BIHBhcmFncmFw
aCB3aXRoIHBsYWluIHRleHQ8L3A+PHA+QSBwYXJhZ3JhcGggd2l0aCA8YSBocmVmPSdodHRwOi8v
d2Via2l0Lm9yZyc+YSBsaW5rPC9hPiBpbiB0aGUgbWlkZGxlPC9wPjwvYm9keT48L2h0bWw+IjsK
QEAgLTk2NCw2ICs5NjYsNTkgQEAgc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldEV4dGVudHMo
dm9pZCkKICAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKIH0KIAorc3RhdGljIHZvaWQgdGVz
dFdlYmtpdEF0a0xpbmtzV2l0aElubGluZUltYWdlcyh2b2lkKQoreworICAgIFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAg
ICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jID0g
eyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lE
R0VUKHdlYlZpZXcpLCAmYWxsb2MpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3
ZWJWaWV3LCBsaW5rc1dpdGhJbmxpbmVJbWFnZXMsIDAsIDAsIDApOworCisgICAgLy8gTWFudWFs
bHkgc3BpbiB0aGUgbWFpbiBjb250ZXh0IHRvIGdldCB0aGUgYWNjZXNzaWJsZSBvYmplY3RzCisg
ICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoMCkpCisgICAgICAgIGdfbWFpbl9jb250
ZXh0X2l0ZXJhdGlvbigwLCBUUlVFKTsKKworICAgIEF0a09iamVjdCogb2JqID0gZ3RrX3dpZGdl
dF9nZXRfYWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydChvYmop
OworCisgICAgLy8gRmlyc3QgcGFyYWdyYXBoIChsaW5rIGF0IHRoZSBiZWdpbm5pbmcpCisgICAg
QXRrT2JqZWN0KiBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9i
aiwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CisgICAgZ2ludCBz
dGFydE9mZnNldDsKKyAgICBnaW50IGVuZE9mZnNldDsKKyAgICBnY2hhciogdGV4dCA9IGF0a190
ZXh0X2dldF90ZXh0X2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9C
T1VOREFSWV9MSU5FX1NUQVJULCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNz
ZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7
CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7CisgICAgZ19vYmpl
Y3RfdW5yZWYocGFyYWdyYXBoKTsKKworICAgIC8vIFNlY29uZCBwYXJhZ3JhcGggKGxpbmsgaW4g
dGhlIG1pZGRsZSkKKyAgICBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKG9iaiwgMSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CisgICAg
dGV4dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAw
LCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OworICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZv
byBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7
CisgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKKworICAgIC8vIFRoaXJkIHBhcmFncmFw
aCAobGluayBhdCB0aGUgZW5kKQorICAgIHBhcmFncmFwaCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqLCAyKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwYXJhZ3JhcGgp
KTsKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KEFUS19URVhUKHBhcmFn
cmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVu
ZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQs
ID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09
LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdfZnJl
ZSh0ZXh0KTsKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOworCisgICAgZ19vYmplY3Rf
dW5yZWYod2ViVmlldyk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtMaXN0c09mSXRl
bXModm9pZCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CkBAIC0xMTE2LDYgKzExNzEsNyBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90
ZXh0QXR0cmlidXRlcyIsIHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyk7CiAgICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0U2VsZWN0aW9ucyIsIHRlc3RXZWtpdEF0a1RleHRT
ZWxlY3Rpb25zKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldEV4dGVudHMi
LCB0ZXN0V2Via2l0QXRrR2V0RXh0ZW50cyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2F0ay9saW5rc1dpdGhJbmxpbmVJbWFnZXMiLCB0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5l
SW1hZ2VzKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2xpc3RzT2ZJdGVtcyIs
IHRlc3RXZWJraXRBdGtMaXN0c09mSXRlbXMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9hdGsvdGV4dENoYW5nZWROb3RpZmljYXRpb25zIiwgdGVzdFdlYmtpdEF0a1RleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9ucyk7CiAgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci0tIAoxLjcuMQoK
</data>
<flag name="review"
          id="61989"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>