<?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>81104</bug_id>
          
          <creation_ts>2012-03-14 07:36:00 -0700</creation_ts>
          <short_desc>REGRESSION: getBBox returns incorrect results with empty containers</short_desc>
          <delta_ts>2012-03-26 07:37:22 -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>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="Stephen Chenney">schenney</reporter>
          <assigned_to name="Philip Rogers">pdr</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>krit</cc>
    
    <cc>longsonr</cc>
    
    <cc>pdr</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>schenney</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>578373</commentid>
    <comment_count>0</comment_count>
      <attachid>131841</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-03-14 07:36:00 -0700</bug_when>
    <thetext>Created attachment 131841
Layout test

When getBBox is called on a container that contains an empty container and some other content, it returns a bounding box that includes the origin, when in fact it should just include the non-empty container&apos;s bound.

Attached is a potential layout test and the expected result as a ref-test.

http://code.google.com/p/chromium/issues/detail?id=114590</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578374</commentid>
    <comment_count>1</comment_count>
      <attachid>131842</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-03-14 07:36:19 -0700</bug_when>
    <thetext>Created attachment 131842
Ref test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578488</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-14 09:32:12 -0700</bug_when>
    <thetext>Why do you need a ref test here at all? A pure JS test with DRT is the better choice. Nevertheless, I didn&apos;t understand what you expect.

Currently we get (100,100,100,100) as BBox for the &lt;g&gt; with the name &apos;container&apos;.

Other browsers:
Opera:  (100,100,100,100)
Firefox:  (0,0,200,200)
IE: (100,100,100,100)

So it seems to me that most browsers ignore the empty g. I would mark this bug as invalid, because I would ignore the g as well. It has not content, therefore no bounding box.

Also, please use &lt;!DOCTYPE html&gt; and omit ns declarations on uploading html files. Makes it easier to debug it on IE :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578511</commentid>
    <comment_count>3</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-03-14 10:02:12 -0700</bug_when>
    <thetext>What did you test on? The Chrome bug says:

Issue not reproducible in 17.0.963.79 (Official Build 125985). Issue reproducible with 18.0.1025.11 (Official Build 121089) and 19.0.1068.0 (Official Build 126342).

I don&apos;t really care how we test it. I just did what was fastest to get up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578547</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-14 10:42:14 -0700</bug_when>
    <thetext>I indeed did not test trunk. Didn&apos;t realized that it is a regression (or progression). Now WebKit gives back (0,0,200,200).

Can you please write a mail to www-svg if and how empty SVGGElements influence the bounding box of the parent?

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578567</commentid>
    <comment_count>5</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-03-14 11:06:14 -0700</bug_when>
    <thetext>I don&apos;t think it&apos;s necessary to ask the WG. The spec is clear and there is only one rect inside the group.

http://www.w3.org/TR/SVG/types.html#__svg__SVGLocatable__getBBox
SVGRect getBBox()
Returns the tight bounding box in current user space (i.e., after application of the ‘transform’ attribute, if any) on the geometry of all contained graphics elements, exclusive of stroking, clipping, masking and filter effects). Note that getBBox must return the actual bounding box at the time the method was called, even in case the element has not yet been rendered.
Returns
An SVGRect object that defines the bounding box.

http://www.w3.org/TR/SVG/intro.html#Definitions
graphics element:
One of the element types that can cause graphics to be drawn onto the target canvas. Specifically: ‘circle’, ‘ellipse’, ‘image’, ‘line’, ‘path’, ‘polygon’, ‘polyline’, ‘rect’, ‘text’ and ‘use’.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578573</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-14 11:13:00 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I don&apos;t think it&apos;s necessary to ask the WG. The spec is clear and there is only one rect inside the group.
&gt; 
&gt; http://www.w3.org/TR/SVG/types.html#__svg__SVGLocatable__getBBox
&gt; SVGRect getBBox()
&gt; Returns the tight bounding box in current user space (i.e., after application of the ‘transform’ attribute, if any) on the geometry of all contained graphics elements, exclusive of stroking, clipping, masking and filter effects). Note that getBBox must return the actual bounding box at the time the method was called, even in case the element has not yet been rendered.
&gt; Returns
&gt; An SVGRect object that defines the bounding box.
&gt; 
&gt; http://www.w3.org/TR/SVG/intro.html#Definitions
&gt; graphics element:
&gt; One of the element types that can cause graphics to be drawn onto the target canvas. Specifically: ‘circle’, ‘ellipse’, ‘image’, ‘line’, ‘path’, ‘polygon’, ‘polyline’, ‘rect’, ‘text’ and ‘use’.

Ok, than this bug is a regression. Adding Rob, because I think he changed the definition for empty on another place. Maybe this influences this bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578578</commentid>
    <comment_count>7</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-03-14 11:19:33 -0700</bug_when>
    <thetext>A big part of the problem is that WebKit and SVG does not define the notion of an &quot;invalid&quot; as opposed to &quot;zero-sized&quot; bounding box. It wouldn&apos;t surprise me if the empty &lt;g&gt; element is returning (0, 0, 0, 0) as the bound and the code in its parent just combines that with the rect&apos;s bound.

This is problematic because I also read the spec to mean that a path with a single move(0,0) in it should contribute to the bounding box, even though its bound is also (0,0,0,0).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578581</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-14 11:20:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; A big part of the problem is that WebKit and SVG does not define the notion of an &quot;invalid&quot; as opposed to &quot;zero-sized&quot; bounding box. It wouldn&apos;t surprise me if the empty &lt;g&gt; element is returning (0, 0, 0, 0) as the bound and the code in its parent just combines that with the rect&apos;s bound.
&gt; 
&gt; This is problematic because I also read the spec to mean that a path with a single move(0,0) in it should contribute to the bounding box, even though its bound is also (0,0,0,0).

That seems to be indeed the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580476</commentid>
    <comment_count>9</comment_count>
    <who name="Robert Longson">longsonr</who>
    <bug_when>2012-03-16 06:51:33 -0700</bug_when>
    <thetext>FWIW Firefox:  (0,0,200,200) was a trunk regression which is unlikely to make it to a release. Trunk now returns (100,100,100,100)

Firefox also won&apos;t run the Layout test file because it uses document.getElementsByName and SVG elements don&apos;t have a name property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581819</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-19 08:17:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; A big part of the problem is that WebKit and SVG does not define the notion of an &quot;invalid&quot; as opposed to &quot;zero-sized&quot; bounding box. It wouldn&apos;t surprise me if the empty &lt;g&gt; element is returning (0, 0, 0, 0) as the bound and the code in its parent just combines that with the rect&apos;s bound.
&gt; 
&gt; This is problematic because I also read the spec to mean that a path with a single move(0,0) in it should contribute to the bounding box, even though its bound is also (0,0,0,0).

How about introducing a static FloatRect::invalid(), and use that whenever we want to indicate error state?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581884</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-19 09:46:24 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; &gt; A big part of the problem is that WebKit and SVG does not define the notion of an &quot;invalid&quot; as opposed to &quot;zero-sized&quot; bounding box. It wouldn&apos;t surprise me if the empty &lt;g&gt; element is returning (0, 0, 0, 0) as the bound and the code in its parent just combines that with the rect&apos;s bound.
&gt; &gt; 
&gt; &gt; This is problematic because I also read the spec to mean that a path with a single move(0,0) in it should contribute to the bounding box, even though its bound is also (0,0,0,0).
&gt; 
&gt; How about introducing a static FloatRect::invalid(), and use that whenever we want to indicate error state?

I would definitely vote for that! But do other WebKit devs see the same usage?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581915</commentid>
    <comment_count>12</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-03-19 10:30:47 -0700</bug_when>
    <thetext>Adding an invalid FloatRect object would have impact throughout WebKit. There is a lot of code that treats (0, 0, 0, 0) rectangles specially. If we decide to push for a special invalid rect object we would need to look at every instance of checks for a 0,0,0,0 rectangle and decide which are looking to see if a rectangle is &quot;empty&quot; and which are for a rectangle that is undefined or unset.

Note that Core Graphics uses (0, 0, -1, -1) for &quot;null&quot; rectangle and this has bitten us in the past. See bug 65796, comment #65 and later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581920</commentid>
    <comment_count>13</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-03-19 10:34:00 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Adding an invalid FloatRect object would have impact throughout WebKit. There is a lot of code that treats (0, 0, 0, 0) rectangles specially. If we decide to push for a special invalid rect object we would need to look at every instance of checks for a 0,0,0,0 rectangle and decide which are looking to see if a rectangle is &quot;empty&quot; and which are for a rectangle that is undefined or unset.
&gt; 
&gt; Note that Core Graphics uses (0, 0, -1, -1) for &quot;null&quot; rectangle and this has bitten us in the past. See bug 65796, comment #65 and later.

I talked with Niko for a bit about this and a magic value of max_val - 1 could be fairly low-impact. I&apos;m not a huge fan of magic constants, but I&apos;m even less of a fan of an extra boolean hanging off FloatRect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585454</commentid>
    <comment_count>14</comment_count>
      <attachid>133293</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-03-22 10:37:04 -0700</bug_when>
    <thetext>Created attachment 133293
First pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585476</commentid>
    <comment_count>15</comment_count>
      <attachid>133293</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-22 10:56:55 -0700</bug_when>
    <thetext>Comment on attachment 133293
First pass

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

&gt; Source/WebCore/platform/graphics/FloatRect.h:101
&gt; +    static bool isValid(FloatRect &amp;rect) { return rect.width() &gt;= 0 &amp;&amp; rect.height() &gt;= 0; }
&gt; +    static FloatRect invalid() { return FloatRect(0, 0, -1, -1); }

Are you sure that no code in WebCore is using negative with or height for FloatRect in internal code or in Canvas? Even if they would not call isValid, it would still be strange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585482</commentid>
    <comment_count>16</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-03-22 11:01:27 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 133293 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133293&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FloatRect.h:101
&gt; &gt; +    static bool isValid(FloatRect &amp;rect) { return rect.width() &gt;= 0 &amp;&amp; rect.height() &gt;= 0; }
&gt; &gt; +    static FloatRect invalid() { return FloatRect(0, 0, -1, -1); }
&gt; 
&gt; Are you sure that no code in WebCore is using negative with or height for FloatRect in internal code or in Canvas? Even if they would not call isValid, it would still be strange.

I am not sure which is why I added the extra comment and made it static. Another option would be to hide this in SVGRenderSupport, but I think that&apos;s kind-of dirty. Suggestions welcome, as I&apos;m out of ideas on this one :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585487</commentid>
    <comment_count>17</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-03-22 11:05:26 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 133293 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133293&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/FloatRect.h:101
&gt; &gt; &gt; +    static bool isValid(FloatRect &amp;rect) { return rect.width() &gt;= 0 &amp;&amp; rect.height() &gt;= 0; }
&gt; &gt; &gt; +    static FloatRect invalid() { return FloatRect(0, 0, -1, -1); }
&gt; &gt; 
&gt; &gt; Are you sure that no code in WebCore is using negative with or height for FloatRect in internal code or in Canvas? Even if they would not call isValid, it would still be strange.
&gt; 
&gt; I am not sure which is why I added the extra comment and made it static. Another option would be to hide this in SVGRenderSupport, but I think that&apos;s kind-of dirty. Suggestions welcome, as I&apos;m out of ideas on this one :/

The position for the static FloatRect::invalid is fine. I am more wondering about (0,0,-1,-1). Didn&apos;t you want to use max_val - 1 or sth. like that for invalid rects? Might make more sense. (nan,nan,nan,nan) would definitely be a invalid rect, but might be a bit dangerous ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585546</commentid>
    <comment_count>18</comment_count>
      <attachid>133293</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-22 11:50:22 -0700</bug_when>
    <thetext>Comment on attachment 133293
First pass

Attachment 133293 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12116170

New failing tests:
svg/custom/getBBox-perpendicular-path.svg
svg/filters/filter-placement-issue.svg
svg/clip-path/clipper-placement-issue.svg
svg/dynamic-updates/SVGFEBlendElement-dom-in-attr.html
svg/filters/feGaussianBlur.svg
svg/filters/filter-refresh.svg
svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr.html
svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr.html
svg/filters/filterRes.svg
svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop.html
svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop.html
svg/W3C-SVG-1.1/filters-blend-01-b.svg
svg/repaint/filter-child-repaint.svg
svg/W3C-SVG-1.1/filters-gauss-01-b.svg
svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586183</commentid>
    <comment_count>19</comment_count>
      <attachid>133293</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-23 02:16:46 -0700</bug_when>
    <thetext>Comment on attachment 133293
First pass

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

Patch looks good, still some issues to consider though:

&gt; Source/WebCore/platform/graphics/FloatRect.h:99
&gt; +    // We define an invalid FloatRect as having negative width or height.

This is heavy, what I have in mind, is passing around a reference to an internal static FloatRect, like:
static const FloatRect&amp; invalidFloatRect()
{
    static const float kInvalidFloat = std::numeric_limits&lt;float&gt;::max() - 1;
    DEFINE_STATIC_LOCAL(FloatRect, invalidRect, (kInvalidFloat, kInvalidFloat, kInvalidFloat, kInvalidFloat));
    return invalidRect;
}

FloatRect defaultBoundingBoxForContainer = invalidFloatRect();
You could make invalidFloatRect() a free-function, no need for a class-static, but if you prefer it, you can keep it there.
You can also save the isValid() method completely, and use: someRect == invalidRect() to compare.

IMHO we should also use special values like flt_max-1, to distinguish from negative values for the size, even if that could be used for that. To avoid clashes, or problems like Dirk mentioned in his review, its safer to not reuse negative values for the sake of determining the validity of a FloatRect.

&gt; Source/WebCore/rendering/svg/RenderSVGContainer.cpp:153
&gt;      m_strokeBoundingBox = FloatRect();

The stroke bounding box should suffer from the same problem no?
I could imagine it might make sense to keep the repaint bbox as-is, but I might be wrong (didn&apos;t investigate)

&gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:105
&gt; +                    isObjectBoundingBoxValid = false;

= true, no? :-) That should explain possible pixel test failures..

&gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:118
&gt; +                    isObjectBoundingBoxValid = false;

Ditto.

I&apos;m aware this is just a first-stab, but code like this should really be shared, in a static inline helper method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587211</commentid>
    <comment_count>20</comment_count>
      <attachid>133663</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-03-24 17:47:16 -0700</bug_when>
    <thetext>Created attachment 133663
Asking reviewers what they think about a different approach

I found that introducing an invalid objectBoundingBox is actually very noisy and expensive: a lot of code, e.g., hit testing, ends up calling objectBoundingBox() and needs to have guards added to check for the invalid state. Furthermore, in most cases an empty bounding box (0,0,0,0) ends up being the desired fallback anyway.

I&apos;ve attached a speculative approach that goes a different direction: adding a flag to just RenderSVGRoot and RenderSVGContainer for whether the contained object bounding box is invalid. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587276</commentid>
    <comment_count>21</comment_count>
      <attachid>133663</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-03-25 05:07:09 -0700</bug_when>
    <thetext>Comment on attachment 133663
Asking reviewers what they think about a different approach

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

That approach is much less intrusive, and I think its the best mid-term solution. If we ever encounter non-SVG code suffering from similar problems, we can always come back and introduce FloatRect::invalid().
I&apos;ll r+ this as-is, if someone dislikes this concept, feel free to r- with reasons :-)

&gt; Source/WebCore/ChangeLog:20
&gt; +        Reviewed by NOBODY (OOPS!).

This line should be on top.

&gt; Source/WebCore/rendering/svg/RenderSVGContainer.h:45
&gt; +    bool isObjectBoundingBoxValid() { return m_objectBoundingBoxValid; }

Make it const.

&gt; Source/WebCore/rendering/svg/RenderSVGContainer.h:80
&gt; +    bool m_objectBoundingBoxValid;

You could move this down and mark as : 1, as its done for m_needsBoundariesUpdate, which in theory saves space.

&gt; Source/WebCore/rendering/svg/RenderSVGRoot.h:107
&gt; +    bool m_objectBoundingBoxValid;

This can also be moved down and marked as :1.

&gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:88
&gt; +// Update an object&apos;s bounding box taking into account the validity of each object bounding box.

typo: objects

&gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:92
&gt; +    if (otherValid) {

Early exit if !otherValid.

&gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:94
&gt; +        if (objectBoundingBoxValid)
&gt; +            objectBoundingBox.uniteEvenIfEmpty(otherBoundingBox);

Ditto. Early exit instead of using an else branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587316</commentid>
    <comment_count>22</comment_count>
      <attachid>133685</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-03-25 11:50:34 -0700</bug_when>
    <thetext>Created attachment 133685
Update per reviewer comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587318</commentid>
    <comment_count>23</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-03-25 11:58:48 -0700</bug_when>
    <thetext>Thanks again for the quick review. It&apos;s not every project that one can get quality reviews in just a few hours over the weekend :) Replies in-line.

(In reply to comment #21)
&gt; (From update of attachment 133663 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133663&amp;action=review
&gt; 
&gt; That approach is much less intrusive, and I think its the best mid-term solution. If we ever encounter non-SVG code suffering from similar problems, we can always come back and introduce FloatRect::invalid().
Agreed. Another option would be to introduce something like InvalidatableFloatRect that extends FloatRect but has a boolean for validity. This could just fall back to normal FloatRect codepaths anywhere validity wasn&apos;t checked.

&gt; I&apos;ll r+ this as-is, if someone dislikes this concept, feel free to r- with reasons :-)
&gt; 

I&apos;ll hold off on committing until Monday so Dirk and Stephen have a chance to comment.

&gt; &gt; Source/WebCore/ChangeLog:20
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; 
&gt; This line should be on top.

Done.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGContainer.h:45
&gt; &gt; +    bool isObjectBoundingBoxValid() { return m_objectBoundingBoxValid; }
&gt; 
&gt; Make it const.

Done.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGContainer.h:80
&gt; &gt; +    bool m_objectBoundingBoxValid;
&gt; 
&gt; You could move this down and mark as : 1, as its done for m_needsBoundariesUpdate, which in theory saves space.

I don&apos;t think this is possible because we need to pass m_needsBoundariesUpdate by reference and I don&apos;t think that&apos;s possible if it&apos;s packed in a bitfield.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGRoot.h:107
&gt; &gt; +    bool m_objectBoundingBoxValid;
&gt; 
&gt; This can also be moved down and marked as :1.
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:88
&gt; &gt; +// Update an object&apos;s bounding box taking into account the validity of each object bounding box.
&gt; 
&gt; typo: objects

I think this is correct but it&apos;s hard to parse since it&apos;s ambiguous whether &quot;object bounding box&quot; is a noun. I just reworded the sentence to say &quot;Update a bounding box taking into account the validity of the other bounding box.&quot;

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:92
&gt; &gt; +    if (otherValid) {
&gt; 
&gt; Early exit if !otherValid.

Done.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGRenderSupport.cpp:94
&gt; &gt; +        if (objectBoundingBoxValid)
&gt; &gt; +            objectBoundingBox.uniteEvenIfEmpty(otherBoundingBox);
&gt; 
&gt; Ditto. Early exit instead of using an else branch.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587726</commentid>
    <comment_count>24</comment_count>
      <attachid>133685</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-26 07:37:16 -0700</bug_when>
    <thetext>Comment on attachment 133685
Update per reviewer comments

Clearing flags on attachment: 133685

Committed r112091: &lt;http://trac.webkit.org/changeset/112091&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587727</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-26 07:37:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>131841</attachid>
            <date>2012-03-14 07:36:00 -0700</date>
            <delta_ts>2012-03-14 07:36:00 -0700</delta_ts>
            <desc>Layout test</desc>
            <filename>getBBox-with-empty-container.html</filename>
            <type>text/html</type>
            <size>1041</size>
            <attacher name="Stephen Chenney">schenney</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgPGhlYWQ+CiAgICA8c2NyaXB0PgogICAgICBmdW5jdGlvbiBvbmxvYWQoKSB7CiAg
ICAgICAgdmFyIGJib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiY29udGFpbmVyIilb
MF0uZ2V0QkJveCgpOwogICAgICAgIHZhciBib3VuZFJlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInJlY3QiKTsKICAgICAgICBib3Vu
ZFJlY3Quc2V0QXR0cmlidXRlKCJ4IiwgKGJib3gueCAtIDUpLnRvU3RyaW5nKCkpOwogICAgICAg
IGJvdW5kUmVjdC5zZXRBdHRyaWJ1dGUoInkiLCAoYmJveC55IC0gNSkudG9TdHJpbmcoKSk7CiAg
ICAgICAgYm91bmRSZWN0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCAoYmJveC53aWR0aCArIDEwKS50
b1N0cmluZygpKTsKICAgICAgICBib3VuZFJlY3Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLCAoYmJv
eC5oZWlnaHQgKyAxMCkudG9TdHJpbmcoKSk7CiAgICAgICAgYm91bmRSZWN0LnNldEF0dHJpYnV0
ZSgic3Ryb2tlIiwgImdyZWVuIik7CiAgICAgICAgYm91bmRSZWN0LnNldEF0dHJpYnV0ZSgiZmls
bCIsICJub25lIik7CiAgICAgICAgdmFyIHN2Z1Jvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgic3ZnIilbMF07CiAgICAgICAgc3ZnUm9vdC5hcHBlbmRDaGlsZChib3VuZFJlY3Qp
OwogICAgICB9CiAgICA8L3NjcmlwdD4KICA8L2hlYWQ+CiAgPGJvZHkgb25sb2FkPSJvbmxvYWQo
KSI+CiAgICA8c3ZnIG5hbWU9InN2Z1Jvb3QiIHdpZHRoPSIxNDg1IiBoZWlnaHQ9IjEwNTAiIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgIDxnIG5hbWU9ImNvbnRhaW5l
ciI+CiAgICAgICAgPGc+PC9nPgogICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwMCwg
MTAwKSI+CiAgICAgICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEw
MCIgZmlsbD0iZ3JlZW4iIC8+CiAgICAgICAgPC9nPgogICAgICA8L2c+CiAgICA8L3N2Zz4KICA8
L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>131842</attachid>
            <date>2012-03-14 07:36:19 -0700</date>
            <delta_ts>2012-03-14 07:36:19 -0700</delta_ts>
            <desc>Ref test</desc>
            <filename>getBBox-with-empty-container-expected.html</filename>
            <type>text/html</type>
            <size>398</size>
            <attacher name="Stephen Chenney">schenney</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgPGJvZHkgb25sb2FkPSJvbmxvYWQoKSI+CiAgICA8c3ZnIG5hbWU9InN2Z1Jvb3Qi
IHdpZHRoPSIxNDg1IiBoZWlnaHQ9IjEwNTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZyI+CiAgICAgIDxnIG5hbWU9ImNvbnRhaW5lciI+CiAgICAgICAgPGcgdHJhbnNmb3JtPSJ0
cmFuc2xhdGUoMTAwLCAxMDApIj4KICAgICAgICAgIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIx
MDAiIGhlaWdodD0iMTAwIiBmaWxsPSJncmVlbiIgLz4KICAgICAgICAgIDxyZWN0IHg9Ii01IiB5
PSItNSIgd2lkdGg9IjExMCIgaGVpZ2h0PSIxMTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iZ3JlZW4i
Lz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgogIDwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133293</attachid>
            <date>2012-03-22 10:37:04 -0700</date>
            <delta_ts>2012-03-24 17:47:16 -0700</delta_ts>
            <desc>First pass</desc>
            <filename>81104.1.patch</filename>
            <type>text/plain</type>
            <size>9013</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTcyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAzLTIyICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIGludmFsaWQgRmxvYXRSZWN0
IGNvbmNlcHQgYW5kIHVzZSBpdCBmb3IgZW1wdHkgYm91bmRpbmcgYm94ZXMgb24gY29udGFpbmVy
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODExMDQK
KworICAgICAgICBBbiBlbXB0eSA8Zz4gZWxlbWVudCBuZWVkcyB0byB1c2UgYW4gaW52YWxpZCBi
b3VuZGluZyBib3ggYmVjYXVzZSBhbiBlbXB0eQorICAgICAgICBib3VuZGluZyBib3ggaXNuJ3Qg
dGhlIGRlZmF1bHQgc3RhdGUuIFRoaXMgY2hhbmdlIGludHJvZHVjZXMgdGhlIGNvbmNlcHQgb2YK
KyAgICAgICAgYW4gaW52YWxpZCBib3VuZGluZyBib3ggd2l0aCBuZWdhdGl2ZSB3aWR0aC9oZWln
aHQsIGFuZCB1c2VzIGl0IGZvcgorICAgICAgICBjYWxjdWxhdGluZyBib3VuZGluZyBib3hlcyB1
c2VkIHdpdGggZ2V0QkJveCgpLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IHN2Zy9jdXN0b20vZ2V0QkJveC1lbXB0eS1jb250YWluZXIuaHRt
bAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgIChG
bG9hdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0Ojppc1ZhbGlkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6aW52YWxpZCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29u
dGFpbmVyOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6dXBk
YXRlQ2FjaGVkQm91bmRhcmllcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVD
b250YWluZXJCb3VuZGluZ0JveGVzKToKKwogMjAxMi0wMy0yMiAgWGluZ25hbiBXYW5nICA8eGlu
Z25hbi53YW5nQGludGVsLmNvbT4KIAogICAgICAgICBSZXZlcmJDb252b2x2ZXI6OmxhdGVuY3lG
cmFtZXMoKSBzaG91bGQgcmV0dXJuIDAuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24gMTExNjkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYg
Kzk1LDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBGbG9hdFJlY3QgbmFycm93UHJlY2lzaW9u
KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKIAorICAg
IC8vIENhbGxpbmcgY29kZSBtdXN0IGFsd2F5cyBjaGVjayBmb3IgdmFsaWRpdHksIGFzIHdlIGRv
IG5vdCBkbyB0aGVzZSBjaGVja3MgYXV0b21hdGljYWxseS4KKyAgICAvLyBXZSBkZWZpbmUgYW4g
aW52YWxpZCBGbG9hdFJlY3QgYXMgaGF2aW5nIG5lZ2F0aXZlIHdpZHRoIG9yIGhlaWdodC4KKyAg
ICBzdGF0aWMgYm9vbCBpc1ZhbGlkKEZsb2F0UmVjdCAmcmVjdCkgeyByZXR1cm4gcmVjdC53aWR0
aCgpID49IDAgJiYgcmVjdC5oZWlnaHQoKSA+PSAwOyB9CisgICAgc3RhdGljIEZsb2F0UmVjdCBp
bnZhbGlkKCkgeyByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSk7IH0KKwogICAgIEZsb2F0
UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CiAgICAgRmxvYXRT
aXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNp
b24gMTExNjkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250
YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBSZW5kZXJT
VkdDb250YWluZXI6OmFkZEZvY3VzUmluZ1JlYwogCiB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6
dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCiB7Ci0gICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZs
b2F0UmVjdCgpOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3Q6OmludmFsaWQo
KTsKICAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CiAgICAgbV9yZXBhaW50
Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiAxMTE2OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBSZW5kZXJTVkdSb290OjptYXBMb2NhbFRvQ29udGFp
bmVyKAogCiB2b2lkIFJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQogewot
ICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICBtX29iamVjdEJvdW5k
aW5nQm94ID0gRmxvYXRSZWN0OjppbnZhbGlkKCk7CiAgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9
IEZsb2F0UmVjdCgpOwogICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcAkocmV2aXNpb24gMTExNjkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsOCBAQCB2
b2lkIFNWR1JlbmRlclN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluCiAKIHZvaWQgU1ZHUmVuZGVy
U3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0
KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgc3Ry
b2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94KQogewotICAgIGJv
b2wgaXNGaXJzdENoaWxkID0gdHJ1ZTsKKyAgICBib29sIGlzT2JqZWN0Qm91bmRpbmdCb3hWYWxp
ZCA9IEZsb2F0UmVjdDo6aXNWYWxpZChvYmplY3RCb3VuZGluZ0JveCk7CisgICAgRmxvYXRSZWN0
IGN1cnJlbnRCb3VuZGluZ0JveDsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0g
Y29udGFpbmVyLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc1NWR0hpZGRlbkNvbnRhaW5lcigp
KQpAQCAtOTUsMjIgKzk2LDMyIEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRh
aW5lckIKIAogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSA9IGN1cnJl
bnQtPmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKTsKICAgICAgICAgaWYgKHRyYW5zZm9ybS5pc0lk
ZW50aXR5KCkpIHsKLSAgICAgICAgICAgIGlmIChpc0ZpcnN0Q2hpbGQpCi0gICAgICAgICAgICAg
ICAgb2JqZWN0Qm91bmRpbmdCb3ggPSBjdXJyZW50LT5vYmplY3RCb3VuZGluZ0JveCgpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9iamVjdEJvdW5kaW5nQm94LnVuaXRlRXZl
bklmRW1wdHkoY3VycmVudC0+b2JqZWN0Qm91bmRpbmdCb3goKSk7CisgICAgICAgICAgICBjdXJy
ZW50Qm91bmRpbmdCb3ggPSBjdXJyZW50LT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgICAgICAg
ICAgaWYgKEZsb2F0UmVjdDo6aXNWYWxpZChjdXJyZW50Qm91bmRpbmdCb3gpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGlzT2JqZWN0Qm91bmRpbmdCb3hWYWxpZCkKKyAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0Qm91bmRpbmdCb3gudW5pdGVFdmVuSWZFbXB0eShjdXJyZW50Qm91bmRpbmdCb3gp
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvYmplY3RCb3Vu
ZGluZ0JveCA9IGN1cnJlbnRCb3VuZGluZ0JveDsKKyAgICAgICAgICAgICAgICAgICAgaXNPYmpl
Y3RCb3VuZGluZ0JveFZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZShjdXJyZW50LT5zdHJv
a2VCb3VuZGluZ0JveCgpKTsKICAgICAgICAgICAgIHJlcGFpbnRCb3VuZGluZ0JveC51bml0ZShj
dXJyZW50LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChpc0ZpcnN0Q2hpbGQpCi0gICAgICAgICAgICAgICAgb2JqZWN0
Qm91bmRpbmdCb3ggPSB0cmFuc2Zvcm0ubWFwUmVjdChjdXJyZW50LT5vYmplY3RCb3VuZGluZ0Jv
eCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvYmplY3RCb3VuZGluZ0Jv
eC51bml0ZUV2ZW5JZkVtcHR5KHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPm9iamVjdEJvdW5k
aW5nQm94KCkpKTsKKyAgICAgICAgICAgIGN1cnJlbnRCb3VuZGluZ0JveCA9IHRyYW5zZm9ybS5t
YXBSZWN0KGN1cnJlbnQtPm9iamVjdEJvdW5kaW5nQm94KCkpOworICAgICAgICAgICAgaWYgKEZs
b2F0UmVjdDo6aXNWYWxpZChjdXJyZW50Qm91bmRpbmdCb3gpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGlzT2JqZWN0Qm91bmRpbmdCb3hWYWxpZCkKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0
Qm91bmRpbmdCb3gudW5pdGVFdmVuSWZFbXB0eShjdXJyZW50Qm91bmRpbmdCb3gpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvYmplY3RCb3VuZGluZ0JveCA9
IGN1cnJlbnRCb3VuZGluZ0JveDsKKyAgICAgICAgICAgICAgICAgICAgaXNPYmplY3RCb3VuZGlu
Z0JveFZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZSh0cmFuc2Zvcm0ubWFwUmVjdChjdXJy
ZW50LT5zdHJva2VCb3VuZGluZ0JveCgpKSk7CiAgICAgICAgICAgICByZXBhaW50Qm91bmRpbmdC
b3gudW5pdGUodHJhbnNmb3JtLm1hcFJlY3QoY3VycmVudC0+cmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSkpOwogICAgICAgICB9Ci0KLSAgICAgICAgaXNGaXJzdENoaWxkID0gZmFsc2U7
CiAgICAgfQogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTE3MjUpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wMy0yMiAgUGhp
bGlwIFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBpbnZhbGlkIEZsb2F0
UmVjdCBjb25jZXB0IGFuZCB1c2UgaXQgZm9yIGVtcHR5IGJvdW5kaW5nIGJveGVzIG9uIGNvbnRh
aW5lcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgx
MTA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
dmcvY3VzdG9tL2dldEJCb3gtZW1wdHktY29udGFpbmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogc3ZnL2N1c3RvbS9nZXRCQm94LWVtcHR5LWNvbnRhaW5lci5odG1sOiBBZGRlZC4K
KwogMjAxMi0wMy0yMiAgRW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCB0ZXN0X2V4cGVjdGF0aW9ucyB1cGRhdGUgZm9yIGNocm9taXVtLgpJbmRl
eDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9nZXRCQm94LWVtcHR5LWNvbnRhaW5lci1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9nZXRCQm94LWVtcHR5
LWNvbnRhaW5lci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcv
Y3VzdG9tL2dldEJCb3gtZW1wdHktY29udGFpbmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSBAQAorUEFTUywgYm91bmRpbmcgYm94IHNpemVzIGFyZSAoMTAwLCAxMDApIGFu
ZCAoMTAwLCAxMDApCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2dldEJCb3gtZW1wdHkt
Y29udGFpbmVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9nZXRC
Qm94LWVtcHR5LWNvbnRhaW5lci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9nZXRCQm94LWVtcHR5LWNvbnRhaW5lci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPCEtLSBUZXN0IHRoYXQgc3ZnIGJv
dW5kaW5nIGJveGVzIGFyZSBub3QgYWZmZWN0ZWQgYnkgZW1wdHkgY29udGFpbmVycyAtLT4KKyAg
ICA8aGVhZD4KKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAg
ICAgICAgZnVuY3Rpb24gY2hlY2tCb3VuZGluZ0JveGVzRXF1YWwoKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAg
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAgICAg
ICAgIC8vIEVuc3VyZSBib3RoIGJveGVzIGFyZSB0aGUgc2FtZSBzaXplLCBtZWFuaW5nIHRoZSBl
bXB0eSA8Zz4gZG9lcyBub3QgYWZmZWN0IHRoZSBiYm94IHNpemUuCisgICAgICAgICAgICAgICAg
dmFyIGJib3hBID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhJykuZ2V0QkJveCgpOworICAg
ICAgICAgICAgICAgIHZhciBiYm94QiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnYicpLmdl
dEJCb3goKTsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9ICJGQUlMIjsKKyAgICAgICAg
ICAgICAgICBpZiAoYmJveEEud2lkdGggPT0gYmJveEIud2lkdGggJiYgYmJveEEuaGVpZ2h0ID09
IGJib3hCLmhlaWdodCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9ICJQQVNTIjsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9IHJlc3VsdHMgKyAiLCBib3Vu
ZGluZyBib3ggc2l6ZXMgYXJlICgiICsgCisgICAgICAgICAgICAgICAgICAgIGJib3hBLndpZHRo
ICsgIiwgIiArIGJib3hBLmhlaWdodCArICIpIGFuZCAoIiArIAorICAgICAgICAgICAgICAgICAg
ICBiYm94Qi53aWR0aCArICIsICIgKyBiYm94Qi5oZWlnaHQgKyAiKSI7CisgICAgICAgICAgICB9
CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9ImNoZWNr
Qm91bmRpbmdCb3hlc0VxdWFsKCkiPgorICAgICAgICA8c3ZnIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPiAgICAKKyAgICAgICAgICAg
IDxnIGlkPSJnYSI+CisgICAgICAgICAgICAgICAgPGc+PC9nPgorICAgICAgICAgICAgICAgIDxn
IHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwMCwgMTAwKSI+CisgICAgICAgICAgICAgICAgCTxnPjwv
Zz4KKyAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVp
Z2h0PSIxMDAiIHJ4PSIxMCIgcnk9IjEwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0i
MSIgZmlsbD0iI2ZmZmZjYyIgLz4KKyAgICAgICAgICAgICAgICA8L2c+CisgICAgICAgICAgICA8
L2c+CisgICAgICAgICAgICA8ZyBpZD0iZ2IiPgorICAgICAgICAgICAgICAgIDxnIHRyYW5zZm9y
bT0idHJhbnNsYXRlKDEwMCwgMTAwKSI+CisgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9IjAi
IHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHJ5PSIxMCIgc3Ryb2tlPSIj
MDAwMDAwIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9IiNmZmZmY2MiIC8+CisgICAgICAgICAgICAg
ICAgPC9nPgorICAgICAgICAgICAgPC9nPgorICAgICAgICA8L3N2Zz4KKyAgICA8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>
<flag name="review"
          id="137240"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
    <flag name="commit-queue"
          id="137264"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133663</attachid>
            <date>2012-03-24 17:47:16 -0700</date>
            <delta_ts>2012-03-25 11:50:34 -0700</delta_ts>
            <desc>Asking reviewers what they think about a different approach</desc>
            <filename>81104.2.patch</filename>
            <type>text/plain</type>
            <size>13763</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjAxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAzLTI0ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIGludmFsaWQgYm91bmRpbmcg
Ym94IGNvbmNlcHQgdG8gU1ZHIGNvbnRhaW5lcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTA0CisKKyAgICAgICAgQW4gZW1wdHkgPGc+IGVsZW1l
bnQgbmVlZHMgdG8gdXNlIGFuIGludmFsaWQgYm91bmRpbmcgYm94IGJlY2F1c2UKKyAgICAgICAg
YW4gZW1wdHkgYm91bmRpbmcgYm94IGlzbid0IHRoZSBkZWZhdWx0IHN0YXRlLiBUaGlzIGNoYW5n
ZQorICAgICAgICBpbnRyb2R1Y2VzIHRoZSBjb25jZXB0IG9mIGFuIGludmFsaWQgb2JqZWN0IGJv
dW5kaW5nIGJveCBmb3IKKyAgICAgICAgYm90aCBSZW5kZXJTVkdDb250YWluZXIgYW5kIFJlbmRl
clNWR1Jvb3QuIENvZGUgdGhhdAorICAgICAgICBkb2VzIG5vdCBleHBsaWNpdGx5IGNoZWNrIHRo
YXQgdGhlIGJvdW5kaW5nIGJveCBpcyB2YWxpZAorICAgICAgICBzaG91bGQgYmUgdW5hZmZlY3Rl
ZCBieSB0aGlzIGNoYW5nZS4gV2UgdXNlIHRoaXMgbmV3IGludmFsaWQKKyAgICAgICAgZmxhZyBp
biBjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyBzbyB0aGF0IHdlIGRvIG5vdAorICAgICAg
ICBpbmNsdWRlIGludmFsaWQgYm91bmRpbmcgYm94ZXMuCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
YWxzbyBjb250YWlucyBhIHNtYWxsIGZpeCBpbgorICAgICAgICBSZW5kZXJTVkdDb250YWluZXI6
OnRvUmVuZGVyU1ZHQ29udGFpbmVyIHdoaWNoIGRlcGVuZGVkIG9uCisgICAgICAgIFJlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyIG5vdCBpbmhlcml0aW5nIGZyb20gUmVuZGVyU1ZHQ29udGFpbmVy
LAorICAgICAgICB3aGljaCBpdCBub3cgZG9lcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBzdmcvY3VzdG9tL2dldEJCb3gtZW1wdHktY29u
dGFpbmVyLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6UmVuZGVyU1ZHQ29u
dGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6dXBkYXRlQ2Fj
aGVkQm91bmRhcmllcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWlu
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6aXNPYmplY3RCb3Vu
ZGluZ0JveFZhbGlkKToKKyAgICAgICAgKFJlbmRlclNWR0NvbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjp0b1JlbmRlclNWR0NvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OlJlbmRl
clNWR1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVk
Qm91bmRhcmllcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290Lmg6Cisg
ICAgICAgIChSZW5kZXJTVkdSb290KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp1cGRh
dGVPYmplY3RCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0
Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0Lmg6CisgICAgICAgIChTVkdSZW5kZXJTdXBwb3J0KToKKwogMjAx
Mi0wMy0yNCAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IENyYXNoIGluIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2Uu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCShyZXZpc2lvbiAxMTE3OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJTVkdDb250YWluZXI6OlJlbmRlclNW
R0NvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50KiBub2RlKQogICAgIDogUmVuZGVyU1ZHTW9kZWxP
YmplY3Qobm9kZSkKKyAgICAsIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZChmYWxzZSkKICAgICAs
IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKHRydWUpCiB7CiB9CkBAIC0xNTAsMTAgKzE1MSwxMSBA
QCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWRkRm9jdXNSaW5nUmVjCiB2b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCiB7CiAgICAgbV9vYmplY3RCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCA9IGZh
bHNlOwogICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKICAgICBtX3JlcGFp
bnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwogCi0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29t
cHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXModGhpcywgbV9vYmplY3RCb3VuZGluZ0JveCwgbV9z
dHJva2VCb3VuZGluZ0JveCwgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0Qm91bmRp
bmdCb3gsIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgbV9zdHJva2VCb3VuZGluZ0JveCwgbV9y
ZXBhaW50Qm91bmRpbmdCb3gpOwogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFp
bnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWlu
ZXIuaAkocmV2aXNpb24gMTExNzkyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIHsgbV9uZWVk
c0JvdW5kYXJpZXNVcGRhdGUgPSB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGRpZFRyYW5zZm9y
bVRvUm9vdFVwZGF0ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc09iamVjdEJvdW5k
aW5nQm94VmFsaWQoKSB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94VmFsaWQ7IH0KIAogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRy
ZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9CkBAIC03Niw2ICs3Nyw3IEBAIHByb3RlY3RlZDoK
IHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAgICAgRmxv
YXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgYm9vbCBtX29iamVjdEJvdW5kaW5nQm94
VmFsaWQ7CiAgICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7CiAgICAgRmxvYXRSZWN0
IG1fcmVwYWludEJvdW5kaW5nQm94OwogICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUg
OiAxOwpAQCAtODMsMTUgKzg1LDEzIEBAIHByaXZhdGU6CiAgIAogaW5saW5lIFJlbmRlclNWR0Nv
bnRhaW5lciogdG9SZW5kZXJTVkdDb250YWluZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0g
ICAgLy8gTm90ZTogaXNTVkdDb250YWluZXIgaXMgYWxzbyB0cnVlIGZvciBSZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lciwgd2hpY2ggaXMgbm90IGRlcml2ZWQgZnJvbSB0aGlzLgotICAgIEFTU0VS
VCghb2JqZWN0IHx8IChvYmplY3QtPmlzU1ZHQ29udGFpbmVyKCkgJiYgc3RyY21wKG9iamVjdC0+
cmVuZGVyTmFtZSgpLCAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIiKSkpOworICAgIEFTU0VS
VCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdDb250YWluZXIoKSk7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlclNWR0NvbnRhaW5lcio+KG9iamVjdCk7CiB9CiAKIGlubGluZSBjb25zdCBS
ZW5kZXJTVkdDb250YWluZXIqIHRvUmVuZGVyU1ZHQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0KQogewotICAgIC8vIE5vdGU6IGlzU1ZHQ29udGFpbmVyIGlzIGFsc28gdHJ1ZSBm
b3IgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIsIHdoaWNoIGlzIG5vdCBkZXJpdmVkIGZyb20g
dGhpcy4KLSAgICBBU1NFUlQoIW9iamVjdCB8fCAob2JqZWN0LT5pc1NWR0NvbnRhaW5lcigpICYm
IHN0cmNtcChvYmplY3QtPnJlbmRlck5hbWUoKSwgIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
IikpKTsKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHQ29udGFpbmVyKCkpOwog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdDb250YWluZXIqPihvYmplY3Qp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5jcHAJKHJldmlzaW9uIDExMTc5MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJTVkdSb290OjpSZW5kZXJTVkdSb290KFNWR1N0eWxl
ZEVsZW1lbnQqIG5vZGUpCiAgICAgOiBSZW5kZXJSZXBsYWNlZChub2RlKQorICAgICwgbV9vYmpl
Y3RCb3VuZGluZ0JveFZhbGlkKGZhbHNlKQogICAgICwgbV9pc0xheW91dFNpemVDaGFuZ2VkKGZh
bHNlKQogICAgICwgbV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSh0cnVlKQogewpA
QCAtMzkyLDEwICszOTMsMTEgQEAgdm9pZCBSZW5kZXJTVkdSb290OjptYXBMb2NhbFRvQ29udGFp
bmVyKAogdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKIHsKICAg
ICBtX29iamVjdEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgbV9vYmplY3RCb3VuZGlu
Z0JveFZhbGlkID0gZmFsc2U7CiAgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgp
OwogICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CiAKLSAgICBTVkdSZW5k
ZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyh0aGlzLCBtX29iamVjdEJv
dW5kaW5nQm94LCBtX3N0cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7Cisg
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXModGhpcywg
bV9vYmplY3RCb3VuZGluZ0JveCwgbV9vYmplY3RCb3VuZGluZ0JveFZhbGlkLCBtX3N0cm9rZUJv
dW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6
aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJvdW5kaW5n
Qm94KTsKICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveC5pbmZsYXRlKGJvcmRlckFuZFBhZGRpbmdX
aWR0aCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5oCShyZXZpc2lvbiAxMTE3OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3IEBAIHBy
aXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAgICAgSW50U2l6
ZSBtX2NvbnRhaW5lclNpemU7CiAgICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7Cisg
ICAgYm9vbCBtX29iamVjdEJvdW5kaW5nQm94VmFsaWQ7CiAgICAgRmxvYXRSZWN0IG1fc3Ryb2tl
Qm91bmRpbmdCb3g7CiAgICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OwogICAgIG11
dGFibGUgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAko
cmV2aXNpb24gMTExNzkyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMzIgKzg1LDM2IEBAIHZvaWQgU1ZH
UmVuZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW4KICAgICBwYXJlbnQtPm1hcExvY2FsVG9D
b250YWluZXIocmVwYWludENvbnRhaW5lciwgZmFsc2UsIHRydWUsIHRyYW5zZm9ybVN0YXRlLCB3
YXNGaXhlZCk7CiB9CiAKLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJv
dW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2Jq
ZWN0Qm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYg
cmVwYWludEJvdW5kaW5nQm94KQorLy8gVXBkYXRlIGFuIG9iamVjdCdzIGJvdW5kaW5nIGJveCB0
YWtpbmcgaW50byBhY2NvdW50IHRoZSB2YWxpZGl0eSBvZiBlYWNoIG9iamVjdCBib3VuZGluZyBi
b3guCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlT2JqZWN0Qm91bmRpbmdCb3goRmxvYXRSZWN0
JiBvYmplY3RCb3VuZGluZ0JveCwgYm9vbCYgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgUmVuZGVy
T2JqZWN0KiBvdGhlciwgRmxvYXRSZWN0IG90aGVyQm91bmRpbmdCb3gpCiB7Ci0gICAgYm9vbCBp
c0ZpcnN0Q2hpbGQgPSB0cnVlOworICAgIGJvb2wgb3RoZXJWYWxpZCA9IG90aGVyLT5pc1NWR0Nv
bnRhaW5lcigpID8gdG9SZW5kZXJTVkdDb250YWluZXIob3RoZXIpLT5pc09iamVjdEJvdW5kaW5n
Qm94VmFsaWQoKSA6IHRydWU7CisgICAgaWYgKG90aGVyVmFsaWQpIHsKKyAgICAgICAgaWYgKG9i
amVjdEJvdW5kaW5nQm94VmFsaWQpCisgICAgICAgICAgICBvYmplY3RCb3VuZGluZ0JveC51bml0
ZUV2ZW5JZkVtcHR5KG90aGVyQm91bmRpbmdCb3gpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIG9iamVjdEJvdW5kaW5nQm94ID0gb3RoZXJCb3VuZGluZ0JveDsKKyAgICAgICAgICAgIG9i
amVjdEJvdW5kaW5nQm94VmFsaWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQogCit2b2lk
IFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJl
bmRlck9iamVjdCogY29udGFpbmVyLCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBib29s
JiBvYmplY3RCb3VuZGluZ0JveFZhbGlkLCBGbG9hdFJlY3QmIHN0cm9rZUJvdW5kaW5nQm94LCBG
bG9hdFJlY3QmIHJlcGFpbnRCb3VuZGluZ0JveCkKK3sKICAgICBmb3IgKFJlbmRlck9iamVjdCog
Y3VycmVudCA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY3VycmVudC0+aXNTVkdIaWRkZW5D
b250YWluZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtID0gY3VycmVudC0+bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
OwogICAgICAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkgewotICAgICAgICAgICAgaWYg
KGlzRmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICBvYmplY3RCb3VuZGluZ0JveCA9IGN1cnJl
bnQtPm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgb2JqZWN0Qm91bmRpbmdCb3gudW5pdGVFdmVuSWZFbXB0eShjdXJyZW50LT5vYmplY3RCb3Vu
ZGluZ0JveCgpKTsKKyAgICAgICAgICAgIHVwZGF0ZU9iamVjdEJvdW5kaW5nQm94KG9iamVjdEJv
dW5kaW5nQm94LCBvYmplY3RCb3VuZGluZ0JveFZhbGlkLCBjdXJyZW50LCBjdXJyZW50LT5vYmpl
Y3RCb3VuZGluZ0JveCgpKTsKICAgICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKGN1
cnJlbnQtPnN0cm9rZUJvdW5kaW5nQm94KCkpOwogICAgICAgICAgICAgcmVwYWludEJvdW5kaW5n
Qm94LnVuaXRlKGN1cnJlbnQtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzRmlyc3RDaGlsZCkKLSAgICAgICAgICAg
ICAgICBvYmplY3RCb3VuZGluZ0JveCA9IHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPm9iamVj
dEJvdW5kaW5nQm94KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9iamVj
dEJvdW5kaW5nQm94LnVuaXRlRXZlbklmRW1wdHkodHJhbnNmb3JtLm1hcFJlY3QoY3VycmVudC0+
b2JqZWN0Qm91bmRpbmdCb3goKSkpOworICAgICAgICAgICAgdXBkYXRlT2JqZWN0Qm91bmRpbmdC
b3gob2JqZWN0Qm91bmRpbmdCb3gsIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIGN1cnJlbnQsIHRy
YW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPm9iamVjdEJvdW5kaW5nQm94KCkpKTsKICAgICAgICAg
ICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKHRyYW5zZm9ybS5tYXBSZWN0KGN1cnJlbnQtPnN0
cm9rZUJvdW5kaW5nQm94KCkpKTsKICAgICAgICAgICAgIHJlcGFpbnRCb3VuZGluZ0JveC51bml0
ZSh0cmFuc2Zvcm0ubWFwUmVjdChjdXJyZW50LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpKSk7CiAgICAgICAgIH0KLQotICAgICAgICBpc0ZpcnN0Q2hpbGQgPSBmYWxzZTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9y
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5oCShyZXZpc2lvbiAxMTE3OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclN1cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBw
dWJsaWM6CiAgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXNzZWQgcG9pbnQgbGllcyBp
biBhIGNsaXBwaW5nIGFyZWEKICAgICBzdGF0aWMgYm9vbCBwb2ludEluQ2xpcHBpbmdBcmVhKFJl
bmRlck9iamVjdCosIGNvbnN0IEZsb2F0UG9pbnQmKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvbXB1
dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBG
bG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBGbG9hdFJlY3QmIHN0cm9rZUJvdW5kaW5nQm94
LCBGbG9hdFJlY3QmIHJlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgc3RhdGljIHZvaWQgY29tcHV0
ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZs
b2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJvb2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQs
IEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5n
Qm94KTsKICAgICBzdGF0aWMgYm9vbCBwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxv
Y2FsVHJhbnNmb3JtLCBjb25zdCBQYWludEluZm8mKTsKIAogICAgIC8vIEltcG9ydGFudCBmdW5j
dGlvbnMgdXNlZCBieSBuZWFybHkgYWxsIFNWRyByZW5kZXJlcnMgY2VudHJhbGl6aW5nIGNvb3Jk
aW5hdGUgdHJhbnNmb3JtYXRpb25zIC8gcmVwYWludCByZWN0IGNhbGN1bGF0aW9ucwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTEyMDE0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDMtMjQgIFBoaWxpcCBSb2dlcnMgIDxwZHJAZ29v
Z2xlLmNvbT4KKworICAgICAgICBBZGQgaW52YWxpZCBib3VuZGluZyBib3ggY29uY2VwdCB0byBT
VkcgY29udGFpbmVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODExMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHN2Zy9jdXN0b20vZ2V0QkJveC1lbXB0eS1jb250YWluZXItZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL2dldEJCb3gtZW1wdHktY29udGFpbmVyLmh0bWw6
IEFkZGVkLgorCiAyMDEyLTAzLTI0ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5
bGVUb05vZGVSYW5nZS4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vZ2V0QkJveC1lbXB0
eS1jb250YWluZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9j
dXN0b20vZ2V0QkJveC1lbXB0eS1jb250YWluZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9nZXRCQm94LWVtcHR5LWNvbnRhaW5lci1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1BBU1MsIGJvdW5kaW5nIGJveCBzaXpl
cyBhcmUgKDEwMCwgMTAwKSBhbmQgKDEwMCwgMTAwKQpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1
c3RvbS9nZXRCQm94LWVtcHR5LWNvbnRhaW5lci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N2Zy9jdXN0b20vZ2V0QkJveC1lbXB0eS1jb250YWluZXIuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vZ2V0QkJveC1lbXB0eS1jb250YWluZXIuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzwh
LS0gVGVzdCB0aGF0IHN2ZyBib3VuZGluZyBib3hlcyBhcmUgbm90IGFmZmVjdGVkIGJ5IGVtcHR5
IGNvbnRhaW5lcnMgLS0+CisgICAgPGhlYWQ+CisgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KKyAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrQm91bmRpbmdCb3hlc0VxdWFs
KCkgeworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisKKyAgICAgICAgICAgICAgICAvLyBFbnN1cmUgYm90aCBib3hlcyBhcmUgdGhlIHNhbWUg
c2l6ZSwgbWVhbmluZyB0aGUgZW1wdHkgPGc+IGRvZXMgbm90IGFmZmVjdCB0aGUgYmJveCBzaXpl
LgorICAgICAgICAgICAgICAgIHZhciBiYm94QSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdn
YScpLmdldEJCb3goKTsKKyAgICAgICAgICAgICAgICB2YXIgYmJveEIgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZ2InKS5nZXRCQm94KCk7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMg
PSAiRkFJTCI7CisgICAgICAgICAgICAgICAgaWYgKGJib3hBLndpZHRoID09IGJib3hCLndpZHRo
ICYmIGJib3hBLmhlaWdodCA9PSBiYm94Qi5oZWlnaHQpCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdHMgPSAiUEFTUyI7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwg
PSByZXN1bHRzICsgIiwgYm91bmRpbmcgYm94IHNpemVzIGFyZSAoIiArIAorICAgICAgICAgICAg
ICAgICAgICBiYm94QS53aWR0aCArICIsICIgKyBiYm94QS5oZWlnaHQgKyAiKSBhbmQgKCIgKyAK
KyAgICAgICAgICAgICAgICAgICAgYmJveEIud2lkdGggKyAiLCAiICsgYmJveEIuaGVpZ2h0ICsg
IikiOworICAgICAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAg
PGJvZHkgb25sb2FkPSJjaGVja0JvdW5kaW5nQm94ZXNFcXVhbCgpIj4KKyAgICAgICAgPHN2ZyB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
Ij4gICAgCisgICAgICAgICAgICA8ZyBpZD0iZ2EiPgorICAgICAgICAgICAgICAgIDxnPjwvZz4K
KyAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDAsIDEwMCkiPgorICAg
ICAgICAgICAgICAgIAk8Zz48L2c+CisgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9IjAiIHk9
IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHJ5PSIxMCIgc3Ryb2tlPSIjMDAw
MDAwIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9IiNmZmZmY2MiIC8+CisgICAgICAgICAgICAgICAg
PC9nPgorICAgICAgICAgICAgPC9nPgorICAgICAgICAgICAgPGcgaWQ9ImdiIj4KKyAgICAgICAg
ICAgICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDAsIDEwMCkiPgorICAgICAgICAgICAg
ICAgICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgcng9IjEw
IiByeT0iMTAiIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSIjZmZmZmNj
IiAvPgorICAgICAgICAgICAgICAgIDwvZz4KKyAgICAgICAgICAgIDwvZz4KKyAgICAgICAgPC9z
dmc+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="137721"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133685</attachid>
            <date>2012-03-25 11:50:34 -0700</date>
            <delta_ts>2012-03-26 07:37:16 -0700</delta_ts>
            <desc>Update per reviewer comments</desc>
            <filename>81104.3.patch</filename>
            <type>text/plain</type>
            <size>13750</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjAzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAzLTI1ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIGludmFsaWQgYm91bmRpbmcg
Ym94IGNvbmNlcHQgdG8gU1ZHIGNvbnRhaW5lcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMTA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xh
cyBaaW1tZXJtYW5uLgorCisgICAgICAgIEFuIGVtcHR5IDxnPiBlbGVtZW50IG5lZWRzIHRvIHVz
ZSBhbiBpbnZhbGlkIGJvdW5kaW5nIGJveCBiZWNhdXNlCisgICAgICAgIGFuIGVtcHR5IGJvdW5k
aW5nIGJveCBpc24ndCB0aGUgZGVmYXVsdCBzdGF0ZS4gVGhpcyBjaGFuZ2UKKyAgICAgICAgaW50
cm9kdWNlcyB0aGUgY29uY2VwdCBvZiBhbiBpbnZhbGlkIG9iamVjdCBib3VuZGluZyBib3ggZm9y
CisgICAgICAgIGJvdGggUmVuZGVyU1ZHQ29udGFpbmVyIGFuZCBSZW5kZXJTVkdSb290LiBDb2Rl
IHRoYXQKKyAgICAgICAgZG9lcyBub3QgZXhwbGljaXRseSBjaGVjayB0aGF0IHRoZSBib3VuZGlu
ZyBib3ggaXMgdmFsaWQKKyAgICAgICAgc2hvdWxkIGJlIHVuYWZmZWN0ZWQgYnkgdGhpcyBjaGFu
Z2UuIFdlIHVzZSB0aGlzIG5ldyBpbnZhbGlkCisgICAgICAgIGZsYWcgaW4gY29tcHV0ZUNvbnRh
aW5lckJvdW5kaW5nQm94ZXMgc28gdGhhdCB3ZSBkbyBub3QKKyAgICAgICAgaW5jbHVkZSBpbnZh
bGlkIGJvdW5kaW5nIGJveGVzLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gY29udGFpbnMg
YSBzbWFsbCBmaXggaW4KKyAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyOjp0b1JlbmRlclNWR0Nv
bnRhaW5lciB3aGljaCBkZXBlbmRlZCBvbgorICAgICAgICBSZW5kZXJTVkdWaWV3cG9ydENvbnRh
aW5lciBub3QgaW5oZXJpdGluZyBmcm9tIFJlbmRlclNWR0NvbnRhaW5lciwKKyAgICAgICAgd2hp
Y2ggaXQgbm93IGRvZXMuCisKKyAgICAgICAgVGVzdDogc3ZnL2N1c3RvbS9nZXRCQm94LWVtcHR5
LWNvbnRhaW5lci5odG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRh
aW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OlJlbmRlclNW
R0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnVwZGF0
ZUNhY2hlZEJvdW5kYXJpZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmlzT2JqZWN0
Qm91bmRpbmdCb3hWYWxpZCk6CisgICAgICAgIChSZW5kZXJTVkdDb250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9SZW5kZXJTVkdDb250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpS
ZW5kZXJTVkdSb290KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUNh
Y2hlZEJvdW5kYXJpZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5o
OgorICAgICAgICAoUmVuZGVyU1ZHUm9vdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
dXBkYXRlT2JqZWN0Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3Vw
cG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oOgorICAgICAgICAoU1ZHUmVuZGVyU3VwcG9ydCk6CisK
IDIwMTItMDMtMjUgIFBoaWxpcCBSb2dlcnMgIDxwZHJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBB
dm9pZCByYWNlIGNvbmRpdGlvbiB3aGVuIGl0ZXJhdGluZyBvdmVyIHBlbmRpbmcgcmVzb3VyY2Vz
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCShyZXZpc2lvbiAxMTIwMTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJTVkdDb250YWluZXI6OlJlbmRlclNW
R0NvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50KiBub2RlKQogICAgIDogUmVuZGVyU1ZHTW9kZWxP
YmplY3Qobm9kZSkKKyAgICAsIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZChmYWxzZSkKICAgICAs
IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlKHRydWUpCiB7CiB9CkBAIC0xNTAsMTAgKzE1MSwxMSBA
QCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWRkRm9jdXNSaW5nUmVjCiB2b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCiB7CiAgICAgbV9vYmplY3RCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCA9IGZh
bHNlOwogICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKICAgICBtX3JlcGFp
bnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwogCi0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29t
cHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXModGhpcywgbV9vYmplY3RCb3VuZGluZ0JveCwgbV9z
dHJva2VCb3VuZGluZ0JveCwgbV9yZXBhaW50Qm91bmRpbmdCb3gpOworICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0Qm91bmRp
bmdCb3gsIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgbV9zdHJva2VCb3VuZGluZ0JveCwgbV9y
ZXBhaW50Qm91bmRpbmdCb3gpOwogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFp
bnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWlu
ZXIuaAkocmV2aXNpb24gMTEyMDE1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIHsgbV9uZWVk
c0JvdW5kYXJpZXNVcGRhdGUgPSB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGRpZFRyYW5zZm9y
bVRvUm9vdFVwZGF0ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc09iamVjdEJvdW5k
aW5nQm94VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94VmFsaWQ7IH0K
IAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFs
Q2hpbGRyZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9CkBAIC03Niw2ICs3Nyw3IEBAIHByb3Rl
Y3RlZDoKIHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAg
ICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgYm9vbCBtX29iamVjdEJvdW5k
aW5nQm94VmFsaWQ7CiAgICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7CiAgICAgRmxv
YXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OwogICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNV
cGRhdGUgOiAxOwpAQCAtODMsMTUgKzg1LDEzIEBAIHByaXZhdGU6CiAgIAogaW5saW5lIFJlbmRl
clNWR0NvbnRhaW5lciogdG9SZW5kZXJTVkdDb250YWluZXIoUmVuZGVyT2JqZWN0KiBvYmplY3Qp
CiB7Ci0gICAgLy8gTm90ZTogaXNTVkdDb250YWluZXIgaXMgYWxzbyB0cnVlIGZvciBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lciwgd2hpY2ggaXMgbm90IGRlcml2ZWQgZnJvbSB0aGlzLgotICAg
IEFTU0VSVCghb2JqZWN0IHx8IChvYmplY3QtPmlzU1ZHQ29udGFpbmVyKCkgJiYgc3RyY21wKG9i
amVjdC0+cmVuZGVyTmFtZSgpLCAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIiKSkpOworICAg
IEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdDb250YWluZXIoKSk7CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFJlbmRlclNWR0NvbnRhaW5lcio+KG9iamVjdCk7CiB9CiAKIGlubGluZSBj
b25zdCBSZW5kZXJTVkdDb250YWluZXIqIHRvUmVuZGVyU1ZHQ29udGFpbmVyKGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0KQogewotICAgIC8vIE5vdGU6IGlzU1ZHQ29udGFpbmVyIGlzIGFsc28g
dHJ1ZSBmb3IgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIsIHdoaWNoIGlzIG5vdCBkZXJpdmVk
IGZyb20gdGhpcy4KLSAgICBBU1NFUlQoIW9iamVjdCB8fCAob2JqZWN0LT5pc1NWR0NvbnRhaW5l
cigpICYmIHN0cmNtcChvYmplY3QtPnJlbmRlck5hbWUoKSwgIlJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyIikpKTsKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHQ29udGFpbmVy
KCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdDb250YWluZXIqPihv
YmplY3QpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDExMjAxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJTVkdSb290OjpSZW5kZXJTVkdSb290KFNW
R1N0eWxlZEVsZW1lbnQqIG5vZGUpCiAgICAgOiBSZW5kZXJSZXBsYWNlZChub2RlKQorICAgICwg
bV9vYmplY3RCb3VuZGluZ0JveFZhbGlkKGZhbHNlKQogICAgICwgbV9pc0xheW91dFNpemVDaGFu
Z2VkKGZhbHNlKQogICAgICwgbV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSh0cnVl
KQogewpAQCAtMzkyLDEwICszOTMsMTEgQEAgdm9pZCBSZW5kZXJTVkdSb290OjptYXBMb2NhbFRv
Q29udGFpbmVyKAogdm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkK
IHsKICAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgbV9vYmplY3RC
b3VuZGluZ0JveFZhbGlkID0gZmFsc2U7CiAgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IEZsb2F0
UmVjdCgpOwogICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CiAKLSAgICBT
VkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyh0aGlzLCBtX29i
amVjdEJvdW5kaW5nQm94LCBtX3N0cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0Jv
eCk7CisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMo
dGhpcywgbV9vYmplY3RCb3VuZGluZ0JveCwgbV9vYmplY3RCb3VuZGluZ0JveFZhbGlkLCBtX3N0
cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CiAgICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMsIG1fcmVwYWludEJv
dW5kaW5nQm94KTsKICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveC5pbmZsYXRlKGJvcmRlckFuZFBh
ZGRpbmdXaWR0aCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiAxMTIwMTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw3
IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAgICAg
SW50U2l6ZSBtX2NvbnRhaW5lclNpemU7CiAgICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdC
b3g7CisgICAgYm9vbCBtX29iamVjdEJvdW5kaW5nQm94VmFsaWQ7CiAgICAgRmxvYXRSZWN0IG1f
c3Ryb2tlQm91bmRpbmdCb3g7CiAgICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94Owog
ICAgIG11dGFibGUgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcAkocmV2aXNpb24gMTEyMDE1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMzIgKzg1LDM4IEBAIHZv
aWQgU1ZHUmVuZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW4KICAgICBwYXJlbnQtPm1hcExv
Y2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgZmFsc2UsIHRydWUsIHRyYW5zZm9ybVN0
YXRlLCB3YXNGaXhlZCk7CiB9CiAKLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRh
aW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVj
dCYgb2JqZWN0Qm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0
UmVjdCYgcmVwYWludEJvdW5kaW5nQm94KQorLy8gVXBkYXRlIGEgYm91bmRpbmcgYm94IHRha2lu
ZyBpbnRvIGFjY291bnQgdGhlIHZhbGlkaXR5IG9mIHRoZSBvdGhlciBib3VuZGluZyBib3guCitz
dGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlT2JqZWN0Qm91bmRpbmdCb3goRmxvYXRSZWN0JiBvYmpl
Y3RCb3VuZGluZ0JveCwgYm9vbCYgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgUmVuZGVyT2JqZWN0
KiBvdGhlciwgRmxvYXRSZWN0IG90aGVyQm91bmRpbmdCb3gpCiB7Ci0gICAgYm9vbCBpc0ZpcnN0
Q2hpbGQgPSB0cnVlOworICAgIGJvb2wgb3RoZXJWYWxpZCA9IG90aGVyLT5pc1NWR0NvbnRhaW5l
cigpID8gdG9SZW5kZXJTVkdDb250YWluZXIob3RoZXIpLT5pc09iamVjdEJvdW5kaW5nQm94VmFs
aWQoKSA6IHRydWU7CisgICAgaWYgKCFvdGhlclZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW9iamVjdEJvdW5kaW5nQm94VmFsaWQpIHsKKyAgICAgICAgb2JqZWN0Qm91bmRpbmdC
b3ggPSBvdGhlckJvdW5kaW5nQm94OworICAgICAgICBvYmplY3RCb3VuZGluZ0JveFZhbGlkID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIG9iamVjdEJvdW5kaW5nQm94LnVu
aXRlRXZlbklmRW1wdHkob3RoZXJCb3VuZGluZ0JveCk7Cit9CisKK3ZvaWQgU1ZHUmVuZGVyU3Vw
cG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBj
b250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJvb2wmIG9iamVjdEJvdW5k
aW5nQm94VmFsaWQsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVw
YWludEJvdW5kaW5nQm94KQorewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gY29u
dGFpbmVyLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2li
bGluZygpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc1NWR0hpZGRlbkNvbnRhaW5lcigpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0gPSBjdXJyZW50LT5sb2NhbFRvUGFyZW50VHJhbnNmb3JtKCk7CiAgICAgICAgIGlm
ICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNGaXJzdENoaWxk
KQotICAgICAgICAgICAgICAgIG9iamVjdEJvdW5kaW5nQm94ID0gY3VycmVudC0+b2JqZWN0Qm91
bmRpbmdCb3goKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvYmplY3RCb3Vu
ZGluZ0JveC51bml0ZUV2ZW5JZkVtcHR5KGN1cnJlbnQtPm9iamVjdEJvdW5kaW5nQm94KCkpOwor
ICAgICAgICAgICAgdXBkYXRlT2JqZWN0Qm91bmRpbmdCb3gob2JqZWN0Qm91bmRpbmdCb3gsIG9i
amVjdEJvdW5kaW5nQm94VmFsaWQsIGN1cnJlbnQsIGN1cnJlbnQtPm9iamVjdEJvdW5kaW5nQm94
KCkpOwogICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUoY3VycmVudC0+c3Ryb2tl
Qm91bmRpbmdCb3goKSk7CiAgICAgICAgICAgICByZXBhaW50Qm91bmRpbmdCb3gudW5pdGUoY3Vy
cmVudC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoaXNGaXJzdENoaWxkKQotICAgICAgICAgICAgICAgIG9iamVjdEJv
dW5kaW5nQm94ID0gdHJhbnNmb3JtLm1hcFJlY3QoY3VycmVudC0+b2JqZWN0Qm91bmRpbmdCb3go
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb2JqZWN0Qm91bmRpbmdCb3gu
dW5pdGVFdmVuSWZFbXB0eSh0cmFuc2Zvcm0ubWFwUmVjdChjdXJyZW50LT5vYmplY3RCb3VuZGlu
Z0JveCgpKSk7CisgICAgICAgICAgICB1cGRhdGVPYmplY3RCb3VuZGluZ0JveChvYmplY3RCb3Vu
ZGluZ0JveCwgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgY3VycmVudCwgdHJhbnNmb3JtLm1hcFJl
Y3QoY3VycmVudC0+b2JqZWN0Qm91bmRpbmdCb3goKSkpOwogICAgICAgICAgICAgc3Ryb2tlQm91
bmRpbmdCb3gudW5pdGUodHJhbnNmb3JtLm1hcFJlY3QoY3VycmVudC0+c3Ryb2tlQm91bmRpbmdC
b3goKSkpOwogICAgICAgICAgICAgcmVwYWludEJvdW5kaW5nQm94LnVuaXRlKHRyYW5zZm9ybS5t
YXBSZWN0KGN1cnJlbnQtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpKTsKICAgICAg
ICAgfQotCi0gICAgICAgIGlzRmlyc3RDaGlsZCA9IGZhbHNlOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHJl
dmlzaW9uIDExMjAxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAv
LyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCBwb2ludCBsaWVzIGluIGEgY2xpcHBpbmcg
YXJlYQogICAgIHN0YXRpYyBib29sIHBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgRmxvYXRQb2ludCYpOwogCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUNvbnRhaW5lckJv
dW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2Jq
ZWN0Qm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYg
cmVwYWludEJvdW5kaW5nQm94KTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlQ29udGFpbmVyQm91
bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwgRmxvYXRSZWN0JiBvYmpl
Y3RCb3VuZGluZ0JveCwgYm9vbCYgb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCwgRmxvYXRSZWN0JiBz
dHJva2VCb3VuZGluZ0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gpOwogICAgIHN0
YXRpYyBib29sIHBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
IGxvY2FsUmVwYWludFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0s
IGNvbnN0IFBhaW50SW5mbyYpOwogCiAgICAgLy8gSW1wb3J0YW50IGZ1bmN0aW9ucyB1c2VkIGJ5
IG5lYXJseSBhbGwgU1ZHIHJlbmRlcmVycyBjZW50cmFsaXppbmcgY29vcmRpbmF0ZSB0cmFuc2Zv
cm1hdGlvbnMgLyByZXBhaW50IHJlY3QgY2FsY3VsYXRpb25zCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
MTIwMzApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAxMi0wMy0yNSAgUGhpbGlwIFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgorCisg
ICAgICAgIEFkZCBpbnZhbGlkIGJvdW5kaW5nIGJveCBjb25jZXB0IHRvIFNWRyBjb250YWluZXJz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTEwNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KKworICAgICAgICAqIHN2
Zy9jdXN0b20vZ2V0QkJveC1lbXB0eS1jb250YWluZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBzdmcvY3VzdG9tL2dldEJCb3gtZW1wdHktY29udGFpbmVyLmh0bWw6IEFkZGVkLgor
CiAyMDEyLTAzLTI1ICBQaGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CiAKICAgICAgICAg
QXZvaWQgcmFjZSBjb25kaXRpb24gd2hlbiBpdGVyYXRpbmcgb3ZlciBwZW5kaW5nIHJlc291cmNl
cwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9nZXRCQm94LWVtcHR5LWNvbnRhaW5lci1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9nZXRCQm94
LWVtcHR5LWNvbnRhaW5lci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9zdmcvY3VzdG9tL2dldEJCb3gtZW1wdHktY29udGFpbmVyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSBAQAorUEFTUywgYm91bmRpbmcgYm94IHNpemVzIGFyZSAoMTAwLCAx
MDApIGFuZCAoMTAwLCAxMDApCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL2dldEJCb3gt
ZW1wdHktY29udGFpbmVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3Rv
bS9nZXRCQm94LWVtcHR5LWNvbnRhaW5lci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9nZXRCQm94LWVtcHR5LWNvbnRhaW5lci5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPCEtLSBUZXN0IHRoYXQg
c3ZnIGJvdW5kaW5nIGJveGVzIGFyZSBub3QgYWZmZWN0ZWQgYnkgZW1wdHkgY29udGFpbmVycyAt
LT4KKyAgICA8aGVhZD4KKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
ICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tCb3VuZGluZ0JveGVzRXF1YWwoKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAg
ICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAg
ICAgICAgICAgIC8vIEVuc3VyZSBib3RoIGJveGVzIGFyZSB0aGUgc2FtZSBzaXplLCBtZWFuaW5n
IHRoZSBlbXB0eSA8Zz4gZG9lcyBub3QgYWZmZWN0IHRoZSBiYm94IHNpemUuCisgICAgICAgICAg
ICAgICAgdmFyIGJib3hBID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhJykuZ2V0QkJveCgp
OworICAgICAgICAgICAgICAgIHZhciBiYm94QiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdn
YicpLmdldEJCb3goKTsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9ICJGQUlMIjsKKyAg
ICAgICAgICAgICAgICBpZiAoYmJveEEud2lkdGggPT0gYmJveEIud2lkdGggJiYgYmJveEEuaGVp
Z2h0ID09IGJib3hCLmhlaWdodCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9ICJQQVNT
IjsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9IHJlc3VsdHMgKyAi
LCBib3VuZGluZyBib3ggc2l6ZXMgYXJlICgiICsgCisgICAgICAgICAgICAgICAgICAgIGJib3hB
LndpZHRoICsgIiwgIiArIGJib3hBLmhlaWdodCArICIpIGFuZCAoIiArIAorICAgICAgICAgICAg
ICAgICAgICBiYm94Qi53aWR0aCArICIsICIgKyBiYm94Qi5oZWlnaHQgKyAiKSI7CisgICAgICAg
ICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9
ImNoZWNrQm91bmRpbmdCb3hlc0VxdWFsKCkiPgorICAgICAgICA8c3ZnIHdpZHRoPSI0MDAiIGhl
aWdodD0iNDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPiAgICAKKyAgICAg
ICAgICAgIDxnIGlkPSJnYSI+CisgICAgICAgICAgICAgICAgPGc+PC9nPgorICAgICAgICAgICAg
ICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwMCwgMTAwKSI+CisgICAgICAgICAgICAgICAg
CTxnPjwvZz4KKyAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEw
MCIgaGVpZ2h0PSIxMDAiIHJ4PSIxMCIgcnk9IjEwIiBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13
aWR0aD0iMSIgZmlsbD0iI2ZmZmZjYyIgLz4KKyAgICAgICAgICAgICAgICA8L2c+CisgICAgICAg
ICAgICA8L2c+CisgICAgICAgICAgICA8ZyBpZD0iZ2IiPgorICAgICAgICAgICAgICAgIDxnIHRy
YW5zZm9ybT0idHJhbnNsYXRlKDEwMCwgMTAwKSI+CisgICAgICAgICAgICAgICAgICAgIDxyZWN0
IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHJ5PSIxMCIgc3Ry
b2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9IiNmZmZmY2MiIC8+CisgICAgICAg
ICAgICAgICAgPC9nPgorICAgICAgICAgICAgPC9nPgorICAgICAgICA8L3N2Zz4KKyAgICA8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>