<?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>104924</bug_id>
          
          <creation_ts>2012-12-13 09:21:40 -0800</creation_ts>
          <short_desc>[Chromium] Fix find in page rects for overflowing content.</short_desc>
          <delta_ts>2013-01-30 04:15:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Knottenbelt">jknotten</reporter>
          <assigned_to name="John Knottenbelt">jknotten</assigned_to>
          <cc>jchaffraix</cc>
    
    <cc>johnme</cc>
    
    <cc>leandrogracia</cc>
    
    <cc>peter</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>790670</commentid>
    <comment_count>0</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-13 09:21:40 -0800</bug_when>
    <thetext>[Chromium] Fix find in page rects for overflowing content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790675</commentid>
    <comment_count>1</comment_count>
      <attachid>179286</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-13 09:24:30 -0800</bug_when>
    <thetext>Created attachment 179286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790677</commentid>
    <comment_count>2</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-13 09:25:32 -0800</bug_when>
    <thetext>Leandro, John could you take a look at this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790760</commentid>
    <comment_count>3</comment_count>
      <attachid>179286</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-12-13 10:59:08 -0800</bug_when>
    <thetext>Comment on attachment 179286
Patch

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

&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:59
&gt; +    } while (!renderer-&gt;hasOverflowClip() &amp;&amp; !renderer-&gt;isRenderView());

Can we ensure renderer is always going to be non-NULL?

&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:112
&gt; +        for (const RenderBlock* container = containingScrollable(renderer); container;

Could you try this with non-scrollable containers that have a CSS transform? (e.g. a translation + a rotation)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791651</commentid>
    <comment_count>4</comment_count>
      <attachid>179490</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-14 09:08:43 -0800</bug_when>
    <thetext>Created attachment 179490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791652</commentid>
    <comment_count>5</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-14 09:10:04 -0800</bug_when>
    <thetext>I tried it as you suggested (please see how I modified the test case, to check that I understood you correctly) and it worked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791669</commentid>
    <comment_count>6</comment_count>
      <attachid>179490</attachid>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-12-14 09:41:50 -0800</bug_when>
    <thetext>Comment on attachment 179490
Patch

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

LGTM, just a minor comment.

&gt; Source/WebKit/chromium/tests/data/find_in_page_frame.html:75
&gt; +&lt;div style=&quot;height:0px&quot;&gt;

Could you double-check that the &quot;transform&quot; class properties are not overriding this height: 0px in any way? Transform defines height to be 100px.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791678</commentid>
    <comment_count>7</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-14 09:58:31 -0800</bug_when>
    <thetext>Been chatting with Sami, who points out that perhaps what we really want to do is to normalise with respect to scrollable layers, rather than scrollable containing boxes. 

RenderLayer* RenderLayer::enclosingScrollableLayer() const

might be what we want to use. Anything with a transformation will get it&apos;s own layer.

The calls to localToAbsolute should be handling any transformations we need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791684</commentid>
    <comment_count>8</comment_count>
    <who name="Leandro Graciá Gil">leandrogracia</who>
    <bug_when>2012-12-14 10:09:10 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Been chatting with Sami, who points out that perhaps what we really want to do is to normalise with respect to scrollable layers, rather than scrollable containing boxes. 
&gt; 
&gt; RenderLayer* RenderLayer::enclosingScrollableLayer() const
&gt; 
&gt; might be what we want to use. Anything with a transformation will get it&apos;s own layer.
&gt; 
&gt; The calls to localToAbsolute should be handling any transformations we need.

That sounds ok, but I suggest to check it with jchaffraix since if I remember right he&apos;s the one who suggested using containingBlock. See https://bugs.webkit.org/show_bug.cgi?id=94343 for more details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792673</commentid>
    <comment_count>9</comment_count>
      <attachid>179490</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-17 06:17:18 -0800</bug_when>
    <thetext>Comment on attachment 179490
Patch

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

&gt;&gt; Source/WebKit/chromium/tests/data/find_in_page_frame.html:75
&gt;&gt; +&lt;div style=&quot;height:0px&quot;&gt;
&gt; 
&gt; Could you double-check that the &quot;transform&quot; class properties are not overriding this height: 0px in any way? Transform defines height to be 100px.

Thanks, I did check this and the transformed div has height 120px, as expected, but the child &lt;div&gt; does indeed have height 0px.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792674</commentid>
    <comment_count>10</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-17 06:17:35 -0800</bug_when>
    <thetext>Hi Julian,

I would appreciate your thoughts on this bug (also CC&apos;d you on the downstream bug). 

The problem we are having is that the current find-in-page coordinate system is trying to normalise a RenderObject&apos;s coordinates to the maxLayoutOverflow() rect of its containing box. This fails if the containing box has zero height or width. 

An example of where this happens is http://www.fastclick.com/, where the &lt;body&gt; has height:0, which in this case is actually due to the DOCTYPE declaration. In general, however, the situation is easy to reproduce by having a height:0px &lt;div&gt; in the containing box. I&apos;ve demonstrated this in the change to the webkit unit test in Source/WebKit/chromium/tests/data/find_in_page_frame.html .

I think we actually don&apos;t want to normalise against the closest containing box. Rather, I think that we should normalize against the closest enclosing scrollable box, or the render view. This is because it is only really the scrollable content that requires special handling, so that the tick mark appears side by side with the box that contains the scrollable content, independent of whether the content is actually scrolled into view.

Do you agree with Sami&apos;s suggestion to look for scrollable layers instead of scrollable containing boxes? This has the advantage that some code might be reused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793152</commentid>
    <comment_count>11</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-12-17 16:35:15 -0800</bug_when>
    <thetext>&gt; The problem we are having is that the current find-in-page coordinate system is trying to normalise a RenderObject&apos;s coordinates to the maxLayoutOverflow() rect of its containing box. This fails if the containing box has zero height or width. 

Your analysis is wrong. The issue is not about the height / width being zero, it&apos;s about what we track into maxLayoutOverflow() which is completely different. As we don&apos;t track overhanging floats in all cases, you can end up with the wrong answer.

&gt; Do you agree with Sami&apos;s suggestion to look for scrollable layers instead of scrollable containing boxes? This has the advantage that some code might be reused.

The only issue I would see with using RenderLayers is that RenderListBlock (used for displaying &lt;select&gt;) doesn&apos;t necessarily have a layer, yet it is a scrollable area. Not sure if you are displaying these renderers anyway but you should consider that. Apart from this case, you should be able to use scrollable layers / renderers (not sure why you / Sami are putting a difference between the 2).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793530</commentid>
    <comment_count>12</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-18 04:03:58 -0800</bug_when>
    <thetext>Many thanks, Julian. Your comments make sense, and I think perhaps the patch is then fine as it is. Please could you review it?

I tried an experiment with the &lt;select&gt;, as you suggested, and find in page does not find any matches within the select, so we don&apos;t need to worry about this particular case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793790</commentid>
    <comment_count>13</comment_count>
      <attachid>179490</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-12-18 10:08:42 -0800</bug_when>
    <thetext>Comment on attachment 179490
Patch

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

&gt; Many thanks, Julian.

It&apos;s Julien, not Julian. Thanks.

&gt; Your comments make sense, and I think perhaps the patch is then fine as it is. Please could you review it?

In the future, you should mark patches for review as such.

&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:61
&gt; +static const RenderBlock* containingScrollable(const RenderObject* renderer)
&gt; +{
&gt; +    // Trace up the containingBlocks until we reach either the render view or a scrollable object.
&gt; +    if (renderer-&gt;isRenderView())
&gt; +        return 0;
&gt; +    do {
&gt; +        renderer = renderer-&gt;containingBlock();
&gt; +    } while (!renderer-&gt;hasOverflowClip() &amp;&amp; !renderer-&gt;isRenderView());
&gt; +    return static_cast&lt;const RenderBlock*&gt;(renderer);
&gt; +}

The current code is badly written:
* I usually advise against do .. while as I find them less straightforward than a regular for / while.
* the types are all wrong as you reuse |renderer| which is of type RenderObject (and not RenderBlock).
* also we don&apos;t do static_cast&lt;const RenderBlock*&gt; for renderer (this should have been a red flag for you), we use the asserting toRenderBlock.

If you use RenderLayer::enclosingScrollableLayer, you lose the guarantee that your associated renderer is a RenderBlock so I fear this will make the code worse but I can&apos;t tell until seeing the patch.

&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:113
&gt; +        for (const RenderBlock* container = containingScrollable(renderer); container;
&gt; +            container = containingScrollable(container)) {

We don&apos;t have a wrap limit so this should be on one line.

&gt;&gt;&gt; Source/WebKit/chromium/tests/data/find_in_page_frame.html:75
&gt;&gt;&gt; +&lt;div style=&quot;height:0px&quot;&gt;
&gt;&gt; 
&gt;&gt; Could you double-check that the &quot;transform&quot; class properties are not overriding this height: 0px in any way? Transform defines height to be 100px.
&gt; 
&gt; Thanks, I did check this and the transformed div has height 120px, as expected, but the child &lt;div&gt; does indeed have height 0px.

You should add some testing for &lt;select&gt; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794610</commentid>
    <comment_count>14</comment_count>
      <attachid>180152</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-19 06:15:08 -0800</bug_when>
    <thetext>Created attachment 180152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794618</commentid>
    <comment_count>15</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2012-12-19 06:21:23 -0800</bug_when>
    <thetext>Thanks, Julien.

Hopefully, I&apos;ve made the getScrollableContainer code more readable now. I realise that I don&apos;t need to have a separate check for isRenderView() at the beginning because getContainingBlock() should return NULL when run on a RenderView.

I added some tests for &lt;select&gt;. These are trivial at the moment, because find in page doesn&apos;t actually report matches for the option text at all. This is the same behaviour as in Firefox, so I&apos;m not sure if we want to change this behaviour.

I am happy to try to create a enclosingScrollableLayer-based patch if you feel that we should also investigate this approach. Please let me know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815466</commentid>
    <comment_count>16</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-24 07:52:24 -0800</bug_when>
    <thetext>Ping. Any comments on the latest patch would be much appreciated, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815586</commentid>
    <comment_count>17</comment_count>
      <attachid>180152</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2013-01-24 10:28:22 -0800</bug_when>
    <thetext>Comment on attachment 180152
Patch

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

&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:52
&gt; +static const RenderBlock* containingScrollable(const RenderObject* renderer)

The name is missing a noun: what is a containing scrollable?

Better suggestion for the name: enclosingScrollableAncestor, enclosingScrollableContainingBlock

&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:56
&gt; +    while (container &amp;&amp; !container-&gt;hasOverflowClip() &amp;&amp; !container-&gt;isRenderView())

I don&apos;t think you need the |container| check unless you expect to be called on a detached tree, in which case calling containingBlock() is really not a good idea.

&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:107
&gt; +    for (const RenderObject* renderer = baseContainer; renderer; ) {

|renderer| is of type RenderBlock so we should tighten the type.

&gt; Source/WebKit/chromium/tests/WebFrameTest.cpp:909
&gt; +    // Find in &lt;select&gt; content. Expect not to find any matches.
&gt; +    EXPECT_FALSE(frame-&gt;find(findIdentifier, WebString::fromUTF8(&quot;bar5&quot;), options, false, 0));
&gt; +    // Confirm stopFinding(false) clears the selection.

We usually prefer &apos;why&apos; comments as none of the above explains what&apos;s the purpose of the cryptic calls. Like why is is important to clear the selection?

Also your comment conflict with the comment above: // Confirm stopFinding(false) sets the selection on the found text. (which I guess is because you have no match but that&apos;s something to explain).

&gt; Source/WebKit/chromium/tests/data/find_in_page_frame.html:84
&gt; +&lt;/select&gt;

You may want to add some tests with positioned elements as it will yield to results which you may find weird:

&lt;div style=&quot;position: relative; overflow: hidden; height: 100px;&quot;&gt;
   &lt;div style=&quot;overflow: hidden; height: 50px&quot;&gt;
      &lt;div style=&quot;position: absolute; top: 60px; height: 20px; width: 80px; background-color: green&quot;&gt;result 18&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

(This will yield to a visible result that will be normalized to the most outer div)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816688</commentid>
    <comment_count>18</comment_count>
      <attachid>180152</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-25 09:56:16 -0800</bug_when>
    <thetext>Comment on attachment 180152
Patch

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

&gt;&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:107
&gt;&gt; +    for (const RenderObject* renderer = baseContainer; renderer; ) {
&gt; 
&gt; |renderer| is of type RenderBlock so we should tighten the type.

On line 125, |renderer| gets reassigned to the frame&apos;s ownerRenderer, which is of type RendererPart. Shall I change it to RenderBox, as this is the tightest type that will cover both RenderBlock and RenderPart?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816693</commentid>
    <comment_count>19</comment_count>
      <attachid>180152</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2013-01-25 10:00:54 -0800</bug_when>
    <thetext>Comment on attachment 180152
Patch

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

&gt;&gt;&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:107
&gt;&gt;&gt; +    for (const RenderObject* renderer = baseContainer; renderer; ) {
&gt;&gt; 
&gt;&gt; |renderer| is of type RenderBlock so we should tighten the type.
&gt; 
&gt; On line 125, |renderer| gets reassigned to the frame&apos;s ownerRenderer, which is of type RendererPart. Shall I change it to RenderBox, as this is the tightest type that will cover both RenderBlock and RenderPart?

Right, I missed that. RenderBox is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818929</commentid>
    <comment_count>20</comment_count>
      <attachid>185240</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-29 07:24:20 -0800</bug_when>
    <thetext>Created attachment 185240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818931</commentid>
    <comment_count>21</comment_count>
      <attachid>180152</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-29 07:25:10 -0800</bug_when>
    <thetext>Comment on attachment 180152
Patch

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

&gt;&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:52
&gt;&gt; +static const RenderBlock* containingScrollable(const RenderObject* renderer)
&gt; 
&gt; The name is missing a noun: what is a containing scrollable?
&gt; 
&gt; Better suggestion for the name: enclosingScrollableAncestor, enclosingScrollableContainingBlock

enclosingScrollableAncestor sounds good to me, will rename.

&gt;&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:56
&gt;&gt; +    while (container &amp;&amp; !container-&gt;hasOverflowClip() &amp;&amp; !container-&gt;isRenderView())
&gt; 
&gt; I don&apos;t think you need the |container| check unless you expect to be called on a detached tree, in which case calling containingBlock() is really not a good idea.

It is possible for this code to be called with RenderView object as the passed in renderer. For example, on line 110, the idea is to chain up the containing scrollable ancestors until we get to the RenderView, stopping when the container returned is NULL.

However, by changing the code a little at line 110, I can ensure that this function is never called with renderer = renderView.

&gt;&gt; Source/WebKit/chromium/tests/data/find_in_page_frame.html:84
&gt;&gt; +&lt;/select&gt;
&gt; 
&gt; You may want to add some tests with positioned elements as it will yield to results which you may find weird:
&gt; 
&gt; &lt;div style=&quot;position: relative; overflow: hidden; height: 100px;&quot;&gt;
&gt;    &lt;div style=&quot;overflow: hidden; height: 50px&quot;&gt;
&gt;       &lt;div style=&quot;position: absolute; top: 60px; height: 20px; width: 80px; background-color: green&quot;&gt;result 18&lt;/div&gt;
&gt;   &lt;/div&gt;
&gt; &lt;/div&gt;
&gt; 
&gt; (This will yield to a visible result that will be normalized to the most outer div)

To clarify, we would expect, ordinarily, that the inner-most div be normalized to the closest scrollable enclosing block, but in the case of position:absolute elements, containingBlock() skips right up to the root element stopping only for position:relative blocks. I think that this is desirable behaviour, since this matches the intended use of position:absolute (to be relative to the page, or to the nearest position:relative block).

This patch should also not affect this behaviour. Without the patch, the match is normalized against every containingBlock. With the patch, the match is normalized only against those containingBlocks that are also scrollable, so in both cases the middle div in the example above would be skipped.

I&apos;ve added a test that checks that this is happening as expected, by adding a result in the immediately containing div as well as one inside the position:absolute div. By pushing the immediately containing div down a bit with a margin-top style, I can show that the find in page rect has been normalised against the position:relative rather than the immediately containing div.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819043</commentid>
    <comment_count>22</comment_count>
      <attachid>185240</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2013-01-29 10:02:18 -0800</bug_when>
    <thetext>Comment on attachment 185240
Patch

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

&gt; Source/WebKit/chromium/ChangeLog:15
&gt; +        (WebKit):

Let&apos;s remove this useless entry and fill in the other ChangeLog function entries.

&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:53
&gt; +{

If you assume that this function shouldn&apos;t be called on the RenderView, you should add ASSERT(!renderer-&gt;isRenderView()) here.

&gt; Source/WebKit/chromium/src/FindInPageCoordinates.cpp:-114
&gt; -        ASSERT(renderer-&gt;isRenderView());

I still think this ASSERT is valuable (even if you are guaranteed not to hit it). It insures that you don&apos;t forget any renderer when walking up the tree as jumping to renderer-&gt;frame()-&gt;ownerRenderer() could skip part of the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819071</commentid>
    <comment_count>23</comment_count>
      <attachid>185259</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-29 10:27:08 -0800</bug_when>
    <thetext>Created attachment 185259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819105</commentid>
    <comment_count>24</comment_count>
      <attachid>185259</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2013-01-29 11:05:18 -0800</bug_when>
    <thetext>Comment on attachment 185259
Patch

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

If you want your change to be committed, you should ask for the commit-queue flag (cq?). I don&apos;t need to see the next iteration (ie you can carry over my r+ to the new patch).

&gt; Source/WebKit/chromium/ChangeLog:19
&gt; +        * src/FindInPageCoordinates.cpp:
&gt; +        (WebKit::enclosingScrollableAncestor):
&gt; +        (WebKit::toNormalizedRect):
&gt; +        (WebKit::findInPageRectFromAbsoluteRect):
&gt; +        * tests/WebFrameTest.cpp:
&gt; +        * tests/data/find.html:
&gt; +        * tests/data/find_in_page_frame.html:

What I meant is that I prefer the ChangeLog to include some low-level details here about the exact change. For example for the first entry above:

(WebKit::enclosingScrollableAncestor):
Helper function to find the enclosing containing block with an overflow clip.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820028</commentid>
    <comment_count>25</comment_count>
      <attachid>185454</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-30 03:08:28 -0800</bug_when>
    <thetext>Created attachment 185454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820078</commentid>
    <comment_count>26</comment_count>
      <attachid>185454</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-30 04:15:06 -0800</bug_when>
    <thetext>Comment on attachment 185454
Patch

Clearing flags on attachment: 185454

Committed r141252: &lt;http://trac.webkit.org/changeset/141252&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820079</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-30 04:15:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179286</attachid>
            <date>2012-12-13 09:24:30 -0800</date>
            <delta_ts>2012-12-14 09:08:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104924-20121213172150.patch</filename>
            <type>text/plain</type>
            <size>5658</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDc5YzQwZGNmNjRmNDQ3MWJhNTE5MmYyMWQwNGRiZGVjMWUzNmYyNWUuLmVkYjU4MTY3MDViMzll
OTI4YTVkYzgxMTU4NzEzNTlhZmUwMmY4ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTItMTItMTMgIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBGaXggZmluZCBpbiBwYWdlIHJlY3Rz
IGZvciBvdmVyZmxvd2luZyBjb250ZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSWYgYSBkaXYgaGFzIG92ZXJmbG93aW5nIGNvbnRlbnQsIHdlIHNo
b3VsZCBvbmx5IG5vcm1hbGlzZSBpdHMKKyAgICAgICAgY29vcmRpbmF0ZXMgYWdhaW5zdCB0aGUg
cmVuZGVydmlldyBvciB0aGUgY29udGFpbmluZyBzY3JvbGxhYmxlIGJsb2NrLgorCisgICAgICAg
IFRFU1Q9V2ViRnJhbWVUZXN0LkZpbmRJblBhZ2VNYXRjaFJlY3RzCisKKyAgICAgICAgKiBzcmMv
RmluZEluUGFnZUNvb3JkaW5hdGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y29udGFpbmluZ1Nj
cm9sbGFibGUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6dG9Ob3JtYWxp
emVkUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OmZpbmRJblBhZ2VSZWN0RnJvbUFic29sdXRlUmVj
dCk6CisgICAgICAgICogdGVzdHMvV2ViRnJhbWVUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9k
YXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5odG1sOgorCiAyMDEyLTEyLTA3ICBMZXZpIFdlaW50cmF1
YiAgPGxldml3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdHJhY2tp
bmcgaGl0IHRlc3QgcmVjdGFuZ2xlcyB0byBlbmFibGUgZmFzdCBldmVudCByZWplY3Rpb24gaW4g
dGhlIGNvbXBvc2l0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Zp
bmRJblBhZ2VDb29yZGluYXRlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GaW5k
SW5QYWdlQ29vcmRpbmF0ZXMuY3BwCmluZGV4IDVkYmZhY2MyMzFkOGNiYTMxYzcyZTBiODk5MzEw
YWZjMzI3ZDUwYzYuLmRlMmUxMDQ2ZTU2ZmFiNjhhYzZjMjAxMjYxOWQ0MWYyNDNhMDM3MzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZpbmRJblBhZ2VDb29yZGluYXRl
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRmluZEluUGFnZUNvb3JkaW5h
dGVzLmNwcApAQCAtNDksMTEgKzQ5LDIxIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIEZsb2F0UmVjdCB0b05vcm1hbGl6ZWRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVSZWN0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQorc3RhdGljIGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluaW5nU2Nyb2xsYWJsZShjb25zdCBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIC8vIFRyYWNlIHVwIHRoZSBjb250YWluaW5n
QmxvY2tzIHVudGlsIHdlIHJlYWNoIGVpdGhlciB0aGUgcmVuZGVyIHZpZXcgb3IgYSBzY3JvbGxh
YmxlIG9iamVjdC4KKyAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBkbyB7CisgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPmNvbnRhaW5p
bmdCbG9jaygpOworICAgIH0gd2hpbGUgKCFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYg
IXJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFJlbmRlckJsb2NrKj4ocmVuZGVyZXIpOworfQorCitzdGF0aWMgRmxvYXRSZWN0IHRvTm9ybWFs
aXplZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGNvbnN0IFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiB7CiAgICAgQVNTRVJU
KHJlbmRlcmVyKTsKIAotICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIgPSByZW5kZXJl
ci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgQVNTRVJUKGNvbnRhaW5lciB8fCByZW5kZXJlci0+
aXNSZW5kZXJWaWV3KCkpOwogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm4gRmxv
YXRSZWN0KCk7CkBAIC05MiwyMiArMTAyLDI1IEBAIEZsb2F0UmVjdCBmaW5kSW5QYWdlUmVjdEZy
b21BYnNvbHV0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IFJlbmRlCiAg
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAgIC8vIE5vcm1hbGl6ZSB0aGUgaW5wdXQg
cmVjdCB0byBpdHMgY29udGFpbmVyIGJsb2NrLgotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkUmVj
dCA9IHRvTm9ybWFsaXplZFJlY3QoaW5wdXRSZWN0LCBiYXNlUmVuZGVyZXIpOworICAgIGNvbnN0
IFJlbmRlckJsb2NrKiBiYXNlQ29udGFpbmVyID0gY29udGFpbmluZ1Njcm9sbGFibGUoYmFzZVJl
bmRlcmVyKTsKKyAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZFJlY3QgPSB0b05vcm1hbGl6ZWRSZWN0
KGlucHV0UmVjdCwgYmFzZVJlbmRlcmVyLCBiYXNlQ29udGFpbmVyKTsKIAogICAgIC8vIEdvIHVw
IGFjcm9zcyBmcmFtZXMuCi0gICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
YmFzZVJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsgcmVuZGVyZXI7ICkgeworICAgIGZvciAo
Y29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGJhc2VDb250YWluZXI7IHJlbmRlcmVyOyAp
IHsKIAogICAgICAgICAvLyBHbyB1cCB0aGUgcmVuZGVyIHRyZWUgdW50aWwgd2UgcmVhY2ggdGhl
IHJvb3Qgb2YgdGhlIGN1cnJlbnQgZnJhbWUgKHRoZSBSZW5kZXJWaWV3KS4KLSAgICAgICAgZm9y
IChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyID0gcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9j
aygpOyBjb250YWluZXI7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBjb250YWluZXIsIGNv
bnRhaW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKKyAgICAgICAgZm9yIChj
b25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyID0gY29udGFpbmluZ1Njcm9sbGFibGUocmVuZGVy
ZXIpOyBjb250YWluZXI7CisgICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluaW5nU2Nyb2xs
YWJsZShjb250YWluZXIpKSB7CiAKICAgICAgICAgICAgIC8vIENvbXBvc2UgdGhlIG5vcm1hbGl6
ZWQgcmVjdHMuCi0gICAgICAgICAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZEJveFJlY3QgPSB0b05v
cm1hbGl6ZWRSZWN0KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLCByZW5kZXJl
cik7CisgICAgICAgICAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZEJveFJlY3QgPSB0b05vcm1hbGl6
ZWRSZWN0KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLCByZW5kZXJlciwgY29u
dGFpbmVyKTsKICAgICAgICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNjYWxlKG5vcm1hbGl6ZWRCb3hS
ZWN0LndpZHRoKCksIG5vcm1hbGl6ZWRCb3hSZWN0LmhlaWdodCgpKTsKICAgICAgICAgICAgIG5v
cm1hbGl6ZWRSZWN0Lm1vdmVCeShub3JtYWxpemVkQm94UmVjdC5sb2NhdGlvbigpKTsKIAogICAg
ICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9ybWFsaXplZFJlY3Q7CisKKyAgICAgICAgICAgIHJlbmRlcmVyID0gY29udGFpbmVy
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gSnVtcCB0byB0aGUgcmVuZGVyZXIgb3duaW5nIHRo
ZSBmcmFtZSwgaWYgYW55LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJGcmFtZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFt
ZVRlc3QuY3BwCmluZGV4IDI5ZTBmMGI2Y2IxNGFkNmM5NjhiOTRmNWI2MzU2MGEwNjdlNjExMDIu
LmJkMGVkMWYwYWFhZWY2MWFkNTIxOWY5NWRlY2Y4ODkwZjg2ZTRjYjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKQEAgLTEwNzQsNyArMTA3NCw3
IEBAIFRFU1RfRihXZWJGcmFtZVRlc3QsIEZpbmRJblBhZ2VNYXRjaFJlY3RzKQogCiAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGtGaW5kU3RyaW5nID0gInJlc3VsdCI7CiAgICAgc3RhdGljIGNvbnN0
IGludCBrRmluZElkZW50aWZpZXIgPSAxMjM0NTsKLSAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1S
ZXN1bHRzID0gMTY7CisgICAgc3RhdGljIGNvbnN0IGludCBrTnVtUmVzdWx0cyA9IDE3OwogCiAg
ICAgV2ViRmluZE9wdGlvbnMgb3B0aW9uczsKICAgICBXZWJTdHJpbmcgc2VhcmNoVGV4dCA9IFdl
YlN0cmluZzo6ZnJvbVVURjgoa0ZpbmRTdHJpbmcpOwpAQCAtMTE2NSw2ICsxMTY1LDkgQEAgVEVT
VF9GKFdlYkZyYW1lVGVzdCwgRmluZEluUGFnZU1hdGNoUmVjdHMpCiAgICAgRVhQRUNUX1RSVUUo
d2ViTWF0Y2hSZWN0c1sxM10ueSA8IHdlYk1hdGNoUmVjdHNbMTJdLnkpOwogICAgIEVYUEVDVF9U
UlVFKHdlYk1hdGNoUmVjdHNbMTJdLnkgPCB3ZWJNYXRjaFJlY3RzWzE0XS55KTsKIAorICAgIC8v
IFJlc3VsdCAxNiBzaG91bGQgYmUgYmVsb3cgUmVzdWx0IDE1LgorICAgIEVYUEVDVF9UUlVFKHdl
Yk1hdGNoUmVjdHNbMTVdLnkgPiB3ZWJNYXRjaFJlY3RzWzE0XS55KTsKKwogICAgIC8vIFJlc2l6
aW5nIHNob3VsZCB1cGRhdGUgdGhlIHJlY3RzIHZlcnNpb24uCiAgICAgd2ViVmlldy0+cmVzaXpl
KFdlYlNpemUoODAwLCA2MDApKTsKICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuQWxsUGVuZGluZ01l
c3NhZ2VzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
ZmluZF9pbl9wYWdlX2ZyYW1lLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvZmluZF9pbl9wYWdlX2ZyYW1lLmh0bWwKaW5kZXggYTkyMmE1MGJjZTdjYzQ0Y2U4MjRiMWYw
ODE1MzEyMTc5NTAyZjQ0ZS4uMjlmZjkxZmY5OTU1OGM0MzU4MjAwNGYwMzc3YmU0N2M1YTMyNmNm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2ZpbmRfaW5f
cGFnZV9mcmFtZS5odG1sCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9m
aW5kX2luX3BhZ2VfZnJhbWUuaHRtbApAQCAtNzEsNSArNzEsMTAgQEAgcmVzdWx0IDEwCiA8L3Ry
PgogPC90YWJsZT4KIHJlc3VsdCAxNQorPGRpdiBzdHlsZT0iaGVpZ2h0OjBweCI+CisgIDxkaXYg
c3R5bGU9ImZsb2F0OmxlZnQ7Ij4KKyAgICByZXN1bHQgMTYKKyAgPC9kaXY+Cis8L2Rpdj4KIDwv
Ym9keT4KIDwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179490</attachid>
            <date>2012-12-14 09:08:43 -0800</date>
            <delta_ts>2012-12-19 06:15:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104924-20121214170602.patch</filename>
            <type>text/plain</type>
            <size>5657</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGZjZDU1ZWU5MGYwZTM4ZTc2Y2E1MDNjMjNjNTRmMDJkY2YxN2ZmYWIuLmQ1YzRkY2MwODg2Y2Yy
Y2JiYzQ3NzIzMGUxMGRmZmFkZGU2N2IxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTItMTItMTMgIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBGaXggZmluZCBpbiBwYWdlIHJlY3Rz
IGZvciBvdmVyZmxvd2luZyBjb250ZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSWYgYSBkaXYgaGFzIG92ZXJmbG93aW5nIGNvbnRlbnQsIHdlIHNo
b3VsZCBvbmx5IG5vcm1hbGlzZSBpdHMKKyAgICAgICAgY29vcmRpbmF0ZXMgYWdhaW5zdCB0aGUg
cmVuZGVydmlldyBvciB0aGUgY29udGFpbmluZyBzY3JvbGxhYmxlIGJsb2NrLgorCisgICAgICAg
IFRFU1Q9V2ViRnJhbWVUZXN0LkZpbmRJblBhZ2VNYXRjaFJlY3RzCisKKyAgICAgICAgKiBzcmMv
RmluZEluUGFnZUNvb3JkaW5hdGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y29udGFpbmluZ1Nj
cm9sbGFibGUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6dG9Ob3JtYWxp
emVkUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OmZpbmRJblBhZ2VSZWN0RnJvbUFic29sdXRlUmVj
dCk6CisgICAgICAgICogdGVzdHMvV2ViRnJhbWVUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9k
YXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5odG1sOgorCiAyMDEyLTEyLTEzICBUaWVuLVJlbiBDaGVu
ICA8dHJjaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBEb24ndCBjb25zaWRlciBjb250YWlu
ZXIgbm9kZXMgb2Ygb3RoZXIgZGlzYW1iaWd1YXRlZCBub2RlcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRmluZEluUGFnZUNvb3JkaW5hdGVzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0ZpbmRJblBhZ2VDb29yZGluYXRlcy5jcHAKaW5kZXggNWRiZmFj
YzIzMWQ4Y2JhMzFjNzJlMGI4OTkzMTBhZmMzMjdkNTBjNi4uZGUyZTEwNDZlNTZmYWI2OGFjNmMy
MDEyNjE5ZDQxZjI0M2EwMzczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvRmluZEluUGFnZUNvb3JkaW5hdGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9GaW5kSW5QYWdlQ29vcmRpbmF0ZXMuY3BwCkBAIC00OSwxMSArNDksMjEgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgRmxvYXRS
ZWN0IHRvTm9ybWFsaXplZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRh
aW5pbmdTY3JvbGxhYmxlKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgLy8g
VHJhY2UgdXAgdGhlIGNvbnRhaW5pbmdCbG9ja3MgdW50aWwgd2UgcmVhY2ggZWl0aGVyIHRoZSBy
ZW5kZXIgdmlldyBvciBhIHNjcm9sbGFibGUgb2JqZWN0LgorICAgIGlmIChyZW5kZXJlci0+aXNS
ZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGRvIHsKKyAgICAgICAgcmVuZGVy
ZXIgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgfSB3aGlsZSAoIXJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVuZGVyZXItPmlzUmVuZGVyVmlldygpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQmxvY2sqPihyZW5kZXJlcik7Cit9CisKK3N0
YXRpYyBGbG9hdFJlY3QgdG9Ob3JtYWxpemVkUmVjdChjb25zdCBGbG9hdFJlY3QmIGFic29sdXRl
UmVjdCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyQmxvY2sqIGNv
bnRhaW5lcikKIHsKICAgICBBU1NFUlQocmVuZGVyZXIpOwogCi0gICAgY29uc3QgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lciA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKICAgICBBU1NFUlQo
Y29udGFpbmVyIHx8IHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSk7CiAgICAgaWYgKCFjb250YWlu
ZXIpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKQEAgLTkyLDIyICsxMDIsMjUgQEAgRmxv
YXRSZWN0IGZpbmRJblBhZ2VSZWN0RnJvbUFic29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIGlu
cHV0UmVjdCwgY29uc3QgUmVuZGUKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCiAgICAg
Ly8gTm9ybWFsaXplIHRoZSBpbnB1dCByZWN0IHRvIGl0cyBjb250YWluZXIgYmxvY2suCi0gICAg
RmxvYXRSZWN0IG5vcm1hbGl6ZWRSZWN0ID0gdG9Ob3JtYWxpemVkUmVjdChpbnB1dFJlY3QsIGJh
c2VSZW5kZXJlcik7CisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGJhc2VDb250YWluZXIgPSBjb250
YWluaW5nU2Nyb2xsYWJsZShiYXNlUmVuZGVyZXIpOworICAgIEZsb2F0UmVjdCBub3JtYWxpemVk
UmVjdCA9IHRvTm9ybWFsaXplZFJlY3QoaW5wdXRSZWN0LCBiYXNlUmVuZGVyZXIsIGJhc2VDb250
YWluZXIpOwogCiAgICAgLy8gR28gdXAgYWNyb3NzIGZyYW1lcy4KLSAgICBmb3IgKGNvbnN0IFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBiYXNlUmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpOyBy
ZW5kZXJlcjsgKSB7CisgICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gYmFz
ZUNvbnRhaW5lcjsgcmVuZGVyZXI7ICkgewogCiAgICAgICAgIC8vIEdvIHVwIHRoZSByZW5kZXIg
dHJlZSB1bnRpbCB3ZSByZWFjaCB0aGUgcm9vdCBvZiB0aGUgY3VycmVudCBmcmFtZSAodGhlIFJl
bmRlclZpZXcpLgotICAgICAgICBmb3IgKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIgPSBy
ZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7IGNvbnRhaW5lcjsKLSAgICAgICAgICAgICAgICBy
ZW5kZXJlciA9IGNvbnRhaW5lciwgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxv
Y2soKSkgeworICAgICAgICBmb3IgKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIgPSBjb250
YWluaW5nU2Nyb2xsYWJsZShyZW5kZXJlcik7IGNvbnRhaW5lcjsKKyAgICAgICAgICAgIGNvbnRh
aW5lciA9IGNvbnRhaW5pbmdTY3JvbGxhYmxlKGNvbnRhaW5lcikpIHsKIAogICAgICAgICAgICAg
Ly8gQ29tcG9zZSB0aGUgbm9ybWFsaXplZCByZWN0cy4KLSAgICAgICAgICAgIEZsb2F0UmVjdCBu
b3JtYWxpemVkQm94UmVjdCA9IHRvTm9ybWFsaXplZFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91
bmRpbmdCb3hSZWN0KCksIHJlbmRlcmVyKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBub3JtYWxp
emVkQm94UmVjdCA9IHRvTm9ybWFsaXplZFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdC
b3hSZWN0KCksIHJlbmRlcmVyLCBjb250YWluZXIpOwogICAgICAgICAgICAgbm9ybWFsaXplZFJl
Y3Quc2NhbGUobm9ybWFsaXplZEJveFJlY3Qud2lkdGgoKSwgbm9ybWFsaXplZEJveFJlY3QuaGVp
Z2h0KCkpOwogICAgICAgICAgICAgbm9ybWFsaXplZFJlY3QubW92ZUJ5KG5vcm1hbGl6ZWRCb3hS
ZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlY3QuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVkUmVjdDsKKworICAgICAgICAg
ICAgcmVuZGVyZXIgPSBjb250YWluZXI7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBKdW1wIHRv
IHRoZSByZW5kZXJlciBvd25pbmcgdGhlIGZyYW1lLCBpZiBhbnkuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKaW5kZXggMjYwMjBmNzhkMGM5MmZlYTZi
N2U2M2ZiMzZmYWVkZTliNTMzZDZiZi4uMDcyODYwYWE5ZDM5YjYwZGRjZmRkNzg3MWQ3NGNjZjk5
MmJmMjg0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFt
ZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0
LmNwcApAQCAtMTA3NCw3ICsxMDc0LDcgQEAgVEVTVF9GKFdlYkZyYW1lVGVzdCwgRmluZEluUGFn
ZU1hdGNoUmVjdHMpCiAKICAgICBzdGF0aWMgY29uc3QgY2hhcioga0ZpbmRTdHJpbmcgPSAicmVz
dWx0IjsKICAgICBzdGF0aWMgY29uc3QgaW50IGtGaW5kSWRlbnRpZmllciA9IDEyMzQ1OwotICAg
IHN0YXRpYyBjb25zdCBpbnQga051bVJlc3VsdHMgPSAxNjsKKyAgICBzdGF0aWMgY29uc3QgaW50
IGtOdW1SZXN1bHRzID0gMTc7CiAKICAgICBXZWJGaW5kT3B0aW9ucyBvcHRpb25zOwogICAgIFdl
YlN0cmluZyBzZWFyY2hUZXh0ID0gV2ViU3RyaW5nOjpmcm9tVVRGOChrRmluZFN0cmluZyk7CkBA
IC0xMTY1LDYgKzExNjUsOSBAQCBURVNUX0YoV2ViRnJhbWVUZXN0LCBGaW5kSW5QYWdlTWF0Y2hS
ZWN0cykKICAgICBFWFBFQ1RfVFJVRSh3ZWJNYXRjaFJlY3RzWzEzXS55IDwgd2ViTWF0Y2hSZWN0
c1sxMl0ueSk7CiAgICAgRVhQRUNUX1RSVUUod2ViTWF0Y2hSZWN0c1sxMl0ueSA8IHdlYk1hdGNo
UmVjdHNbMTRdLnkpOwogCisgICAgLy8gUmVzdWx0IDE2IHNob3VsZCBiZSBiZWxvdyByZXN1bHQg
MTUuCisgICAgRVhQRUNUX1RSVUUod2ViTWF0Y2hSZWN0c1sxNV0ueSA+IHdlYk1hdGNoUmVjdHNb
MTRdLnkpOworCiAgICAgLy8gUmVzaXppbmcgc2hvdWxkIHVwZGF0ZSB0aGUgcmVjdHMgdmVyc2lv
bi4KICAgICB3ZWJWaWV3LT5yZXNpemUoV2ViU2l6ZSg4MDAsIDYwMCkpOwogICAgIHdlYmtpdF9z
dXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9maW5kX2luX3BhZ2VfZnJhbWUuaHRtbCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9maW5kX2luX3BhZ2VfZnJhbWUuaHRtbAppbmRleCBh
OTIyYTUwYmNlN2NjNDRjZTgyNGIxZjA4MTUzMTIxNzk1MDJmNDRlLi40OGEzZWQ2MTAwYmM3ZDY5
MGFmZDQxMTMxYTliZjM3ZDZkNmRmYjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvZmluZF9pbl9wYWdlX2ZyYW1lLmh0bWwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5odG1sCkBAIC03MSw1ICs3
MSwxMiBAQCByZXN1bHQgMTAKIDwvdHI+CiA8L3RhYmxlPgogcmVzdWx0IDE1Cis8ZGl2IGNsYXNz
PSJ0cmFuc2Zvcm0iPgorPGRpdiBzdHlsZT0iaGVpZ2h0OjBweCI+CisgIDxkaXYgc3R5bGU9ImZs
b2F0OmxlZnQ7Ij4KKyAgICByZXN1bHQgMTYKKyAgPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgogPC9i
b2R5PgogPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180152</attachid>
            <date>2012-12-19 06:15:08 -0800</date>
            <delta_ts>2013-01-29 10:27:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104924-20121219141224.patch</filename>
            <type>text/plain</type>
            <size>6989</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDkzYzdkYTMwNGI0ZDA1MGQ3ODg3YWJlOWE1MDVmMzFjZjVkOThmMzguLjA4ZjQ2OWRhOGIzMmJj
N2I5NzBlZDM1YTJjOWYwMjMwMjBjZGJlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTItMTItMTMgIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBGaXggZmluZCBpbiBwYWdlIHJlY3Rz
IGZvciBvdmVyZmxvd2luZyBjb250ZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSWYgYSBkaXYgaGFzIG92ZXJmbG93aW5nIGNvbnRlbnQsIHdlIHNo
b3VsZCBvbmx5IG5vcm1hbGlzZSBpdHMKKyAgICAgICAgY29vcmRpbmF0ZXMgYWdhaW5zdCB0aGUg
cmVuZGVydmlldyBvciB0aGUgY29udGFpbmluZyBzY3JvbGxhYmxlIGJsb2NrLgorCisgICAgICAg
IFRFU1Q9V2ViRnJhbWVUZXN0LkZpbmRJblBhZ2VNYXRjaFJlY3RzCisKKyAgICAgICAgKiBzcmMv
RmluZEluUGFnZUNvb3JkaW5hdGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y29udGFpbmluZ1Nj
cm9sbGFibGUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6dG9Ob3JtYWxp
emVkUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OmZpbmRJblBhZ2VSZWN0RnJvbUFic29sdXRlUmVj
dCk6CisgICAgICAgICogdGVzdHMvV2ViRnJhbWVUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9k
YXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5odG1sOgorCiAyMDEyLTEyLTE4ICBJbHlhIFRpa2hvbm92
c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMTM4MDYxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRmlu
ZEluUGFnZUNvb3JkaW5hdGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZpbmRJ
blBhZ2VDb29yZGluYXRlcy5jcHAKaW5kZXggMTQ5MmJhZjE1MmQxM2I3MTM5ZDU2ZDg4OGE5YmYw
ZTlhYWMzOWNmMS4uODYyYjQwN2I0ZGNkNWI2OWE0ZDVmNzQzYTIxYTVjN2M0YjVhMjE5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRmluZEluUGFnZUNvb3JkaW5hdGVz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GaW5kSW5QYWdlQ29vcmRpbmF0
ZXMuY3BwCkBAIC00OSwxMSArNDksMTkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgRmxvYXRSZWN0IHRvTm9ybWFsaXplZFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CitzdGF0aWMgY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdTY3JvbGxhYmxlKGNvbnN0IFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgLy8gVHJhY2UgdXAgdGhlIGNvbnRhaW5pbmdC
bG9ja3MgdW50aWwgd2UgcmVhY2ggZWl0aGVyIHRoZSByZW5kZXIgdmlldyBvciBhIHNjcm9sbGFi
bGUgb2JqZWN0LgorICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIgPSByZW5kZXJlci0+
Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgd2hpbGUgKGNvbnRhaW5lciAmJiAhY29udGFpbmVyLT5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAhY29udGFpbmVyLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAg
Y29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2soKTsKKyAgICByZXR1cm4gY29u
dGFpbmVyOworfQorCitzdGF0aWMgRmxvYXRSZWN0IHRvTm9ybWFsaXplZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IFJlbmRlckJsb2NrKiBjb250YWluZXIpCiB7CiAgICAgQVNTRVJUKHJlbmRlcmVyKTsKIAotICAg
IGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2Nr
KCk7CiAgICAgQVNTRVJUKGNvbnRhaW5lciB8fCByZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkpOwog
ICAgIGlmICghY29udGFpbmVyKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC05Miwy
MiArMTAwLDI0IEBAIEZsb2F0UmVjdCBmaW5kSW5QYWdlUmVjdEZyb21BYnNvbHV0ZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IFJlbmRlCiAgICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKIAogICAgIC8vIE5vcm1hbGl6ZSB0aGUgaW5wdXQgcmVjdCB0byBpdHMgY29udGFp
bmVyIGJsb2NrLgotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkUmVjdCA9IHRvTm9ybWFsaXplZFJl
Y3QoaW5wdXRSZWN0LCBiYXNlUmVuZGVyZXIpOworICAgIGNvbnN0IFJlbmRlckJsb2NrKiBiYXNl
Q29udGFpbmVyID0gY29udGFpbmluZ1Njcm9sbGFibGUoYmFzZVJlbmRlcmVyKTsKKyAgICBGbG9h
dFJlY3Qgbm9ybWFsaXplZFJlY3QgPSB0b05vcm1hbGl6ZWRSZWN0KGlucHV0UmVjdCwgYmFzZVJl
bmRlcmVyLCBiYXNlQ29udGFpbmVyKTsKIAogICAgIC8vIEdvIHVwIGFjcm9zcyBmcmFtZXMuCi0g
ICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gYmFzZVJlbmRlcmVyLT5jb250
YWluaW5nQmxvY2soKTsgcmVuZGVyZXI7ICkgeworICAgIGZvciAoY29uc3QgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGJhc2VDb250YWluZXI7IHJlbmRlcmVyOyApIHsKIAogICAgICAgICAvLyBH
byB1cCB0aGUgcmVuZGVyIHRyZWUgdW50aWwgd2UgcmVhY2ggdGhlIHJvb3Qgb2YgdGhlIGN1cnJl
bnQgZnJhbWUgKHRoZSBSZW5kZXJWaWV3KS4KLSAgICAgICAgZm9yIChjb25zdCBSZW5kZXJCbG9j
ayogY29udGFpbmVyID0gcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpOyBjb250YWluZXI7Ci0g
ICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBjb250YWluZXIsIGNvbnRhaW5lciA9IGNvbnRhaW5l
ci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBSZW5kZXJCbG9jayog
Y29udGFpbmVyID0gY29udGFpbmluZ1Njcm9sbGFibGUocmVuZGVyZXIpOyBjb250YWluZXI7IGNv
bnRhaW5lciA9IGNvbnRhaW5pbmdTY3JvbGxhYmxlKGNvbnRhaW5lcikpIHsKIAogICAgICAgICAg
ICAgLy8gQ29tcG9zZSB0aGUgbm9ybWFsaXplZCByZWN0cy4KLSAgICAgICAgICAgIEZsb2F0UmVj
dCBub3JtYWxpemVkQm94UmVjdCA9IHRvTm9ybWFsaXplZFJlY3QocmVuZGVyZXItPmFic29sdXRl
Qm91bmRpbmdCb3hSZWN0KCksIHJlbmRlcmVyKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBub3Jt
YWxpemVkQm94UmVjdCA9IHRvTm9ybWFsaXplZFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRp
bmdCb3hSZWN0KCksIHJlbmRlcmVyLCBjb250YWluZXIpOwogICAgICAgICAgICAgbm9ybWFsaXpl
ZFJlY3Quc2NhbGUobm9ybWFsaXplZEJveFJlY3Qud2lkdGgoKSwgbm9ybWFsaXplZEJveFJlY3Qu
aGVpZ2h0KCkpOwogICAgICAgICAgICAgbm9ybWFsaXplZFJlY3QubW92ZUJ5KG5vcm1hbGl6ZWRC
b3hSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlY3QuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVkUmVjdDsKKworICAgICAg
ICAgICAgcmVuZGVyZXIgPSBjb250YWluZXI7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBKdW1w
IHRvIHRoZSByZW5kZXJlciBvd25pbmcgdGhlIGZyYW1lLCBpZiBhbnkuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKaW5kZXggMjYwMjBmNzhkMGM5MmZl
YTZiN2U2M2ZiMzZmYWVkZTliNTMzZDZiZi4uYjc1YTFjNzBiNWM4YWU5ZmY2MjEwZWY2ZmVhM2Yz
MGU4M2IyM2E1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJG
cmFtZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVU
ZXN0LmNwcApAQCAtOTA0LDYgKzkwNCwxMyBAQCBURVNUX0YoV2ViRnJhbWVUZXN0LCBGaW5kSW5Q
YWdlKQogICAgIC8vICJiYXI0IiBpcyBzdXJyb3VuZGVkIGJ5IDxzcGFuPiwgYnV0IHRoZSBmb2N1
c2FibGUgbm9kZSBzaG91bGQgYmUgdGhlIHBhcmVudCA8ZGl2Pi4KICAgICBFWFBFQ1RfRVEoV2Vi
U3RyaW5nOjpmcm9tVVRGOCgiRElWIiksIGZyYW1lLT5kb2N1bWVudCgpLmZvY3VzZWROb2RlKCku
bm9kZU5hbWUoKSk7CiAKKyAgICAvLyBGaW5kIGluIDxzZWxlY3Q+IGNvbnRlbnQuIEV4cGVjdCBu
b3QgdG8gZmluZCBhbnkgbWF0Y2hlcy4KKyAgICBFWFBFQ1RfRkFMU0UoZnJhbWUtPmZpbmQoZmlu
ZElkZW50aWZpZXIsIFdlYlN0cmluZzo6ZnJvbVVURjgoImJhcjUiKSwgb3B0aW9ucywgZmFsc2Us
IDApKTsKKyAgICAvLyBDb25maXJtIHN0b3BGaW5kaW5nKGZhbHNlKSBjbGVhcnMgdGhlIHNlbGVj
dGlvbi4KKyAgICBmcmFtZS0+c3RvcEZpbmRpbmcoZmFsc2UpOworICAgIHJhbmdlID0gZnJhbWUt
PnNlbGVjdGlvblJhbmdlKCk7CisgICAgQVNTRVJUX1RSVUUocmFuZ2UuaXNOdWxsKCkpOworCiAg
ICAgd2ViVmlldy0+Y2xvc2UoKTsKIH0KIApAQCAtMTA3Miw5ICsxMDc5LDEwIEBAIFRFU1RfRihX
ZWJGcmFtZVRlc3QsIEZpbmRJblBhZ2VNYXRjaFJlY3RzKQogICAgIHdlYlZpZXctPmxheW91dCgp
OwogICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKIAorICAgIC8v
IE5vdGUgdGhhdCB0aGUgJ3Jlc3VsdCAxNycgaW4gdGhlIDxzZWxlY3Q+IGVsZW1lbnQgaXMgbm90
IGV4cGVjdGVkIHRvIHByb2R1Y2UgYSBtYXRjaC4KICAgICBzdGF0aWMgY29uc3QgY2hhcioga0Zp
bmRTdHJpbmcgPSAicmVzdWx0IjsKICAgICBzdGF0aWMgY29uc3QgaW50IGtGaW5kSWRlbnRpZmll
ciA9IDEyMzQ1OwotICAgIHN0YXRpYyBjb25zdCBpbnQga051bVJlc3VsdHMgPSAxNjsKKyAgICBz
dGF0aWMgY29uc3QgaW50IGtOdW1SZXN1bHRzID0gMTc7CiAKICAgICBXZWJGaW5kT3B0aW9ucyBv
cHRpb25zOwogICAgIFdlYlN0cmluZyBzZWFyY2hUZXh0ID0gV2ViU3RyaW5nOjpmcm9tVVRGOChr
RmluZFN0cmluZyk7CkBAIC0xMTY1LDYgKzExNzMsOSBAQCBURVNUX0YoV2ViRnJhbWVUZXN0LCBG
aW5kSW5QYWdlTWF0Y2hSZWN0cykKICAgICBFWFBFQ1RfVFJVRSh3ZWJNYXRjaFJlY3RzWzEzXS55
IDwgd2ViTWF0Y2hSZWN0c1sxMl0ueSk7CiAgICAgRVhQRUNUX1RSVUUod2ViTWF0Y2hSZWN0c1sx
Ml0ueSA8IHdlYk1hdGNoUmVjdHNbMTRdLnkpOwogCisgICAgLy8gUmVzdWx0IDE2IHNob3VsZCBi
ZSBiZWxvdyByZXN1bHQgMTUuCisgICAgRVhQRUNUX1RSVUUod2ViTWF0Y2hSZWN0c1sxNV0ueSA+
IHdlYk1hdGNoUmVjdHNbMTRdLnkpOworCiAgICAgLy8gUmVzaXppbmcgc2hvdWxkIHVwZGF0ZSB0
aGUgcmVjdHMgdmVyc2lvbi4KICAgICB3ZWJWaWV3LT5yZXNpemUoV2ViU2l6ZSg4MDAsIDYwMCkp
OwogICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9maW5kLmh0bWwgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvZmluZC5odG1sCmluZGV4IDk1MmM4MjNmYjdiZGMx
MjhmODQxODQ0NWZmNTk1YmRlOTdlNTQyMTUuLmNmODcwMDNiMWFlYTk1Y2MyOTk0MGY2NmRjZWU2
ODlkM2MxN2NkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9maW5kLmh0bWwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2ZpbmQu
aHRtbApAQCAtMyw0ICszLDcgQEAKIDxpbnB1dCB2YWx1ZT0iZm9vMiBiYXIyIGJhejIiPgogPHRl
eHRhcmVhPmZvbzMgYmFyMyBiYXozPC90ZXh0YXJlYT4KIDxkaXYgY29udGVudEVkaXRhYmxlPSJ0
cnVlIj5mb280IDxzcGFuPmJhcjQ8L3NwYW4+IGJhejQ8L2Rpdj4KKzxzZWxlY3Q+Cis8b3B0aW9u
IHZhbHVlPSJmb281Ij5iYXI1PC9vcHRpb24+Cis8L3NlbGVjdD4KIDwvYm9keT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9maW5kX2luX3BhZ2VfZnJhbWUu
aHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9maW5kX2luX3BhZ2VfZnJh
bWUuaHRtbAppbmRleCBhOTIyYTUwYmNlN2NjNDRjZTgyNGIxZjA4MTUzMTIxNzk1MDJmNDRlLi42
OTcxOWNhNjRhOGViYWZmNzJlNzFjMmI2MTUxMWYxNjVkZTA4MmJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvZmluZF9pbl9wYWdlX2ZyYW1lLmh0bWwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5o
dG1sCkBAIC03MSw1ICs3MSwxNiBAQCByZXN1bHQgMTAKIDwvdHI+CiA8L3RhYmxlPgogcmVzdWx0
IDE1Cis8ZGl2IGNsYXNzPSJ0cmFuc2Zvcm0iPgorPGRpdiBzdHlsZT0iaGVpZ2h0OjBweCI+Cisg
IDxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7Ij4KKyAgICByZXN1bHQgMTYKKyAgPC9kaXY+Cis8L2Rp
dj4KKzwvZGl2PgorPCEtLSBUZXN0cyB0aGF0IHdpbGwgbm90IHlpZWxkIG1hdGNoZXMgc2hvdWxk
IGdvIGJlbG93IHRoaXMgbGluZS4gLS0+Cis8c2VsZWN0PgorPG9wdGlvbj5yZXN1bHQgMTc8L29w
dGlvbj4KKzwvc2VsZWN0PgogPC9ib2R5PgogPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185240</attachid>
            <date>2013-01-29 07:24:20 -0800</date>
            <delta_ts>2013-01-29 10:27:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104924-20130129152106.patch</filename>
            <type>text/plain</type>
            <size>8508</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDU3MmRlYmI5YjFhMDdkYmIwNDQ0MDY4NmRlYTY3YTY3YzgxZWQ3ZDEuLjg1ZTRlNDI5YjkwMWNk
YzFjZjdhMTQ5NzhkZDVmN2YxMTgwMWNiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTMtMDEtMjkgIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBGaXggZmluZCBpbiBwYWdlIHJlY3Rz
IGZvciBvdmVyZmxvd2luZyBjb250ZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSWYgYSBkaXYgaGFzIG92ZXJmbG93aW5nIGNvbnRlbnQsIHdlIHNo
b3VsZCBvbmx5IG5vcm1hbGlzZSBpdHMKKyAgICAgICAgY29vcmRpbmF0ZXMgYWdhaW5zdCB0aGUg
cmVuZGVydmlldyBvciB0aGUgY29udGFpbmluZyBzY3JvbGxhYmxlIGJsb2NrLgorCisgICAgICAg
IFRFU1Q9V2ViRnJhbWVUZXN0LkZpbmRJblBhZ2VNYXRjaFJlY3RzCisKKyAgICAgICAgKiBzcmMv
RmluZEluUGFnZUNvb3JkaW5hdGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZW5jbG9zaW5nU2Ny
b2xsYWJsZUFuY2VzdG9yKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OnRv
Tm9ybWFsaXplZFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpmaW5kSW5QYWdlUmVjdEZyb21BYnNv
bHV0ZVJlY3QpOgorICAgICAgICAqIHRlc3RzL1dlYkZyYW1lVGVzdC5jcHA6CisgICAgICAgICog
dGVzdHMvZGF0YS9maW5kLmh0bWw6CisgICAgICAgICogdGVzdHMvZGF0YS9maW5kX2luX3BhZ2Vf
ZnJhbWUuaHRtbDoKKwogMjAxMy0wMS0yOCAgTWFyamEgSMO2bHR0w6QgIDxtYXJqYUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgQWRkIGFuIEFQSSBmb3IgcmV0cmlldmluZyBuYXRpdmUgbWVtb3J5
IGluZm9ybWF0aW9uIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgcmVtb3RlIGluc3BlY3Rpbmcg
cHJvdG9jb2wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZpbmRJblBh
Z2VDb29yZGluYXRlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GaW5kSW5QYWdl
Q29vcmRpbmF0ZXMuY3BwCmluZGV4IDE0OTJiYWYxNTJkMTNiNzEzOWQ1NmQ4ODhhOWJmMGU5YWFj
MzljZjEuLmM0YzUzMzk4NDQwYjNjMjRkZjU1MDdiZTk2M2U2OGJlOGUxOTVhMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZpbmRJblBhZ2VDb29yZGluYXRlcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRmluZEluUGFnZUNvb3JkaW5hdGVzLmNw
cApAQCAtNDksMTEgKzQ5LDE5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotc3RhdGljIEZsb2F0UmVjdCB0b05vcm1hbGl6ZWRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgYWJzb2x1dGVSZWN0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3Rh
dGljIGNvbnN0IFJlbmRlckJsb2NrKiBlbmNsb3NpbmdTY3JvbGxhYmxlQW5jZXN0b3IoY29uc3Qg
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICAvLyBUcmFjZSB1cCB0aGUgY29udGFpbmlu
Z0Jsb2NrcyB1bnRpbCB3ZSByZWFjaCBlaXRoZXIgdGhlIHJlbmRlciB2aWV3IG9yIGEgc2Nyb2xs
YWJsZSBvYmplY3QuCisgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IHJlbmRlcmVy
LT5jb250YWluaW5nQmxvY2soKTsKKyAgICB3aGlsZSAoIWNvbnRhaW5lci0+aGFzT3ZlcmZsb3dD
bGlwKCkgJiYgIWNvbnRhaW5lci0+aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIGNvbnRhaW5lciA9
IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30K
Kworc3RhdGljIEZsb2F0UmVjdCB0b05vcm1hbGl6ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYWJz
b2x1dGVSZWN0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJCbG9j
ayogY29udGFpbmVyKQogewogICAgIEFTU0VSVChyZW5kZXJlcik7CiAKLSAgICBjb25zdCBSZW5k
ZXJCbG9jayogY29udGFpbmVyID0gcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpOwogICAgIEFT
U0VSVChjb250YWluZXIgfHwgcmVuZGVyZXItPmlzUmVuZGVyVmlldygpKTsKICAgICBpZiAoIWNv
bnRhaW5lcikKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwpAQCAtOTIsMjYgKzEwMCwyNSBA
QCBGbG9hdFJlY3QgZmluZEluUGFnZVJlY3RGcm9tQWJzb2x1dGVSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgaW5wdXRSZWN0LCBjb25zdCBSZW5kZQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAK
ICAgICAvLyBOb3JtYWxpemUgdGhlIGlucHV0IHJlY3QgdG8gaXRzIGNvbnRhaW5lciBibG9jay4K
LSAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZFJlY3QgPSB0b05vcm1hbGl6ZWRSZWN0KGlucHV0UmVj
dCwgYmFzZVJlbmRlcmVyKTsKKyAgICBjb25zdCBSZW5kZXJCbG9jayogYmFzZUNvbnRhaW5lciA9
IGVuY2xvc2luZ1Njcm9sbGFibGVBbmNlc3RvcihiYXNlUmVuZGVyZXIpOworICAgIEZsb2F0UmVj
dCBub3JtYWxpemVkUmVjdCA9IHRvTm9ybWFsaXplZFJlY3QoaW5wdXRSZWN0LCBiYXNlUmVuZGVy
ZXIsIGJhc2VDb250YWluZXIpOwogCiAgICAgLy8gR28gdXAgYWNyb3NzIGZyYW1lcy4KLSAgICBm
b3IgKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBiYXNlUmVuZGVyZXItPmNvbnRhaW5p
bmdCbG9jaygpOyByZW5kZXJlcjsgKSB7CisgICAgZm9yIChjb25zdCBSZW5kZXJCb3gqIHJlbmRl
cmVyID0gYmFzZUNvbnRhaW5lcjsgcmVuZGVyZXI7ICkgewogCiAgICAgICAgIC8vIEdvIHVwIHRo
ZSByZW5kZXIgdHJlZSB1bnRpbCB3ZSByZWFjaCB0aGUgcm9vdCBvZiB0aGUgY3VycmVudCBmcmFt
ZSAodGhlIFJlbmRlclZpZXcpLgotICAgICAgICBmb3IgKGNvbnN0IFJlbmRlckJsb2NrKiBjb250
YWluZXIgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7IGNvbnRhaW5lcjsKLSAgICAgICAg
ICAgICAgICByZW5kZXJlciA9IGNvbnRhaW5lciwgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250
YWluaW5nQmxvY2soKSkgeworICAgICAgICB3aGlsZSAoIXJlbmRlcmVyLT5pc1JlbmRlclZpZXco
KSkgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IGVuY2xvc2lu
Z1Njcm9sbGFibGVBbmNlc3RvcihyZW5kZXJlcik7CiAKICAgICAgICAgICAgIC8vIENvbXBvc2Ug
dGhlIG5vcm1hbGl6ZWQgcmVjdHMuCi0gICAgICAgICAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZEJv
eFJlY3QgPSB0b05vcm1hbGl6ZWRSZWN0KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVj
dCgpLCByZW5kZXJlcik7CisgICAgICAgICAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZEJveFJlY3Qg
PSB0b05vcm1hbGl6ZWRSZWN0KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLCBy
ZW5kZXJlciwgY29udGFpbmVyKTsKICAgICAgICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNjYWxlKG5v
cm1hbGl6ZWRCb3hSZWN0LndpZHRoKCksIG5vcm1hbGl6ZWRCb3hSZWN0LmhlaWdodCgpKTsKICAg
ICAgICAgICAgIG5vcm1hbGl6ZWRSZWN0Lm1vdmVCeShub3JtYWxpemVkQm94UmVjdC5sb2NhdGlv
bigpKTsKIAotICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZFJlY3Q7CisgICAgICAgICAgICByZW5kZXJlciA9
IGNvbnRhaW5lcjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEp1bXAgdG8gdGhlIHJlbmRlcmVy
IG93bmluZyB0aGUgZnJhbWUsIGlmIGFueS4KLSAgICAgICAgQVNTRVJUKHJlbmRlcmVyLT5pc1Jl
bmRlclZpZXcoKSk7CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPmZyYW1lKCkgPyByZW5k
ZXJlci0+ZnJhbWUoKS0+b3duZXJSZW5kZXJlcigpIDogMDsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAppbmRleCBhYmY5MTg2NWI4NDJj
OTdjNzM3MDc2YTliYzNiNmI1ZTAxOTExMDU3Li43ZDliMjQ0MzkxOGIyZGM3ODU3OWZjMjUzMTg5
OWEyZGZiZWRjYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YkZyYW1lVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFt
ZVRlc3QuY3BwCkBAIC05ODYsNiArOTg2LDE0IEBAIFRFU1RfRihXZWJGcmFtZVRlc3QsIEZpbmRJ
blBhZ2UpCiAgICAgLy8gImJhcjQiIGlzIHN1cnJvdW5kZWQgYnkgPHNwYW4+LCBidXQgdGhlIGZv
Y3VzYWJsZSBub2RlIHNob3VsZCBiZSB0aGUgcGFyZW50IDxkaXY+LgogICAgIEVYUEVDVF9FUShX
ZWJTdHJpbmc6OmZyb21VVEY4KCJESVYiKSwgZnJhbWUtPmRvY3VtZW50KCkuZm9jdXNlZE5vZGUo
KS5ub2RlTmFtZSgpKTsKIAorICAgIC8vIEZpbmQgaW4gPHNlbGVjdD4gY29udGVudC4KKyAgICBF
WFBFQ1RfRkFMU0UoZnJhbWUtPmZpbmQoZmluZElkZW50aWZpZXIsIFdlYlN0cmluZzo6ZnJvbVVU
RjgoImJhcjUiKSwgb3B0aW9ucywgZmFsc2UsIDApKTsKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55
IG1hdGNoZXMsIHN0b3BGaW5kaW5nIHdpbGwgc2V0IHRoZSBzZWxlY3Rpb24gb24gdGhlIGZvdW5k
IHRleHQuCisgICAgLy8gSG93ZXZlciwgd2UgZG8gbm90IGV4cGVjdCBhbnkgbWF0Y2hlcywgc28g
Y2hlY2sgdGhhdCB0aGUgc2VsZWN0aW9uIGlzIG51bGwuCisgICAgZnJhbWUtPnN0b3BGaW5kaW5n
KGZhbHNlKTsKKyAgICByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb25SYW5nZSgpOworICAgIEFTU0VS
VF9UUlVFKHJhbmdlLmlzTnVsbCgpKTsKKwogICAgIHdlYlZpZXctPmNsb3NlKCk7CiB9CiAKQEAg
LTExNTQsOSArMTE2MiwxMCBAQCBURVNUX0YoV2ViRnJhbWVUZXN0LCBGaW5kSW5QYWdlTWF0Y2hS
ZWN0cykKICAgICB3ZWJWaWV3LT5sYXlvdXQoKTsKICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuQWxs
UGVuZGluZ01lc3NhZ2VzKCk7CiAKKyAgICAvLyBOb3RlIHRoYXQgdGhlICdyZXN1bHQgMTknIGlu
IHRoZSA8c2VsZWN0PiBlbGVtZW50IGlzIG5vdCBleHBlY3RlZCB0byBwcm9kdWNlIGEgbWF0Y2gu
CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGtGaW5kU3RyaW5nID0gInJlc3VsdCI7CiAgICAgc3Rh
dGljIGNvbnN0IGludCBrRmluZElkZW50aWZpZXIgPSAxMjM0NTsKLSAgICBzdGF0aWMgY29uc3Qg
aW50IGtOdW1SZXN1bHRzID0gMTY7CisgICAgc3RhdGljIGNvbnN0IGludCBrTnVtUmVzdWx0cyA9
IDE5OwogCiAgICAgV2ViRmluZE9wdGlvbnMgb3B0aW9uczsKICAgICBXZWJTdHJpbmcgc2VhcmNo
VGV4dCA9IFdlYlN0cmluZzo6ZnJvbVVURjgoa0ZpbmRTdHJpbmcpOwpAQCAtMTI0Nyw2ICsxMjU2
LDEzIEBAIFRFU1RfRihXZWJGcmFtZVRlc3QsIEZpbmRJblBhZ2VNYXRjaFJlY3RzKQogICAgIEVY
UEVDVF9UUlVFKHdlYk1hdGNoUmVjdHNbMTNdLnkgPCB3ZWJNYXRjaFJlY3RzWzEyXS55KTsKICAg
ICBFWFBFQ1RfVFJVRSh3ZWJNYXRjaFJlY3RzWzEyXS55IDwgd2ViTWF0Y2hSZWN0c1sxNF0ueSk7
CiAKKyAgICAvLyBSZXN1bHQgMTYgc2hvdWxkIGJlIGJlbG93IHJlc3VsdCAxNS4KKyAgICBFWFBF
Q1RfVFJVRSh3ZWJNYXRjaFJlY3RzWzE1XS55ID4gd2ViTWF0Y2hSZWN0c1sxNF0ueSk7CisKKyAg
ICAvLyBSZXN1bHQgMTggc2hvdWxkIGJlIG5vcm1hbGl6ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBw
b3NpdGlvbjpyZWxhdGl2ZSBkaXYsIGFuZCBub3QgaXQncworICAgIC8vIGltbWVkaWF0ZSBjb250
YWluaW5nIGRpdi4gQ29uc2VxdWVudGx5LCByZXN1bHQgMTggc2hvdWxkIGJlIGFib3ZlIHJlc3Vs
dCAxNy4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJNYXRjaFJlY3RzWzE3XS55ID4gd2ViTWF0Y2hSZWN0
c1sxOF0ueSk7CisKICAgICAvLyBSZXNpemluZyBzaG91bGQgdXBkYXRlIHRoZSByZWN0cyB2ZXJz
aW9uLgogICAgIHdlYlZpZXctPnJlc2l6ZShXZWJTaXplKDgwMCwgNjAwKSk7CiAgICAgd2Via2l0
X3N1cHBvcnQ6OlJ1bkFsbFBlbmRpbmdNZXNzYWdlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2ZpbmQuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9maW5kLmh0bWwKaW5kZXggOTUyYzgyM2ZiN2JkYzEyOGY4NDE4NDQ1ZmY1
OTViZGU5N2U1NDIxNS4uY2Y4NzAwM2IxYWVhOTVjYzI5OTQwZjY2ZGNlZTY4OWQzYzE3Y2Q0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2ZpbmQuaHRtbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvZmluZC5odG1sCkBAIC0zLDQg
KzMsNyBAQAogPGlucHV0IHZhbHVlPSJmb28yIGJhcjIgYmF6MiI+CiA8dGV4dGFyZWE+Zm9vMyBi
YXIzIGJhejM8L3RleHRhcmVhPgogPGRpdiBjb250ZW50RWRpdGFibGU9InRydWUiPmZvbzQgPHNw
YW4+YmFyNDwvc3Bhbj4gYmF6NDwvZGl2PgorPHNlbGVjdD4KKzxvcHRpb24gdmFsdWU9ImZvbzUi
PmJhcjU8L29wdGlvbj4KKzwvc2VsZWN0PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5odG1sIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5odG1sCmluZGV4
IGE5MjJhNTBiY2U3Y2M0NGNlODI0YjFmMDgxNTMxMjE3OTUwMmY0NGUuLjYyMWZmNDAwZTNhYWU2
MThlN2RiOTFhODUxOGI3ZGYzNWMxMmQwNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9maW5kX2luX3BhZ2VfZnJhbWUuaHRtbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvZmluZF9pbl9wYWdlX2ZyYW1lLmh0bWwKQEAgLTI1LDE3
ICsyNSwzNCBAQCBkaXYuZml4ZWQgewogICBoZWlnaHQ6IDEwMHB4OwogICBwb3NpdGlvbjogZml4
ZWQ7CiB9CitkaXYucmVsYXRpdmUtb3ZlcmZsb3cgeworICBwb3NpdGlvbjogcmVsYXRpdmU7Cisg
IG92ZXJmbG93OiBoaWRkZW47CisgIGhlaWdodDogMTAwcHg7Cit9CitkaXYubWFyZ2luLW92ZXJm
bG93IHsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgbWFyZ2luLXRvcDoyMHB4OworICBoZWlnaHQ6
IDUwcHg7Cit9CitkaXYuYWJzb2x1dGUgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDog
MHB4OworICBoZWlnaHQ6IDIwcHg7CisgIHdpZHRoOiA4MHB4OworICBiYWNrZ3JvdW5kLWNvbG9y
OiAiZ3JlZW4iOworfQogPC9zdHlsZT4KIDwvaGVhZD4KIDxib2R5PgogVGhpcyBpcyBhIHRlc3Qu
Ci08L2JyPjwvYnI+Ci08L2JyPjwvYnI+Ci08L2JyPjwvYnI+Cis8YnI+Cis8YnI+Cis8YnI+CiBG
b28gYmFyLgotPC9icj48L2JyPgotPC9icj48L2JyPgotPC9icj48L2JyPgorPGJyPgorPGJyPgor
PGJyPgogcmVzdWx0IDAyCiA8ZGl2IGNsYXNzPSJ0cmFuc2Zvcm0iPgogcmVzdWx0IDAzCkBAIC00
OCwxMyArNjUsMTMgQEAgcmVzdWx0IDA2CiA8ZGl2IGNsYXNzPSJzY3JvbGwiPgogcmVzdWx0IDA3
CiBGb28gYmFyLgotPC9icj48L2JyPgotPC9icj48L2JyPgotPC9icj48L2JyPgorPGJyPgorPGJy
PgorPGJyPgogcmVzdWx0IDA4CiA8L2Rpdj4KIHJlc3VsdCAwOQotPC9icj48L2JyPgorPGJyPgog
cmVzdWx0IDEwCiA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMTAiIGNlbGxzcGFjaW5n
PSIxMCI+CiA8dHI+CkBAIC03MSw1ICs4OCwyMiBAQCByZXN1bHQgMTAKIDwvdHI+CiA8L3RhYmxl
PgogcmVzdWx0IDE1Cis8ZGl2IGNsYXNzPSJ0cmFuc2Zvcm0iPgorPGRpdiBzdHlsZT0iaGVpZ2h0
OjBweCI+CisgIDxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7Ij4KKyAgICByZXN1bHQgMTYKKyAgPC9k
aXY+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVsYXRpdmUtb3ZlcmZsb3ciPgorICA8
ZGl2IGNsYXNzPSJtYXJnaW4tb3ZlcmZsb3ciPgorICAgIHJlc3VsdCAxNworICAgIDxkaXYgY2xh
c3M9ImFic29sdXRlIj5yZXN1bHQgMTg8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KKzwhLS0gVGVz
dHMgdGhhdCB3aWxsIG5vdCB5aWVsZCBtYXRjaGVzIHNob3VsZCBnbyBiZWxvdyB0aGlzIGxpbmUu
IC0tPgorPHNlbGVjdD4KKzxvcHRpb24+cmVzdWx0IDE5PC9vcHRpb24+Cis8L3NlbGVjdD4KIDwv
Ym9keT4KIDwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185259</attachid>
            <date>2013-01-29 10:27:08 -0800</date>
            <delta_ts>2013-01-30 03:08:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104924-20130129182354.patch</filename>
            <type>text/plain</type>
            <size>8550</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDU3MmRlYmI5YjFhMDdkYmIwNDQ0MDY4NmRlYTY3YTY3YzgxZWQ3ZDEuLjgwZDhlZjVkOWMzMDMy
NTkzNjYyYTk4ZmZlYzNiNWVlZmUzZTEyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTMtMDEtMjkgIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBGaXggZmluZCBpbiBwYWdlIHJlY3Rz
IGZvciBvdmVyZmxvd2luZyBjb250ZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSWYgYSBkaXYgaGFzIG92ZXJmbG93aW5nIGNvbnRlbnQsIHdlIHNo
b3VsZCBvbmx5IG5vcm1hbGlzZSBpdHMKKyAgICAgICAgY29vcmRpbmF0ZXMgYWdhaW5zdCB0aGUg
cmVuZGVydmlldyBvciB0aGUgY29udGFpbmluZyBzY3JvbGxhYmxlIGJsb2NrLgorCisgICAgICAg
IFRFU1Q9V2ViRnJhbWVUZXN0LkZpbmRJblBhZ2VNYXRjaFJlY3RzCisKKyAgICAgICAgKiBzcmMv
RmluZEluUGFnZUNvb3JkaW5hdGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZW5jbG9zaW5nU2Ny
b2xsYWJsZUFuY2VzdG9yKToKKyAgICAgICAgKFdlYktpdDo6dG9Ob3JtYWxpemVkUmVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OmZpbmRJblBhZ2VSZWN0RnJvbUFic29sdXRlUmVjdCk6CisgICAgICAg
ICogdGVzdHMvV2ViRnJhbWVUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9kYXRhL2ZpbmQuaHRt
bDoKKyAgICAgICAgKiB0ZXN0cy9kYXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5odG1sOgorCiAyMDEz
LTAxLTI4ICBNYXJqYSBIw7ZsdHTDpCAgPG1hcmphQGNocm9taXVtLm9yZz4KIAogICAgICAgICBB
ZGQgYW4gQVBJIGZvciByZXRyaWV2aW5nIG5hdGl2ZSBtZW1vcnkgaW5mb3JtYXRpb24gd2l0aG91
dCBnb2luZyB0aHJvdWdoIHRoZSByZW1vdGUgaW5zcGVjdGluZyBwcm90b2NvbApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRmluZEluUGFnZUNvb3JkaW5hdGVzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZpbmRJblBhZ2VDb29yZGluYXRlcy5jcHAKaW5k
ZXggMTQ5MmJhZjE1MmQxM2I3MTM5ZDU2ZDg4OGE5YmYwZTlhYWMzOWNmMS4uMTcxOWY4MGU0NTk3
MWFiM2Q2NDIzZWQ5NTZlNTUxNDgyMGVmZDZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvRmluZEluUGFnZUNvb3JkaW5hdGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9GaW5kSW5QYWdlQ29vcmRpbmF0ZXMuY3BwCkBAIC00OSwxMSArNDksMjEg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0
aWMgRmxvYXRSZWN0IHRvTm9ybWFsaXplZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVJl
Y3QsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgY29uc3QgUmVuZGVyQmxv
Y2sqIGVuY2xvc2luZ1Njcm9sbGFibGVBbmNlc3Rvcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogewotICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgQVNTRVJUKCFyZW5kZXJlci0+aXNS
ZW5kZXJWaWV3KCkpOwogCisgICAgLy8gVHJhY2UgdXAgdGhlIGNvbnRhaW5pbmdCbG9ja3MgdW50
aWwgd2UgcmVhY2ggZWl0aGVyIHRoZSByZW5kZXIgdmlldyBvciBhIHNjcm9sbGFibGUgb2JqZWN0
LgogICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIgPSByZW5kZXJlci0+Y29udGFpbmlu
Z0Jsb2NrKCk7CisgICAgd2hpbGUgKCFjb250YWluZXItPmhhc092ZXJmbG93Q2xpcCgpICYmICFj
b250YWluZXItPmlzUmVuZGVyVmlldygpKQorICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIt
PmNvbnRhaW5pbmdCbG9jaygpOworICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK3N0YXRpYyBG
bG9hdFJlY3QgdG9Ob3JtYWxpemVkUmVjdChjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlUmVjdCwg
Y29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5l
cikKK3sKKyAgICBBU1NFUlQocmVuZGVyZXIpOworCiAgICAgQVNTRVJUKGNvbnRhaW5lciB8fCBy
ZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkpOwogICAgIGlmICghY29udGFpbmVyKQogICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CkBAIC05MiwyNiArMTAyLDI3IEBAIEZsb2F0UmVjdCBmaW5kSW5Q
YWdlUmVjdEZyb21BYnNvbHV0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0
IFJlbmRlCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAgIC8vIE5vcm1hbGl6ZSB0
aGUgaW5wdXQgcmVjdCB0byBpdHMgY29udGFpbmVyIGJsb2NrLgotICAgIEZsb2F0UmVjdCBub3Jt
YWxpemVkUmVjdCA9IHRvTm9ybWFsaXplZFJlY3QoaW5wdXRSZWN0LCBiYXNlUmVuZGVyZXIpOwor
ICAgIGNvbnN0IFJlbmRlckJsb2NrKiBiYXNlQ29udGFpbmVyID0gZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFuY2VzdG9yKGJhc2VSZW5kZXJlcik7CisgICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWRSZWN0ID0g
dG9Ob3JtYWxpemVkUmVjdChpbnB1dFJlY3QsIGJhc2VSZW5kZXJlciwgYmFzZUNvbnRhaW5lcik7
CiAKICAgICAvLyBHbyB1cCBhY3Jvc3MgZnJhbWVzLgotICAgIGZvciAoY29uc3QgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGJhc2VSZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7IHJlbmRlcmVy
OyApIHsKKyAgICBmb3IgKGNvbnN0IFJlbmRlckJveCogcmVuZGVyZXIgPSBiYXNlQ29udGFpbmVy
OyByZW5kZXJlcjsgKSB7CiAKICAgICAgICAgLy8gR28gdXAgdGhlIHJlbmRlciB0cmVlIHVudGls
IHdlIHJlYWNoIHRoZSByb290IG9mIHRoZSBjdXJyZW50IGZyYW1lICh0aGUgUmVuZGVyVmlldyku
Ci0gICAgICAgIGZvciAoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IHJlbmRlcmVyLT5j
b250YWluaW5nQmxvY2soKTsgY29udGFpbmVyOwotICAgICAgICAgICAgICAgIHJlbmRlcmVyID0g
Y29udGFpbmVyLCBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpKSB7Cisg
ICAgICAgIHdoaWxlICghcmVuZGVyZXItPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgICAgICBj
b25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUFuY2VzdG9y
KHJlbmRlcmVyKTsKIAogICAgICAgICAgICAgLy8gQ29tcG9zZSB0aGUgbm9ybWFsaXplZCByZWN0
cy4KLSAgICAgICAgICAgIEZsb2F0UmVjdCBub3JtYWxpemVkQm94UmVjdCA9IHRvTm9ybWFsaXpl
ZFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCksIHJlbmRlcmVyKTsKKyAg
ICAgICAgICAgIEZsb2F0UmVjdCBub3JtYWxpemVkQm94UmVjdCA9IHRvTm9ybWFsaXplZFJlY3Qo
cmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCksIHJlbmRlcmVyLCBjb250YWluZXIp
OwogICAgICAgICAgICAgbm9ybWFsaXplZFJlY3Quc2NhbGUobm9ybWFsaXplZEJveFJlY3Qud2lk
dGgoKSwgbm9ybWFsaXplZEJveFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICAgICAgbm9ybWFsaXpl
ZFJlY3QubW92ZUJ5KG5vcm1hbGl6ZWRCb3hSZWN0LmxvY2F0aW9uKCkpOwogCi0gICAgICAgICAg
ICBpZiAobm9ybWFsaXplZFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBu
b3JtYWxpemVkUmVjdDsKKyAgICAgICAgICAgIHJlbmRlcmVyID0gY29udGFpbmVyOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gSnVtcCB0byB0aGUgcmVuZGVyZXIgb3duaW5nIHRoZSBmcmFtZSwg
aWYgYW55LgogICAgICAgICBBU1NFUlQocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKTsKKworICAg
ICAgICAvLyBKdW1wIHRvIHRoZSByZW5kZXJlciBvd25pbmcgdGhlIGZyYW1lLCBpZiBhbnkuCiAg
ICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPmZyYW1lKCkgPyByZW5kZXJlci0+ZnJhbWUoKS0+
b3duZXJSZW5kZXJlcigpIDogMDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViRnJhbWVUZXN0LmNwcAppbmRleCBhYmY5MTg2NWI4NDJjOTdjNzM3MDc2YTliYzNi
NmI1ZTAxOTExMDU3Li43ZDliMjQ0MzkxOGIyZGM3ODU3OWZjMjUzMTg5OWEyZGZiZWRjYzZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCkBAIC05
ODYsNiArOTg2LDE0IEBAIFRFU1RfRihXZWJGcmFtZVRlc3QsIEZpbmRJblBhZ2UpCiAgICAgLy8g
ImJhcjQiIGlzIHN1cnJvdW5kZWQgYnkgPHNwYW4+LCBidXQgdGhlIGZvY3VzYWJsZSBub2RlIHNo
b3VsZCBiZSB0aGUgcGFyZW50IDxkaXY+LgogICAgIEVYUEVDVF9FUShXZWJTdHJpbmc6OmZyb21V
VEY4KCJESVYiKSwgZnJhbWUtPmRvY3VtZW50KCkuZm9jdXNlZE5vZGUoKS5ub2RlTmFtZSgpKTsK
IAorICAgIC8vIEZpbmQgaW4gPHNlbGVjdD4gY29udGVudC4KKyAgICBFWFBFQ1RfRkFMU0UoZnJh
bWUtPmZpbmQoZmluZElkZW50aWZpZXIsIFdlYlN0cmluZzo6ZnJvbVVURjgoImJhcjUiKSwgb3B0
aW9ucywgZmFsc2UsIDApKTsKKyAgICAvLyBJZiB0aGVyZSBhcmUgYW55IG1hdGNoZXMsIHN0b3BG
aW5kaW5nIHdpbGwgc2V0IHRoZSBzZWxlY3Rpb24gb24gdGhlIGZvdW5kIHRleHQuCisgICAgLy8g
SG93ZXZlciwgd2UgZG8gbm90IGV4cGVjdCBhbnkgbWF0Y2hlcywgc28gY2hlY2sgdGhhdCB0aGUg
c2VsZWN0aW9uIGlzIG51bGwuCisgICAgZnJhbWUtPnN0b3BGaW5kaW5nKGZhbHNlKTsKKyAgICBy
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb25SYW5nZSgpOworICAgIEFTU0VSVF9UUlVFKHJhbmdlLmlz
TnVsbCgpKTsKKwogICAgIHdlYlZpZXctPmNsb3NlKCk7CiB9CiAKQEAgLTExNTQsOSArMTE2Miwx
MCBAQCBURVNUX0YoV2ViRnJhbWVUZXN0LCBGaW5kSW5QYWdlTWF0Y2hSZWN0cykKICAgICB3ZWJW
aWV3LT5sYXlvdXQoKTsKICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuQWxsUGVuZGluZ01lc3NhZ2Vz
KCk7CiAKKyAgICAvLyBOb3RlIHRoYXQgdGhlICdyZXN1bHQgMTknIGluIHRoZSA8c2VsZWN0PiBl
bGVtZW50IGlzIG5vdCBleHBlY3RlZCB0byBwcm9kdWNlIGEgbWF0Y2guCiAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGtGaW5kU3RyaW5nID0gInJlc3VsdCI7CiAgICAgc3RhdGljIGNvbnN0IGludCBr
RmluZElkZW50aWZpZXIgPSAxMjM0NTsKLSAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1SZXN1bHRz
ID0gMTY7CisgICAgc3RhdGljIGNvbnN0IGludCBrTnVtUmVzdWx0cyA9IDE5OwogCiAgICAgV2Vi
RmluZE9wdGlvbnMgb3B0aW9uczsKICAgICBXZWJTdHJpbmcgc2VhcmNoVGV4dCA9IFdlYlN0cmlu
Zzo6ZnJvbVVURjgoa0ZpbmRTdHJpbmcpOwpAQCAtMTI0Nyw2ICsxMjU2LDEzIEBAIFRFU1RfRihX
ZWJGcmFtZVRlc3QsIEZpbmRJblBhZ2VNYXRjaFJlY3RzKQogICAgIEVYUEVDVF9UUlVFKHdlYk1h
dGNoUmVjdHNbMTNdLnkgPCB3ZWJNYXRjaFJlY3RzWzEyXS55KTsKICAgICBFWFBFQ1RfVFJVRSh3
ZWJNYXRjaFJlY3RzWzEyXS55IDwgd2ViTWF0Y2hSZWN0c1sxNF0ueSk7CiAKKyAgICAvLyBSZXN1
bHQgMTYgc2hvdWxkIGJlIGJlbG93IHJlc3VsdCAxNS4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJNYXRj
aFJlY3RzWzE1XS55ID4gd2ViTWF0Y2hSZWN0c1sxNF0ueSk7CisKKyAgICAvLyBSZXN1bHQgMTgg
c2hvdWxkIGJlIG5vcm1hbGl6ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBwb3NpdGlvbjpyZWxhdGl2
ZSBkaXYsIGFuZCBub3QgaXQncworICAgIC8vIGltbWVkaWF0ZSBjb250YWluaW5nIGRpdi4gQ29u
c2VxdWVudGx5LCByZXN1bHQgMTggc2hvdWxkIGJlIGFib3ZlIHJlc3VsdCAxNy4KKyAgICBFWFBF
Q1RfVFJVRSh3ZWJNYXRjaFJlY3RzWzE3XS55ID4gd2ViTWF0Y2hSZWN0c1sxOF0ueSk7CisKICAg
ICAvLyBSZXNpemluZyBzaG91bGQgdXBkYXRlIHRoZSByZWN0cyB2ZXJzaW9uLgogICAgIHdlYlZp
ZXctPnJlc2l6ZShXZWJTaXplKDgwMCwgNjAwKSk7CiAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bkFs
bFBlbmRpbmdNZXNzYWdlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL2ZpbmQuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9m
aW5kLmh0bWwKaW5kZXggOTUyYzgyM2ZiN2JkYzEyOGY4NDE4NDQ1ZmY1OTViZGU5N2U1NDIxNS4u
Y2Y4NzAwM2IxYWVhOTVjYzI5OTQwZjY2ZGNlZTY4OWQzYzE3Y2Q0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2ZpbmQuaHRtbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvZmluZC5odG1sCkBAIC0zLDQgKzMsNyBAQAogPGlucHV0
IHZhbHVlPSJmb28yIGJhcjIgYmF6MiI+CiA8dGV4dGFyZWE+Zm9vMyBiYXIzIGJhejM8L3RleHRh
cmVhPgogPGRpdiBjb250ZW50RWRpdGFibGU9InRydWUiPmZvbzQgPHNwYW4+YmFyNDwvc3Bhbj4g
YmF6NDwvZGl2PgorPHNlbGVjdD4KKzxvcHRpb24gdmFsdWU9ImZvbzUiPmJhcjU8L29wdGlvbj4K
Kzwvc2VsZWN0PgogPC9ib2R5PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5odG1sCmluZGV4IGE5MjJhNTBiY2U3Y2M0
NGNlODI0YjFmMDgxNTMxMjE3OTUwMmY0NGUuLjYyMWZmNDAwZTNhYWU2MThlN2RiOTFhODUxOGI3
ZGYzNWMxMmQwNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9maW5kX2luX3BhZ2VfZnJhbWUuaHRtbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvZmluZF9pbl9wYWdlX2ZyYW1lLmh0bWwKQEAgLTI1LDE3ICsyNSwzNCBAQCBkaXYu
Zml4ZWQgewogICBoZWlnaHQ6IDEwMHB4OwogICBwb3NpdGlvbjogZml4ZWQ7CiB9CitkaXYucmVs
YXRpdmUtb3ZlcmZsb3cgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIG92ZXJmbG93OiBoaWRk
ZW47CisgIGhlaWdodDogMTAwcHg7Cit9CitkaXYubWFyZ2luLW92ZXJmbG93IHsKKyAgb3ZlcmZs
b3c6IGhpZGRlbjsKKyAgbWFyZ2luLXRvcDoyMHB4OworICBoZWlnaHQ6IDUwcHg7Cit9CitkaXYu
YWJzb2x1dGUgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMHB4OworICBoZWlnaHQ6
IDIwcHg7CisgIHdpZHRoOiA4MHB4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAiZ3JlZW4iOworfQog
PC9zdHlsZT4KIDwvaGVhZD4KIDxib2R5PgogVGhpcyBpcyBhIHRlc3QuCi08L2JyPjwvYnI+Ci08
L2JyPjwvYnI+Ci08L2JyPjwvYnI+Cis8YnI+Cis8YnI+Cis8YnI+CiBGb28gYmFyLgotPC9icj48
L2JyPgotPC9icj48L2JyPgotPC9icj48L2JyPgorPGJyPgorPGJyPgorPGJyPgogcmVzdWx0IDAy
CiA8ZGl2IGNsYXNzPSJ0cmFuc2Zvcm0iPgogcmVzdWx0IDAzCkBAIC00OCwxMyArNjUsMTMgQEAg
cmVzdWx0IDA2CiA8ZGl2IGNsYXNzPSJzY3JvbGwiPgogcmVzdWx0IDA3CiBGb28gYmFyLgotPC9i
cj48L2JyPgotPC9icj48L2JyPgotPC9icj48L2JyPgorPGJyPgorPGJyPgorPGJyPgogcmVzdWx0
IDA4CiA8L2Rpdj4KIHJlc3VsdCAwOQotPC9icj48L2JyPgorPGJyPgogcmVzdWx0IDEwCiA8dGFi
bGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMTAiIGNlbGxzcGFjaW5nPSIxMCI+CiA8dHI+CkBA
IC03MSw1ICs4OCwyMiBAQCByZXN1bHQgMTAKIDwvdHI+CiA8L3RhYmxlPgogcmVzdWx0IDE1Cis8
ZGl2IGNsYXNzPSJ0cmFuc2Zvcm0iPgorPGRpdiBzdHlsZT0iaGVpZ2h0OjBweCI+CisgIDxkaXYg
c3R5bGU9ImZsb2F0OmxlZnQ7Ij4KKyAgICByZXN1bHQgMTYKKyAgPC9kaXY+Cis8L2Rpdj4KKzwv
ZGl2PgorPGRpdiBjbGFzcz0icmVsYXRpdmUtb3ZlcmZsb3ciPgorICA8ZGl2IGNsYXNzPSJtYXJn
aW4tb3ZlcmZsb3ciPgorICAgIHJlc3VsdCAxNworICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIj5y
ZXN1bHQgMTg8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rpdj4KKzwhLS0gVGVzdHMgdGhhdCB3aWxsIG5v
dCB5aWVsZCBtYXRjaGVzIHNob3VsZCBnbyBiZWxvdyB0aGlzIGxpbmUuIC0tPgorPHNlbGVjdD4K
KzxvcHRpb24+cmVzdWx0IDE5PC9vcHRpb24+Cis8L3NlbGVjdD4KIDwvYm9keT4KIDwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185454</attachid>
            <date>2013-01-30 03:08:28 -0800</date>
            <delta_ts>2013-01-30 04:15:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104924-20130130110513.patch</filename>
            <type>text/plain</type>
            <size>9401</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDU3MmRlYmI5YjFhMDdkYmIwNDQ0MDY4NmRlYTY3YTY3YzgxZWQ3ZDEuLmM0MWQ4NzdkMGFlZGI3
MzM4OGM3ZmY0OTBhNjk4ZjgwNjM1NDdjNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTMtMDEtMzAgIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBGaXggZmluZCBpbiBwYWdlIHJlY3Rz
IGZvciBvdmVyZmxvd2luZyBjb250ZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA0OTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSnVsaWVuIENo
YWZmcmFpeC4KKworICAgICAgICBJZiBhIGRpdiBoYXMgb3ZlcmZsb3dpbmcgY29udGVudCwgd2Ug
c2hvdWxkIG9ubHkgbm9ybWFsaXNlIGl0cworICAgICAgICBjb29yZGluYXRlcyBhZ2FpbnN0IHRo
ZSByZW5kZXJ2aWV3IG9yIHRoZSBjb250YWluaW5nIHNjcm9sbGFibGUgYmxvY2suCisKKyAgICAg
ICAgVEVTVD1XZWJGcmFtZVRlc3QuRmluZEluUGFnZU1hdGNoUmVjdHMKKworICAgICAgICAqIHNy
Yy9GaW5kSW5QYWdlQ29vcmRpbmF0ZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjplbmNsb3NpbmdT
Y3JvbGxhYmxlQW5jZXN0b3IpOgorICAgICAgICAgICAgSGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQg
dGhlIGVuY2xvc2luZyBjb250YWluaW5nIGJsb2NrIHdpdGggYW4gb3ZlcmZsb3cgY2xpcC4KKyAg
ICAgICAgKFdlYktpdDo6dG9Ob3JtYWxpemVkUmVjdCk6CisgICAgICAgICAgICBQYXNzIGluIHRo
ZSBjb250YWluZXIgYXMgYW4gYXJndW1lbnQuCisgICAgICAgIChXZWJLaXQ6OmZpbmRJblBhZ2VS
ZWN0RnJvbUFic29sdXRlUmVjdCk6CisgICAgICAgICAgICBDb21wdXRlIHRoZSBjb250YWluZXIg
Zm9yIHRvTm9ybWFsaXplZFJlY3QgdXNpbmcgZW5jbG9zaW5nU2Nyb2xsYWJsZUFuY2VzdG9yLgor
ICAgICAgICAqIHRlc3RzL1dlYkZyYW1lVGVzdC5jcHA6CisgICAgICAgICAgICBBZGQgZXhwZWN0
YXRpb25zIGZvciBuZXcgdGVzdHMgaW4gV2ViRnJhbWVUZXN0OjpGaW5kSW5QYWdlTWF0Y2hSZWN0
cyBhbmQgV2ViRnJhbWVUZXN0OjpGaW5kSW5QYWdlLgorICAgICAgICAqIHRlc3RzL2RhdGEvZmlu
ZC5odG1sOgorICAgICAgICAgICAgQWRkIHRlc3QgY2FzZSBmb3IgPHNlbGVjdD4gZWxlbWVudC4K
KyAgICAgICAgKiB0ZXN0cy9kYXRhL2ZpbmRfaW5fcGFnZV9mcmFtZS5odG1sOgorICAgICAgICAg
ICAgQWRkIHRlc3QgY2FzZXM6CisgICAgICAgICAgICAgIC0gUmVzdWx0IDE1LCAxNiB0ZXN0cyB0
aGF0IGNvbnRhaW5pbmcgPGRpdj4gd2l0aCBzdHlsZSBmbG9hdDpsZWZ0IGFuZAorICAgICAgICAg
ICAgICAgIGhlaWdodDowcHggZG9lcyBub3QgaW1wYWN0IGNvb3JkaW5hdGUgbm9ybWFsaXphdGlv
bi4KKyAgICAgICAgICAgICAgLSBSZXN1bHQgMTcsIDE4IHRlc3RzIHRoYXQgbWF0Y2hlcyB3aXRo
IGFic29sdXRlIHBvc2l0aW9uaW5nIGFyZSBub3JtYWxpemVkIGNvbnRhaW5pbmcKKyAgICAgICAg
ICAgICAgICByZWxhdGl2ZSBwb3NpdGlvbmVkIGJsb2NrLCBldmVuIGlmIHRoZXJlIGlzIGEgY2xv
c2VyIHBhcmVudCBibG9jayB3aXRoIG92ZXJmbG93IGNsaXAuCisgICAgICAgICAgICAgIC0gUmVz
dWx0IDE5IGFkZHMgYSB0ZXN0IGNhc2UgZm9yIDxzZWxlY3Q+IGVsZW1lbnQuCisKIDIwMTMtMDEt
MjggIE1hcmphIEjDtmx0dMOkICA8bWFyamFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBh
biBBUEkgZm9yIHJldHJpZXZpbmcgbmF0aXZlIG1lbW9yeSBpbmZvcm1hdGlvbiB3aXRob3V0IGdv
aW5nIHRocm91Z2ggdGhlIHJlbW90ZSBpbnNwZWN0aW5nIHByb3RvY29sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GaW5kSW5QYWdlQ29vcmRpbmF0ZXMuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRmluZEluUGFnZUNvb3JkaW5hdGVzLmNwcAppbmRleCAx
NDkyYmFmMTUyZDEzYjcxMzlkNTZkODg4YTliZjBlOWFhYzM5Y2YxLi4xNzE5ZjgwZTQ1OTcxYWIz
ZDY0MjNlZDk1NmU1NTE0ODIwZWZkNmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9GaW5kSW5QYWdlQ29vcmRpbmF0ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0ZpbmRJblBhZ2VDb29yZGluYXRlcy5jcHAKQEAgLTQ5LDExICs0OSwyMSBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBG
bG9hdFJlY3QgdG9Ob3JtYWxpemVkUmVjdChjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlUmVjdCwg
Y29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3N0YXRpYyBjb25zdCBSZW5kZXJCbG9jayog
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFuY2VzdG9yKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CiB7Ci0gICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICBBU1NFUlQoIXJlbmRlcmVyLT5pc1JlbmRl
clZpZXcoKSk7CiAKKyAgICAvLyBUcmFjZSB1cCB0aGUgY29udGFpbmluZ0Jsb2NrcyB1bnRpbCB3
ZSByZWFjaCBlaXRoZXIgdGhlIHJlbmRlciB2aWV3IG9yIGEgc2Nyb2xsYWJsZSBvYmplY3QuCiAg
ICAgY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxv
Y2soKTsKKyAgICB3aGlsZSAoIWNvbnRhaW5lci0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWNvbnRh
aW5lci0+aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci0+Y29u
dGFpbmluZ0Jsb2NrKCk7CisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKworc3RhdGljIEZsb2F0
UmVjdCB0b05vcm1hbGl6ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVSZWN0LCBjb25z
dCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyKQor
eworICAgIEFTU0VSVChyZW5kZXJlcik7CisKICAgICBBU1NFUlQoY29udGFpbmVyIHx8IHJlbmRl
cmVyLT5pc1JlbmRlclZpZXcoKSk7CiAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgIHJldHVy
biBGbG9hdFJlY3QoKTsKQEAgLTkyLDI2ICsxMDIsMjcgQEAgRmxvYXRSZWN0IGZpbmRJblBhZ2VS
ZWN0RnJvbUFic29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgUmVu
ZGUKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCiAgICAgLy8gTm9ybWFsaXplIHRoZSBp
bnB1dCByZWN0IHRvIGl0cyBjb250YWluZXIgYmxvY2suCi0gICAgRmxvYXRSZWN0IG5vcm1hbGl6
ZWRSZWN0ID0gdG9Ob3JtYWxpemVkUmVjdChpbnB1dFJlY3QsIGJhc2VSZW5kZXJlcik7CisgICAg
Y29uc3QgUmVuZGVyQmxvY2sqIGJhc2VDb250YWluZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlQW5j
ZXN0b3IoYmFzZVJlbmRlcmVyKTsKKyAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZFJlY3QgPSB0b05v
cm1hbGl6ZWRSZWN0KGlucHV0UmVjdCwgYmFzZVJlbmRlcmVyLCBiYXNlQ29udGFpbmVyKTsKIAog
ICAgIC8vIEdvIHVwIGFjcm9zcyBmcmFtZXMuCi0gICAgZm9yIChjb25zdCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gYmFzZVJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsgcmVuZGVyZXI7ICkg
eworICAgIGZvciAoY29uc3QgUmVuZGVyQm94KiByZW5kZXJlciA9IGJhc2VDb250YWluZXI7IHJl
bmRlcmVyOyApIHsKIAogICAgICAgICAvLyBHbyB1cCB0aGUgcmVuZGVyIHRyZWUgdW50aWwgd2Ug
cmVhY2ggdGhlIHJvb3Qgb2YgdGhlIGN1cnJlbnQgZnJhbWUgKHRoZSBSZW5kZXJWaWV3KS4KLSAg
ICAgICAgZm9yIChjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmVyID0gcmVuZGVyZXItPmNvbnRh
aW5pbmdCbG9jaygpOyBjb250YWluZXI7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIgPSBjb250
YWluZXIsIGNvbnRhaW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKKyAgICAg
ICAgd2hpbGUgKCFyZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkpIHsKKyAgICAgICAgICAgIGNvbnN0
IFJlbmRlckJsb2NrKiBjb250YWluZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlQW5jZXN0b3IocmVu
ZGVyZXIpOwogCiAgICAgICAgICAgICAvLyBDb21wb3NlIHRoZSBub3JtYWxpemVkIHJlY3RzLgot
ICAgICAgICAgICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWRCb3hSZWN0ID0gdG9Ob3JtYWxpemVkUmVj
dChyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSwgcmVuZGVyZXIpOworICAgICAg
ICAgICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWRCb3hSZWN0ID0gdG9Ob3JtYWxpemVkUmVjdChyZW5k
ZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSwgcmVuZGVyZXIsIGNvbnRhaW5lcik7CiAg
ICAgICAgICAgICBub3JtYWxpemVkUmVjdC5zY2FsZShub3JtYWxpemVkQm94UmVjdC53aWR0aCgp
LCBub3JtYWxpemVkQm94UmVjdC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBub3JtYWxpemVkUmVj
dC5tb3ZlQnkobm9ybWFsaXplZEJveFJlY3QubG9jYXRpb24oKSk7CiAKLSAgICAgICAgICAgIGlm
IChub3JtYWxpemVkUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1h
bGl6ZWRSZWN0OworICAgICAgICAgICAgcmVuZGVyZXIgPSBjb250YWluZXI7CiAgICAgICAgIH0K
IAotICAgICAgICAvLyBKdW1wIHRvIHRoZSByZW5kZXJlciBvd25pbmcgdGhlIGZyYW1lLCBpZiBh
bnkuCiAgICAgICAgIEFTU0VSVChyZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkpOworCisgICAgICAg
IC8vIEp1bXAgdG8gdGhlIHJlbmRlcmVyIG93bmluZyB0aGUgZnJhbWUsIGlmIGFueS4KICAgICAg
ICAgcmVuZGVyZXIgPSByZW5kZXJlci0+ZnJhbWUoKSA/IHJlbmRlcmVyLT5mcmFtZSgpLT5vd25l
clJlbmRlcmVyKCkgOiAwOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJGcmFtZVRlc3QuY3BwCmluZGV4IGFiZjkxODY1Yjg0MmM5N2M3MzcwNzZhOWJjM2I2YjVl
MDE5MTEwNTcuLjdkOWIyNDQzOTE4YjJkYzc4NTc5ZmMyNTMxODk5YTJkZmJlZGNjNmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKQEAgLTk4Niw2
ICs5ODYsMTQgQEAgVEVTVF9GKFdlYkZyYW1lVGVzdCwgRmluZEluUGFnZSkKICAgICAvLyAiYmFy
NCIgaXMgc3Vycm91bmRlZCBieSA8c3Bhbj4sIGJ1dCB0aGUgZm9jdXNhYmxlIG5vZGUgc2hvdWxk
IGJlIHRoZSBwYXJlbnQgPGRpdj4uCiAgICAgRVhQRUNUX0VRKFdlYlN0cmluZzo6ZnJvbVVURjgo
IkRJViIpLCBmcmFtZS0+ZG9jdW1lbnQoKS5mb2N1c2VkTm9kZSgpLm5vZGVOYW1lKCkpOwogCisg
ICAgLy8gRmluZCBpbiA8c2VsZWN0PiBjb250ZW50LgorICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+
ZmluZChmaW5kSWRlbnRpZmllciwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmFyNSIpLCBvcHRpb25z
LCBmYWxzZSwgMCkpOworICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgbWF0Y2hlcywgc3RvcEZpbmRp
bmcgd2lsbCBzZXQgdGhlIHNlbGVjdGlvbiBvbiB0aGUgZm91bmQgdGV4dC4KKyAgICAvLyBIb3dl
dmVyLCB3ZSBkbyBub3QgZXhwZWN0IGFueSBtYXRjaGVzLCBzbyBjaGVjayB0aGF0IHRoZSBzZWxl
Y3Rpb24gaXMgbnVsbC4KKyAgICBmcmFtZS0+c3RvcEZpbmRpbmcoZmFsc2UpOworICAgIHJhbmdl
ID0gZnJhbWUtPnNlbGVjdGlvblJhbmdlKCk7CisgICAgQVNTRVJUX1RSVUUocmFuZ2UuaXNOdWxs
KCkpOworCiAgICAgd2ViVmlldy0+Y2xvc2UoKTsKIH0KIApAQCAtMTE1NCw5ICsxMTYyLDEwIEBA
IFRFU1RfRihXZWJGcmFtZVRlc3QsIEZpbmRJblBhZ2VNYXRjaFJlY3RzKQogICAgIHdlYlZpZXct
PmxheW91dCgpOwogICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsK
IAorICAgIC8vIE5vdGUgdGhhdCB0aGUgJ3Jlc3VsdCAxOScgaW4gdGhlIDxzZWxlY3Q+IGVsZW1l
bnQgaXMgbm90IGV4cGVjdGVkIHRvIHByb2R1Y2UgYSBtYXRjaC4KICAgICBzdGF0aWMgY29uc3Qg
Y2hhcioga0ZpbmRTdHJpbmcgPSAicmVzdWx0IjsKICAgICBzdGF0aWMgY29uc3QgaW50IGtGaW5k
SWRlbnRpZmllciA9IDEyMzQ1OwotICAgIHN0YXRpYyBjb25zdCBpbnQga051bVJlc3VsdHMgPSAx
NjsKKyAgICBzdGF0aWMgY29uc3QgaW50IGtOdW1SZXN1bHRzID0gMTk7CiAKICAgICBXZWJGaW5k
T3B0aW9ucyBvcHRpb25zOwogICAgIFdlYlN0cmluZyBzZWFyY2hUZXh0ID0gV2ViU3RyaW5nOjpm
cm9tVVRGOChrRmluZFN0cmluZyk7CkBAIC0xMjQ3LDYgKzEyNTYsMTMgQEAgVEVTVF9GKFdlYkZy
YW1lVGVzdCwgRmluZEluUGFnZU1hdGNoUmVjdHMpCiAgICAgRVhQRUNUX1RSVUUod2ViTWF0Y2hS
ZWN0c1sxM10ueSA8IHdlYk1hdGNoUmVjdHNbMTJdLnkpOwogICAgIEVYUEVDVF9UUlVFKHdlYk1h
dGNoUmVjdHNbMTJdLnkgPCB3ZWJNYXRjaFJlY3RzWzE0XS55KTsKIAorICAgIC8vIFJlc3VsdCAx
NiBzaG91bGQgYmUgYmVsb3cgcmVzdWx0IDE1LgorICAgIEVYUEVDVF9UUlVFKHdlYk1hdGNoUmVj
dHNbMTVdLnkgPiB3ZWJNYXRjaFJlY3RzWzE0XS55KTsKKworICAgIC8vIFJlc3VsdCAxOCBzaG91
bGQgYmUgbm9ybWFsaXplZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHBvc2l0aW9uOnJlbGF0aXZlIGRp
diwgYW5kIG5vdCBpdCdzCisgICAgLy8gaW1tZWRpYXRlIGNvbnRhaW5pbmcgZGl2LiBDb25zZXF1
ZW50bHksIHJlc3VsdCAxOCBzaG91bGQgYmUgYWJvdmUgcmVzdWx0IDE3LgorICAgIEVYUEVDVF9U
UlVFKHdlYk1hdGNoUmVjdHNbMTddLnkgPiB3ZWJNYXRjaFJlY3RzWzE4XS55KTsKKwogICAgIC8v
IFJlc2l6aW5nIHNob3VsZCB1cGRhdGUgdGhlIHJlY3RzIHZlcnNpb24uCiAgICAgd2ViVmlldy0+
cmVzaXplKFdlYlNpemUoODAwLCA2MDApKTsKICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuQWxsUGVu
ZGluZ01lc3NhZ2VzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvZmluZC5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2ZpbmQu
aHRtbAppbmRleCA5NTJjODIzZmI3YmRjMTI4Zjg0MTg0NDVmZjU5NWJkZTk3ZTU0MjE1Li5jZjg3
MDAzYjFhZWE5NWNjMjk5NDBmNjZkY2VlNjg5ZDNjMTdjZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvZmluZC5odG1sCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9maW5kLmh0bWwKQEAgLTMsNCArMyw3IEBACiA8aW5wdXQgdmFs
dWU9ImZvbzIgYmFyMiBiYXoyIj4KIDx0ZXh0YXJlYT5mb28zIGJhcjMgYmF6MzwvdGV4dGFyZWE+
CiA8ZGl2IGNvbnRlbnRFZGl0YWJsZT0idHJ1ZSI+Zm9vNCA8c3Bhbj5iYXI0PC9zcGFuPiBiYXo0
PC9kaXY+Cis8c2VsZWN0PgorPG9wdGlvbiB2YWx1ZT0iZm9vNSI+YmFyNTwvb3B0aW9uPgorPC9z
ZWxlY3Q+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvZmluZF9pbl9wYWdlX2ZyYW1lLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvZmluZF9pbl9wYWdlX2ZyYW1lLmh0bWwKaW5kZXggYTkyMmE1MGJjZTdjYzQ0Y2U4
MjRiMWYwODE1MzEyMTc5NTAyZjQ0ZS4uNjIxZmY0MDBlM2FhZTYxOGU3ZGI5MWE4NTE4YjdkZjM1
YzEyZDA2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2Zp
bmRfaW5fcGFnZV9mcmFtZS5odG1sCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9maW5kX2luX3BhZ2VfZnJhbWUuaHRtbApAQCAtMjUsMTcgKzI1LDM0IEBAIGRpdi5maXhl
ZCB7CiAgIGhlaWdodDogMTAwcHg7CiAgIHBvc2l0aW9uOiBmaXhlZDsKIH0KK2Rpdi5yZWxhdGl2
ZS1vdmVyZmxvdyB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsK
KyAgaGVpZ2h0OiAxMDBweDsKK30KK2Rpdi5tYXJnaW4tb3ZlcmZsb3cgeworICBvdmVyZmxvdzog
aGlkZGVuOworICBtYXJnaW4tdG9wOjIwcHg7CisgIGhlaWdodDogNTBweDsKK30KK2Rpdi5hYnNv
bHV0ZSB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwcHg7CisgIGhlaWdodDogMjBw
eDsKKyAgd2lkdGg6IDgwcHg7CisgIGJhY2tncm91bmQtY29sb3I6ICJncmVlbiI7Cit9CiA8L3N0
eWxlPgogPC9oZWFkPgogPGJvZHk+CiBUaGlzIGlzIGEgdGVzdC4KLTwvYnI+PC9icj4KLTwvYnI+
PC9icj4KLTwvYnI+PC9icj4KKzxicj4KKzxicj4KKzxicj4KIEZvbyBiYXIuCi08L2JyPjwvYnI+
Ci08L2JyPjwvYnI+Ci08L2JyPjwvYnI+Cis8YnI+Cis8YnI+Cis8YnI+CiByZXN1bHQgMDIKIDxk
aXYgY2xhc3M9InRyYW5zZm9ybSI+CiByZXN1bHQgMDMKQEAgLTQ4LDEzICs2NSwxMyBAQCByZXN1
bHQgMDYKIDxkaXYgY2xhc3M9InNjcm9sbCI+CiByZXN1bHQgMDcKIEZvbyBiYXIuCi08L2JyPjwv
YnI+Ci08L2JyPjwvYnI+Ci08L2JyPjwvYnI+Cis8YnI+Cis8YnI+Cis8YnI+CiByZXN1bHQgMDgK
IDwvZGl2PgogcmVzdWx0IDA5Ci08L2JyPjwvYnI+Cis8YnI+CiByZXN1bHQgMTAKIDx0YWJsZSBi
b3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIxMCIgY2VsbHNwYWNpbmc9IjEwIj4KIDx0cj4KQEAgLTcx
LDUgKzg4LDIyIEBAIHJlc3VsdCAxMAogPC90cj4KIDwvdGFibGU+CiByZXN1bHQgMTUKKzxkaXYg
Y2xhc3M9InRyYW5zZm9ybSI+Cis8ZGl2IHN0eWxlPSJoZWlnaHQ6MHB4Ij4KKyAgPGRpdiBzdHls
ZT0iZmxvYXQ6bGVmdDsiPgorICAgIHJlc3VsdCAxNgorICA8L2Rpdj4KKzwvZGl2PgorPC9kaXY+
Cis8ZGl2IGNsYXNzPSJyZWxhdGl2ZS1vdmVyZmxvdyI+CisgIDxkaXYgY2xhc3M9Im1hcmdpbi1v
dmVyZmxvdyI+CisgICAgcmVzdWx0IDE3CisgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUiPnJlc3Vs
dCAxODwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgorPCEtLSBUZXN0cyB0aGF0IHdpbGwgbm90IHlp
ZWxkIG1hdGNoZXMgc2hvdWxkIGdvIGJlbG93IHRoaXMgbGluZS4gLS0+Cis8c2VsZWN0PgorPG9w
dGlvbj5yZXN1bHQgMTk8L29wdGlvbj4KKzwvc2VsZWN0PgogPC9ib2R5PgogPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>