<?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>100257</bug_id>
          
          <creation_ts>2012-10-24 08:47:04 -0700</creation_ts>
          <short_desc>Don&apos;t fire requestAnimationFrame for scripts in frames that are out of view</short_desc>
          <delta_ts>2017-02-01 13:49:51 -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>DUPLICATE</resolution>
          <dup_id>144718</dup_id>
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=144718</see_also>
          <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="Nick Johnson">nick</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmuppala</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>mjs</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>749709</commentid>
    <comment_count>0</comment_count>
    <who name="Nick Johnson">nick</who>
    <bug_when>2012-10-24 08:47:04 -0700</bug_when>
    <thetext>Don&apos;t fire requestAnimationFrame for scripts in frames that are out of view</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749719</commentid>
    <comment_count>1</comment_count>
      <attachid>170408</attachid>
    <who name="Nick Johnson">nick</who>
    <bug_when>2012-10-24 09:01:24 -0700</bug_when>
    <thetext>Created attachment 170408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749721</commentid>
    <comment_count>2</comment_count>
    <who name="Nick Johnson">nick</who>
    <bug_when>2012-10-24 09:02:50 -0700</bug_when>
    <thetext>When a frame is out of view (such as an iframe that&apos;s scrolled offscreen), WebKit shouldn&apos;t fire requestAnimationFrame callbacks.

Avoiding these unnecessary callbacks reduces CPU consumption, and thus, battery consumption on mobile devices.

The attached patch implements that optimisation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749766</commentid>
    <comment_count>3</comment_count>
      <attachid>170408</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-24 10:13:06 -0700</bug_when>
    <thetext>Comment on attachment 170408
Patch

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

New failing tests:
fast/animation/request-animation-frame-offscreen-iframe.html
fast/animation/request-animation-frame-in-scrolled-div.html
fast/animation/request-animation-frame-iframe.html
fast/animation/request-animation-frame-iframe2.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753375</commentid>
    <comment_count>4</comment_count>
      <attachid>170408</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-29 06:53:47 -0700</bug_when>
    <thetext>Comment on attachment 170408
Patch

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

This looks ok to me, but I&apos;m not sure why some older tests are failing.

&gt; LayoutTests/ChangeLog:12
&gt; +    When a frame is out of view (such as an iframe that&apos;s scrolled
&gt; +    offscreen), WebKit shouldn&apos;t fire requestAnimationFrame callbacks.
&gt; +
&gt; +    Avoiding these unnecessary callbacks reduces CPU consumption, and thus,
&gt; +    battery consumption on mobile devices.

Needs more indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753377</commentid>
    <comment_count>5</comment_count>
      <attachid>170408</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-29 06:54:34 -0700</bug_when>
    <thetext>Comment on attachment 170408
Patch

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

&gt; LayoutTests/fast/animation/request-animation-frame-in-scrolled-div.html:24
&gt; +                if (window.testRunner)
&gt; +                testRunner.display();

Indentation broken.

&gt; LayoutTests/fast/animation/request-animation-frame-in-scrolled-div.html:41
&gt; +                if (window.testRunner)
&gt; +                testRunner.notifyDone();

Indentation broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753397</commentid>
    <comment_count>6</comment_count>
    <who name="Nick Johnson">nick</who>
    <bug_when>2012-10-29 07:08:28 -0700</bug_when>
    <thetext>I&apos;ll fix those and resubmit. The tests all pass on my machine (OS X 10.7.5); I&apos;m currently trying (without much success) to build the chromium port of Webkit to try and replicate the failure buildbot is seeing. Any insight anyone can provide would be greatly appreciated, since the buildbot doesn&apos;t seem to show test output anywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753579</commentid>
    <comment_count>7</comment_count>
      <attachid>171278</attachid>
    <who name="Nick Johnson">nick</who>
    <bug_when>2012-10-29 10:22:39 -0700</bug_when>
    <thetext>Created attachment 171278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753583</commentid>
    <comment_count>8</comment_count>
      <attachid>171278</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-29 10:26:44 -0700</bug_when>
    <thetext>Comment on attachment 171278
Patch

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

&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:123
&gt; +    if (view &amp;&amp; view-&gt;windowClipRect(false).isEmpty()) {
&gt; +        scheduleAnimation();
&gt; +        return;
&gt; +    }

Two things seem not quite right to me.

1)  I don’t think that windowClipRect(false).isEmpty() is the correct visibility check; I can’t find any other code that’s using that and this can’t be the only place we care about visibility.
2) I don’t think that polling is the right way to detect when the frame becomes visible again. We want to actively trigger it rather than running the timer over and over again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753606</commentid>
    <comment_count>9</comment_count>
    <who name="Nick Johnson">nick</who>
    <bug_when>2012-10-29 10:48:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 171278 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171278&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ScriptedAnimationController.cpp:123
&gt; &gt; +    if (view &amp;&amp; view-&gt;windowClipRect(false).isEmpty()) {
&gt; &gt; +        scheduleAnimation();
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; Two things seem not quite right to me.
&gt; 
&gt; 1)  I don’t think that windowClipRect(false).isEmpty() is the correct visibility check; I can’t find any other code that’s using that and this can’t be the only place we care about visibility.

I spent a lot of time reading the code to try and understand the rendering process; I found windowClipRect in use in ScrollView::scrollContents to determine the visible part of the window. If there&apos;s a better method to use, I&apos;m happy to change it; I just wasn&apos;t able to find a better choice myself.

&gt; 2) I don’t think that polling is the right way to detect when the frame becomes visible again. We want to actively trigger it rather than running the timer over and over again.

I agree entirely, but based on my search of the code concerned with scrolling and rendering, there&apos;s currently nothing that triggers events when elements become visible or invisible, and no facility to trigger those events. Adding it would undoubtedly be possible, but I suspect it would be a significant and much higher impact (and risk) change.

The polling approach, while slightly messy, is an easy win - the timer is running repeatedly already, the patch simply avoids the expensive JavaScript callback when it&apos;s unnecessary - and seems unlikely to have unexpected side effects. In my experiments with content rendered in an iframe using requestAnimationFrame, CPU usage drops from anything up to 100% to effectively zero when the frame is scrolled offscreen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753684</commentid>
    <comment_count>10</comment_count>
      <attachid>171278</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-29 12:38:29 -0700</bug_when>
    <thetext>Comment on attachment 171278
Patch

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

New failing tests:
fast/animation/request-animation-frame-offscreen-iframe.html
fast/animation/request-animation-frame-in-scrolled-div.html
fast/animation/request-animation-frame-iframe.html
fast/animation/request-animation-frame-iframe2.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754092</commentid>
    <comment_count>11</comment_count>
    <who name="Nick Johnson">nick</who>
    <bug_when>2012-10-30 02:04:49 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 171278 [details])
&gt; Attachment 171278 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/14641174
&gt; 
&gt; New failing tests:
&gt; fast/animation/request-animation-frame-offscreen-iframe.html
&gt; fast/animation/request-animation-frame-in-scrolled-div.html
&gt; fast/animation/request-animation-frame-iframe.html
&gt; fast/animation/request-animation-frame-iframe2.html

These tests pass on my mac, and I&apos;ve now built the Chromium port of Webkit on Linux (Ubuntu 12.10), where they also pass. Is anyone able to provide insight into why they are failing on buildbot?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758334</commentid>
    <comment_count>12</comment_count>
    <who name="Nick Johnson">nick</who>
    <bug_when>2012-11-05 01:41:05 -0800</bug_when>
    <thetext>I&apos;ve tried everything I can think of to reproduce the failures buildbot is seeing, without success. The suggestion on the webkit-dev mailing list is to land the patch and take care of any failures if they arise on the build console, where the details of the failures will be visible.

If there&apos;s anything else I need to do in order to get this patch approved and landed, please let me know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761768</commentid>
    <comment_count>13</comment_count>
      <attachid>171278</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-08 07:25:21 -0800</bug_when>
    <thetext>Comment on attachment 171278
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:123
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Two things seem not quite right to me.
&gt;&gt; 
&gt;&gt; 1)  I don’t think that windowClipRect(false).isEmpty() is the correct visibility check; I can’t find any other code that’s using that and this can’t be the only place we care about visibility.
&gt;&gt; 2) I don’t think that polling is the right way to detect when the frame becomes visible again. We want to actively trigger it rather than running the timer over and over again.
&gt; 
&gt; I spent a lot of time reading the code to try and understand the rendering process; I found windowClipRect in use in ScrollView::scrollContents to determine the visible part of the window. If there&apos;s a better method to use, I&apos;m happy to change it; I just wasn&apos;t able to find a better choice myself.

OK. That’s a fine explanation for why you did what you did, but not reason to land this patch as-is. We need to find others expert on this enough that they can help us find the right way to do it.

We do want this behavior change, but we need a correct implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761806</commentid>
    <comment_count>14</comment_count>
    <who name="Nick Johnson">nick</who>
    <bug_when>2012-11-08 08:00:47 -0800</bug_when>
    <thetext>Landing this patch would not preclude landing a later one that implements an event driven model. The patch is not incorrect; it&apos;s simply the case that there exists a potential implementation that is more efficient.

Is it your position that it&apos;s better to have no patch than this one? It seems to me that a better approach would be to land this patch now, and implement a better solution later, since this patch provides a performance improvement - just one that isn&apos;t as great as it could potentially be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763042</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-09 08:28:21 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Is it your position that it&apos;s better to have no patch than this one? It seems to me that a better approach would be to land this patch now, and implement a better solution later, since this patch provides a performance improvement - just one that isn&apos;t as great as it could potentially be.

Do you know of any actual pages that would benefit from this performance improvement?

What does the page visibility API do for out-of-view iframes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763092</commentid>
    <comment_count>16</comment_count>
    <who name="Nick Johnson">nick</who>
    <bug_when>2012-11-09 09:33:17 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; Is it your position that it&apos;s better to have no patch than this one? It seems to me that a better approach would be to land this patch now, and implement a better solution later, since this patch provides a performance improvement - just one that isn&apos;t as great as it could potentially be.
&gt; 
&gt; Do you know of any actual pages that would benefit from this performance improvement?

In practice, there are few pages currently using requestAnimationFrame, since it&apos;s not widespread yet.

In principle, any animated advert in an IFrame (which is most of them) would benefit from this if the ad used requestAnimationFrame.

&gt; 
&gt; What does the page visibility API do for out-of-view iframes?

Per the spec (http://www.w3.org/TR/page-visibility/#sec-document-interface):

&quot;On getting, the hidden attribute MUST return true if the Document contained by the top level browsing context (root window in the browser&apos;s viewport) [HTML5] is not visible at all. The attribute MUST return false if the Document contained by the top level browsing context is at least partially visible on at least one screen.&quot;

So as it stands, it conveys visibility information only for the top level document, not for any nested documents. I don&apos;t believe there&apos;s any assumption that the Document.hidden property will correlate with the status of a requestAnimationFrame callback anywhere, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763171</commentid>
    <comment_count>17</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-11-09 11:03:47 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)

&gt; &gt; 
&gt; &gt; What does the page visibility API do for out-of-view iframes?
&gt; 
&gt; Per the spec (http://www.w3.org/TR/page-visibility/#sec-document-interface):
&gt; 
&gt; &quot;On getting, the hidden attribute MUST return true if the Document contained by the top level browsing context (root window in the browser&apos;s viewport) [HTML5] is not visible at all. The attribute MUST return false if the Document contained by the top level browsing context is at least partially visible on at least one screen.&quot;
&gt; 
&gt; So as it stands, it conveys visibility information only for the top level document, not for any nested documents. I don&apos;t believe there&apos;s any assumption that the Document.hidden property will correlate with the status of a requestAnimationFrame callback anywhere, though.

Is this patch consistent with the RAF spec? It says:

&lt;http://www.w3.org/TR/animation-timing/&gt;
&quot;Whenever a Document&apos;s hidden attribute is false and the animation frame request callback list is not empty, the user agent MUST regularly queue a task that samples all animations for that Document&apos;s top-level browsing context.&quot;

So taken literally, it does not seem to allow the behavior of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272224</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-02-01 12:06:26 -0800</bug_when>
    <thetext>I think we fixed this already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272259</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-01 13:49:51 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 144718 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170408</attachid>
            <date>2012-10-24 09:01:24 -0700</date>
            <delta_ts>2012-10-29 10:22:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100257-20121024165959.patch</filename>
            <type>text/plain</type>
            <size>8948</size>
            <attacher name="Nick Johnson">nick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjIyYWYzZGU5ZjBlY2Fm
NmVmZmQ0MGQ0NDRjM2YzZjI2MzUyOTYwOC4uMTYzNTkxZDc4ZTBjN2FmOTdkMmYyMzE2ZWQ4ZjU4
OTQzMDJlODhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTEwLTI0ICBOaWNr
IEpvaG5zb24gIDxuaWNrQHNwaWRlci5pbz4KKworICAgICAgICBEb24ndCBmaXJlIHJlcXVlc3RB
bmltYXRpb25GcmFtZSBmb3Igc2NyaXB0cyBpbiBmcmFtZXMgdGhhdCBhcmUgb3V0IG9mIHZpZXcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDI1Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gYSBm
cmFtZSBpcyBvdXQgb2YgdmlldyAoc3VjaCBhcyBhbiBpZnJhbWUgdGhhdCdzIHNjcm9sbGVkIAor
ICAgICAgICBvZmZzY3JlZW4pLCBXZWJLaXQgc2hvdWxkbid0IGZpcmUgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lIGNhbGxiYWNrcy4KKworICAgICAgICBBdm9pZGluZyB0aGVzZSB1bm5lY2Vzc2FyeSBj
YWxsYmFja3MgcmVkdWNlcyBDUFUgY29uc3VtcHRpb24sIGFuZCB0aHVzLAorICAgICAgICBiYXR0
ZXJ5IGNvbnN1bXB0aW9uIG9uIG1vYmlsZSBkZXZpY2VzLgorCisgICAgICAgIFRlc3RzOgorICAg
ICAgICAgICAgZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtaW4tc2Nyb2xs
ZWQtZGl2Lmh0bWwKKyAgICAgICAgICAgIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9u
LWZyYW1lLW9mZnNjcmVlbi1pZnJhbWUuaHRtbAorCisgICAgICAgICogZG9tL1NjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXI6OnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMpOgorICAgICAgICBBZGRlZCBh
IGd1YXJkIHRvIHNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMgdGhhdCBjaGVja3MgdmlzaWJpbGl0
eSwgYW5kCisgICAgICAgIHNjaGVkdWxlcyBhIG5ldyB0aW1lciBldmVudCB3aXRob3V0IGV4ZWN1
dGluZyBhbnkgb2YgdGhlIHF1ZXVlZAorICAgICAgICBjYWxsYmFja3MgaWYgdGhlIGZyYW1lIGlz
IG5vdCB2aXNpYmxlLgorCiAyMDEyLTA5LTI3ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHByb3ZpZGUgbWVtb3J5IGluc3Ry
dW1lbnRhdGlvbiBmb3IgTGlzdEhhc2hTZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Nj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggMmY3ODYyYmRkNGExNDk5NjcwNjJh
MDI1MGU0MmNjMzBlZjBiOThkOC4uN2Y1YTRlYWNiNGM5NWIxZTU1ODY0NmI1MGQ5MWEyODEwYjQ1
ZjVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlci5jcHAKQEAgLTExNSw2ICsxMTUsMTMgQEAgdm9pZCBTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXI6OnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUK
IAogICAgIGRvdWJsZSBoaWdoUmVzTm93TXMgPSAxMDAwLjAgKiBtX2RvY3VtZW50LT5sb2FkZXIo
KS0+dGltaW5nKCktPm1vbm90b25pY1RpbWVUb1plcm9CYXNlZERvY3VtZW50VGltZShtb25vdG9u
aWNUaW1lTm93KTsKIAorICAgIC8vIERvbid0IGludm9rZSB0aGUgY2FsbGJhY2sgaWYgdGhlIGZy
YW1lIGlzIG5vdCB2aXNpYmxlIHRvIHRoZSB1c2VyCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9k
b2N1bWVudC0+dmlldygpOworICAgIGlmICh2aWV3ICYmIHZpZXctPndpbmRvd0NsaXBSZWN0KGZh
bHNlKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgc2NoZWR1bGVBbmltYXRpb24oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBGaXJzdCwgZ2VuZXJhdGUgYSBsaXN0IG9mIGNh
bGxiYWNrcyB0byBjb25zaWRlci4gIENhbGxiYWNrcyByZWdpc3RlcmVkIGZyb20gdGhpcyBwb2lu
dAogICAgIC8vIG9uIGFyZSBjb25zaWRlcmVkIG9ubHkgZm9yIHRoZSAibmV4dCIgZnJhbWUsIG5v
dCB0aGlzIG9uZS4KICAgICBDYWxsYmFja0xpc3QgY2FsbGJhY2tzKG1fY2FsbGJhY2tzKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA2YTQ3MzNlZGI5YWZiZjgxZjYyOTE2YWY0MTVlOWFkMTY3OWUzZmMxLi45Y2UwMmI4OGM3
N2ZkNTljNzRlYWRkYWU4MmY0MTQxMDQ0ZDc0MzlhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIw
MTItMTAtMjQgIE5pY2sgSm9obnNvbiAgPG5pY2tAc3BpZGVyLmlvPgorCisgICAgICAgIERvbid0
IGZpcmUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGZvciBzY3JpcHRzIGluIGZyYW1lcyB0aGF0IGFy
ZSBvdXQgb2YgdmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAwMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICBXaGVuIGEgZnJhbWUgaXMgb3V0IG9mIHZpZXcgKHN1Y2ggYXMgYW4gaWZyYW1lIHRoYXQncyBz
Y3JvbGxlZAorICAgIG9mZnNjcmVlbiksIFdlYktpdCBzaG91bGRuJ3QgZmlyZSByZXF1ZXN0QW5p
bWF0aW9uRnJhbWUgY2FsbGJhY2tzLgorCisgICAgQXZvaWRpbmcgdGhlc2UgdW5uZWNlc3Nhcnkg
Y2FsbGJhY2tzIHJlZHVjZXMgQ1BVIGNvbnN1bXB0aW9uLCBhbmQgdGh1cywKKyAgICBiYXR0ZXJ5
IGNvbnN1bXB0aW9uIG9uIG1vYmlsZSBkZXZpY2VzLgorCisgICAgICAgICogZmFzdC9hbmltYXRp
b24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtaW4tc2Nyb2xsZWQtZGl2LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgVGVzdHMgdGhhdCBjYWxsYmFja3MgYXJlbid0IG1hZGUgdG8gZnJhbWVzIHRoYXQg
YXJlIG9uc2NyZWVuIGJ1dAorICAgICAgICBlbnRpcmVseSBjbGlwcGVkLgorICAgICAgICAqIGZh
c3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWluLXNjcm9sbGVkLWRpdi5odG1s
OiBUZXN0cworICAgICAgICB0aGF0IGNhbGxiYWNrcyBhcmVuJ3QgbWFkZSB0byBmcmFtZXMgdGhh
dCBhcmUgb2Zmc2NyZWVuLgorICAgICAgICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0
aW9uLWZyYW1lLW9mZnNjcmVlbi1pZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1vZmZzY3JlZW4taWZyYW1l
Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTEwLTI0ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxyYXBo
YWVsLmt1Ym8uZGEuY29zdGFAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIEhvcGVmdWxseSBm
aW5pc2ggcmViYXNlbGluaW5nIGFmdGVyIHIxMzE5NDEgYW5kIHIxMzE5OTEuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1pbi1z
Y3JvbGxlZC1kaXYtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVx
dWVzdC1hbmltYXRpb24tZnJhbWUtaW4tc2Nyb2xsZWQtZGl2LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40MjI5MGE1MzE1MDhmYzM2MWY1OWRkNTJmNWFhNDUyYTA3MGRmYTBlCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJh
bWUtaW4tc2Nyb2xsZWQtZGl2LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitDaGVja3Mg
dGhhdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZG9lc24ndCBmaXJlIHdoZW4gYW4gaWZyYW1lIHdv
dWxkIGJlIG9uc2NyZWVuIGJ1dCBpcyBjbGlwcGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBjYWxsYmFja0ludm9rZWQgaXMgZmFsc2UKK1BBU1MgY2FsbGJhY2tJbnZv
a2VkIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFu
aW1hdGlvbi1mcmFtZS1pbi1zY3JvbGxlZC1kaXYuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvYW5p
bWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWluLXNjcm9sbGVkLWRpdi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ2MzJhMmI2NDcxYzcwMjJjMTExY2IzMTgzOGU0YWI4ODllYWNjMWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1m
cmFtZS1pbi1zY3JvbGxlZC1kaXYuaHRtbApAQCAtMCwwICsxLDQ1IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+Cisg
ICAgICAgIDxkaXYgaWQ9InNjcm9sbGJveCIgc3R5bGU9ImhlaWdodDogMTAwcHg7IG92ZXJmbG93
OiBzY3JvbGwiPgorICAgICAgICAgICAgPGlmcmFtZSBzcmM9InNjcmlwdC10ZXN0cy9yZXF1ZXN0
LWFuaW1hdGlvbi1mcmFtZS1zdWJmcmFtZS5odG1sIiB3aWR0aD0iNzAwIiBoZWlnaHQ9IjUwMCIg
c3R5bGU9Im1hcmdpbi10b3A6IDEwMHB4OyI+PC9pZnJhbWU+CisgICAgICAgIDwvZGl2PgorICAg
ICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAg
ICAgICAgICAgZGVzY3JpcHRpb24oIkNoZWNrcyB0aGF0IHJlcXVlc3RBbmltYXRpb25GcmFtZSBk
b2Vzbid0IGZpcmUgd2hlbiBhbiBpZnJhbWUgd291bGQgYmUgb25zY3JlZW4gYnV0IGlzIGNsaXBw
ZWQuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBjYWxsYmFja0ludm9rZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7
CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIENhbGxlZCBmcm9tIHN1YmZyYW1lLgorICAgICAgICAgICAgZnVu
Y3Rpb24gZG9EaXNwbGF5KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5kaXNwbGF5KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRvQ2hlY2tS
ZXN1bHQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNob3VsZEJlRmFsc2UoImNh
bGxiYWNrSW52b2tlZCIpOworICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBpdCBpbnRvIHZpZXcg
YW5kIGVuc3VyZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZmlyZXMgbm93CisgICAgICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjcm9sbGJveCIpLnNjcm9sbFRvcCA9IDEwMDsK
KyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCJjYWxsYmFja0ludm9rZWQiKTsKKyAgICAgICAgICAg
ICAgICB9LCA1MCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1
bmN0aW9uIGRvVGVzdERvbmUoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlzU3Vj
Y2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAg
fQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1vZmZzY3Jl
ZW4taWZyYW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVl
c3QtYW5pbWF0aW9uLWZyYW1lLW9mZnNjcmVlbi1pZnJhbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQwNDljOWJhNDdhNmJjZDk1OWVlMjNmOWViZGQ1NjZhNmVkYTdmNzcKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFt
ZS1vZmZzY3JlZW4taWZyYW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitDaGVja3Mg
dGhhdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZG9lc24ndCBmaXJlIGluIGFuIG9mZnNjcmVlbiBp
ZnJhbWUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGNhbGxiYWNrSW52
b2tlZCBpcyBmYWxzZQorUEFTUyBjYWxsYmFja0ludm9rZWQgaXMgdHJ1ZQorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLW9mZnNjcmVlbi1p
ZnJhbWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9u
LWZyYW1lLW9mZnNjcmVlbi1pZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWJiMmE2ZTNlZGJkMzYz
NjgwNmM3ZjYyNWFhY2Y5ZGNiNWUzZTlhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtb2Zmc2NyZWVuLWlmcmFtZS5o
dG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+
CisgICAgICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPGlmcmFtZSBzcmM9InNj
cmlwdC10ZXN0cy9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1zdWJmcmFtZS5odG1sIiB3aWR0aD0i
NzAwIiBoZWlnaHQ9IjUwMCIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAwcHg7
Ij48L2lmcmFtZT4KKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJz
ZXQ9InV0Zi04Ij4KKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCJDaGVja3MgdGhhdCByZXF1ZXN0
QW5pbWF0aW9uRnJhbWUgZG9lc24ndCBmaXJlIGluIGFuIG9mZnNjcmVlbiBpZnJhbWUuIik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBjYWxsYmFja0ludm9rZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAg
ICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIENhbGxlZCBmcm9tIHN1YmZyYW1lLgorICAgICAgICAgICAgZnVuY3Rpb24gZG9E
aXNwbGF5KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5kaXNwbGF5KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRvQ2hlY2tSZXN1bHQoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNob3VsZEJlRmFsc2UoImNhbGxiYWNrSW52
b2tlZCIpOworICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBpdCBpbnRvIHZpZXcgYW5kIGVuc3Vy
ZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZmlyZXMgbm93CisgICAgICAgICAgICAgICAgd2luZG93
LnNjcm9sbFRvKDAsIDEwMTApOworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgiY2FsbGJhY2tJbnZva2VkIik7
CisgICAgICAgICAgICAgICAgfSwgNTApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBmdW5jdGlvbiBkb1Rlc3REb25lKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICAgICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171278</attachid>
            <date>2012-10-29 10:22:39 -0700</date>
            <delta_ts>2012-11-08 07:25:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100257-20121029172104.patch</filename>
            <type>text/plain</type>
            <size>9000</size>
            <attacher name="Nick Johnson">nick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGUzZjQ2YTA5MTIxZDcy
ZDUxOTJiMGE2MGZmY2JkNjAxMWMxZGVkMS4uN2U3ZmI2ZWQ2MmI3Y2QwMWRmNWJmZDgxNTc1Mjg5
MWYwYzcxOTA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTEwLTI0ICBOaWNr
IEpvaG5zb24gIDxuaWNrQHNwaWRlci5pbz4KKworICAgICAgICBEb24ndCBmaXJlIHJlcXVlc3RB
bmltYXRpb25GcmFtZSBmb3Igc2NyaXB0cyBpbiBmcmFtZXMgdGhhdCBhcmUgb3V0IG9mIHZpZXcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDI1Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gYSBm
cmFtZSBpcyBvdXQgb2YgdmlldyAoc3VjaCBhcyBhbiBpZnJhbWUgdGhhdCdzIHNjcm9sbGVkIAor
ICAgICAgICBvZmZzY3JlZW4pLCBXZWJLaXQgc2hvdWxkbid0IGZpcmUgcmVxdWVzdEFuaW1hdGlv
bkZyYW1lIGNhbGxiYWNrcy4KKworICAgICAgICBBdm9pZGluZyB0aGVzZSB1bm5lY2Vzc2FyeSBj
YWxsYmFja3MgcmVkdWNlcyBDUFUgY29uc3VtcHRpb24sIGFuZCB0aHVzLAorICAgICAgICBiYXR0
ZXJ5IGNvbnN1bXB0aW9uIG9uIG1vYmlsZSBkZXZpY2VzLgorCisgICAgICAgIFRlc3RzOgorICAg
ICAgICAgICAgZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtaW4tc2Nyb2xs
ZWQtZGl2Lmh0bWwKKyAgICAgICAgICAgIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9u
LWZyYW1lLW9mZnNjcmVlbi1pZnJhbWUuaHRtbAorCisgICAgICAgICogZG9tL1NjcmlwdGVkQW5p
bWF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXI6OnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMpOgorICAgICAgICBBZGRlZCBh
IGd1YXJkIHRvIHNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMgdGhhdCBjaGVja3MgdmlzaWJpbGl0
eSwgYW5kCisgICAgICAgIHNjaGVkdWxlcyBhIG5ldyB0aW1lciBldmVudCB3aXRob3V0IGV4ZWN1
dGluZyBhbnkgb2YgdGhlIHF1ZXVlZAorICAgICAgICBjYWxsYmFja3MgaWYgdGhlIGZyYW1lIGlz
IG5vdCB2aXNpYmxlLgorCiAyMDEyLTEwLTI1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgW1Y4XSBXZSBjYW4gaGFuZGxlIEFjdGl2ZURPTU5vZGVzIGFuZCBET01O
b2RlcyBpbiB0aGUgc2FtZSBHQyB2aXNpdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDJmNzg2MmJkZDRhMTQ5OTY3MDYy
YTAyNTBlNDJjYzMwZWYwYjk4ZDguLjdmNWE0ZWFjYjRjOTViMWU1NTg2NDZiNTBkOTFhMjgxMGI0
NWY1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCkBAIC0xMTUsNiArMTE1LDEzIEBAIHZvaWQgU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyOjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1l
CiAKICAgICBkb3VibGUgaGlnaFJlc05vd01zID0gMTAwMC4wICogbV9kb2N1bWVudC0+bG9hZGVy
KCktPnRpbWluZygpLT5tb25vdG9uaWNUaW1lVG9aZXJvQmFzZWREb2N1bWVudFRpbWUobW9ub3Rv
bmljVGltZU5vdyk7CiAKKyAgICAvLyBEb24ndCBpbnZva2UgdGhlIGNhbGxiYWNrIGlmIHRoZSBm
cmFtZSBpcyBub3QgdmlzaWJsZSB0byB0aGUgdXNlcgorICAgIEZyYW1lVmlldyogdmlldyA9IG1f
ZG9jdW1lbnQtPnZpZXcoKTsKKyAgICBpZiAodmlldyAmJiB2aWV3LT53aW5kb3dDbGlwUmVjdChm
YWxzZSkuaXNFbXB0eSgpKSB7CisgICAgICAgIHNjaGVkdWxlQW5pbWF0aW9uKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRmlyc3QsIGdlbmVyYXRlIGEgbGlzdCBvZiBj
YWxsYmFja3MgdG8gY29uc2lkZXIuICBDYWxsYmFja3MgcmVnaXN0ZXJlZCBmcm9tIHRoaXMgcG9p
bnQKICAgICAvLyBvbiBhcmUgY29uc2lkZXJlZCBvbmx5IGZvciB0aGUgIm5leHQiIGZyYW1lLCBu
b3QgdGhpcyBvbmUuCiAgICAgQ2FsbGJhY2tMaXN0IGNhbGxiYWNrcyhtX2NhbGxiYWNrcyk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggMjk0MjRmOGRjZTg5NDRhZmQyMjg2YjU5ZDZmYTJlMmY4ZGU4ZjVmMC4uYjA4YWI4NDVm
NDBhMGZlNGQ1MGE4ODU4ZmFiZGJhZWJlZmUyMzcwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisy
MDEyLTEwLTI0ICBOaWNrIEpvaG5zb24gIDxuaWNrQHNwaWRlci5pbz4KKworICAgICAgICBEb24n
dCBmaXJlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBmb3Igc2NyaXB0cyBpbiBmcmFtZXMgdGhhdCBh
cmUgb3V0IG9mIHZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMDI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdoZW4gYSBmcmFtZSBpcyBvdXQgb2YgdmlldyAoc3VjaCBhcyBhbiBpZnJhbWUgdGhh
dCdzIHNjcm9sbGVkCisgICAgICAgIG9mZnNjcmVlbiksIFdlYktpdCBzaG91bGRuJ3QgZmlyZSBy
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUgY2FsbGJhY2tzLgorCisgICAgICAgIEF2b2lkaW5nIHRoZXNl
IHVubmVjZXNzYXJ5IGNhbGxiYWNrcyByZWR1Y2VzIENQVSBjb25zdW1wdGlvbiwgYW5kIHRodXMs
CisgICAgICAgIGJhdHRlcnkgY29uc3VtcHRpb24gb24gbW9iaWxlIGRldmljZXMuCisKKyAgICAg
ICAgKiBmYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1pbi1zY3JvbGxlZC1k
aXYtZXhwZWN0ZWQudHh0OgorICAgICAgICBUZXN0cyB0aGF0IGNhbGxiYWNrcyBhcmVuJ3QgbWFk
ZSB0byBmcmFtZXMgdGhhdCBhcmUgb25zY3JlZW4gYnV0CisgICAgICAgIGVudGlyZWx5IGNsaXBw
ZWQuCisgICAgICAgICogZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtaW4t
c2Nyb2xsZWQtZGl2Lmh0bWw6IFRlc3RzCisgICAgICAgIHRoYXQgY2FsbGJhY2tzIGFyZW4ndCBt
YWRlIHRvIGZyYW1lcyB0aGF0IGFyZSBvZmZzY3JlZW4uCisgICAgICAgICogZmFzdC9hbmltYXRp
b24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtb2Zmc2NyZWVuLWlmcmFtZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1l
LW9mZnNjcmVlbi1pZnJhbWUuaHRtbDogQWRkZWQuCisKIDIwMTItMTAtMjUgIEFsZXhhbmRlciBT
aGFsYW1vdiAgPGFsZXhhbmRlci5zaGFsYW1vdkBpbnRlbC5jb20+CiAKICAgICAgICAgTGF5b3V0
IFRlc3QgZmFzdC9tZWRpYS93M2MvdGVzdF9tZWRpYV9xdWVyaWVzLmh0bWwgaXMgc2xvdyBvbiBD
aHJvbWl1bSBkZWJ1ZyBib3RzIGFmdGVyIHIxMzIzNTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWluLXNjcm9sbGVkLWRpdi1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlv
bi1mcmFtZS1pbi1zY3JvbGxlZC1kaXYtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyMjkwYTUz
MTUwOGZjMzYxZjU5ZGQ1MmY1YWE0NTJhMDcwZGZhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1pbi1zY3JvbGxl
ZC1kaXYtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK0NoZWNrcyB0aGF0IHJlcXVlc3RB
bmltYXRpb25GcmFtZSBkb2Vzbid0IGZpcmUgd2hlbiBhbiBpZnJhbWUgd291bGQgYmUgb25zY3Jl
ZW4gYnV0IGlzIGNsaXBwZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IGNhbGxiYWNrSW52b2tlZCBpcyBmYWxzZQorUEFTUyBjYWxsYmFja0ludm9rZWQgaXMgdHJ1ZQor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1l
LWluLXNjcm9sbGVkLWRpdi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVz
dC1hbmltYXRpb24tZnJhbWUtaW4tc2Nyb2xsZWQtZGl2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM4ZjM5
ODBiMTJhMzJjMTAyNTU4ZTc5MWYwMzgyYTg2NzBjY2JhYgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvYW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWluLXNjcm9s
bGVkLWRpdi5odG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cisg
ICAgPGhlYWQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPGRpdiBp
ZD0ic2Nyb2xsYm94IiBzdHlsZT0iaGVpZ2h0OiAxMDBweDsgb3ZlcmZsb3c6IHNjcm9sbCI+Cisg
ICAgICAgICAgICA8aWZyYW1lIHNyYz0ic2NyaXB0LXRlc3RzL3JlcXVlc3QtYW5pbWF0aW9uLWZy
YW1lLXN1YmZyYW1lLmh0bWwiIHdpZHRoPSI3MDAiIGhlaWdodD0iNTAwIiBzdHlsZT0ibWFyZ2lu
LXRvcDogMTAwcHg7Ij48L2lmcmFtZT4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CisgICAgICAgICAgICBkZXNj
cmlwdGlvbigiQ2hlY2tzIHRoYXQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGRvZXNuJ3QgZmlyZSB3
aGVuIGFuIGlmcmFtZSB3b3VsZCBiZSBvbnNjcmVlbiBidXQgaXMgY2xpcHBlZC4iKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgdmFyIGNhbGxiYWNrSW52b2tlZCA9IGZhbHNlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAg
ICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gQ2FsbGVkIGZyb20gc3ViZnJhbWUuCisgICAgICAgICAgICBmdW5jdGlvbiBkb0Rpc3Bs
YXkoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5kaXNwbGF5KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRvQ2hlY2tSZXN1bHQoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNob3VsZEJlRmFsc2UoImNhbGxiYWNrSW52
b2tlZCIpOworICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBpdCBpbnRvIHZpZXcgYW5kIGVuc3Vy
ZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZmlyZXMgbm93CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInNjcm9sbGJveCIpLnNjcm9sbFRvcCA9IDEwMDsKKyAgICAgICAg
ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2hvdWxkQmVUcnVlKCJjYWxsYmFja0ludm9rZWQiKTsKKyAgICAgICAgICAgICAgICB9LCA1
MCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRv
VGVzdERvbmUoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5
UGFyc2VkKCk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgPC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtb2Zmc2NyZWVuLWlm
cmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFu
aW1hdGlvbi1mcmFtZS1vZmZzY3JlZW4taWZyYW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
MDQ5YzliYTQ3YTZiY2Q5NTllZTIzZjllYmRkNTY2YTZlZGE3Zjc3Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9hbmltYXRpb24vcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtb2Zm
c2NyZWVuLWlmcmFtZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorQ2hlY2tzIHRoYXQg
cmVxdWVzdEFuaW1hdGlvbkZyYW1lIGRvZXNuJ3QgZmlyZSBpbiBhbiBvZmZzY3JlZW4gaWZyYW1l
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBjYWxsYmFja0ludm9rZWQg
aXMgZmFsc2UKK1BBU1MgY2FsbGJhY2tJbnZva2VkIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFtZS1vZmZzY3JlZW4taWZyYW1l
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2FuaW1hdGlvbi9yZXF1ZXN0LWFuaW1hdGlvbi1mcmFt
ZS1vZmZzY3JlZW4taWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjFiYjJhNmUzZWRiZDM2MzY4MDZj
N2Y2MjVhYWNmOWRjYjVlM2U5YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
YW5pbWF0aW9uL3JlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLW9mZnNjcmVlbi1pZnJhbWUuaHRtbApA
QCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAg
ICAgICA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDxpZnJhbWUgc3JjPSJzY3JpcHQt
dGVzdHMvcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtc3ViZnJhbWUuaHRtbCIgd2lkdGg9IjcwMCIg
aGVpZ2h0PSI1MDAiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTAwMHB4OyI+PC9p
ZnJhbWU+CisgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1
dGYtOCI+CisgICAgICAgICAgICBkZXNjcmlwdGlvbigiQ2hlY2tzIHRoYXQgcmVxdWVzdEFuaW1h
dGlvbkZyYW1lIGRvZXNuJ3QgZmlyZSBpbiBhbiBvZmZzY3JlZW4gaWZyYW1lLiIpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICB2YXIgY2FsbGJhY2tJbnZva2VkID0gZmFsc2U7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAg
ICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBDYWxsZWQgZnJvbSBzdWJmcmFtZS4KKyAgICAgICAgICAgIGZ1bmN0aW9uIGRvRGlzcGxh
eSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIuZGlzcGxheSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBkb0NoZWNrUmVzdWx0KCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBzaG91bGRCZUZhbHNlKCJjYWxsYmFja0ludm9rZWQi
KTsKKyAgICAgICAgICAgICAgICAvLyBTY3JvbGwgaXQgaW50byB2aWV3IGFuZCBlbnN1cmUgcmVx
dWVzdEFuaW1hdGlvbkZyYW1lIGZpcmVzIG5vdworICAgICAgICAgICAgICAgIHdpbmRvdy5zY3Jv
bGxUbygwLCAxMDEwKTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgICAgICBzaG91bGRCZVRydWUoImNhbGxiYWNrSW52b2tlZCIpOworICAg
ICAgICAgICAgICAgIH0sIDUwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZnVuY3Rpb24gZG9UZXN0RG9uZSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="185108"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="185136"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>