<?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>16854</bug_id>
          
          <creation_ts>2008-01-12 10:13:43 -0800</creation_ts>
          <short_desc>display title in tooltip onmouseover in SVG</short_desc>
          <delta_ts>2010-04-27 07:27:44 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://upload.wikimedia.org/wikipedia/commons/5/50/Weather-icons.svg</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>EasyFix</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="jay">jay</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>emacemac7</cc>
    
    <cc>jeffschiller</cc>
    
    <cc>krit</cc>
    
    <cc>sarah</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>67036</commentid>
    <comment_count>0</comment_count>
    <who name="jay">jay</who>
    <bug_when>2008-01-12 10:13:43 -0800</bug_when>
    <thetext>visit the URI and mouseover the icons.

tooltip with title content should appear.

parity Opera</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67043</commentid>
    <comment_count>1</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-01-12 10:49:07 -0800</bug_when>
    <thetext>Note that you must hover over the drawn part of the icon; hovering over the blue background inside of a cloud doesn&apos;t display a tooltip on Opera 9.24.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70014</commentid>
    <comment_count>2</comment_count>
    <who name="jay">jay</who>
    <bug_when>2008-02-10 01:19:18 -0800</bug_when>
    <thetext>parity mozilla

parity Opera
please note: provided the cursor is on the window, Opera now updates the tooltip content as
focus changes

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71412</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-02-21 12:20:25 -0800</bug_when>
    <thetext>*** Bug 17472 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139800</commentid>
    <comment_count>4</comment_count>
    <who name="jay">jay</who>
    <bug_when>2009-08-13 04:50:59 -0700</bug_when>
    <thetext>a quick read of XML Linking Language (XLink) Version 1.0
http://www.w3.org/TR/xlink/

suggests that it is unlikely that xlink only refers to anchors, unless that is a constraint of svg1.1.

eg An XML element conforms to XLink if:...
http://www.w3.org/TR/xlink/#markup-reqs

appears to suggest that any xml element may have an xlink
unless I am mis-reading...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139803</commentid>
    <comment_count>5</comment_count>
    <who name="jay">jay</who>
    <bug_when>2009-08-13 04:54:09 -0700</bug_when>
    <thetext>#4

please ignore, wrong bug...
I hate the way I am directed to a new bug on commiting....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212219</commentid>
    <comment_count>6</comment_count>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-13 22:13:25 -0700</bug_when>
    <thetext>Ok, I have a patch for this.  Let me put together the story for tooltips in SVG:

  * if user hovers over a linked element that has a xlink:title, the xlink:title becomes the tooltip
  * if not linked, then the element under the cursor (nearest enclosing DOM node) is checked for a &lt;title&gt; element and that is used
  * if no title is found, then go up to the parent and look for a title, etc

This is all taken care of by WebKit&apos;s HitTestResult and adding a title() method to SVGStyledElement.

Special cases:

  * if element is a &lt;use&gt;, then the use&apos;s title should be the tooltip.  If the &lt;use&gt; does not have a title, then look into the rendered shadow content (referenced DOM) for the title as per above

I should note that for the case of a &lt;symbol&gt; being referenced by a &lt;use&gt;, the &lt;symbol&gt; itself is not checked for a &lt;title&gt; element.  This is because the symbol is not rendered (unlike a &lt;g&gt;).  To solve this in the weather symbol file, I had to move wrap the contents of the &lt;symbol&gt; elements in a &lt;g&gt; and the tooltips showed up.  I&apos;ll also attached the modified weather file.

The patch which implements all of this but does not get one case in my test file correct:

&lt;defs&gt;
  &lt;ellipse id=&quot;e1&quot;&gt;
    &lt;title&gt;FAIL&lt;/title&gt;
  &lt;/ellipse&gt;
&lt;/defs&gt;

&lt;use xlink:href=&quot;#e1&quot;&gt;
  &lt;title&gt;PASS&lt;/title&gt;
&lt;/use&gt;

Interestingly, if the &lt;use&gt; references a &lt;symbol&gt; in the above case, the tooltip displays properly.  I&apos;m still investigating this case but I think it should be raised as a different bug.

Can someone review the patch?  Can someone suggest how this can be tested?  Since it&apos;s driven by manual user interaction I&apos;m not sure the best approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212220</commentid>
    <comment_count>7</comment_count>
      <attachid>53315</attachid>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-13 22:14:23 -0700</bug_when>
    <thetext>Created attachment 53315
Patch to implement tooltip for SVG elements with a &lt;title&gt; child</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212222</commentid>
    <comment_count>8</comment_count>
      <attachid>53316</attachid>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-13 22:15:01 -0700</bug_when>
    <thetext>Created attachment 53316
Slightly modified test file from Wikipedia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212223</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-13 22:15:36 -0700</bug_when>
    <thetext>Attachment 53315 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/svg/SVGAElement.cpp:67:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212224</commentid>
    <comment_count>10</comment_count>
      <attachid>53317</attachid>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-13 22:15:39 -0700</bug_when>
    <thetext>Created attachment 53317
More concise test file that tests a variety of cases.  The middle case does not work (will open a separate bug).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212225</commentid>
    <comment_count>11</comment_count>
      <attachid>53318</attachid>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-13 22:24:08 -0700</bug_when>
    <thetext>Created attachment 53318
Fix style error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212422</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-04-14 10:41:21 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=53318) [details]
&gt; Fix style error

You can check for the renderer to identify a use-element

RenderObject* renderer = renderer();
if (renderer &amp;&amp; renderer-&gt;isSVGShadowTreeRootContainer())

Also the correct style is to use sentences with capital at the beginning and a point at the end. Please use String() or string.empty() for strings, not nullAtom. This would be more understandable.

I would like to ask Niko for taking a look at this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213638</commentid>
    <comment_count>13</comment_count>
      <attachid>53603</attachid>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-17 11:44:44 -0700</bug_when>
    <thetext>Created attachment 53603
Patch properly walking up to find the &lt;use&gt; shadow parent.  Update for reviewer comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213733</commentid>
    <comment_count>14</comment_count>
      <attachid>53603</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-18 02:21:17 -0700</bug_when>
    <thetext>Comment on attachment 53603
Patch properly walking up to find the &lt;use&gt; shadow parent.  Update for reviewer comments

Hi Jeff,

nice patch, though it needs to be tightend up a bit:
 
&gt;  String SVGAElement::title() const
&gt;  {
&gt; -    return getAttribute(XLinkNames::titleAttr);
&gt; +    // If the xlink:title is set (non-empty string), use it.
&gt; +    const AtomicString&amp; title = getAttribute(XLinkNames::titleAttr);
&gt; +    if (title != String())
Please use &quot;if (!title.isEmpty())&quot; here, instead of creating temporary String objects for comparision.


&gt; +String SVGStyledElement::title() const
&gt; +{
&gt; +    // First we walk up the tree to see if we are inside a &lt;use&gt; shadow tree.
&gt; +    Node* parent = const_cast&lt;SVGStyledElement*&gt;(this);
&gt; +    while (parent) {
&gt; +        if (parent-&gt;isShadowNode()) {
I&apos;d suggest to use following code, in order to make the code more readable, less nested scopes:

if (!parent-&gt;isShadowNode()) {
    parent = parent-&gt;parentNode();
    continue;
}

&gt; +            // Get the &lt;use&gt; element.
&gt; +            Node* shadowParent = parent-&gt;shadowParentNode();
&gt; +            if (shadowParent &amp;&amp; shadowParent-&gt;nodeName() == SVGNames::useTag) {
I&apos;d recommend to use a slightly more optimized check here:
if (shadowParent &amp;&amp; shadowParent-&gt;hasTagName(SVGNames::useTag))
...

&gt; +                SVGUseElement* useElem = static_cast&lt;SVGUseElement*&gt;(shadowParent);
&gt; +                if (useElem) {
Please don&apos;t use abbrevations, use &quot;useElement&quot;, as identifier, and combine it with the if statement.
if (SVGUseElement* useElement = ....) { ... }

&gt; +                    // If the &lt;use&gt; title is empty we will keep walking up.
&gt; +                    String useTitle(useElem-&gt;title());

&gt; +                    if (useTitle != String())
&gt; +                        return useTitle;
Same as above, just use &quot;if (!useTitle.isEmpty())&quot; instead of direct comparisions.

&gt; +    // If we aren&apos;t an instance in a use, then find the first &lt;title&gt; child of this element.
&gt; +    Element* child = firstElementChild();
&gt; +    while (child &amp;&amp; child-&gt;nodeName() != &quot;title&quot; &amp;&amp; child-&gt;namespaceURI() != &quot;http://www.w3.org/2000/svg&quot;)
&gt; +        child = child-&gt;nextElementSibling();
Why not use a simple for() loop here, like:

for (Element* child = firstElementChild(); child; child = child-&gt;nextElementSibling()) {
    if (!child-&gt;isSVGElement())
        continue;
    if (!child-&gt;hasTagName(SVGNames::titleAttr))
        continue;
}

In general you should always try to avoid temporary strings and comparisions.

&gt; +    // If found, return the text contents.
&gt; +    // According to spec, the title on &lt;svg&gt; elements are never returned as a tooltip.
&gt; +    if (child &amp;&amp; nodeName() != &quot;svg&quot;)
&gt; +        return child-&gt;innerText();
if (child &amp;&amp; !child-&gt;hasTagName(SVGNames::svgTag))
    return child-&gt;innerText();

Sorry for the lots of corrections, but I think this makes the code much nicer to read :-)
r- for now, happy to review the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214059</commentid>
    <comment_count>15</comment_count>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-19 09:20:03 -0700</bug_when>
    <thetext>Thanks for your comments!

I&apos;m a little busy today but hopefully tonight/tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214397</commentid>
    <comment_count>16</comment_count>
      <attachid>53753</attachid>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-19 18:01:12 -0700</bug_when>
    <thetext>Created attachment 53753
Patch addressing Niko&apos;s comments

titleElement needs to be declared outside of the for-loop because of scoping rules in C++</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214483</commentid>
    <comment_count>17</comment_count>
    <who name="jay">jay</who>
    <bug_when>2010-04-19 22:36:26 -0700</bug_when>
    <thetext>Jeff,

probably a separate bug, but maybe you can fix now...

can you please check that the tooltip raised is not directly under the cursor, for a variety of cursors and font sizes?

maybe even place the tooltip above the cursor?
maybe not...

ie Opera the cursor frequently covers part or most of the tooltip, very much reducing its efficacy.
reported years ago, but iirc not fixed

apologies for the bug-spam</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214513</commentid>
    <comment_count>18</comment_count>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-20 00:39:08 -0700</bug_when>
    <thetext>jay - this patch/fix has nothing to do with where the tooltip is placed or how it&apos;s rendered, sorry.  Sounds like a different bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214523</commentid>
    <comment_count>19</comment_count>
      <attachid>53753</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-20 01:23:53 -0700</bug_when>
    <thetext>Comment on attachment 53753
Patch addressing Niko&apos;s comments

Hi Jeff,

almost there, some small comments:

&gt;  
&gt; +String SVGStyledElement::title() const
&gt; +{
&gt; +    // Else, we walk up the tree to see if we are inside a &lt;use&gt; shadow tree.
Slightly adjust the comment to sth. like:
&quot;Walk up the tree, to find out whether we&apos;re inside a &lt;use&gt; shadow tree, to find the right title&quot;

&gt; +    Node* parent = const_cast&lt;SVGStyledElement*&gt;(this);
&gt; +    while (parent) {
&gt; +        if (!parent-&gt;isShadowNode()) {
&gt; +            parent = parent-&gt;parentNode();
&gt; +            continue;
&gt; +        }
&gt; +        
&gt; +        // Get the &lt;use&gt; element.
&gt; +        Node* shadowParent = parent-&gt;shadowParentNode();
&gt; +        if (shadowParent &amp;&amp; shadowParent-&gt;hasTagName(SVGNames::useTag)) {
&gt; +            if (SVGUseElement* useElement = static_cast&lt;SVGUseElement*&gt;(shadowParent)) {
No need to do another if() here, just use
SVGUseElement* useElement = ..
the static_cast can not fail.

&gt; +                // If the &lt;use&gt; title is empty we will keep walking up.
&gt; +                String useTitle(useElement-&gt;title());
&gt; +                if (!useTitle.isEmpty())
&gt; +                    return useTitle;
Why do you want to keep walking up if the title is empty?
You&apos;re not using the result of &apos;parent&apos; anywhere, and there are no nested shadow trees. So you can just stop here:
if (useTitle.isEmpty())
    break;
return useTitle;

&gt; +    // If we aren&apos;t an instance in a use, then find the first &lt;title&gt; child of this element.
&gt; +    Element* titleElement = firstElementChild();
&gt; +    for ( ; titleElement; titleElement = titleElement-&gt;nextElementSibling()) {
You should remove the first space: for(; titleElement; ...)

&gt; +        if (!titleElement-&gt;hasTagName(SVGNames::titleTag))
&gt; +            continue;
&gt; +        if (!titleElement-&gt;isSVGElement())
&gt; +            continue;
I&apos;d do the checks the other way round, because isSVGElement() is cheaper.

&gt; +    // If a title child was found, return the text contents.
&gt; +    // According to spec, we should not return titles when hovering over &lt;svg&gt; elements (those 
&gt; +    // &lt;title&gt; elements are the title of the document, not a tooltip).
&gt; +    if (titleElement &amp;&amp; !this-&gt;hasTagName(SVGNames::svgTag))
&gt; +        return titleElement-&gt;innerText();
You can omit the &quot;this-&gt;&quot; here.
Oh and you need to be careful, and recheck wheter titleElement is actually a SVGNames::titleTag element.
Say you&apos;re hovering over a node with a single child, which is not a &lt;title&gt; element, then &quot;titleElement&quot; will store a pointer to it, and you&apos;re just returning it&apos;s innerText below, no matter whether it&apos;s a &lt;title&gt; or not.
To summarize, I&apos;d rewrite as follows:
if (titleElement &amp;&amp; titleElement-&gt;hasTagName(SVGNames::titleTag))
    return titleElement-&gt;innerText();

This saves the svgTag check completly :-)

Sorry that I missed some parts during the last review! Do you have commit access btw? Or do you want to me to cq+ after you&apos;ve uploaded the next version?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214919</commentid>
    <comment_count>20</comment_count>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-20 13:34:56 -0700</bug_when>
    <thetext>Hi Niko,

Some responses to your comments:

&gt; Why do you want to keep walking up if the title is empty?
&gt; You&apos;re not using the result of &apos;parent&apos; anywhere, and there are no nested
&gt; shadow trees. So you can just stop here:
&gt; if (useTitle.isEmpty())
&gt;    break;
&gt; return useTitle;

My assumption is that there were nested shadow trees, so thanks for this review comment.


&gt;&gt; +        if (!titleElement-&gt;hasTagName(SVGNames::titleTag))
&gt;&gt; +            continue;
&gt;&gt; +        if (!titleElement-&gt;isSVGElement())
&gt;&gt; +            continue;
&gt; I&apos;d do the checks the other way round, because isSVGElement() is cheaper.

Actually it&apos;s most likely that all children of SVG elements will themselves be SVG elements.  In this way, it makes more sense to check the tag name first, otherwise the isSVGElement() check would be done for every child.

If you still feel strongly about this though, I will swap them, just let me know :)


&gt;&gt; +    // If a title child was found, return the text contents.
&gt;&gt; +    // According to spec, we should not return titles when hovering over &lt;svg&gt; elements (those 
&gt;&gt; +    // &lt;title&gt; elements are the title of the document, not a tooltip).
&gt;&gt; +    if (titleElement &amp;&amp; !this-&gt;hasTagName(SVGNames::svgTag))
&gt;&gt; +        return titleElement-&gt;innerText();
&gt; You can omit the &quot;this-&gt;&quot; here.

Actually I had put that there intentionally because in your earlier review you had mistaken it for me checking whether the child was a &lt;svg&gt; element, which is not the intent.  The intent here is to ensure that the element we are hovering over (&quot;this&quot;) is not a &lt;svg&gt;.  In my latest patch, I have moved this check to the very beginning to shortcut a lot of the processing and hopefully make it clearer.  In this change, I have removed the &quot;this&quot; because it would no longer confuse folks since the check is on its own.


&gt; Oh and you need to be careful, and recheck wheter titleElement is actually a
SVGNames::titleTag element.
&gt; Say you&apos;re hovering over a node with a single child, which is not a &lt;title&gt;
&gt; element, then &quot;titleElement&quot; will store a pointer to it, and you&apos;re just
&gt; returning it&apos;s innerText below, no matter whether it&apos;s a &lt;title&gt; or not.

Hm, I don&apos;t think so.  The for-loop keeps going until we either find a &lt;title&gt; or childElement is null.  There is no other condition.  Therefore I thought simply checking that childElement was non-null was sufficient.

On the other hand, I believe there was an error in your suggested logic because there could (though it&apos;s unlikely) be a &lt;title&gt; element in a different namespace.  Wouldn&apos;t that trip the hasTagName()?  I have reversed the logic and combined the two if&apos;s with boolean-and in the latest patch.  I think it is clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214946</commentid>
    <comment_count>21</comment_count>
      <attachid>53881</attachid>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-20 14:23:00 -0700</bug_when>
    <thetext>Created attachment 53881
Patch addressing Niko&apos;s comments #2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215183</commentid>
    <comment_count>22</comment_count>
      <attachid>53881</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-21 00:08:38 -0700</bug_when>
    <thetext>Comment on attachment 53881
Patch addressing Niko&apos;s comments #2

Hi Jeff,

the patch is almost perfect! Good that you&apos;ve moved the svgTag check to the beginning, clearer now.

I still see a small issue with &quot;titleElement&quot;, let me explain with your code:

&gt; +    Element* titleElement = firstElementChild();
&gt; +    for (; titleElement; titleElement = titleElement-&gt;nextElementSibling()) {
&gt; +        if (titleElement-&gt;hasTagName(SVGNames::titleTag) &amp;&amp; titleElement-&gt;isSVGElement())
&gt; +            break;
&gt; +    }
Ok, you are beginning with the firstElementChild() of a certain SVGStyledElement. You loop over all children, take this as example:

&lt;rect&gt;
   &lt;animateColor/&gt;
&lt;/rect&gt;

The titleElement-&gt;hasTagName(SVGNames::titleTag) check won&apos;t be true, as it&apos;s an &lt;animateColor&gt; element. As there is no next sibling,
you will just exit the loop, w/o breaking early. That means &quot;titleElement&quot; now stores the pointer to the &lt;animateColor&gt; element.

&gt; +    // If a title child was found, return the text contents.
&gt; +    if (titleElement)
&gt; +        return titleElement-&gt;innerText();

And you end up returning the &quot;innerText&quot; of the &lt;animateColor&gt; element here.
Hope you see the problem. You basically need to recheck the same condition before returning the innerText(), aka:
if (titleELement &amp;&amp; titleElement-&gt;hasTagName(SVGNames::titleTag) ... )
     return titleElement-&gt;innerText();

This is a bit awkward though, so I suggest to rewrite the whole loop, as follows:

&lt;suggestion&gt;
bool foundTitleElement = false;
Element* titleElement = firstElementChild();
for (; titleElement; titleElement = titleElement-&gt;nextElementSibling()) {
    foundTitleElement = titleElement-&gt;hasTagName(SVGNames::titleTag) &amp;&amp; titleElement-&gt;isSVGElement();
    if (foundTitleElement)
        break;
}

if (foundTitleElement) {
    ASSERT(titleElement);
    return titleElement-&gt;innerText();
}
&lt;/suggestion&gt;

This way you save redoing the same check twice, with the drawback of an extra bool, that is negligable though.
Do you have commit access, btw?

Hope you&apos;re not getting bored by this patch :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215394</commentid>
    <comment_count>23</comment_count>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-21 10:34:58 -0700</bug_when>
    <thetext>Hi Nico,

&gt;&gt; +    Element* titleElement = firstElementChild();
&gt;&gt; +    for (; titleElement; titleElement = titleElement-&gt;nextElementSibling()) {
&gt;&gt; +        if (titleElement-&gt;hasTagName(SVGNames::titleTag) &amp;&amp; titleElement-&gt;isSVGElement())
&gt;&gt; +            break;
&gt;&gt; +    }
&gt;Ok, you are beginning with the firstElementChild() of a certain
&gt;SVGStyledElement. You loop over all children, take this as example:
&gt;
&gt;&lt;rect&gt;
&gt;   &lt;animateColor/&gt;
&gt;&lt;/rect&gt;
&gt;
&gt;The titleElement-&gt;hasTagName(SVGNames::titleTag) check won&apos;t be true, as it&apos;s
&gt;an &lt;animateColor&gt; element. As there is no next sibling,
&gt;you will just exit the loop, w/o breaking early. That means &quot;titleElement&quot; now
&gt;stores the pointer to the &lt;animateColor&gt; element.

Agreed, the loop will not break early because the if condition is not true.  However, the for-loop should then set titleElement = nextElementSibling() which would be null and the loop would stop executing.

i.e. the loop will keep on going until we reach a &lt;svg:title&gt; element
or there are no more children (in which case titleElement is null on
the last call to nextElementSibling()).

Am I missing something still? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215759</commentid>
    <comment_count>24</comment_count>
      <attachid>53881</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-22 00:40:28 -0700</bug_when>
    <thetext>Comment on attachment 53881
Patch addressing Niko&apos;s comments #2

Oops, I had a misunderstanding, good we resolved it now :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215848</commentid>
    <comment_count>25</comment_count>
      <attachid>53881</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-22 06:11:20 -0700</bug_when>
    <thetext>Comment on attachment 53881
Patch addressing Niko&apos;s comments #2

Rejecting patch 53881 from commit-queue.

Failed to run &quot;[u&apos;git&apos;, u&apos;svn&apos;, u&apos;dcommit&apos;]&quot; exit_code: 1
Last 500 characters of output:
...
	M	WebCore/ChangeLog
	M	WebCore/svg/SVGAElement.cpp
	M	WebCore/svg/SVGStyledElement.cpp
	M	WebCore/svg/SVGStyledElement.h
A repository hook failed: MERGE request failed on &apos;/repository/webkit/trunk&apos;: Commit blocked by pre-commit hook (exit code 1) with output:
svnlook: Can&apos;t write to stream: Broken pipe

    The following ChangeLog files contain OOPS:

        trunk/WebCore/ChangeLog

    Please don&apos;t ever say &quot;OOPS&quot; in a ChangeLog file.
 at /usr/local/git/libexec/git-core/git-svn line 570


Full output: http://webkit-commit-queue.appspot.com/results/1871011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215850</commentid>
    <comment_count>26</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-22 06:25:04 -0700</bug_when>
    <thetext>Hmm, commit queue is confused by the patch. Is it because of &quot;No new tests (OOPS!)&quot; ??
Jeff, can you update the ChangeLog, to say something like &quot;No new tests, not testable using DRT&quot;.
Now that I think about it, could you extend the patch, and add your testcase to &quot;WebCore/manual-tests/svg-tooltips.svg&quot;? That would be nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216269</commentid>
    <comment_count>27</comment_count>
      <attachid>54128</attachid>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-22 21:40:24 -0700</bug_when>
    <thetext>Created attachment 54128
Patch adding manual test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216329</commentid>
    <comment_count>28</comment_count>
      <attachid>54128</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-23 01:12:17 -0700</bug_when>
    <thetext>Comment on attachment 54128
Patch adding manual test

Great work Jeff, r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216349</commentid>
    <comment_count>29</comment_count>
      <attachid>54128</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-23 02:32:02 -0700</bug_when>
    <thetext>Comment on attachment 54128
Patch adding manual test

Clearing flags on attachment: 54128

Committed r58160: &lt;http://trac.webkit.org/changeset/58160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216350</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-23 02:32:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217580</commentid>
    <comment_count>31</comment_count>
    <who name="jay">jay</who>
    <bug_when>2010-04-27 01:36:39 -0700</bug_when>
    <thetext>jeff,

not sure how you &apos;slightly modified&apos; the original testcase,

however, 

using the latest nightly, the original testcase does not raise a tooltip, your test does.

inclined to reopen bug, but could open another with your assistance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217659</commentid>
    <comment_count>32</comment_count>
    <who name="Jeff Schiller">jeffschiller</who>
    <bug_when>2010-04-27 04:57:19 -0700</bug_when>
    <thetext>Jonathan,

Did you look at my slightly modified test case at https://bugs.webkit.org/attachment.cgi?id=53316 ?

As per comment #6 I had to wrap the contents of the &lt;symbol&gt; elements in a &lt;g&gt; and the tooltips showed up. So the following case does not work:

&lt;defs&gt;
  &lt;symbol id=&quot;foo&quot;&gt;
    &lt;title&gt;Foo&lt;/title&gt;
    &lt;rect .../&gt;
    &lt;circle .../&gt;
  &lt;/symbol&gt;
&lt;/defs&gt;

&lt;use xlink:href=&quot;#foo&quot;/&gt;

The user will not see a &quot;Foo&quot; tooltip when hovering over the content.  

To solve this, I had to modify the markup by wrapping the symbol geometry in a group as:

&lt;defs&gt;
  &lt;symbol id=&quot;foo&quot;&gt;
  &lt;g&gt;
    &lt;title&gt;Foo&lt;/title&gt;
    &lt;rect .../&gt;
    &lt;circle .../&gt;
  &lt;/g&gt;
  &lt;/symbol&gt;
&lt;/defs&gt;

&lt;use xlink:href=&quot;#foo&quot;/&gt;


If you think the other case is important and that wrapping the geometry of a symbol in a &lt;g&gt; is not a sufficient solution, then please open a new WebKit bug with the title &quot;Symbol tooltips not being displayed&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217690</commentid>
    <comment_count>33</comment_count>
    <who name="jay">jay</who>
    <bug_when>2010-04-27 07:27:44 -0700</bug_when>
    <thetext>jeff,

tx, done  bug 38198

did anyone check google chrome on pc so we could widen scope on this bug?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53315</attachid>
            <date>2010-04-13 22:14:23 -0700</date>
            <delta_ts>2010-04-13 22:24:08 -0700</delta_ts>
            <desc>Patch to implement tooltip for SVG elements with a &lt;title&gt; child</desc>
            <filename>bug16854.patch.txt</filename>
            <type>text/plain</type>
            <size>3889</size>
            <attacher name="Jeff Schiller">jeffschiller</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzU1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQtMTMgIEplZmYgU2NoaWxsZXIgIDxjb2RlZHJlYWRAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudCBob3ZlciB0b29sdGlwcyBmb3IgU1ZHIGVsZW1lbnRzIHdpdGggYSA8dGl0bGU+
IGNoaWxkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogc3Zn
L1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50Ojp0aXRsZSk6
IHhsaW5rOnRpdGxlIHRha2VzIHByZWNlZGVuY2UsIG90aGVyd2lzZSBTVkdTdHlsZWRFbGVtZW50
Ojp0aXRsZSgpIGlzIHVzZWQKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSk6IGNoZWNrcyBmb3IgYSBz
aGFkb3cgcGFyZW50IGFuZCB1c2VzIHRoYXQgdGl0bGUsIG90aGVyd2lzZSB1c2VzIHRoZSBjb250
ZW50J3MgdGl0bGUKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oOiBhZGQgdGl0bGUo
KSBtZXRob2QgZGVjbGFyYXRpb24KKwogMjAxMC0wNC0xMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2Fy
ZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R0FFbGVtZW50LmNwcAkocmV2aXNpb24gNTc1NTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDEzIEBAIFNWR0FFbGVtZW50Ojp+U1ZH
QUVsZW1lbnQoKQogCiBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OnRpdGxlQXR0cik7CisgICAgLy8gaWYgdGhl
IHhsaW5rOnRpdGxlIGlzIHNldCwgdXNlIHRoYXQKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRp
dGxlID0gZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OnRpdGxlQXR0cik7CisgICAgaWYgKHRpdGxl
ICE9IG51bGxBdG9tKSB7CisgICAgICAgIHJldHVybiB0aXRsZTsKKyAgICB9CisgICAgLy8gb3Ro
ZXJ3aXNlLCB1c2UgdGhlIHRpdGxlIG9mIHRoaXMgZWxlbWVudAorICAgIHJldHVybiBTVkdTdHls
ZWRFbGVtZW50Ojp0aXRsZSgpOwogfQogCiB2b2lkIFNWR0FFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHls
ZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmNwcAkocmV2aXNpb24gNTc1NTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN1
cHBvcnQuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRlci5oIgogI2luY2x1ZGUgIlNWR1NW
R0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsNiArNjYsMzYgQEAgU1ZH
U3R5bGVkRWxlbWVudDo6flNWR1N0eWxlZEVsZW1lbnQoKQogICAgIFNWR1Jlc291cmNlOjpyZW1v
dmVDbGllbnQodGhpcyk7CiB9CiAKK1N0cmluZyBTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSgpIGNv
bnN0Cit7CisgICAgLy8gaWYgdGhpcyBpcyBzaGFkb3cgY29udGVudCwgZ2V0IHRoZSB1c2UgaW5z
dGFuY2UgYW5kIHNlZSBpZiBpdCBoYXMgYSB0aXRsZQorICAgIC8vIHdoaWNoIHRha2VzIHByZWZl
cmVuY2UKKyAgICBpZiAoaXNTaGFkb3dOb2RlKCkpIHsKKyAgICAgICAgTm9kZSogc2hhZG93UGFy
ZW50ID0gY29uc3RfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4odGhpcyktPnNoYWRvd1BhcmVudE5v
ZGUoKTsKKyAgICAgICAgLy8gY2FzdCBpdCB0byBhIDx1c2U+IGVsZW1lbnQKKyAgICAgICAgaWYg
KHNoYWRvd1BhcmVudC0+bm9kZU5hbWUoKSA9PSAidXNlIikgeworICAgICAgICAgICAgU1ZHVXNl
RWxlbWVudCogdXNlRWxlbSA9IHN0YXRpY19jYXN0PFNWR1VzZUVsZW1lbnQqPihzaGFkb3dQYXJl
bnQpOworICAgICAgICAgICAgaWYgKHVzZUVsZW0pIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcg
dXNlVGl0bGUodXNlRWxlbS0+dGl0bGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKHVzZVRpdGxl
ICE9IG51bGxBdG9tKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlVGl0bGU7ICAgICAg
ICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gaWYg
d2UgYXJlbid0IGFuIGluc3RhbmNlIGluIGEgdXNlLCB0aGVuIGZpbmQgdGhlIGZpcnN0IDx0aXRs
ZT4gY2hpbGQgb2YgdGhpcyBlbGVtZW50CisgICAgRWxlbWVudCogY2hpbGQgPSBmaXJzdEVsZW1l
bnRDaGlsZCgpOworICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZC0+bm9kZU5hbWUoKSAhPSAidGl0
bGUiICYmIGNoaWxkLT5uYW1lc3BhY2VVUkkoKSAhPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciKQorICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKKworICAg
IC8vIGlmIGZvdW5kLCByZXR1cm4gdGV4dCBjb250ZW50cworICAgIC8vIGFjY29yZGluZyB0byBz
cGVjLCB0aGUgdGl0bGUgb24gPHN2Zz4gZWxlbWVudHMgYXJlIG5ldmVyIHJldHVybmVkIGFzIGEg
dG9vbHRpcCAKKyAgICBpZiAoY2hpbGQgJiYgbm9kZU5hbWUoKSAhPSAic3ZnIikKKyAgICAgICAg
cmV0dXJuIGNoaWxkLT5pbm5lclRleHQoKTsKKyAgICAKKyAgICByZXR1cm4gbnVsbEF0b207Cit9
CisKIGJvb2wgU1ZHU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSog
c3R5bGUpCiB7CiAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2V4dGVuZC5odG1sI1By
aXZhdGVEYXRhCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiA1NzU1NykKKysr
IFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR1N0eWxl
ZEVsZW1lbnQoKTsKIAorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OworCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWFya2VycygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>53316</attachid>
            <date>2010-04-13 22:15:01 -0700</date>
            <delta_ts>2010-04-13 22:15:01 -0700</delta_ts>
            <desc>Slightly modified test file from Wikipedia</desc>
            <filename>weather.svg</filename>
            <type>image/svg+xml</type>
            <size>13475</size>
            <attacher name="Jeff Schiller">jeffschiller</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxz
dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjIiIGJhc2VQ
cm9maWxlPSJ0aW55IgogICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs
aW5rIgp3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIgo+Cjx0aXRsZT53ZWF0aGVyPC90aXRsZT4K
PGRlc2M+dmFyaW91cyB3ZWF0aGVyIGljb25zOiBjbG91ZHksIGhhaWwgc2hvd2VycywgaGFpbCwg
aGVhdnkgcmFpbiBzaG93ZXJzLCBoZWF2eSByYWluLCBoZWF2eSBzbm93IHNob3dlcnMsIGhlYXZ5
LXNub3csIGxpZ2h0IHJhaW4gc2hvd2VycywgbGlnaHQgcmFpbiwgbGlnaHQgc25vdyBzaG93ZXJz
LCBsaWdodCBzbm93LCBzbGVldCBzaG93ZXJzLCBzbGVldCwgc3VubnkgaW50ZXJ2YWxzLCBzdW5u
eSwgdGh1bmRlcnkgc2hvd2VyczwvZGVzYz4KCjxtZXRhZGF0YT4KCjxyZGY6UkRGIHhtbG5zPSJo
dHRwOi8vd2ViLnJlc291cmNlLm9yZy9jYy8iCnhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMv
ZWxlbWVudHMvMS4xLyIKeG1sbnM6Y2M9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjLyIKeG1s
bnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgp4bWxu
czpmb2FmPSJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xLyIgCnhtbG5zOmd1aXM9Imh0dHA6Ly93
d3cucGVlcG8uY28udWsvdGVtcC9ndWktc2NoZW1hIyI+Cgo8V29yayByZGY6YWJvdXQ9Imh0dHA6
Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy81LzUwL1dlYXRoZXItaWNv
bnMuc3ZnIj4KCTxkYzp0aXRsZSB4bWw6bGFuZz0iZW4iPldlYXRoZXIgSWNvbnM8L2RjOnRpdGxl
PgoJPGRjOmRlc2NyaXB0aW9uIHhtbDpsYW5nPSJlbiI+4oCcdmFyaW91cyB3ZWF0aGVyIGljb25z
OiBjbG91ZHksIGhhaWwgc2hvd2VycywgaGFpbCwgaGVhdnkgcmFpbiBzaG93ZXJzLCBoZWF2eSBy
YWluLCBoZWF2eSBzbm93IHNob3dlcnMsIGhlYXZ5LXNub3csIGxpZ2h0IHJhaW4gc2hvd2Vycywg
bGlnaHQgcmFpbiwgbGlnaHQgc25vdyBzaG93ZXJzLCBsaWdodCBzbm93LCBzbGVldCBzaG93ZXJz
LCBzbGVldCwgc3VubnkgaW50ZXJ2YWxzLCBzdW5ueSwgdGh1bmRlcnkgc2hvd2VycyI8L2RjOmRl
c2NyaXB0aW9uPgoJPGRjOmNyZWF0b3I+PEFnZW50PjxkYzp0aXRsZSB4bWw6bGFuZz0iY3kiPjxm
b2FmOlBlcnNvbj48Zm9hZjpuYW1lPkpvbmF0aGFuIENoZXR3eW5kPC9mb2FmOm5hbWU+PGZvYWY6
bWJveD5qLmNoZXR3eW5kQGJ0aW50ZXJuZXQuY29tPC9mb2FmOm1ib3g+PC9mb2FmOlBlcnNvbj48
L2RjOnRpdGxlPjwvQWdlbnQ+PC9kYzpjcmVhdG9yPgoJPGRjOnJpZ2h0cz48QWdlbnQ+PGRjOnRp
dGxlIHhtbDpsYW5nPSJjeSI+PGZvYWY6UGVyc29uPjxmb2FmOm5hbWU+Sm9uYXRoYW4gQ2hldHd5
bmQ8L2ZvYWY6bmFtZT48Zm9hZjptYm94PmouY2hldHd5bmRAYnRpbnRlcm5ldC5jb208L2ZvYWY6
bWJveD48L2ZvYWY6UGVyc29uPjwvZGM6dGl0bGU+PC9BZ2VudD48L2RjOnJpZ2h0cz4KCTxkYzpk
YXRlPjIwMDcvMDkvMDc8L2RjOmRhdGU+Cgk8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZv
cm1hdD4KCTxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBl
L0ludGVyYWN0aXZlUmVzb3VyY2UiIC8+Cgk8bGljZW5zZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly93
ZWIucmVzb3VyY2Uub3JnL2NjL1B1YmxpY0RvbWFpbiIgLz4KPC9Xb3JrPgo8TGljZW5zZSByZGY6
YWJvdXQ9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2NjL1B1YmxpY0RvbWFpbiI+CiAgIDxwZXJt
aXRzIHJkZjpyZXNvdXJjZT0iaHR0cDovL3dlYi5yZXNvdXJjZS5vcmcvY2MvUmVwcm9kdWN0aW9u
IiAvPgogICA8cGVybWl0cyByZGY6cmVzb3VyY2U9Imh0dHA6Ly93ZWIucmVzb3VyY2Uub3JnL2Nj
L0Rpc3RyaWJ1dGlvbiIgLz4KICAgPHBlcm1pdHMgcmRmOnJlc291cmNlPSJodHRwOi8vd2ViLnJl
c291cmNlLm9yZy9jYy9EZXJpdmF0aXZlV29ya3MiIC8+CjwvTGljZW5zZT4KCjwvcmRmOlJERj4K
CjwvbWV0YWRhdGE+Cgo8ZGVmcz4KCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgaWQ9ImNzcyI+PCFb
Q0RBVEFbCgojY2xvdWQyIHtzdHJva2U6IzY2Njsgc3Ryb2tlLXdpZHRoOjEyOyBzdHJva2UtbGlu
ZWNhcDpyb3VuZDsgZmlsbDpub25lO30KCl1dPjwvc3R5bGU+Cgo8c3ltYm9sIGlkPSJibGFjay1j
bG91ZCIgdmlld0JveD0iMCAwIDE1MCAxNTAiICA+CjxnIHN0cm9rZT0iIzMzMyIgc3Ryb2tlLXdp
ZHRoPSIxMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBmaWxsPSJub25lIj4KPHRpdGxlPmNsb3Vk
eTwvdGl0bGU+CjxwYXRoIGQ9Ik0gNzUgNTUgQSAyMyAyMywgMCwgMSwgMCA1NSw5MCBMIDExNSw5
MCBBIDIxIDIxLCAwLCAxLCAwIDExNSw0NSIgLz4KPHBhdGggZD0iTSAxMDUgNjAgQSAyNSAyNSwg
MCwgMSwgMCA2NSw0NSAiICAvPgo8L2c+Cjwvc3ltYm9sPgoKPHN5bWJvbCBpZD0id2hpdGUtY2xv
dWQiIHZpZXdCb3g9IjAgMCAxNTAgMTUwIiAgPgo8ZyBzdHJva2U9IiNkZWUiIHN0cm9rZS13aWR0
aD0iMTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgZmlsbD0ibm9uZSI+CjxwYXRoIGQ9Ik0gNzUg
NTUgQSAyMyAyMywgMCwgMSwgMCA1NSw5MCBMIDExNSw5MCBBIDIxIDIxLCAwLCAxLCAwIDExNSw0
NSIgLz4KPHBhdGggZD0iTSAxMDUgNjAgQSAyNSAyNSwgMCwgMSwgMCA2NSw0NSAiICAvPgo8L2c+
Cjwvc3ltYm9sPgoKPHN5bWJvbCBpZD0iY2xvdWQiIHZpZXdCb3g9IjAgMCAxNTAgMTUwIiAgPgo8
ZyBzdHJva2U9IiM2NjYiIHN0cm9rZS13aWR0aD0iMTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIg
ZmlsbD0ibm9uZSIgPgo8cGF0aCBkPSJNIDc1IDU1IEEgMjMgMjMsIDAsIDEsIDAgNTUsOTAgTCA2
MCw5MCIgLz4KPHBhdGggZD0iTSAxMTAsOTAgMTE1LDkwIEEgMjEgMjEsIDAsIDEsIDAgMTE1LDQ1
Ii8+CjxwYXRoIGQ9Ik0gMTA1IDYwIEEgMjUgMjUsIDAsIDEsIDAgNjUsNDUiIC8+CjwvZz4KPC9z
eW1ib2w+Cgo8c3ltYm9sIGlkPSJzdW5RIiB2aWV3Qm94PSIwIDAgMTUwIDE1MCIgID4KIDxnIHN0
eWxlPSJzdHJva2Utd2lkdGg6NztzdHJva2U6I2ZmMCI+CjxsaW5lIHgxPSIyIiB5MT0iNjciIHgy
PSIxOSIgeTI9IjY3IiB0cmFuc2Zvcm09InJvdGF0ZSgtMjAsIDU1LCA2NykiIC8+CjxsaW5lIHgx
PSIyIiB5MT0iNjciIHgyPSIxOSIgeTI9IjY3IiB0cmFuc2Zvcm09InJvdGF0ZSg0LCA1NSwgNjcp
IiAvPgo8bGluZSB4MT0iMiIgeTE9IjY3IiB4Mj0iMTkiIHkyPSI2NyIgdHJhbnNmb3JtPSJyb3Rh
dGUoMjgsIDU1LCA2NykiIC8+CjxsaW5lIHgxPSIyIiB5MT0iNjciIHgyPSIxOSIgeTI9IjY3IiB0
cmFuc2Zvcm09InJvdGF0ZSg1MiwgNTUsIDY3KSIgLz4KPGxpbmUgeDE9IjIiIHkxPSI2NyIgeDI9
IjE5IiB5Mj0iNjciIHRyYW5zZm9ybT0icm90YXRlKDc2LCA1NSwgNjcpIiAvPgogIDwvZz4KPC9z
eW1ib2w+Cgo8c3ltYm9sIGlkPSJoYWlsIiB2aWV3Qm94PSIwIDAgMTUwIDE1MCIgID4KIDxnIHN0
cm9rZT0ibm9uZSIgZmlsbD0iI2RmZiI+CjxjaXJjbGUgY3g9Ijg0IiBjeT0iMTAwIiByPSIxMyIg
Lz4KPGNpcmNsZSBjeD0iNDkiIGN5PSIxMjAiIHI9IjEzIiAvPgogIDwvZz4KPC9zeW1ib2w+Cgo8
c3ltYm9sIGlkPSJyYWluIiB2aWV3Qm94PSIwIDAgMTUwIDE1MCIgID4KIDxnIHN0cm9rZT0ibm9u
ZSIgZmlsbD0iIzAwYSI+CjxwYXRoIGQ9Ik0gMTAyLDgyIEEgNTUsNTUgMCAwIDEgIDg0LDg3IEEg
MTMsMTMgMCwgMSwgMCA5NywxMDAgQSA1NSw1NSAwIDAgMSAgMTAyLDgyIi8+CjxwYXRoIGQ9Ik0g
ODEsOTAgQyA4MSw5MCA3NCw5MiA3NCw5NyBBIDIsMiAwLCAxLCAwIDc4LDk3IEMgNzgsOTcgNzgs
OTUgODEsOTAiIGZpbGw9IiM0Y2YiICAvPgo8cGF0aCBkPSJNIDc5LDExMCBDIDc5LDExMCA4OSwx
MDcgODksMTAwIEEgMywzIDAgMCAxIDk1LDEwMCBDIDk1LDEwMCA5NCwxMTIgNzksMTEwIiBmaWxs
PSIjMTljIiAgLz4KICA8L2c+Cjwvc3ltYm9sPgoKPHN5bWJvbCBpZD0ic25vdyIgdmlld0JveD0i
MCAwIDE1MCAxNTAiICA+CiA8ZyBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZT0iI2RmZiI+CjxsaW5l
IHgxPSI3MSIgeTE9IjEwMSIgeDI9Ijk3IiB5Mj0iMTAxIiB0cmFuc2Zvcm09InJvdGF0ZSgtMjAs
IDg0LDEwMSkiIC8+CjxsaW5lIHgxPSI3MSIgeTE9IjEwMSIgeDI9Ijk3IiB5Mj0iMTAxIiB0cmFu
c2Zvcm09InJvdGF0ZSg0MCwgODQsMTAxKSIgLz4KPGxpbmUgeDE9IjcxIiB5MT0iMTAxIiB4Mj0i
OTciIHkyPSIxMDEiIHRyYW5zZm9ybT0icm90YXRlKDEwMCwgODQsMTAxKSIgLz4KPC9nPgo8L3N5
bWJvbD4KCjxzeW1ib2wgaWQ9InRodW5kZXIiIHZpZXdCb3g9IjAgMCAxNTAgMTUwIiAgPgogPGcg
c3Ryb2tlPSJub25lIiBmaWxsPSIjZGZmIj4KPHBvbHlnb24gcG9pbnRzPSI4MiwxMTAgNjcsMTEw
IDgyLDgwIDk3LDgwIDg3LDEwMCAxMDIsMTAwIDY3LDE1MCIgLz4KPC9nPgo8L3N5bWJvbD4KCjxz
eW1ib2wgaWQ9ImhhaWwtc2hvd2VyIiB2aWV3Qm94PSIwIDAgMTUwIDE1MCI+CjxnPgo8dGl0bGU+
aGFpbCBzaG93ZXJzPC90aXRsZT4KPHVzZSB4bGluazpocmVmPSIjY2xvdWQiIHg9IjAiIHk9IjAi
IHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8dXNlIHhsaW5rOmhyZWY9IiNoYWlsIiB4PSIw
IiB5PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgLz4KPHVzZSB4bGluazpocmVmPSIjc3Vu
USIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiIC8+CjwvZz4KPC9zeW1ib2w+
Cgo8c3ltYm9sIGlkPSJoYWlscyIgdmlld0JveD0iMCAwIDE1MCAxNTAiPgo8Zz4KPHRpdGxlPmhh
aWw8L3RpdGxlPgo8dXNlIHhsaW5rOmhyZWY9IiNjbG91ZCIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1
MCIgaGVpZ2h0PSIxNTAiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI2hhaWwiIHg9IjAiIHk9IjAiIHdp
ZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8L2c+Cjwvc3ltYm9sPgoKPHN5bWJvbCBpZD0iaGVh
dnktcmFpbi1zaG93ZXIiIHZpZXdCb3g9IjAgMCAxNTAgMTUwIj4KPGc+Cjx0aXRsZT5oZWF2eSBy
YWluIHNob3dlcnM8L3RpdGxlPgo8dXNlIHhsaW5rOmhyZWY9IiNjbG91ZCIgeD0iMCIgeT0iMCIg
d2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI3JhaW4iIHg9IjAi
IHk9IjAiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8dXNlIHhsaW5rOmhyZWY9IiNyYWlu
IiB4PSIwIiB5PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgdHJhbnNmb3JtPSJ0cmFuc2xh
dGUoLTM1LDIwKSIvPgo8dXNlIHhsaW5rOmhyZWY9IiNzdW5RIiB4PSIwIiB5PSIwIiB3aWR0aD0i
MTUwIiBoZWlnaHQ9IjE1MCIgLz4KPC9nPgo8L3N5bWJvbD4KCjxzeW1ib2wgaWQ9ImhlYXZ5LXJh
aW4iIHZpZXdCb3g9IjAgMCAxNTAgMTUwIiAgPgo8Zz4KPHRpdGxlPmhlYXZ5IHJhaW48L3RpdGxl
Pgo8dXNlIHhsaW5rOmhyZWY9IiNjbG91ZCIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0
PSIxNTAiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI3JhaW4iIHg9IjAiIHk9IjAiIHdpZHRoPSIxNTAi
IGhlaWdodD0iMTUwIiAvPgo8dXNlIHhsaW5rOmhyZWY9IiNyYWluIiB4PSIwIiB5PSIwIiB3aWR0
aD0iMTUwIiBoZWlnaHQ9IjE1MCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTM1LDIwKSIvPgo8L2c+
Cjwvc3ltYm9sPgoKPHN5bWJvbCBpZD0iaGVhdnktc25vdy1zaG93ZXIiIHZpZXdCb3g9IjAgMCAx
NTAgMTUwIiAgPgo8Zz4KPHRpdGxlPmhlYXZ5IHNub3cgc2hvd2VyczwvdGl0bGU+Cjx1c2UgeGxp
bms6aHJlZj0iI2Nsb3VkIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgLz4K
PHVzZSB4bGluazpocmVmPSIjc25vdyIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIx
NTAiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI3Nub3ciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNTAiIGhl
aWdodD0iMTUwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzUsMjApIi8+Cjx1c2UgeGxpbms6aHJl
Zj0iI3N1blEiIHg9IjAiIHk9IjAiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8L2c+Cjwv
c3ltYm9sPgoKPHN5bWJvbCBpZD0iaGVhdnktc25vdyIgdmlld0JveD0iMCAwIDE1MCAxNTAiICA+
CjxnPgo8dGl0bGU+aGVhdnkgc25vdzwvdGl0bGU+Cjx1c2UgeGxpbms6aHJlZj0iI2Nsb3VkIiB4
PSIwIiB5PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgLz4KPHVzZSB4bGluazpocmVmPSIj
c25vdyIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiIC8+Cjx1c2UgeGxpbms6
aHJlZj0iI3Nub3ciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiB0cmFuc2Zv
cm09InRyYW5zbGF0ZSgtMzUsMjApIi8+CjwvZz4KPC9zeW1ib2w+Cgo8c3ltYm9sIGlkPSJsaWdo
dC1yYWluLXNob3dlciIgdmlld0JveD0iMCAwIDE1MCAxNTAiICA+CjxnPgo8dGl0bGU+bGlnaHQg
cmFpbiBzaG93ZXJzPC90aXRsZT4KPHVzZSB4bGluazpocmVmPSIjY2xvdWQiIHg9IjAiIHk9IjAi
IHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8dXNlIHhsaW5rOmhyZWY9IiNyYWluIiB4PSIw
IiB5PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgLz4KPHVzZSB4bGluazpocmVmPSIjc3Vu
USIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiIC8+CjwvZz4KPC9zeW1ib2w+
Cgo8c3ltYm9sIGlkPSJsaWdodC1yYWluIiB2aWV3Qm94PSIwIDAgMTUwIDE1MCIgID4KPGc+Cjx0
aXRsZT5saWdodCByYWluPC90aXRsZT4KPHVzZSB4bGluazpocmVmPSIjY2xvdWQiIHg9IjAiIHk9
IjAiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8dXNlIHhsaW5rOmhyZWY9IiNyYWluIiB4
PSIwIiB5PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgLz4KPC9nPgo8L3N5bWJvbD4KCjxz
eW1ib2wgaWQ9ImxpZ2h0LXNub3ctc2hvd2VyIiB2aWV3Qm94PSIwIDAgMTUwIDE1MCIgID4KPGc+
Cjx0aXRsZT5saWdodCBzbm93IHNob3dlcnM8L3RpdGxlPgo8dXNlIHhsaW5rOmhyZWY9IiNjbG91
ZCIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiIC8+Cjx1c2UgeGxpbms6aHJl
Zj0iI3Nub3ciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8dXNlIHhs
aW5rOmhyZWY9IiNzdW5RIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgLz4K
PC9nPgo8L3N5bWJvbD4KCjxzeW1ib2wgaWQ9ImxpZ2h0LXNub3ciIHZpZXdCb3g9IjAgMCAxNTAg
MTUwIiAgPgo8Zz4KPHRpdGxlPmxpZ2h0IHNub3c8L3RpdGxlPgo8dXNlIHhsaW5rOmhyZWY9IiNj
bG91ZCIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiIC8+Cjx1c2UgeGxpbms6
aHJlZj0iI3Nub3ciIHg9IjAiIHk9IjAiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8L2c+
Cjwvc3ltYm9sPgoKPHN5bWJvbCBpZD0ic2xlZXQtc2hvd2VyIiB2aWV3Qm94PSIwIDAgMTUwIDE1
MCIgID4KPGc+Cjx0aXRsZT5zbGVldCBzaG93ZXJzPC90aXRsZT4KPHVzZSB4bGluazpocmVmPSIj
Y2xvdWQiIHg9IjAiIHk9IjAiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8dXNlIHhsaW5r
OmhyZWY9IiNzbm93IiB4PSIwIiB5PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgLz4KPHVz
ZSB4bGluazpocmVmPSIjcmFpbiIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAi
IHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zNSwyMCkiLz4KPHVzZSB4bGluazpocmVmPSIjc3VuUSIg
eD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiIC8+CjwvZz4KPC9zeW1ib2w+Cgo8
c3ltYm9sIGlkPSJzbGVldCIgdmlld0JveD0iMCAwIDE1MCAxNTAiICA+CjxnPgo8dGl0bGU+c2xl
ZXQ8L3RpdGxlPgo8dXNlIHhsaW5rOmhyZWY9IiNjbG91ZCIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1
MCIgaGVpZ2h0PSIxNTAiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI3Nub3ciIHg9IjAiIHk9IjAiIHdp
ZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8dXNlIHhsaW5rOmhyZWY9IiNyYWluIiB4PSIwIiB5
PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTM1LDIw
KSIvPgo8L2c+Cjwvc3ltYm9sPgoKPHN5bWJvbCBpZD0ic3VubnktaW50ZXJ2YWxzIiB2aWV3Qm94
PSIwIDAgMTUwIDE1MCIgID4KPGc+Cjx0aXRsZT5zdW5ueSBpbnRlcnZhbHM8L3RpdGxlPgo8dXNl
IHhsaW5rOmhyZWY9IiN3aGl0ZS1jbG91ZCIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0
PSIxNTAiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI3N1blEiIHg9IjAiIHk9IjAiIHdpZHRoPSIxNTAi
IGhlaWdodD0iMTUwIiAvPgo8L2c+Cjwvc3ltYm9sPgoKPHN5bWJvbCBpZD0ic3VubnkiIHZpZXdC
b3g9IjAgMCAxNTAgMTUwIiAgPgogPGcgc3R5bGU9InN0cm9rZS13aWR0aDo3O3N0cm9rZTojZmYw
Ij4KPHRpdGxlPnN1bm55PC90aXRsZT4KPGxpbmUgeDE9IjIyIiB5MT0iNzUiIHgyPSIzOSIgeTI9
Ijc1IiB0cmFuc2Zvcm09InJvdGF0ZSgtMjAsIDc1LCA3NSkiIC8+CjxsaW5lIHgxPSIyMiIgeTE9
Ijc1IiB4Mj0iMzkiIHkyPSI3NSIgdHJhbnNmb3JtPSJyb3RhdGUoNCwgNzUsIDc1KSIgLz4KPGxp
bmUgeDE9IjIyIiB5MT0iNzUiIHgyPSIzOSIgeTI9Ijc1IiB0cmFuc2Zvcm09InJvdGF0ZSgyOCwg
NzUsIDc1KSIgLz4KPGxpbmUgeDE9IjIyIiB5MT0iNzUiIHgyPSIzOSIgeTI9Ijc1IiB0cmFuc2Zv
cm09InJvdGF0ZSg1MiwgNzUsIDc1KSIgLz4KPGxpbmUgeDE9IjIyIiB5MT0iNzUiIHgyPSIzOSIg
eTI9Ijc1IiB0cmFuc2Zvcm09InJvdGF0ZSg3NiwgNzUsIDc1KSIgLz4KPGxpbmUgeDE9IjIyIiB5
MT0iNzUiIHgyPSIzOSIgeTI9Ijc1IiB0cmFuc2Zvcm09InJvdGF0ZSgxMDAsIDc1LCA3NSkiIC8+
CjxsaW5lIHgxPSIyMiIgeTE9Ijc1IiB4Mj0iMzkiIHkyPSI3NSIgdHJhbnNmb3JtPSJyb3RhdGUo
MTI0LCA3NSwgNzUpIiAvPgo8bGluZSB4MT0iMjIiIHkxPSI3NSIgeDI9IjM5IiB5Mj0iNzUiIHRy
YW5zZm9ybT0icm90YXRlKDE0OCwgNzUsIDc1KSIgLz4KPGxpbmUgeDE9IjIyIiB5MT0iNzUiIHgy
PSIzOSIgeTI9Ijc1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNzIsIDc1LCA3NSkiIC8+CjxsaW5lIHgx
PSIyMiIgeTE9Ijc1IiB4Mj0iMzkiIHkyPSI3NSIgdHJhbnNmb3JtPSJyb3RhdGUoMTk2LCA3NSwg
NzUpIiAvPgo8bGluZSB4MT0iMjIiIHkxPSI3NSIgeDI9IjM5IiB5Mj0iNzUiIHRyYW5zZm9ybT0i
cm90YXRlKDIyMCwgNzUsIDc1KSIgLz4KPGxpbmUgeDE9IjIyIiB5MT0iNzUiIHgyPSIzOSIgeTI9
Ijc1IiB0cmFuc2Zvcm09InJvdGF0ZSgyNDQsIDc1LCA3NSkiIC8+CjxsaW5lIHgxPSIyMiIgeTE9
Ijc1IiB4Mj0iMzkiIHkyPSI3NSIgdHJhbnNmb3JtPSJyb3RhdGUoMjY4LCA3NSwgNzUpIiAvPgo8
bGluZSB4MT0iMjIiIHkxPSI3NSIgeDI9IjM5IiB5Mj0iNzUiIHRyYW5zZm9ybT0icm90YXRlKDI5
MiwgNzUsIDc1KSIgLz4KPGxpbmUgeDE9IjIyIiB5MT0iNzUiIHgyPSIzOSIgeTI9Ijc1IiB0cmFu
c2Zvcm09InJvdGF0ZSgzMTYsIDc1LCA3NSkiIC8+Cgo8Y2lyY2xlIGN4PSI3NSIgY3k9Ijc1IiBy
PSIyNSIgZmlsbD0iI2ZmMCIvPgogIDwvZz4KPC9zeW1ib2w+Cgo8c3ltYm9sIGlkPSJ0aHVuZGVy
eS1zaG93ZXIiIHZpZXdCb3g9IjAgMCAxNTAgMTUwIiAgPgo8Zz4KPHRpdGxlPnRodW5kZXJ5IHNo
b3dlcnM8L3RpdGxlPgo8dXNlIHhsaW5rOmhyZWY9IiNjbG91ZCIgeD0iMCIgeT0iMCIgd2lkdGg9
IjE1MCIgaGVpZ2h0PSIxNTAiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI3RodW5kZXIiIHg9IjAiIHk9
IjAiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIiAvPgo8dXNlIHhsaW5rOmhyZWY9IiNzdW5RIiB4
PSIwIiB5PSIwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIgLz4KPC9nPgo8L3N5bWJvbD4KCjxz
eW1ib2wgaWQ9IndlYXRoZXIiIHZpZXdCb3g9IjAgMCAxNTAgMTUwIiAgPgo8Zz4KPHRpdGxlPndl
YXRoZXI8L3RpdGxlPgogPGcgc3Ryb2tlLXdpZHRoPSI3IiBzdHJva2U9IiNmZjAiIHRyYW5zZm9y
bT0idHJhbnNsYXRlKC0xMCwtMTApIj4KPGxpbmUgeDE9IjIyIiB5MT0iNzUiIHgyPSIzOSIgeTI9
Ijc1IiB0cmFuc2Zvcm09InJvdGF0ZSgtMjAsIDc1LCA3NSkiIC8+CjxsaW5lIHgxPSIyMiIgeTE9
Ijc1IiB4Mj0iMzkiIHkyPSI3NSIgdHJhbnNmb3JtPSJyb3RhdGUoNCwgNzUsIDc1KSIgLz4KPGxp
bmUgeDE9IjIyIiB5MT0iNzUiIHgyPSIzOSIgeTI9Ijc1IiB0cmFuc2Zvcm09InJvdGF0ZSgyOCwg
NzUsIDc1KSIgLz4KPGxpbmUgeDE9IjIyIiB5MT0iNzUiIHgyPSIzOSIgeTI9Ijc1IiB0cmFuc2Zv
cm09InJvdGF0ZSg1MiwgNzUsIDc1KSIgLz4KPGxpbmUgeDE9IjIyIiB5MT0iNzUiIHgyPSIzOSIg
eTI9Ijc1IiB0cmFuc2Zvcm09InJvdGF0ZSg3NiwgNzUsIDc1KSIgLz4KPGxpbmUgeDE9IjIyIiB5
MT0iNzUiIHgyPSIzOSIgeTI9Ijc1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMTYsIDc1LCA3NSkiIC8+
Cgo8cGF0aCBkPSJNIDc1IDQ2IEEgMjkgMjkgODAgMCAwIDU3IDk4IEwgNzUgNzUiIGZpbGw9IiNm
ZjAiIHN0cm9rZT0ibm9uZSIgLz4KICA8L2c+Cgo8ZyBzdHJva2U9IiM2NjYiIHN0cm9rZS13aWR0
aD0iMTIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgZmlsbD0ibm9uZSIgdHJhbnNmb3JtPSJ0cmFu
c2xhdGUoLTEwLDEwKSI+CjxwYXRoIGQ9Ik0gMTA1LDkwIEwgMTE1LDkwIEEgMjEgMjEsIDAsIDEs
IDAgMTE1LDQ1IiAvPgo8cGF0aCBkPSJNIDExNSw5MCBMIDExNSw5MCBBIDIxIDIxLCAwLCAxLCAw
IDExNSw0NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI1LC0zMCkiLz4KPHVzZSB4bGluazpocmVm
PSIjcmFpbiIgeD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiIHRyYW5zZm9ybT0i
dHJhbnNsYXRlKDEwLDEwKSBzY2FsZSgwLjgpICIgLz4KPHVzZSB4bGluazpocmVmPSIjcmFpbiIg
eD0iMCIgeT0iMCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiIHRyYW5zZm9ybT0idHJhbnNsYXRl
KC0xNSwzNSkgc2NhbGUoMC44KSAiLz4KPC9nPgo8L2c+Cjwvc3ltYm9sPgoKPHJhZGlhbEdyYWRp
ZW50IGlkPSJyYWluYm93RyIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iNTUuNyUiID4KPHN0b3Agb2Zm
c2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JiYiIvPgo8c3RvcCBvZmZzZXQ9Ijc3LjUlIiBzdG9wLWNv
bG9yPSIjYjRiIi8+CjxzdG9wIG9mZnNldD0iODAlIiBzdG9wLWNvbG9yPSIjYTRlIi8+CjxzdG9w
IG9mZnNldD0iODIlIiBzdG9wLWNvbG9yPSIjNzRhIi8+CjxzdG9wIG9mZnNldD0iODMlIiBzdG9w
LWNvbG9yPSIjNjZhIi8+CjxzdG9wIG9mZnNldD0iODQuNSUiIHN0b3AtY29sb3I9IiM1NWYiLz4K
PHN0b3Agb2Zmc2V0PSI4NSUiIHN0b3AtY29sb3I9IiM1NWYiLz4KPHN0b3Agb2Zmc2V0PSI4Ni41
JSIgc3RvcC1jb2xvcj0iIzBlZSIvPgo8c3RvcCBvZmZzZXQ9Ijg5JSIgc3RvcC1jb2xvcj0iIzBl
ZSIvPgo8c3RvcCBvZmZzZXQ9Ijg5LjUlIiBzdG9wLWNvbG9yPSIjMGY3Ii8+CjxzdG9wIG9mZnNl
dD0iOTIuNSUiIHN0b3AtY29sb3I9IiNmOWY5MDAiLz4KPHN0b3Agb2Zmc2V0PSI5My4xJSIgc3Rv
cC1jb2xvcj0iI2Y5ZjkwMCIvPgo8c3RvcCBvZmZzZXQ9Ijk1JSIgc3RvcC1jb2xvcj0iI2ZhMCIv
Pgo8c3RvcCBvZmZzZXQ9Ijk1JSIgc3RvcC1jb2xvcj0iI2ZhMCIvPgo8c3RvcCBvZmZzZXQ9Ijk4
JSIgc3RvcC1jb2xvcj0iI2VhMDAwMCIvPgo8c3RvcCBvZmZzZXQ9Ijk5JSIgc3RvcC1jb2xvcj0i
I2VhMDAzMyIvPgo8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlYTAwYWEiLz4KPC9y
YWRpYWxHcmFkaWVudD4KPHN5bWJvbCBpZD0icmFpbmJvdyIgdmlld0JveD0iMCAwIDI1MCAxNTAi
ID4KPHRpdGxlPnJhaW5ib3c8L3RpdGxlPgo8L3N5bWJvbD4KCjwvZGVmcz4KCiA8cmVjdCB4PSIw
IiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSIjM2JlIiBzdHJva2U9Im5v
bmUiIGlkPSJtZW51QkciIC8+CjxnID4KCjx1c2UgeGxpbms6aHJlZj0iI2JsYWNrLWNsb3VkIiB4
PSIxJSIgeT0iMSUiIHdpZHRoPSIxNSUiIGhlaWdodD0iMzAlIiAvPgo8dXNlIHhsaW5rOmhyZWY9
IiNoYWlsLXNob3dlciIgeD0iMTclIiB5PSIxJSIgd2lkdGg9IjE1JSIgaGVpZ2h0PSIzMCUiICAg
Lz4KPHVzZSB4bGluazpocmVmPSIjaGFpbHMiIHg9IjMzJSIgeT0iMSUiIHdpZHRoPSIxNSUiIGhl
aWdodD0iMzAlIiAvPgo8dXNlIHhsaW5rOmhyZWY9IiNoZWF2eS1yYWluLXNob3dlciIgeD0iNTEl
IiB5PSIxJSIgd2lkdGg9IjE1JSIgaGVpZ2h0PSIzMCUiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI2hl
YXZ5LXJhaW4iIHg9IjY3JSIgeT0iMSUiIHdpZHRoPSIxNSUiIGhlaWdodD0iMzAlIiAvPgo8dXNl
IHhsaW5rOmhyZWY9IiNoZWF2eS1zbm93LXNob3dlciIgeD0iODMlIiB5PSIxJSIgd2lkdGg9IjE1
JSIgaGVpZ2h0PSIzMCUiIC8+Cgo8dXNlIHhsaW5rOmhyZWY9IiNoZWF2eS1zbm93IiB4PSIxJSIg
eT0iMzYlIiB3aWR0aD0iMTUlIiBoZWlnaHQ9IjMwJSIgLz4KPHVzZSB4bGluazpocmVmPSIjbGln
aHQtcmFpbi1zaG93ZXIiIHg9IjE3JSIgeT0iMzYlIiB3aWR0aD0iMTUlIiBoZWlnaHQ9IjMwJSIg
ICAvPgo8dXNlIHhsaW5rOmhyZWY9IiNsaWdodC1yYWluIiB4PSIzMyUiIHk9IjM2JSIgd2lkdGg9
IjE1JSIgaGVpZ2h0PSIzMCUiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI2xpZ2h0LXNub3ctc2hvd2Vy
IiB4PSI1MSUiIHk9IjM2JSIgd2lkdGg9IjE1JSIgaGVpZ2h0PSIzMCUiIC8+Cjx1c2UgeGxpbms6
aHJlZj0iI2xpZ2h0LXNub3ciIHg9IjY3JSIgeT0iMzYlIiB3aWR0aD0iMTUlIiBoZWlnaHQ9IjMw
JSIgLz4KPHVzZSB4bGluazpocmVmPSIjc2xlZXQtc2hvd2VyIiB4PSI4MyUiIHk9IjM2JSIgd2lk
dGg9IjE1JSIgaGVpZ2h0PSIzMCUiIC8+Cgo8dXNlIHhsaW5rOmhyZWY9IiNzbGVldCIgeD0iMSUi
IHk9IjcyJSIgd2lkdGg9IjE1JSIgaGVpZ2h0PSIzMCUiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI3N1
bm55LWludGVydmFscyIgeD0iMTclIiB5PSI3MiUiIHdpZHRoPSIxNSUiIGhlaWdodD0iMzAlIiAg
IC8+Cjx1c2UgeGxpbms6aHJlZj0iI3N1bm55IiB4PSIzMyUiIHk9IjcyJSIgd2lkdGg9IjE1JSIg
aGVpZ2h0PSIzMCUiIC8+Cjx1c2UgeGxpbms6aHJlZj0iI3RodW5kZXJ5LXNob3dlciIgeD0iNTEl
IiB5PSI3MiUiIHdpZHRoPSIxNSUiIGhlaWdodD0iMzAlIiAvPgo8dXNlIHhsaW5rOmhyZWY9IiN3
ZWF0aGVyIiB4PSI2NyUiIHk9IjcyJSIgd2lkdGg9IjE1JSIgaGVpZ2h0PSIzMCUiIC8+Cjx1c2Ug
eGxpbms6aHJlZj0iI3JhaW5ib3ciIHg9IjgzJSIgeT0iNzIlIiB3aWR0aD0iMTUlIiBoZWlnaHQ9
IjMwJSIgLz4KPC9nPgoKCgo8L3N2Zz4=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>53317</attachid>
            <date>2010-04-13 22:15:39 -0700</date>
            <delta_ts>2010-04-13 22:15:39 -0700</delta_ts>
            <desc>More concise test file that tests a variety of cases.  The middle case does not work (will open a separate bug).</desc>
            <filename>test-tooltip.svg</filename>
            <type>image/svg+xml</type>
            <size>1474</size>
            <attacher name="Jeff Schiller">jeffschiller</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgPHRpdGxl
PlRoaXMgc3RyaW5nIHNob3VsZCBub3Qgc2hvdyB1cCBhcyBhIHRvb2x0aXA8L3RpdGxlPgogIDxk
ZWZzPgogICAgPGVsbGlwc2UgaWQ9ImUxIiBjeD0iMTAwIiBjeT0iMjAwIiByeD0iNTAiIHJ5PSIz
MCIgZmlsbD0iYmx1ZSI+CiAgICAgIDx0aXRsZT5QQVNTPC90aXRsZT4KICAgIDwvZWxsaXBzZT4K
ICAgIDxlbGxpcHNlIGlkPSJlMiIgY3g9IjI1MCIgY3k9IjIwMCIgcng9IjUwIiByeT0iMzAiIGZp
bGw9ImJsdWUiPgogICAgICA8dGl0bGU+RkFJTDwvdGl0bGU+CiAgICA8L2VsbGlwc2U+CiAgICA8
c3ltYm9sIGlkPSJlMyI+CiAgICAgIDxlbGxpcHNlIGN4PSIxMDAiIGN5PSIzMDAiIHJ4PSI1MCIg
cnk9IjMwIiBmaWxsPSJibHVlIj4KICAgICAgICA8dGl0bGU+UEFTUzwvdGl0bGU+CiAgICAgIDwv
ZWxsaXBzZT4KICAgIDwvc3ltYm9sPgogICAgPHN5bWJvbCBpZD0iZTQiPgogICAgICA8dGl0bGU+
RkFJTDwvdGl0bGU+CiAgICAgIDxlbGxpcHNlIGN4PSIyNTAiIGN5PSIzMDAiIHJ4PSI1MCIgcnk9
IjMwIiBmaWxsPSJibHVlIj4KICAgICAgPC9lbGxpcHNlPgogICAgPC9zeW1ib2w+CiAgPC9kZWZz
PgoKICA8dGV4dCB5PSIxNSIgeD0iMCI+V2hlbiBob3ZlcmVkLCBhbGwgc2hhcGVzIHNob3VsZCBz
aG93IGEgIlBBU1MiIHRvb2x0aXAuICBBbnl0aGluZyBlbHNlIGlzIGEgZmFpbHVyZS48L3RleHQ+
CiAgCiAgPGVsbGlwc2UgY3g9IjEwMCIgY3k9IjEwMCIgcng9IjUwIiByeT0iMzAiIGZpbGw9ImJs
dWUiPgogICAgPHRpdGxlPlBBU1M8L3RpdGxlPgogIDwvZWxsaXBzZT4KCiAgPGc+CiAgICA8dGl0
bGU+UEFTUzwvdGl0bGU+CiAgICA8ZWxsaXBzZSBjeD0iMjUwIiBjeT0iMTAwIiByeD0iNTAiIHJ5
PSIzMCIgZmlsbD0iYmx1ZSIvPgogIDwvZz4KCiAgPGEgeGxpbms6dGl0bGU9IlBBU1MiIHhsaW5r
OmhyZWY9IiMiPgogICAgPHRpdGxlPkZBSUw8L3RpdGxlPgogICAgPGVsbGlwc2UgaWQ9ImU0IiBj
eD0iNDAwIiBjeT0iMTAwIiByeD0iNTAiIHJ5PSIzMCIgZmlsbD0iYmx1ZSIvPgogIDwvYT4KICAK
ICA8dXNlIHhsaW5rOmhyZWY9IiNlMSIvPgogIAogIDx1c2UgeGxpbms6aHJlZj0iI2UyIj4KICAg
IDx0aXRsZT5QQVNTPC90aXRsZT4KICA8L3VzZT4KCiAgPGc+CiAgICA8dGl0bGU+RkFJTDwvdGl0
bGU+CiAgICA8ZWxsaXBzZSBpZD0iZTgiIGN4PSI0MDAiIGN5PSIyMDAiIHJ4PSI1MCIgcnk9IjMw
IiBmaWxsPSJibHVlIj4KICAgICAgPHRpdGxlPlBBU1M8L3RpdGxlPgogICAgPC9lbGxpcHNlPgog
IDwvZz4KICAKICA8dXNlIHhsaW5rOmhyZWY9IiNlMyIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2U0
Ij4KICAgIDx0aXRsZT5QQVNTPC90aXRsZT4KICA8L3VzZT4KICAKICAKPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53318</attachid>
            <date>2010-04-13 22:24:08 -0700</date>
            <delta_ts>2010-04-17 11:44:44 -0700</delta_ts>
            <desc>Fix style error</desc>
            <filename>bug16854.patch.txt</filename>
            <type>text/plain</type>
            <size>3882</size>
            <attacher name="Jeff Schiller">jeffschiller</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzU1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQtMTMgIEplZmYgU2NoaWxsZXIgIDxjb2RlZHJlYWRAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudCBob3ZlciB0b29sdGlwcyBmb3IgU1ZHIGVsZW1lbnRzIHdpdGggYSA8dGl0bGU+
IGNoaWxkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogc3Zn
L1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50Ojp0aXRsZSk6
IHhsaW5rOnRpdGxlIHRha2VzIHByZWNlZGVuY2UsIG90aGVyd2lzZSBTVkdTdHlsZWRFbGVtZW50
Ojp0aXRsZSgpIGlzIHVzZWQKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSk6IGNoZWNrcyBmb3IgYSBz
aGFkb3cgcGFyZW50IGFuZCB1c2VzIHRoYXQgdGl0bGUsIG90aGVyd2lzZSB1c2VzIHRoZSBjb250
ZW50J3MgdGl0bGUKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oOiBhZGQgdGl0bGUo
KSBtZXRob2QgZGVjbGFyYXRpb24KKwogMjAxMC0wNC0xMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2Fy
ZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R0FFbGVtZW50LmNwcAkocmV2aXNpb24gNTc1NTcpCisrKyBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDEzIEBAIFNWR0FFbGVtZW50Ojp+U1ZH
QUVsZW1lbnQoKQogCiBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OnRpdGxlQXR0cik7CisgICAgLy8gaWYgdGhl
IHhsaW5rOnRpdGxlIGlzIHNldCwgdXNlIHRoYXQKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRp
dGxlID0gZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OnRpdGxlQXR0cik7CisgICAgaWYgKHRpdGxl
ICE9IG51bGxBdG9tKQorICAgICAgICByZXR1cm4gdGl0bGU7CisKKyAgICAvLyBvdGhlcndpc2Us
IHVzZSB0aGUgdGl0bGUgb2YgdGhpcyBlbGVtZW50CisgICAgcmV0dXJuIFNWR1N0eWxlZEVsZW1l
bnQ6OnRpdGxlKCk7CiB9CiAKIHZvaWQgU1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA1NzU1NykKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5o
IgogI2luY2x1ZGUgIlNWR1Jlc291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NSw2ICs2NiwzNiBAQCBTVkdTdHlsZWRF
bGVtZW50Ojp+U1ZHU3R5bGVkRWxlbWVudCgpCiAgICAgU1ZHUmVzb3VyY2U6OnJlbW92ZUNsaWVu
dCh0aGlzKTsKIH0KIAorU3RyaW5nIFNWR1N0eWxlZEVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKK3sK
KyAgICAvLyBpZiB0aGlzIGlzIHNoYWRvdyBjb250ZW50LCBnZXQgdGhlIHVzZSBpbnN0YW5jZSBh
bmQgc2VlIGlmIGl0IGhhcyBhIHRpdGxlCisgICAgLy8gd2hpY2ggdGFrZXMgcHJlZmVyZW5jZQor
ICAgIGlmIChpc1NoYWRvd05vZGUoKSkgeworICAgICAgICBOb2RlKiBzaGFkb3dQYXJlbnQgPSBj
b25zdF9jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0aGlzKS0+c2hhZG93UGFyZW50Tm9kZSgpOwor
ICAgICAgICAvLyBjYXN0IGl0IHRvIGEgPHVzZT4gZWxlbWVudAorICAgICAgICBpZiAoc2hhZG93
UGFyZW50LT5ub2RlTmFtZSgpID09ICJ1c2UiKSB7CisgICAgICAgICAgICBTVkdVc2VFbGVtZW50
KiB1c2VFbGVtID0gc3RhdGljX2Nhc3Q8U1ZHVXNlRWxlbWVudCo+KHNoYWRvd1BhcmVudCk7Cisg
ICAgICAgICAgICBpZiAodXNlRWxlbSkgeworICAgICAgICAgICAgICAgIFN0cmluZyB1c2VUaXRs
ZSh1c2VFbGVtLT50aXRsZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAodXNlVGl0bGUgIT0gbnVs
bEF0b20pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VUaXRsZTsgICAgICAgICAgICAK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBpZiB3ZSBhcmVu
J3QgYW4gaW5zdGFuY2UgaW4gYSB1c2UsIHRoZW4gZmluZCB0aGUgZmlyc3QgPHRpdGxlPiBjaGls
ZCBvZiB0aGlzIGVsZW1lbnQKKyAgICBFbGVtZW50KiBjaGlsZCA9IGZpcnN0RWxlbWVudENoaWxk
KCk7CisgICAgd2hpbGUgKGNoaWxkICYmIGNoaWxkLT5ub2RlTmFtZSgpICE9ICJ0aXRsZSIgJiYg
Y2hpbGQtPm5hbWVzcGFjZVVSSSgpICE9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpCisg
ICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRFbGVtZW50U2libGluZygpOworCisgICAgLy8gaWYg
Zm91bmQsIHJldHVybiB0ZXh0IGNvbnRlbnRzCisgICAgLy8gYWNjb3JkaW5nIHRvIHNwZWMsIHRo
ZSB0aXRsZSBvbiA8c3ZnPiBlbGVtZW50cyBhcmUgbmV2ZXIgcmV0dXJuZWQgYXMgYSB0b29sdGlw
IAorICAgIGlmIChjaGlsZCAmJiBub2RlTmFtZSgpICE9ICJzdmciKQorICAgICAgICByZXR1cm4g
Y2hpbGQtPmlubmVyVGV4dCgpOworICAgIAorICAgIHJldHVybiBudWxsQXRvbTsKK30KKwogYm9v
bCBTVkdTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkK
IHsKICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZXh0ZW5kLmh0bWwjUHJpdmF0ZURh
dGEKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDU3NTU3KQorKysgV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB+U1ZHU3R5bGVkRWxlbWVu
dCgpOwogCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3Q7CisKICAgICAgICAg
dmlydHVhbCBib29sIGhhc1JlbGF0aXZlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNYXJrZXJzKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53603</attachid>
            <date>2010-04-17 11:44:44 -0700</date>
            <delta_ts>2010-04-19 18:01:12 -0700</delta_ts>
            <desc>Patch properly walking up to find the &lt;use&gt; shadow parent.  Update for reviewer comments</desc>
            <filename>bug16854.patch2.txt</filename>
            <type>text/plain</type>
            <size>4172</size>
            <attacher name="Jeff Schiller">jeffschiller</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Nzc4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQtMTcgIEplZmYgU2NoaWxsZXIgIDxjb2RlZHJlYWRAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudCBob3ZlciB0b29sdGlwcyBmb3IgU1ZHIGVsZW1lbnRzIHdpdGggYSA8dGl0bGU+
IGNoaWxkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogc3Zn
L1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50Ojp0aXRsZSk6
IHhsaW5rOnRpdGxlIHRha2VzIHByZWNlZGVuY2UsIG90aGVyd2lzZSBTVkdTdHlsZWRFbGVtZW50
Ojp0aXRsZSgpIGlzIHVzZWQKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSk6IGNoZWNrcyBmb3IgYSBz
aGFkb3cgcGFyZW50IGFuZCB1c2VzIHRoYXQgdGl0bGUsIG90aGVyd2lzZSB1c2VzIHRoZSBjb250
ZW50J3MgdGl0bGUKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oOiBhZGQgdGl0bGUo
KSBtZXRob2QgZGVjbGFyYXRpb24KKwogMjAxMC0wNC0xNyAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2
YW5nZWxpc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6
a292LgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gNTc3ODMpCisrKyBXZWJDb3JlL3N2
Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDEzIEBAIFNWR0FF
bGVtZW50Ojp+U1ZHQUVsZW1lbnQoKQogCiBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OnRpdGxlQXR0cik7Cisg
ICAgLy8gSWYgdGhlIHhsaW5rOnRpdGxlIGlzIHNldCAobm9uLWVtcHR5IHN0cmluZyksIHVzZSBp
dC4KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZ2V0QXR0cmlidXRlKFhMaW5rTmFt
ZXM6OnRpdGxlQXR0cik7CisgICAgaWYgKHRpdGxlICE9IFN0cmluZygpKQorICAgICAgICByZXR1
cm4gdGl0bGU7CisKKyAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgdGl0bGUgb2YgdGhpcyBlbGVt
ZW50LgorICAgIHJldHVybiBTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSgpOwogfQogCiB2b2lkIFNW
R0FFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCklu
ZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNTc3ODMpCisrKyBXZWJDb3Jl
L3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBA
QAogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZUZp
bHRlci5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVc2VFbGVt
ZW50LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNjUsNiArNjYsNDEgQEAgU1ZHU3R5bGVkRWxlbWVudDo6flNWR1N0eWxlZEVsZW1lbnQo
KQogICAgIFNWR1Jlc291cmNlOjpyZW1vdmVDbGllbnQodGhpcyk7CiB9CiAKK1N0cmluZyBTVkdT
dHlsZWRFbGVtZW50Ojp0aXRsZSgpIGNvbnN0Cit7CisgICAgLy8gRmlyc3Qgd2Ugd2FsayB1cCB0
aGUgdHJlZSB0byBzZWUgaWYgd2UgYXJlIGluc2lkZSBhIDx1c2U+IHNoYWRvdyB0cmVlLgorICAg
IE5vZGUqIHBhcmVudCA9IGNvbnN0X2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHRoaXMpOworICAg
IHdoaWxlIChwYXJlbnQpIHsKKyAgICAgICAgaWYgKHBhcmVudC0+aXNTaGFkb3dOb2RlKCkpIHsK
KyAgICAgICAgICAgIC8vIEdldCB0aGUgPHVzZT4gZWxlbWVudC4KKyAgICAgICAgICAgIE5vZGUq
IHNoYWRvd1BhcmVudCA9IHBhcmVudC0+c2hhZG93UGFyZW50Tm9kZSgpOworICAgICAgICAgICAg
aWYgKHNoYWRvd1BhcmVudCAmJiBzaGFkb3dQYXJlbnQtPm5vZGVOYW1lKCkgPT0gU1ZHTmFtZXM6
OnVzZVRhZykgeworICAgICAgICAgICAgICAgIFNWR1VzZUVsZW1lbnQqIHVzZUVsZW0gPSBzdGF0
aWNfY2FzdDxTVkdVc2VFbGVtZW50Kj4oc2hhZG93UGFyZW50KTsKKyAgICAgICAgICAgICAgICBp
ZiAodXNlRWxlbSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgPHVzZT4gdGl0bGUg
aXMgZW1wdHkgd2Ugd2lsbCBrZWVwIHdhbGtpbmcgdXAuCisgICAgICAgICAgICAgICAgICAgIFN0
cmluZyB1c2VUaXRsZSh1c2VFbGVtLT50aXRsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHVzZVRpdGxlICE9IFN0cmluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVz
ZVRpdGxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICB9CisgICAgCisgICAgLy8g
SWYgd2UgYXJlbid0IGFuIGluc3RhbmNlIGluIGEgdXNlLCB0aGVuIGZpbmQgdGhlIGZpcnN0IDx0
aXRsZT4gY2hpbGQgb2YgdGhpcyBlbGVtZW50LgorICAgIEVsZW1lbnQqIGNoaWxkID0gZmlyc3RF
bGVtZW50Q2hpbGQoKTsKKyAgICB3aGlsZSAoY2hpbGQgJiYgY2hpbGQtPm5vZGVOYW1lKCkgIT0g
InRpdGxlIiAmJiBjaGlsZC0+bmFtZXNwYWNlVVJJKCkgIT0gImh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIikKKyAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7CisK
KyAgICAvLyBJZiBmb3VuZCwgcmV0dXJuIHRoZSB0ZXh0IGNvbnRlbnRzLgorICAgIC8vIEFjY29y
ZGluZyB0byBzcGVjLCB0aGUgdGl0bGUgb24gPHN2Zz4gZWxlbWVudHMgYXJlIG5ldmVyIHJldHVy
bmVkIGFzIGEgdG9vbHRpcC4KKyAgICBpZiAoY2hpbGQgJiYgbm9kZU5hbWUoKSAhPSAic3ZnIikK
KyAgICAgICAgcmV0dXJuIGNoaWxkLT5pbm5lclRleHQoKTsKKyAgICAKKyAgICAvLyBPdGhlcndp
c2UgcmV0dXJuIGEgbnVsbC9lbXB0eSBzdHJpbmcuCisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CiBib29sIFNWR1N0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0
eWxlKQogewogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9leHRlbmQuaHRtbCNQcml2
YXRlRGF0YQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gNTc3ODMpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdTdHlsZWRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5TVkdTdHlsZWRF
bGVtZW50KCk7CiAKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaGFzUmVsYXRpdmVWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01hcmtlcnMoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQo=
</data>
<flag name="review"
          id="37371"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53753</attachid>
            <date>2010-04-19 18:01:12 -0700</date>
            <delta_ts>2010-04-20 14:23:00 -0700</delta_ts>
            <desc>Patch addressing Niko&apos;s comments</desc>
            <filename>bug16854.patch3.txt</filename>
            <type>text/plain</type>
            <size>4492</size>
            <attacher name="Jeff Schiller">jeffschiller</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Nzg1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDQtMTkgIEplZmYgU2NoaWxsZXIgIDxjb2RlZHJlYWRAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERpc3BsYXkgdG9vbHRpcHMgd2hlbiBob3ZlcmluZyBvdmVyIFNWRyBlbGVtZW50cywgQnVnIDE2
ODU0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg1
NAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogc3ZnL1NWR0FF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50Ojp0aXRsZSk6IHhsaW5r
OnRpdGxlIHRha2VzIHByZWNlZGVuY2UsIG90aGVyd2lzZSBTVkdTdHlsZWRFbGVtZW50Ojp0aXRs
ZSgpIGlzIHVzZWQKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSk6IGNoZWNrcyBmb3IgYSBzaGFkb3cg
cGFyZW50IGFuZCB1c2VzIHRoYXQgdGl0bGUsIG90aGVyd2lzZSB1c2VzIHRoZSBjb250ZW50J3Mg
dGl0bGUKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oOiBhZGQgdGl0bGUoKSBtZXRo
b2QgZGVjbGFyYXRpb24KKyAgICAgICAgCiAyMDEwLTA0LTE5ICBHYXZpbiBCYXJyYWNsb3VnaCAg
PGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKHJv
bGxpbmcgb3V0IHI1NzgyOSkuCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiA1Nzg1NCkK
KysrIFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsMTMgQEAgU1ZHQUVsZW1lbnQ6On5TVkdBRWxlbWVudCgpCiAKIFN0cmluZyBTVkdBRWxlbWVu
dDo6dGl0bGUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6
dGl0bGVBdHRyKTsKKyAgICAvLyBJZiB0aGUgeGxpbms6dGl0bGUgaXMgc2V0IChub24tZW1wdHkg
c3RyaW5nKSwgdXNlIGl0LgorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBnZXRBdHRy
aWJ1dGUoWExpbmtOYW1lczo6dGl0bGVBdHRyKTsKKyAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHRpdGxlOworCisgICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlIHRpdGxl
IG9mIHRoaXMgZWxlbWVudC4KKyAgICByZXR1cm4gU1ZHU3R5bGVkRWxlbWVudDo6dGl0bGUoKTsK
IH0KIAogdm9pZCBTVkdBRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKiBhdHRyKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDU3ODU0
KQorKysgV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSAi
U1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCisjaW5jbHVk
ZSAiU1ZHVXNlRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTY1LDYgKzY2LDQ5IEBAIFNWR1N0eWxlZEVsZW1lbnQ6On5TVkdT
dHlsZWRFbGVtZW50KCkKICAgICBTVkdSZXNvdXJjZTo6cmVtb3ZlQ2xpZW50KHRoaXMpOwogfQog
CitTdHJpbmcgU1ZHU3R5bGVkRWxlbWVudDo6dGl0bGUoKSBjb25zdAoreworICAgIC8vIEVsc2Us
IHdlIHdhbGsgdXAgdGhlIHRyZWUgdG8gc2VlIGlmIHdlIGFyZSBpbnNpZGUgYSA8dXNlPiBzaGFk
b3cgdHJlZS4KKyAgICBOb2RlKiBwYXJlbnQgPSBjb25zdF9jYXN0PFNWR1N0eWxlZEVsZW1lbnQq
Pih0aGlzKTsKKyAgICB3aGlsZSAocGFyZW50KSB7CisgICAgICAgIGlmICghcGFyZW50LT5pc1No
YWRvd05vZGUoKSkgeworICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
R2V0IHRoZSA8dXNlPiBlbGVtZW50LgorICAgICAgICBOb2RlKiBzaGFkb3dQYXJlbnQgPSBwYXJl
bnQtPnNoYWRvd1BhcmVudE5vZGUoKTsKKyAgICAgICAgaWYgKHNoYWRvd1BhcmVudCAmJiBzaGFk
b3dQYXJlbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRhZykpIHsKKyAgICAgICAgICAgIGlm
IChTVkdVc2VFbGVtZW50KiB1c2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHVXNlRWxlbWVudCo+
KHNoYWRvd1BhcmVudCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgPHVzZT4gdGl0bGUg
aXMgZW1wdHkgd2Ugd2lsbCBrZWVwIHdhbGtpbmcgdXAuCisgICAgICAgICAgICAgICAgU3RyaW5n
IHVzZVRpdGxlKHVzZUVsZW1lbnQtPnRpdGxlKCkpOworICAgICAgICAgICAgICAgIGlmICghdXNl
VGl0bGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlVGl0bGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRO
b2RlKCk7CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGFyZW4ndCBhbiBpbnN0YW5jZSBpbiBh
IHVzZSwgdGhlbiBmaW5kIHRoZSBmaXJzdCA8dGl0bGU+IGNoaWxkIG9mIHRoaXMgZWxlbWVudC4K
KyAgICBFbGVtZW50KiB0aXRsZUVsZW1lbnQgPSBmaXJzdEVsZW1lbnRDaGlsZCgpOworICAgIGZv
ciAoIDsgdGl0bGVFbGVtZW50OyB0aXRsZUVsZW1lbnQgPSB0aXRsZUVsZW1lbnQtPm5leHRFbGVt
ZW50U2libGluZygpKSB7CisgICAgICAgIGlmICghdGl0bGVFbGVtZW50LT5oYXNUYWdOYW1lKFNW
R05hbWVzOjp0aXRsZVRhZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCF0
aXRsZUVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIElmIGEgdGl0bGUgY2hpbGQgd2FzIGZvdW5kLCBy
ZXR1cm4gdGhlIHRleHQgY29udGVudHMuCisgICAgLy8gQWNjb3JkaW5nIHRvIHNwZWMsIHdlIHNo
b3VsZCBub3QgcmV0dXJuIHRpdGxlcyB3aGVuIGhvdmVyaW5nIG92ZXIgPHN2Zz4gZWxlbWVudHMg
KHRob3NlIAorICAgIC8vIDx0aXRsZT4gZWxlbWVudHMgYXJlIHRoZSB0aXRsZSBvZiB0aGUgZG9j
dW1lbnQsIG5vdCBhIHRvb2x0aXApLgorICAgIGlmICh0aXRsZUVsZW1lbnQgJiYgIXRoaXMtPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpCisgICAgICAgIHJldHVybiB0aXRsZUVsZW1lbnQt
PmlubmVyVGV4dCgpOworICAgIAorICAgIC8vIE90aGVyd2lzZSByZXR1cm4gYSBudWxsL2VtcHR5
IHN0cmluZy4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIGJvb2wgU1ZHU3R5bGVkRWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHL2V4dGVuZC5odG1sI1ByaXZhdGVEYXRhCkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5
bGVkRWxlbWVudC5oCShyZXZpc2lvbiA1Nzg1NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR1N0eWxlZEVsZW1lbnQoKTsKIAorICAgICAgICB2
aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OworCiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNS
ZWxhdGl2ZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1N0eWxlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzTWFya2VycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cg==
</data>
<flag name="review"
          id="37551"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53881</attachid>
            <date>2010-04-20 14:23:00 -0700</date>
            <delta_ts>2010-04-22 21:41:03 -0700</delta_ts>
            <desc>Patch addressing Niko&apos;s comments #2</desc>
            <filename>bug16854.patch4.txt</filename>
            <type>text/plain</type>
            <size>4558</size>
            <attacher name="Jeff Schiller">jeffschiller</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzkwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDQtMjAgIEplZmYgU2NoaWxsZXIgIDxjb2RlZHJlYWRAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERpc3BsYXkgdG9vbHRpcHMgd2hlbiBob3ZlcmluZyBvdmVyIFNWRyBlbGVtZW50cywgQnVnIDE2
ODU0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg1
NAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogc3ZnL1NWR0FF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50Ojp0aXRsZSk6IHhsaW5r
OnRpdGxlIHRha2VzIHByZWNlZGVuY2UsIG90aGVyd2lzZSBTVkdTdHlsZWRFbGVtZW50Ojp0aXRs
ZSgpIGlzIHVzZWQKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSk6IGNoZWNrcyBmb3IgYSBzaGFkb3cg
cGFyZW50IGFuZCB1c2VzIHRoYXQgdGl0bGUsIG90aGVyd2lzZSB1c2VzIHRoZSBjb250ZW50J3Mg
dGl0bGUKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oOiBhZGQgdGl0bGUoKSBtZXRo
b2QgZGVjbGFyYXRpb24KKyAgICAgICAgCiAyMDEwLTA0LTIwICBHYXZpbiBCYXJyYWNsb3VnaCAg
PGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJl
bi4KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHJldmlzaW9uIDU3OTA4KQorKysgV2ViQ29yZS9zdmcv
U1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCwxMyBAQCBTVkdBRWxl
bWVudDo6flNWR0FFbGVtZW50KCkKIAogU3RyaW5nIFNWR0FFbGVtZW50Ojp0aXRsZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjp0aXRsZUF0dHIpOworICAg
IC8vIElmIHRoZSB4bGluazp0aXRsZSBpcyBzZXQgKG5vbi1lbXB0eSBzdHJpbmcpLCB1c2UgaXQu
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGdldEF0dHJpYnV0ZShYTGlua05hbWVz
Ojp0aXRsZUF0dHIpOworICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
dGl0bGU7CisKKyAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgdGl0bGUgb2YgdGhpcyBlbGVtZW50
LgorICAgIHJldHVybiBTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSgpOwogfQogCiB2b2lkIFNWR0FF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNTc5MDgpCisrKyBXZWJDb3JlL3N2
Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAog
I2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjYs
NiArNjcsNTAgQEAgU1ZHU3R5bGVkRWxlbWVudDo6flNWR1N0eWxlZEVsZW1lbnQoKQogICAgIFNW
R1Jlc291cmNlOjpyZW1vdmVDbGllbnQodGhpcyk7CiB9CiAKK1N0cmluZyBTVkdTdHlsZWRFbGVt
ZW50Ojp0aXRsZSgpIGNvbnN0Cit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHNwZWMsIHdlIHNob3Vs
ZCBub3QgcmV0dXJuIHRpdGxlcyB3aGVuIGhvdmVyaW5nIG92ZXIgPHN2Zz4gZWxlbWVudHMgKHRo
b3NlIAorICAgIC8vIDx0aXRsZT4gZWxlbWVudHMgYXJlIHRoZSB0aXRsZSBvZiB0aGUgZG9jdW1l
bnQsIG5vdCBhIHRvb2x0aXApIHNvIHdlIGluc3RhbnRseSByZXR1cm4uCisgICAgaWYgKGhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAK
KyAgICAvLyBXYWxrIHVwIHRoZSB0cmVlLCB0byBmaW5kIG91dCB3aGV0aGVyIHdlJ3JlIGluc2lk
ZSBhIDx1c2U+IHNoYWRvdyB0cmVlLCB0byBmaW5kIHRoZSByaWdodCB0aXRsZS4KKyAgICBOb2Rl
KiBwYXJlbnQgPSBjb25zdF9jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPih0aGlzKTsKKyAgICB3aGls
ZSAocGFyZW50KSB7CisgICAgICAgIGlmICghcGFyZW50LT5pc1NoYWRvd05vZGUoKSkgeworICAg
ICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gR2V0IHRoZSA8dXNlPiBlbGVt
ZW50LgorICAgICAgICBOb2RlKiBzaGFkb3dQYXJlbnQgPSBwYXJlbnQtPnNoYWRvd1BhcmVudE5v
ZGUoKTsKKyAgICAgICAgaWYgKHNoYWRvd1BhcmVudCAmJiBzaGFkb3dQYXJlbnQtPmlzU1ZHRWxl
bWVudCgpICYmIHNoYWRvd1BhcmVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6dXNlVGFnKSkgewor
ICAgICAgICAgICAgU1ZHVXNlRWxlbWVudCogdXNlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1Vz
ZUVsZW1lbnQqPihzaGFkb3dQYXJlbnQpOworICAgICAgICAgICAgLy8gSWYgdGhlIDx1c2U+IHRp
dGxlIGlzIG5vdCBlbXB0eSB3ZSBmb3VuZCB0aGUgdGl0bGUgdG8gdXNlLgorICAgICAgICAgICAg
U3RyaW5nIHVzZVRpdGxlKHVzZUVsZW1lbnQtPnRpdGxlKCkpOworICAgICAgICAgICAgaWYgKHVz
ZVRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiB1c2VUaXRsZTsKKyAgICAgICAgfQorICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dE5vZGUoKTsKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgYXJlbid0IGFuIGluc3RhbmNlIGlu
IGEgPHVzZT4gb3IgdGhlIDx1c2U+IHRpdGxlIHdhcyBub3QgZm91bmQsIHRoZW4gZmluZCB0aGUg
Zmlyc3QKKyAgICAvLyA8dGl0bGU+IGNoaWxkIG9mIHRoaXMgZWxlbWVudC4KKyAgICBFbGVtZW50
KiB0aXRsZUVsZW1lbnQgPSBmaXJzdEVsZW1lbnRDaGlsZCgpOworICAgIGZvciAoOyB0aXRsZUVs
ZW1lbnQ7IHRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCkp
IHsKKyAgICAgICAgaWYgKHRpdGxlRWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6dGl0bGVU
YWcpICYmIHRpdGxlRWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICAvLyBJZiBhIHRpdGxlIGNoaWxkIHdhcyBmb3VuZCwgcmV0dXJuIHRoZSB0
ZXh0IGNvbnRlbnRzLgorICAgIGlmICh0aXRsZUVsZW1lbnQpCisgICAgICAgIHJldHVybiB0aXRs
ZUVsZW1lbnQtPmlubmVyVGV4dCgpOworICAgIAorICAgIC8vIE90aGVyd2lzZSByZXR1cm4gYSBu
dWxsL2VtcHR5IHN0cmluZy4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIGJvb2wgU1ZHU3R5
bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAg
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2V4dGVuZC5odG1sI1ByaXZhdGVEYXRhCkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiA1NzkwOCkKKysrIFdlYkNvcmUvc3ZnL1NW
R1N0eWxlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR1N0eWxlZEVsZW1lbnQoKTsKIAor
ICAgICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OworCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBoYXNSZWxhdGl2ZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1N0eWxlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzTWFya2VycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54128</attachid>
            <date>2010-04-22 21:40:24 -0700</date>
            <delta_ts>2010-04-23 02:32:01 -0700</delta_ts>
            <desc>Patch adding manual test</desc>
            <filename>bug16854.patch5.txt</filename>
            <type>text/plain</type>
            <size>6571</size>
            <attacher name="Jeff Schiller">jeffschiller</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODE0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDQtMjIgIEplZmYgU2NoaWxsZXIgIDxjb2RlZHJlYWRAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERpc3BsYXkgdG9vbHRpcHMgd2hlbiBob3ZlcmluZyBvdmVyIFNWRyBlbGVtZW50cywgQnVnIDE2
ODU0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg1
NAorCisgICAgICAgIE1hbnVhbCB0ZXN0IGFkZGVkIGZvciB2ZXJpZnlpbmcgdG9vbHRpcHMuCisK
KyAgICAgICAgKiBtYW51YWwtdGVzdHMvc3ZnLXRvb2x0aXAuc3ZnOiBBZGRlZC4KKyAgICAgICAg
KiBzdmcvU1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OnRp
dGxlKTogeGxpbms6dGl0bGUgdGFrZXMgcHJlY2VkZW5jZSwgb3RoZXJ3aXNlIFNWR1N0eWxlZEVs
ZW1lbnQ6OnRpdGxlKCkgaXMgdXNlZAorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OnRpdGxlKTogY2hlY2tzIGZv
ciBhIHNoYWRvdyBwYXJlbnQgYW5kIHVzZXMgdGhhdCB0aXRsZSwgb3RoZXJ3aXNlIHVzZXMgdGhl
IGNvbnRlbnQncyB0aXRsZQorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50Lmg6IGFkZCB0
aXRsZSgpIG1ldGhvZCBkZWNsYXJhdGlvbgorCiAyMDEwLTA0LTIyICBNaWNoYWVsIEZvcm5leSAg
PG1mb3JuZXlAbWZvcm5leS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4K
SW5kZXg6IFdlYkNvcmUvbWFudWFsLXRlc3RzL3N2Zy10b29sdGlwLnN2Zwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL21hbnVhbC10ZXN0cy9zdmctdG9vbHRpcC5zdmcJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL21hbnVhbC10ZXN0cy9zdmctdG9vbHRpcC5zdmcJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5r
Ij4KKyAgPHRpdGxlPlRoaXMgc3RyaW5nIHNob3VsZCBub3Qgc2hvdyB1cCBhcyBhIHRvb2x0aXA8
L3RpdGxlPgorICA8ZGVzYz4KKyAgVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgdG9vbHRpcHMgYXJl
IHByb3Blcmx5IHJlbmRlcmVkIGZvciBTVkcgY29udGVudCBpbiBhIHZhcmlldHkgb2YKKyAgc2Nl
bmFyaW9zLiAgSG92ZXJpbmcgb3ZlciBldmVyeSBzaGFwZSBzaG91bGQgcmVzdWx0IGluIGEgdG9v
bHRpcCBvZiAiUEFTUyIuCisgIDwvZGVzYz4KKyAgPGRlZnM+CisgICAgPGVsbGlwc2UgaWQ9ImUx
IiBjeD0iMTAwIiBjeT0iMjAwIiByeD0iNTAiIHJ5PSIzMCIgZmlsbD0iYmx1ZSI+CisgICAgICA8
dGl0bGU+UEFTUzwvdGl0bGU+CisgICAgPC9lbGxpcHNlPgorICAgIDxlbGxpcHNlIGlkPSJlMiIg
Y3g9IjI1MCIgY3k9IjIwMCIgcng9IjUwIiByeT0iMzAiIGZpbGw9ImJsdWUiPgorICAgICAgPHRp
dGxlPkZBSUw8L3RpdGxlPgorICAgIDwvZWxsaXBzZT4KKyAgICA8c3ltYm9sIGlkPSJlMyI+Cisg
ICAgICA8ZWxsaXBzZSBjeD0iMTAwIiBjeT0iMzAwIiByeD0iNTAiIHJ5PSIzMCIgZmlsbD0iYmx1
ZSI+CisgICAgICAgIDx0aXRsZT5QQVNTPC90aXRsZT4KKyAgICAgIDwvZWxsaXBzZT4KKyAgICA8
L3N5bWJvbD4KKyAgICA8c3ltYm9sIGlkPSJlNCI+CisgICAgICA8dGl0bGU+RkFJTDwvdGl0bGU+
CisgICAgICA8ZWxsaXBzZSBjeD0iMjUwIiBjeT0iMzAwIiByeD0iNTAiIHJ5PSIzMCIgZmlsbD0i
Ymx1ZSI+CisgICAgICA8L2VsbGlwc2U+CisgICAgPC9zeW1ib2w+CisgIDwvZGVmcz4KKworICA8
dGV4dCB5PSIxNSIgeD0iMCI+V2hlbiBob3ZlcmVkLCBhbGwgc2hhcGVzIHNob3VsZCBzaG93IGEg
IlBBU1MiIHRvb2x0aXAuICBBbnl0aGluZyBlbHNlIGlzIGEgZmFpbHVyZS48L3RleHQ+CisgIAor
ICA8ZWxsaXBzZSBjeD0iMTAwIiBjeT0iMTAwIiByeD0iNTAiIHJ5PSIzMCIgZmlsbD0iYmx1ZSI+
CisgICAgPHRpdGxlPlBBU1M8L3RpdGxlPgorICA8L2VsbGlwc2U+CisKKyAgPGc+CisgICAgPHRp
dGxlPlBBU1M8L3RpdGxlPgorICAgIDxlbGxpcHNlIGN4PSIyNTAiIGN5PSIxMDAiIHJ4PSI1MCIg
cnk9IjMwIiBmaWxsPSJibHVlIi8+CisgIDwvZz4KKworICA8YSB4bGluazp0aXRsZT0iUEFTUyIg
eGxpbms6aHJlZj0iIyI+CisgICAgPHRpdGxlPkZBSUw8L3RpdGxlPgorICAgIDxlbGxpcHNlIGlk
PSJlNCIgY3g9IjQwMCIgY3k9IjEwMCIgcng9IjUwIiByeT0iMzAiIGZpbGw9ImJsdWUiLz4KKyAg
PC9hPgorICAKKyAgPHVzZSB4bGluazpocmVmPSIjZTEiLz4KKyAgCisgIDx1c2UgeGxpbms6aHJl
Zj0iI2UyIj4KKyAgICA8dGl0bGU+UEFTUzwvdGl0bGU+CisgIDwvdXNlPgorCisgIDxnPgorICAg
IDx0aXRsZT5GQUlMPC90aXRsZT4KKyAgICA8ZWxsaXBzZSBpZD0iZTgiIGN4PSI0MDAiIGN5PSIy
MDAiIHJ4PSI1MCIgcnk9IjMwIiBmaWxsPSJibHVlIj4KKyAgICAgIDx0aXRsZT5QQVNTPC90aXRs
ZT4KKyAgICA8L2VsbGlwc2U+CisgIDwvZz4KKyAgCisgIDx1c2UgeGxpbms6aHJlZj0iI2UzIi8+
CisgIDx1c2UgeGxpbms6aHJlZj0iI2U0Ij4KKyAgICA8dGl0bGU+UEFTUzwvdGl0bGU+CisgIDwv
dXNlPgorICAKKyAgCis8L3N2Zz4KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHJldmlzaW9uIDU4MTQ0
KQorKysgV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3
ICs2MCwxMyBAQCBTVkdBRWxlbWVudDo6flNWR0FFbGVtZW50KCkKIAogU3RyaW5nIFNWR0FFbGVt
ZW50Ojp0aXRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShYTGlua05hbWVz
Ojp0aXRsZUF0dHIpOworICAgIC8vIElmIHRoZSB4bGluazp0aXRsZSBpcyBzZXQgKG5vbi1lbXB0
eSBzdHJpbmcpLCB1c2UgaXQuCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGdldEF0
dHJpYnV0ZShYTGlua05hbWVzOjp0aXRsZUF0dHIpOworICAgIGlmICghdGl0bGUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gdGl0bGU7CisKKyAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgdGl0
bGUgb2YgdGhpcyBlbGVtZW50LgorICAgIHJldHVybiBTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSgp
OwogfQogCiB2b2lkIFNWR0FFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNTgx
NDQpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRl
ICJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJT
VkdVc2VFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNjYsNiArNjcsNTAgQEAgU1ZHU3R5bGVkRWxlbWVudDo6flNWR1N0eWxl
ZEVsZW1lbnQoKQogICAgIFNWR1Jlc291cmNlOjpyZW1vdmVDbGllbnQodGhpcyk7CiB9CiAKK1N0
cmluZyBTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSgpIGNvbnN0Cit7CisgICAgLy8gQWNjb3JkaW5n
IHRvIHNwZWMsIHdlIHNob3VsZCBub3QgcmV0dXJuIHRpdGxlcyB3aGVuIGhvdmVyaW5nIG92ZXIg
PHN2Zz4gZWxlbWVudHMgKHRob3NlIAorICAgIC8vIDx0aXRsZT4gZWxlbWVudHMgYXJlIHRoZSB0
aXRsZSBvZiB0aGUgZG9jdW1lbnQsIG5vdCBhIHRvb2x0aXApIHNvIHdlIGluc3RhbnRseSByZXR1
cm4uCisgICAgaWYgKGhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICAKKyAgICAvLyBXYWxrIHVwIHRoZSB0cmVlLCB0byBmaW5kIG91dCB3
aGV0aGVyIHdlJ3JlIGluc2lkZSBhIDx1c2U+IHNoYWRvdyB0cmVlLCB0byBmaW5kIHRoZSByaWdo
dCB0aXRsZS4KKyAgICBOb2RlKiBwYXJlbnQgPSBjb25zdF9jYXN0PFNWR1N0eWxlZEVsZW1lbnQq
Pih0aGlzKTsKKyAgICB3aGlsZSAocGFyZW50KSB7CisgICAgICAgIGlmICghcGFyZW50LT5pc1No
YWRvd05vZGUoKSkgeworICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
R2V0IHRoZSA8dXNlPiBlbGVtZW50LgorICAgICAgICBOb2RlKiBzaGFkb3dQYXJlbnQgPSBwYXJl
bnQtPnNoYWRvd1BhcmVudE5vZGUoKTsKKyAgICAgICAgaWYgKHNoYWRvd1BhcmVudCAmJiBzaGFk
b3dQYXJlbnQtPmlzU1ZHRWxlbWVudCgpICYmIHNoYWRvd1BhcmVudC0+aGFzVGFnTmFtZShTVkdO
YW1lczo6dXNlVGFnKSkgeworICAgICAgICAgICAgU1ZHVXNlRWxlbWVudCogdXNlRWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR1VzZUVsZW1lbnQqPihzaGFkb3dQYXJlbnQpOworICAgICAgICAgICAg
Ly8gSWYgdGhlIDx1c2U+IHRpdGxlIGlzIG5vdCBlbXB0eSB3ZSBmb3VuZCB0aGUgdGl0bGUgdG8g
dXNlLgorICAgICAgICAgICAgU3RyaW5nIHVzZVRpdGxlKHVzZUVsZW1lbnQtPnRpdGxlKCkpOwor
ICAgICAgICAgICAgaWYgKHVzZVRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHJldHVybiB1c2VUaXRsZTsKKyAgICAgICAgfQorICAgICAgICBwYXJl
bnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgYXJl
bid0IGFuIGluc3RhbmNlIGluIGEgPHVzZT4gb3IgdGhlIDx1c2U+IHRpdGxlIHdhcyBub3QgZm91
bmQsIHRoZW4gZmluZCB0aGUgZmlyc3QKKyAgICAvLyA8dGl0bGU+IGNoaWxkIG9mIHRoaXMgZWxl
bWVudC4KKyAgICBFbGVtZW50KiB0aXRsZUVsZW1lbnQgPSBmaXJzdEVsZW1lbnRDaGlsZCgpOwor
ICAgIGZvciAoOyB0aXRsZUVsZW1lbnQ7IHRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudC0+bmV4
dEVsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKHRpdGxlRWxlbWVudC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6dGl0bGVUYWcpICYmIHRpdGxlRWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBJZiBhIHRpdGxlIGNoaWxkIHdhcyBm
b3VuZCwgcmV0dXJuIHRoZSB0ZXh0IGNvbnRlbnRzLgorICAgIGlmICh0aXRsZUVsZW1lbnQpCisg
ICAgICAgIHJldHVybiB0aXRsZUVsZW1lbnQtPmlubmVyVGV4dCgpOworICAgIAorICAgIC8vIE90
aGVyd2lzZSByZXR1cm4gYSBudWxsL2VtcHR5IHN0cmluZy4KKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKIGJvb2wgU1ZHU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHls
ZSogc3R5bGUpCiB7CiAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2V4dGVuZC5odG1s
I1ByaXZhdGVEYXRhCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiA1ODE0NCkK
KysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflNWR1N0
eWxlZEVsZW1lbnQoKTsKIAorICAgICAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0Owor
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxhdGl2ZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWFya2VycygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>