<?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>12073</bug_id>
          
          <creation_ts>2007-01-02 08:33:52 -0800</creation_ts>
          <short_desc>Implement setCurrentTime() and pauseAnimations() on SVGSVGElement</short_desc>
          <delta_ts>2012-01-11 09:55:45 -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>SVG</component>
          <version>420+</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41761</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Joel Webber">jgw</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>heycam</cc>
    
    <cc>jgw</cc>
    
    <cc>jwatt</cc>
    
    <cc>koivisto</cc>
    
    <cc>krit</cc>
    
    <cc>logingx</cc>
    
    <cc>rakssvg</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>37795</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-02 08:33:52 -0800</bug_when>
    <thetext>SVGDocument needs setCurrentTime/getCurrentTime support

Of course this is required by the spec, but this support would also be very useful for the WebKit project in terms of DumpRenderTree support, and later for any SVG animation editor built on top of WebKit.  DumpRenderTree could use this support for changing the current time, thus to dump a later animation state (or states).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37749</commentid>
    <comment_count>1</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-01-02 09:50:08 -0800</bug_when>
    <thetext>The SVG spec allows one to reset the clock on computer that the &quot;browser&quot; is running on?  This seems like it could (at the very least) create a denial-of-service attack on time-sensitive security exchanges (like Kerberos).  In the worst case, it might even allow replay attacks.

Am I misunderstanding what setCurrentTime() would do?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37660</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-02 13:15:17 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; The SVG spec allows one to reset the clock on computer that the &quot;browser&quot; is
&gt; running on?

Nah.  That definitely would be a security hole. :)  Especially since on OS X it normally requires administrator access to change the clock. :)

From the spec:

setCurrentTime
Adjusts the clock for this SVG document fragment, establishing a new current time.
Parameters:
in float seconds. The new current time in seconds relative to the start time for the current SVG document fragment.

I expect that this basically only pertains to the animation timeline.  I don&apos;t know how one would make this work for JavaScript (nor to I expect it&apos;s supposed to).

It&apos;s important (at least for editing) to be able to change the animation timeline&apos;s current position.  There are also cases during display where such is useful.  That&apos;s exactly what this method allows.  If you set the time to 1000, the document suddenly fast-forwards (or rewinds) to exactly how it should look 1000 seconds after load time (with all animations in their proper state, etc).  Any JavaScript timers/animation I expect would be unaffected.  Certainly other pages, the browser&apos;s sense of time, and the computer clock should all remain unaffected. :)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229699</commentid>
    <comment_count>3</comment_count>
    <who name="Jonathan Watt">jwatt</who>
    <bug_when>2010-05-24 04:46:10 -0700</bug_when>
    <thetext>The SMIL animation tests that the SVG WG is writing depend on the functionality provided by setCurrentTime() and pauseAnimations(). Is there any chance of getting this bug fixed any time soon so that we can run the tests against webkit too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229701</commentid>
    <comment_count>4</comment_count>
      <attachid>56872</attachid>
    <who name="Jonathan Watt">jwatt</who>
    <bug_when>2010-05-24 04:50:12 -0700</bug_when>
    <thetext>Created attachment 56872
testcase

Here&apos;s a testcase. When loaded, the content area of the window should be filled with green for all eternity. You should never see any red.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230141</commentid>
    <comment_count>5</comment_count>
    <who name="Jonathan Watt">jwatt</who>
    <bug_when>2010-05-25 00:55:12 -0700</bug_when>
    <thetext>I should probably have mentioned - only supporting moving *forward* along the timeline with setCurrentTime() would be sufficient for the WG&apos;s testing framework. Moving *backwards* along the timeline is harder, so we&apos;d be perfectly happy to see that come later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278283</commentid>
    <comment_count>6</comment_count>
      <attachid>67423</attachid>
    <who name="Chris Meyer">cmeyer1969+webkit</who>
    <bug_when>2010-09-13 10:13:08 -0700</bug_when>
    <thetext>Created attachment 67423
Patch to fix this bug.

This patch works for me (in the Qt version of WebKit); but I did not run it through any tests. Anyone care to apply the patch and run the tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281271</commentid>
    <comment_count>7</comment_count>
      <attachid>67423</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-19 07:09:32 -0700</bug_when>
    <thetext>Comment on attachment 67423
Patch to fix this bug.

Hi Chris,

&gt; +void SMILTimeContainer::setElapsed(SMILTime time)
&gt; +{
&gt; +    m_beginTime = currentTime() - time.value();
&gt; +    m_accumulatedPauseTime = 0;
&gt; +    if (isPaused()) {
&gt; +        SMILTime elapsed = this-&gt;elapsed();
&gt; +        updateAnimations(elapsed);
&gt; +    }
No need for a local variable, just use:
if (isPaused())
    updateAnimations(elapsed());

You have to write tests and a ChangeLog, please use prepare-ChangeLog in your root WebKit directory to generate templates. r-, until these issues are resolved. The patch itself looks just fine, but you&apos;ll need to write several testcases, ideally using the existing framework in LayoutTests/svg/animations.
Test it using accumulative animations, normal ones, etc.

Thanks in advance!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418034</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-06-09 08:40:57 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 67423 [details])
&gt; Hi Chris,
&gt; 
&gt; &gt; +void SMILTimeContainer::setElapsed(SMILTime time)
&gt; &gt; +{
&gt; &gt; +    m_beginTime = currentTime() - time.value();
&gt; &gt; +    m_accumulatedPauseTime = 0;
&gt; &gt; +    if (isPaused()) {
&gt; &gt; +        SMILTime elapsed = this-&gt;elapsed();
&gt; &gt; +        updateAnimations(elapsed);
&gt; &gt; +    }
&gt; No need for a local variable, just use:
&gt; if (isPaused())
&gt;     updateAnimations(elapsed());
&gt; 
&gt; You have to write tests and a ChangeLog, please use prepare-ChangeLog in your root WebKit directory to generate templates. r-, until these issues are resolved. The patch itself looks just fine, but you&apos;ll need to write several testcases, ideally using the existing framework in LayoutTests/svg/animations.
&gt; Test it using accumulative animations, normal ones, etc.
&gt; 
&gt; Thanks in advance!

It&apos;s pretty hard to test is within our current animation DRT api, since the hack for this framework tries to do the same thing. So we can&apos;t test setCurrentTime that stes the current time as well. I&apos;d suggest to remove the current hack and use setCurrentTime instead. This way our animation framework would get browser independent and we have dozens of tests for setCurrentTime. What do you think Niko?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440342</commentid>
    <comment_count>9</comment_count>
    <who name="Raks">rakssvg</who>
    <bug_when>2011-07-21 04:11:39 -0700</bug_when>
    <thetext>When can we have setCurrentTime implemented. It is so important for our project</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440494</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-07-21 11:02:34 -0700</bug_when>
    <thetext>I&apos;ll upload a my current patch soon. But it is not for review and may fail to apply. I had bigger problems with our asynchrony timer handling. Problem: the time get&apos;s not set immediately. I won&apos;t have time to look at this in the next weeks. I hope it helps others to find a better fix. I may come back to the bug if it did not get fixed before I have more time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489947</commentid>
    <comment_count>11</comment_count>
    <who name="Raks">rakssvg</who>
    <bug_when>2011-10-25 03:38:00 -0700</bug_when>
    <thetext>Any updates on this BUG, This is supported on Firefox and Opera but not WebKit based browsers which is preventing lot of interactivity for WebKit based browsers. Can anyone take up this BUG please ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501923</commentid>
    <comment_count>12</comment_count>
    <who name="Joel Webber">jgw</who>
    <bug_when>2011-11-14 08:11:02 -0800</bug_when>
    <thetext>@Dirk, Nikolas: If no one has any objection, I&apos;ll try to finish this fix and get it landed. I think there are some edge-cases not being dealt with yet, but it doesn&apos;t look too difficult to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503057</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-11-15 10:58:46 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; @Dirk, Nikolas: If no one has any objection, I&apos;ll try to finish this fix and get it landed. I think there are some edge-cases not being dealt with yet, but it doesn&apos;t look too difficult to fix.

You&apos;ll see some difficulties with asynchronous timers in the SVG implementation once you write some test cases for setCurrentTime IIRC. But I have no objections if you want to work on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506955</commentid>
    <comment_count>14</comment_count>
      <attachid>116084</attachid>
    <who name="Joel Webber">jgw</who>
    <bug_when>2011-11-21 07:40:37 -0800</bug_when>
    <thetext>Created attachment 116084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506965</commentid>
    <comment_count>15</comment_count>
    <who name="Joel Webber">jgw</who>
    <bug_when>2011-11-21 07:57:08 -0800</bug_when>
    <thetext>This patch is incomplete -- I&apos;m writing more tests right now. But I wanted to get feedback on the SVGSMILElement::reset() method, which makes me feel a bit squirrely.

The underlying issue that makes the implementation tricky comes up when you have multiple &lt;animate&gt; elements associated with the same target element. When you just have a single &lt;animate&gt; in the Active state, progress()ing it backwards in time works fine. But when you have more than one, or the current one has become Inactive or Frozen, things get weird. To make matters worse, the TimeContainer removes Inactive SMILElements from m_scheduledAnimations, making it impossible to go backwards in time across the boundary between them.

The only solution I could think of that seemed likely to not break in subtle ways was to
- Not remove inactive SMILElements from m_scheduledAnimations, and
- Implement SMILElement::reset() to take it back to a known-good state (with its parsed attributes preserved).

The one thing that still worries me about this approach is that it looks like SMILElement::[m_beginTimes m_endTimes] might not be maintained correctly. I don&apos;t clear them in reset(), because they contain state that&apos;s initialized in insertedIntoDocument() and parseBeginOrEnd(). But it looks like they&apos;re also modified in handleConditionEvent(), which appears to happen post-initialization, and seems like it should be reverted in reset().

I&apos;m open to any other approaches, of course, and if anyone can offer suggestions on test-cases that would trigger the handleConditionEvent() case, it would be greatly appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507219</commentid>
    <comment_count>16</comment_count>
      <attachid>116137</attachid>
    <who name="Joel Webber">jgw</who>
    <bug_when>2011-11-21 14:35:13 -0800</bug_when>
    <thetext>Created attachment 116137
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507250</commentid>
    <comment_count>17</comment_count>
    <who name="Joel Webber">jgw</who>
    <bug_when>2011-11-21 15:00:38 -0800</bug_when>
    <thetext>That last patch adds slightly better tests, and deals with a few timing edge-cases. Any feedback on the general approach and other test cases that would be appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507286</commentid>
    <comment_count>18</comment_count>
      <attachid>116137</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-21 15:53:25 -0800</bug_when>
    <thetext>Comment on attachment 116137
Patch

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

&gt; Source/WebCore/svg/SVGSVGElement.cpp:534
&gt; +    if (seconds &lt; 0)
&gt; +        seconds = 0;

Can this and the isnan check just be rolled into a seconds = max(seconds, 0); line?

&gt; Source/WebCore/svg/SVGSVGElement.cpp:536
&gt; +    else if (isnan(seconds))
&gt; +        return;

Should this throw an exception?  Do we have tests for hte behavior of element.setCurrentTime(&quot;foo&quot;)?  Seems we should.

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:138
&gt; +    Vector&lt;SVGSMILElement*&gt; toReset;
&gt; +    copyToVector(m_scheduledAnimations, toReset);
&gt; +    for (unsigned n = 0; n &lt; toReset.size(); ++n)
&gt; +        toReset[n]-&gt;reset();

Why do we need to copy them?  Can reset() cause arbitrary dom modifications?

&gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:-284
&gt; -        else if (!animation-&gt;isContributing(elapsed)) {
&gt; -            m_scheduledAnimations.remove(animation);
&gt; -            if (m_scheduledAnimations.isEmpty())
&gt; -                m_savedBaseValues.clear();
&gt; -        }

You should explain this (and other changes) in your ChangeLog.

&gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:182
&gt; +void SVGSMILElement::reset()
&gt; +{
&gt; +    m_activeState = Inactive;
&gt; +    m_isWaitingForFirstInterval = true;
&gt; +    m_intervalBegin = SMILTime::unresolved();
&gt; +    m_intervalEnd = SMILTime::unresolved();
&gt; +    m_previousIntervalBegin = SMILTime::unresolved();
&gt; +    m_lastPercent = 0;
&gt; +    m_lastRepeat = 0;
&gt; +    m_nextProgressTime = 0;
&gt; +
&gt; +    resolveFirstInterval();
&gt; +}

We should consider using this in the constructor so that the constructor and reset() are known to take the same codepaths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507336</commentid>
    <comment_count>19</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-21 17:52:16 -0800</bug_when>
    <thetext>Instead of patching it, I wonder if we could wipe out the SVG animation support. It is a terrible standard. It is requires lots of complicated code and support infrastructure. A significant amount of work would be need to be done to make it respectable (it modifies dom etc). Other engines do fine without. Hixie removed animations from the Acid3 (the original motivation for implementing them). 

Are there any real uses for it anywhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507418</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-11-21 22:47:49 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Instead of patching it, I wonder if we could wipe out the SVG animation support. It is a terrible standard. It is requires lots of complicated code and support infrastructure. A significant amount of work would be need to be done to make it respectable (it modifies dom etc). Other engines do fine without. Hixie removed animations from the Acid3 (the original motivation for implementing them). 
&gt; 
&gt; Are there any real uses for it anywhere?

Yes there are a lot of use cases. And before anyone can remove SVG Animation, we need a reasonable replacement for it. JS is of course one way, but maybe not the best. CSS Animations/Transitions is another way but it is not possible to animate SVG attributes with it (the general use case). The SVG WG is working on finding a replacement, but that no other engine is supporting it is absolutely wrong. Rather there is just one viewer not supporting SVG Animations: IE.

And I also don&apos;t understand why it is a terrible standard? You can do a lot more with SVG Animation than with CSS Animations/Transitions, with just one line in the SVG document. It supports the sandwich model and animation of XML attributes as well as CSS properties. It is well defined (at least if you look at SMIL Animations 3.0) with a description of all edge cases.

The work on the DOM changes (animVal/baseVal) is one problem. Neither Niko nor me had enough time to implement it completely.

I had no time to look at the patch yet, but a missing implementation of setCurrentTime() is no reason to remove SVG Animation at this point of time.

In general I do not oppose to push CSS Animations for SVG, but it is still a lot to do before we can think about removing SVG Animation. And even at this time, we will break a lot of content out there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507436</commentid>
    <comment_count>21</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-22 00:23:58 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Instead of patching it, I wonder if we could wipe out the SVG animation support. It is a terrible standard. It is requires lots of complicated code and support infrastructure. A significant amount of work would be need to be done to make it respectable (it modifies dom etc).
That&apos;s not correct. Dirk &amp; me spent a lot of time last year to prepare animVal support, and to move animations away from modifying the DOM.

It&apos;s all prepared, I have a patch &lt;10k that patches SVGLength animations to work without any dOM modifications, while exposing animVal/baseVal correctly to JS.
I have other blocking issues atm, but I want to come back to it... or at least find someone to take over the work. It&apos;s really all prepared for DOM attributes, CSS property animations are another topic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507445</commentid>
    <comment_count>22</comment_count>
      <attachid>116137</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-22 00:45:25 -0800</bug_when>
    <thetext>Comment on attachment 116137
Patch

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

I fully agree with Erics review comments. I have some more issues with testing:

&gt; LayoutTests/svg/animations/script-tests/animate-setcurrenttime.js:31
&gt; +animate1.setAttribute(&quot;to&quot;, &quot;200&quot;);
&gt; +animate1.setAttribute(&quot;fill&quot;, &quot;freeze&quot;);

We need lots more tests, as you can guess :-)
* Accumulating animations need to be tested
* Several animations running in parallel
* Nested time containers, test modifying timeline in a inner &lt;svg&gt; element.
  &lt;svg&gt;some content &lt;svg width=&quot;50&quot; height=&quot;50&quot;&gt; rect-with-anim-in-inner-svg... &lt;/svg&gt; &lt;/svg&gt;
  Test moving time in outer &lt;svg&gt;, should it affect the inner &lt;svg&gt; timeline?
* Use pure SVG/HTML5 self-contained tests, not using script-tests/ framework as well
...
I&apos;m sure I could come up with more, once I have some more time to think about that.
Do you also test your testcases in eg. Opera? Would be nice to have them pass in Opera fully as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507533</commentid>
    <comment_count>23</comment_count>
    <who name="Joel Webber">jgw</who>
    <bug_when>2011-11-22 05:11:38 -0800</bug_when>
    <thetext>Eric, Nikolas:  Thanks for the prompt and detailed review.

I probably wasn&apos;t as clear on this as I should have been, but this patch wasn&apos;t intended to be committed quite yet. I was hoping to get feedback on the specific mechanisms called out in my first comment (SMILElement::reset() and the fact that inactive animations are no longer removed from SMILTimeContainer::m_scheduledAnimations).

If no one sees any serious problem with this approach, I&apos;ll continue cleaning it up in light of the review feedback. I&apos;m also in the midst of writing more tests, as Nikolas suggests (thanks for the specific test suggestions), and I should have something ready later today. I&apos;ve been testing them on Firefox, and will check Opera as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507937</commentid>
    <comment_count>24</comment_count>
    <who name="Raks">rakssvg</who>
    <bug_when>2011-11-22 22:06:30 -0800</bug_when>
    <thetext>Please dont even consider removing SVG SMIL animation. Its far far better than CSS animations and JS as editing it does not require much of programming expertise. Its far more readable as it is more structured than CSS animations. Its just a matter of time SVG picks up.
animateMotion in SVG is something unique not possible in CSS animations and can be done in 1 line in SVG</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508094</commentid>
    <comment_count>25</comment_count>
      <attachid>116348</attachid>
    <who name="Joel Webber">jgw</who>
    <bug_when>2011-11-23 06:05:30 -0800</bug_when>
    <thetext>Created attachment 116348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508111</commentid>
    <comment_count>26</comment_count>
    <who name="Joel Webber">jgw</who>
    <bug_when>2011-11-23 06:29:43 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 116137 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116137&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGSVGElement.cpp:534
&gt; &gt; +    if (seconds &lt; 0)
&gt; &gt; +        seconds = 0;
&gt; 
&gt; Can this and the isnan check just be rolled into a seconds = max(seconds, 0); line?

I changed the &lt;0 check to simply use max. That doesn&apos;t work properly for the NaN case (see next comment).

&gt; &gt; Source/WebCore/svg/SVGSVGElement.cpp:536
&gt; &gt; +    else if (isnan(seconds))
&gt; &gt; +        return;
&gt; 
&gt; Should this throw an exception?  Do we have tests for hte behavior of element.setCurrentTime(&quot;foo&quot;)?  Seems we should.

The spec appears to be silent on what non-numeric values should do. Throwing an exception would seem reasonable (and Mozilla does indeed throw), but the spec includes no &apos;raises&apos; clause for this method (apparently not an oversight -- plenty of other methods are spec&apos;d to raise exceptions).

If you think it&apos;s worthwhile to change this in WebKit, I&apos;m glad to do so -- I&apos;ll need to change the IDL so that I get an ExceptionCode parameter in SVGSVGElement::setCurrentTime() (unless there&apos;s another way to throw a DOM exception that I&apos;m simply unaware of).

As I&apos;ve expanded the tests, I added a couple that deal with values like NaN and &quot;blah&quot;. They explicitly test that these have no effect, and if we decide to throw instead I&apos;ll obviously need to update the test.

&gt; &gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:138
&gt; &gt; +    Vector&lt;SVGSMILElement*&gt; toReset;
&gt; &gt; +    copyToVector(m_scheduledAnimations, toReset);
&gt; &gt; +    for (unsigned n = 0; n &lt; toReset.size(); ++n)
&gt; &gt; +        toReset[n]-&gt;reset();
&gt; 
&gt; Why do we need to copy them?  Can reset() cause arbitrary dom modifications?

Yes, SVGSMILElement::reset() can cause it to reschedule itself (in resolveFirstElement()), which modifies m_scheduledAnimations.

&gt; &gt; Source/WebCore/svg/animation/SMILTimeContainer.cpp:-284
&gt; &gt; -        else if (!animation-&gt;isContributing(elapsed)) {
&gt; &gt; -            m_scheduledAnimations.remove(animation);
&gt; &gt; -            if (m_scheduledAnimations.isEmpty())
&gt; &gt; -                m_savedBaseValues.clear();
&gt; &gt; -        }
&gt; 
&gt; You should explain this (and other changes) in your ChangeLog.

I&apos;ve added a couple of comments in the ChangeLog. Please let me know if they&apos;re insufficient -- I&apos;m still acclimating to WebKit norms on this front.

&gt; &gt; Source/WebCore/svg/animation/SVGSMILElement.cpp:182
&gt; &gt; +void SVGSMILElement::reset()
&gt; &gt; +{
&gt; &gt; +    m_activeState = Inactive;
&gt; &gt; +    m_isWaitingForFirstInterval = true;
&gt; &gt; +    m_intervalBegin = SMILTime::unresolved();
&gt; &gt; +    m_intervalEnd = SMILTime::unresolved();
&gt; &gt; +    m_previousIntervalBegin = SMILTime::unresolved();
&gt; &gt; +    m_lastPercent = 0;
&gt; &gt; +    m_lastRepeat = 0;
&gt; &gt; +    m_nextProgressTime = 0;
&gt; &gt; +
&gt; &gt; +    resolveFirstInterval();
&gt; &gt; +}
&gt; 
&gt; We should consider using this in the constructor so that the constructor and reset() are known to take the same codepaths.

I&apos;ve added an explicit reset() call in the ctor. I left the initializers alone (IOW, some values get doubly-initialized), because much of the other code I&apos;ve seen in WebKit seems to prefer setting all members in initializer expressions. It feels a bit weird this way, so if you prefer I&apos;d be glad to be more surgical in initializing these fields.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508113</commentid>
    <comment_count>27</comment_count>
    <who name="Joel Webber">jgw</who>
    <bug_when>2011-11-23 06:35:13 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 116137 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116137&amp;action=review
&gt; 
&gt; I fully agree with Erics review comments. I have some more issues with testing:
&gt; 
&gt; &gt; LayoutTests/svg/animations/script-tests/animate-setcurrenttime.js:31
&gt; &gt; +animate1.setAttribute(&quot;to&quot;, &quot;200&quot;);
&gt; &gt; +animate1.setAttribute(&quot;fill&quot;, &quot;freeze&quot;);
&gt; 
&gt; We need lots more tests, as you can guess :-)
&gt; * Accumulating animations need to be tested
&gt; * Several animations running in parallel
&gt; * Nested time containers, test modifying timeline in a inner &lt;svg&gt; element.
&gt;   &lt;svg&gt;some content &lt;svg width=&quot;50&quot; height=&quot;50&quot;&gt; rect-with-anim-in-inner-svg... &lt;/svg&gt; &lt;/svg&gt;
&gt;   Test moving time in outer &lt;svg&gt;, should it affect the inner &lt;svg&gt; timeline?
&gt; * Use pure SVG/HTML5 self-contained tests, not using script-tests/ framework as well
&gt; ...
&gt; I&apos;m sure I could come up with more, once I have some more time to think about that.
&gt; Do you also test your testcases in eg. Opera? Would be nice to have them pass in Opera fully as well.

The most recent patch has a test that I believe covers these cases. I&apos;m still becoming familiar with the &quot;dark corners&quot; of the animation spec, so it&apos;s entirely possible that I&apos;ve missed some cases. Please feel free to throw out any cases that come to mind, and I&apos;ll add them.

As for the script-tests/ framework question -- I&apos;ve modified the test to be more self-contained, and it now uses only &quot;fast/js/resources/js-test-pre.js&quot; (for shouldBe() and the PASS/FAIL stuff), and otherwise uses the layoutTestController directly. I&apos;m not sure if this is precisely what you had in mind. I chose not to do pixel tests because I felt it more important to cover all the intermediate states at various values of setCurrentTime(). But if you feel a pixel test would be helpful, I&apos;m glad to add one.

Also, I jammed all the cases together into one big test-case. If you feel it would be better to split them up, again that&apos;s fine by me.

(I also just noticed that I left a couple of commented-out script includes in there -- I&apos;ll remove those on the next patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508124</commentid>
    <comment_count>28</comment_count>
    <who name="Joel Webber">jgw</who>
    <bug_when>2011-11-23 07:27:01 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; I&apos;m sure I could come up with more, once I have some more time to think about that.
&gt; Do you also test your testcases in eg. Opera? Would be nice to have them pass in Opera fully as well.

Forgot to respond to the Opera question -- I&apos;ve checked these tests on Mozilla and Opera, and everything passes except for the handling of nested time containers. If I understand it correctly, WebKit&apos;s behavior is the correct one -- the currentTime of the outer/inner containers should be independent of one-another. But they seem to interact with each other on Opera and Mozilla (different seemingly-wrong behavior on each).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528835</commentid>
    <comment_count>29</comment_count>
    <who name="Joel Webber">jgw</who>
    <bug_when>2012-01-03 10:11:49 -0800</bug_when>
    <thetext>Ping? Finally back from vacation.

If either of you has a chance to look at the updated patch, it would be greatly appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532332</commentid>
    <comment_count>30</comment_count>
      <attachid>116348</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-09 11:08:04 -0800</bug_when>
    <thetext>Comment on attachment 116348
Patch

This looks reasonable, but you really need Antti or Niko to review, since they are much more familiar with our SVG Animation implementation than I am.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533058</commentid>
    <comment_count>31</comment_count>
      <attachid>116348</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-01-10 07:32:56 -0800</bug_when>
    <thetext>Comment on attachment 116348
Patch

This really looks great, now if we just already had my animal patch in .... would you be interested to implement that as well? Everything is in place for animal, we just need to hook it in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533062</commentid>
    <comment_count>32</comment_count>
    <who name="Joel Webber">jgw</who>
    <bug_when>2012-01-10 07:39:20 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 116348 [details])
&gt; This really looks great, now if we just already had my animal patch in .... would you be interested to implement that as well? Everything is in place for animal, we just need to hook it in.

Many thanks for the review. I&apos;m unfamiliar with the &quot;animal patch&quot;, but if you can point me in the right direction, I&apos;ll have a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533065</commentid>
    <comment_count>33</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-01-10 07:43:58 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; (From update of attachment 116348 [details] [details])
&gt; &gt; This really looks great, now if we just already had my animal patch in .... would you be interested to implement that as well? Everything is in place for animal, we just need to hook it in.
&gt; 
&gt; Many thanks for the review. I&apos;m unfamiliar with the &quot;animal patch&quot;, but if you can point me in the right direction, I&apos;ll have a look.
Ouch, I meant to say &quot;animVal&quot; patch :-)

Say you &lt;animate&gt; a &lt;rect&gt; width from &quot;100&quot; to &quot;200&quot;, in 1s.
at 0s, rect.width.baseVal.value == rect.width.animVal.value, when the anim runs, it should differ and return eg. 150 at 0.5s with a linear animation progress.
The whole animVal/baseVal distinction is prepared since mid of last year, but we couldn&apos;t yet take the time and turn it on. Bug 12437 is discussing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533906</commentid>
    <comment_count>34</comment_count>
      <attachid>122026</attachid>
    <who name="Joel Webber">jgw</who>
    <bug_when>2012-01-11 08:05:02 -0800</bug_when>
    <thetext>Created attachment 122026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533907</commentid>
    <comment_count>35</comment_count>
      <attachid>122026</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-11 08:06:29 -0800</bug_when>
    <thetext>Comment on attachment 122026
Patch

Rejecting attachment 122026 from commit-queue.

jgw@chromium.org does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533975</commentid>
    <comment_count>36</comment_count>
      <attachid>122026</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-11 09:55:07 -0800</bug_when>
    <thetext>Comment on attachment 122026
Patch

Clearing flags on attachment: 122026

Committed r104719: &lt;http://trac.webkit.org/changeset/104719&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533976</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-11 09:55:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>56872</attachid>
            <date>2010-05-24 04:50:12 -0700</date>
            <delta_ts>2010-05-24 04:50:12 -0700</delta_ts>
            <desc>testcase</desc>
            <filename>pauseAnimations-and-setCurrentTime.svg</filename>
            <type>image/svg+xml</type>
            <size>488</size>
            <attacher name="Jonathan Watt">jwatt</attacher>
            
              <data encoding="base64">PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgICAgb25sb2FkPSJzZXRU
aW1lQW5kU25hcHNob3QoMSwgdHJ1ZSkiPgogIDx0aXRsZT5UZXN0IGZlYXR1cmVzIG5lY2Vzc2Fy
eSBmb3IgcmVmdGVzdGluZyB0aGUgdmlzdWFsIHJlc3VsdHMgb2YgU01JTCBhbmltYXRpb248L3Rp
dGxlPgogIDxzY3JpcHQ+PCFbQ0RBVEFbCgpmdW5jdGlvbiBzZXRUaW1lQW5kU25hcHNob3QodGlt
ZUluU2Vjb25kcykKewogIHZhciBzdmcgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CiAgc3Zn
LnBhdXNlQW5pbWF0aW9ucygpOwogIHN2Zy5zZXRDdXJyZW50VGltZSh0aW1lSW5TZWNvbmRzKTsK
fQoKICBdXT48L3NjcmlwdD4KICA8cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxs
PSJyZWQiPgogICAgPHNldCBhdHRyaWJ1dGVOYW1lPSJmaWxsIiBiZWdpbj0iMXMiIGR1cj0iMC4y
cyIgdG89ImxpbWUiLz4KICA8L3JlY3Q+Cjwvc3ZnPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67423</attachid>
            <date>2010-09-13 10:13:08 -0700</date>
            <delta_ts>2012-01-11 08:04:47 -0800</delta_ts>
            <desc>Patch to fix this bug.</desc>
            <filename>webkit12073.patch</filename>
            <type>text/plain</type>
            <size>2135</size>
            <attacher name="Chris Meyer">cmeyer1969+webkit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2NzM4OSkKKysrIFdlYkNvcmUvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzAsOSArNTMwLDkgQEAgZmxv
YXQgU1ZHU1ZHRWxlbWVudDo6Z2V0Q3VycmVudFRpbWUoKSBjbwogICAgIHJldHVybiBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KG1fdGltZUNvbnRhaW5lci0+ZWxhcHNlZCgpLnZhbHVlKCkpOwogfQog
Ci12b2lkIFNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRUaW1lKGZsb2F0IC8qIHNlY29uZHMgKi8p
Cit2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRUaW1lKGZsb2F0IHNlY29uZHMpCiB7Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudCBtZSwgYnVnIDEyMDczCisgICAgbV90aW1lQ29udGFpbmVy
LT5zZXRFbGFwc2VkKHNlY29uZHMpOwogfQogCiBib29sIFNWR1NWR0VsZW1lbnQ6OnNlbGZIYXNS
ZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxU
aW1lQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01J
TFRpbWVDb250YWluZXIuY3BwCShyZXZpc2lvbiA2NzM4OSkKKysrIFdlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcg
QEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6YmVnaW4oKSB7fQogdm9pZCBTTUlMVGltZUNvbnRh
aW5lcjo6cGF1c2UoKSB7fQogdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6cmVzdW1lKCkge30KIFNN
SUxUaW1lIFNNSUxUaW1lQ29udGFpbmVyOjplbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gMDsgfQor
dm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c2V0RWxhcHNlZChTTUlMVGltZSkge30KIGJvb2wgU01J
TFRpbWVDb250YWluZXI6OmlzUGF1c2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIHZvaWQg
U01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQoVGltZXI8U01JTFRpbWVDb250YWluZXI+Kikg
e30KICNlbHNlCkBAIC04NSw2ICs4NiwxNiBAQCBTTUlMVGltZSBTTUlMVGltZUNvbnRhaW5lcjo6
ZWxhcHNlZCgpIGNvCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBjdXJyZW50VGltZSgp
IC0gbV9iZWdpblRpbWUgLSBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lOwogfQorCit2b2lkIFNNSUxU
aW1lQ29udGFpbmVyOjpzZXRFbGFwc2VkKFNNSUxUaW1lIHRpbWUpCit7CisgICAgbV9iZWdpblRp
bWUgPSBjdXJyZW50VGltZSgpIC0gdGltZS52YWx1ZSgpOworICAgIG1fYWNjdW11bGF0ZWRQYXVz
ZVRpbWUgPSAwOworICAgIGlmIChpc1BhdXNlZCgpKSB7CisgICAgICAgIFNNSUxUaW1lIGVsYXBz
ZWQgPSB0aGlzLT5lbGFwc2VkKCk7CisgICAgICAgIHVwZGF0ZUFuaW1hdGlvbnMoZWxhcHNlZCk7
CisgICAgfQorfQogICAgIAogYm9vbCBTTUlMVGltZUNvbnRhaW5lcjo6aXNBY3RpdmUoKSBjb25z
dAogewpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgJKHJl
dmlzaW9uIDY3Mzg5KQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2b2lkIHVuc2NoZWR1bGUoU1ZHU01JTEVsZW1lbnQqKTsKICAgICAgICAgCiAgICAg
ICAgIFNNSUxUaW1lIGVsYXBzZWQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRFbGFwc2VkKFNN
SUxUaW1lIGVsYXBzZWQpOwogCiAgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICAg
ICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116084</attachid>
            <date>2011-11-21 07:40:37 -0800</date>
            <delta_ts>2011-11-21 14:35:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-12073-20111121104036.patch</filename>
            <type>text/plain</type>
            <size>10410</size>
            <attacher name="Joel Webber">jgw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwOTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGY3M2M2NjE3ZjYxYzVj
ZGM1YzZkODJiZWUyMDA5MTM4ZWI4OTRkZS4uNjE4OTkzOWQ1ZDgyMzM0N2NlZjU1NjYwZDM3NjBk
ZjMxZWRiOTlhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDExLTExLTIxICBKb2Vs
IFdlYmJlciAgPGpnd0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBzZXRDdXJyZW50
VGltZSgpIGFuZCBwYXVzZUFuaW1hdGlvbnMoKSBvbiBTVkdTVkdFbGVtZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHN2Zy9hbmltYXRpb25z
L2FuaW1hdGUtc2V0Y3VycmVudHRpbWUuc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpzZXRDdXJyZW50VGltZSk6
CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6U01JTFRpbWVDb250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OlNNSUxUaW1lQ29udGFpbmVyOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNv
bnRhaW5lcjo6c2V0RWxhcHNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5l
cjo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNv
bnRhaW5lci5oOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKiBzdmcv
YW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisKIDIwMTEtMTEtMTggIFBhdmVsIEZlbGRtYW4g
IDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGdldCByaWQg
b2YgUGFuZWw6OnJlc2V0IGluIHRoZSBmcm9udC1lbmQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAKaW5kZXggN2Y3NTU0Nzk3NDNiNjYxZTI5NjNmZThkMDg0NDlmODUyNjUxYWUxYS4u
OTBmZjY2ZjU2MzRlMDE2MjVkOWQ0ZGRmYmU4NzMyNDk5MTQ2NWJiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcApAQCAtNTI4LDkgKzUyOCwxNCBAQCBmbG9hdCBTVkdTVkdFbGVt
ZW50OjpnZXRDdXJyZW50VGltZSgpIGNvbnN0CiAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQobV90aW1lQ29udGFpbmVyLT5lbGFwc2VkKCkudmFsdWUoKSk7CiB9CiAKLXZvaWQgU1ZH
U1ZHRWxlbWVudDo6c2V0Q3VycmVudFRpbWUoZmxvYXQgLyogc2Vjb25kcyAqLykKK3ZvaWQgU1ZH
U1ZHRWxlbWVudDo6c2V0Q3VycmVudFRpbWUoZmxvYXQgc2Vjb25kcykKIHsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IG1lLCBidWcgMTIwNzMKKyAgICBpZiAoc2Vjb25kcyA8IDApCisgICAgICAg
IHNlY29uZHMgPSAwOworICAgIGVsc2UgaWYgKGlzbmFuKHNlY29uZHMpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3RpbWVDb250YWluZXItPnNldEVsYXBzZWQoc2Vjb25kcyk7CiB9CiAKIGJv
b2wgU1ZHU1ZHRWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4
IGE3YTc3ODM2ODdhMTY5YWE0MWUyYmYzYmI2MmQ5MDM3NzBkNDg4NTMuLjE3Zjg5NmM0Zjg4YjY1
NzE5Yjk5YTMzNTMxN2RhNjc4YTQ4NTM3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC00Niw2ICs0Niw3IEBAIFNNSUxU
aW1lQ29udGFpbmVyOjpTTUlMVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50KiBvd25lcikKICAg
ICA6IG1fYmVnaW5UaW1lKDApCiAgICAgLCBtX3BhdXNlVGltZSgwKQogICAgICwgbV9hY2N1bXVs
YXRlZFBhdXNlVGltZSgwKQorICAgICwgbV9wcmVzZXRTdGFydFRpbWUoMCkKICAgICAsIG1fZG9j
dW1lbnRPcmRlckluZGV4ZXNEaXJ0eShmYWxzZSkKICAgICAsIG1fdGltZXIodGhpcywgJlNNSUxU
aW1lQ29udGFpbmVyOjp0aW1lckZpcmVkKQogICAgICwgbV9vd25lclNWR0VsZW1lbnQob3duZXIp
CkBAIC04OSwxNyArOTAsMjMgQEAgYm9vbCBTTUlMVGltZUNvbnRhaW5lcjo6aXNQYXVzZWQoKSBj
b25zdAogdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6YmVnaW4oKQogewogICAgIEFTU0VSVCghbV9i
ZWdpblRpbWUpOwotICAgIG1fYmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICB1cGRhdGVB
bmltYXRpb25zKDApOworICAgIG1fYmVnaW5UaW1lID0gY3VycmVudFRpbWUoKSAtIG1fcHJlc2V0
U3RhcnRUaW1lOworICAgIG1fcHJlc2V0U3RhcnRUaW1lID0gMDsKKyAgICB1cGRhdGVBbmltYXRp
b25zKGVsYXBzZWQoKSk7CisKKyAgICBpZiAobV9wYXVzZVRpbWUpIHsKKyAgICAgICAgbV9wYXVz
ZVRpbWUgPSBjdXJyZW50VGltZSgpOworICAgICAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICB9CiB9
CiAKIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnBhdXNlKCkKIHsKLSAgICBpZiAoIW1fYmVnaW5U
aW1lKQotICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFpc1BhdXNlZCgpKTsKICAgICBtX3Bh
dXNlVGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV90aW1lci5zdG9wKCk7CisKKyAgICBpZiAo
bV9iZWdpblRpbWUpCisgICAgICAgIG1fdGltZXIuc3RvcCgpOwogfQogCiB2b2lkIFNNSUxUaW1l
Q29udGFpbmVyOjpyZXN1bWUoKQpAQCAtMTEyLDYgKzExOSwyNSBAQCB2b2lkIFNNSUxUaW1lQ29u
dGFpbmVyOjpyZXN1bWUoKQogICAgIHN0YXJ0VGltZXIoMCk7CiB9CiAKK3ZvaWQgU01JTFRpbWVD
b250YWluZXI6OnNldEVsYXBzZWQoU01JTFRpbWUgdGltZSkKK3sKKyAgICBpZiAoIW1fYmVnaW5U
aW1lKSB7CisgICAgICAgIG1fcHJlc2V0U3RhcnRUaW1lID0gdGltZS52YWx1ZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV9iZWdpblRpbWUgPSBjdXJyZW50VGltZSgpIC0gdGlt
ZS52YWx1ZSgpOworICAgIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWUgPSAwOworCisgICAgVmVjdG9y
PFNWR1NNSUxFbGVtZW50Kj4gdG9SZXNldDsKKyAgICBjb3B5VG9WZWN0b3IobV9zY2hlZHVsZWRB
bmltYXRpb25zLCB0b1Jlc2V0KTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdG9SZXNl
dC5zaXplKCk7ICsrbikKKyAgICAgICAgdG9SZXNldFtuXS0+cmVzZXQoKTsKKworICAgIGlmIChp
c1BhdXNlZCgpKQorICAgICAgICB1cGRhdGVBbmltYXRpb25zKGVsYXBzZWQoKSk7Cit9CisKIHZv
aWQgU01JTFRpbWVDb250YWluZXI6OnN0YXJ0VGltZXIoU01JTFRpbWUgZmlyZVRpbWUsIFNNSUxU
aW1lIG1pbmltdW1EZWxheSkKIHsKICAgICBpZiAoIW1fYmVnaW5UaW1lIHx8IGlzUGF1c2VkKCkp
CkBAIC0xMjMsNyArMTQ5LDcgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c3RhcnRUaW1lcihT
TUlMVGltZSBmaXJlVGltZSwgU01JTFRpbWUgbWluaW11bURlbGF5KQogICAgIFNNSUxUaW1lIGRl
bGF5ID0gbWF4KGZpcmVUaW1lIC0gZWxhcHNlZCgpLCBtaW5pbXVtRGVsYXkpOwogICAgIG1fdGlt
ZXIuc3RhcnRPbmVTaG90KGRlbGF5LnZhbHVlKCkpOwogfQotICAgIAorCiB2b2lkIFNNSUxUaW1l
Q29udGFpbmVyOjp0aW1lckZpcmVkKFRpbWVyPFNNSUxUaW1lQ29udGFpbmVyPiopCiB7CiAgICAg
QVNTRVJUKG1fYmVnaW5UaW1lKTsKQEAgLTEzMSw3ICsxNTcsNyBAQCB2b2lkIFNNSUxUaW1lQ29u
dGFpbmVyOjp0aW1lckZpcmVkKFRpbWVyPFNNSUxUaW1lQ29udGFpbmVyPiopCiAgICAgU01JTFRp
bWUgZWxhcHNlZCA9IHRoaXMtPmVsYXBzZWQoKTsKICAgICB1cGRhdGVBbmltYXRpb25zKGVsYXBz
ZWQpOwogfQotIAorCiB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVEb2N1bWVudE9yZGVy
SW5kZXhlcygpCiB7CiAgICAgdW5zaWduZWQgdGltaW5nRWxlbWVudENvdW50ID0gMDsKQEAgLTI3
NywxMSArMzAzLDYgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyhT
TUlMVGltZSBlbGFwc2VkLCBkb3VibGUgbmV4dE1hbnVhbFNhbXAKICAgICAgICAgU01JTFRpbWUg
bmV4dEZpcmVUaW1lID0gYW5pbWF0aW9uLT5uZXh0UHJvZ3Jlc3NUaW1lKCk7CiAgICAgICAgIGlm
IChuZXh0RmlyZVRpbWUuaXNGaW5pdGUoKSkKICAgICAgICAgICAgIGVhcmxpZXJzRmlyZVRpbWUg
PSBtaW4obmV4dEZpcmVUaW1lLCBlYXJsaWVyc0ZpcmVUaW1lKTsKLSAgICAgICAgZWxzZSBpZiAo
IWFuaW1hdGlvbi0+aXNDb250cmlidXRpbmcoZWxhcHNlZCkpIHsKLSAgICAgICAgICAgIG1fc2No
ZWR1bGVkQW5pbWF0aW9ucy5yZW1vdmUoYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIGlmIChtX3Nj
aGVkdWxlZEFuaW1hdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1fc2F2ZWRCYXNl
VmFsdWVzLmNsZWFyKCk7Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgVmVjdG9yPFNWR1NN
SUxFbGVtZW50Kj4gYW5pbWF0aW9uc1RvQXBwbHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgKaW5kZXggNzAwODUwOGYyZTlmZGYyMDdkMmQx
NzA1MzcyNWNlY2ExYzI1NGRkNi4uYTJkMGI4ZmVkNzdjZDY1NGIxZTczOTM3OTM2NTE3YmE1ODY5
M2VlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNv
bnRhaW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250
YWluZXIuaApAQCAtNTksNyArNTksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBiZWdpbigpOwogICAg
IHZvaWQgcGF1c2UoKTsKICAgICB2b2lkIHJlc3VtZSgpOwotICAgIAorICAgIHZvaWQgc2V0RWxh
cHNlZChTTUlMVGltZSk7CisKICAgICB2b2lkIHNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHko
KSB7IG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSA9IHRydWU7IH0KIAogICAgIC8vIE1vdmUg
dG8gYSBzcGVjaWZpYyB0aW1lLiBPbmx5IHVzZWQgZm9yIERSVCB0ZXN0aW5nIHB1cnBvc2VzLgpA
QCAtODEsNiArODIsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX2JlZ2luVGltZTsKICAgICBk
b3VibGUgbV9wYXVzZVRpbWU7CiAgICAgZG91YmxlIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWU7Cisg
ICAgZG91YmxlIG1fcHJlc2V0U3RhcnRUaW1lOwogCiAgICAgYm9vbCBtX2RvY3VtZW50T3JkZXJJ
bmRleGVzRGlydHk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NWR1NNSUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZH
U01JTEVsZW1lbnQuY3BwCmluZGV4IDlkNTkxNjk4OTA2ZDY4M2U1NmU0ODA2YmNiNjEwNGRlNWEz
YTI1NjMuLmNmNTVkNzBiYjI4ZmQ0MDA3MTg3ZDMyYWY1ZDUyZjUyMjI3ZjExNTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCkBAIC0xNjYs
NyArMTY2LDIxIEBAIHN0YXRpYyBpbmxpbmUgUXVhbGlmaWVkTmFtZSBjb25zdHJ1Y3RRdWFsaWZp
ZWROYW1lKGNvbnN0IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQsCiAgICAgCiAgICAgcmV0dXJuIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsKIH0KLSAgICAK
Kwordm9pZCBTVkdTTUlMRWxlbWVudDo6cmVzZXQoKQoreworICAgIG1fYWN0aXZlU3RhdGUgPSBJ
bmFjdGl2ZTsKKyAgICBtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwgPSB0cnVlOworICAgIG1f
aW50ZXJ2YWxCZWdpbiA9IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CisgICAgbV9pbnRlcnZhbEVu
ZCA9IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CisgICAgbV9wcmV2aW91c0ludGVydmFsQmVnaW4g
PSBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOworICAgIG1fbGFzdFBlcmNlbnQgPSAwOworICAgIG1f
bGFzdFJlcGVhdCA9IDA7CisgICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gMDsKKworICAgIHJlc29s
dmVGaXJzdEludGVydmFsKCk7Cit9CisKIHZvaWQgU1ZHU01JTEVsZW1lbnQ6Omluc2VydGVkSW50
b0RvY3VtZW50KCkKIHsKICAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCmluZGV4IDJh
NDIxYjkwYmQ2MzBhMDMwYzI1MTFiYTE1NmM5ZDU4ZTIxMDZiYzYuLmVlNTc0NjBiZDExOWMzNjkz
NGU2NDQwZGNmYWZmNmQ0MDU5NTJhNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NWR1NNSUxFbGVtZW50LmgKQEAgLTkyLDYgKzkyLDggQEAgcHVibGljOgogICAgIHZvaWQg
cHJvZ3Jlc3MoU01JTFRpbWUgZWxhcHNlZCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdHNFbGVtZW50
KTsKICAgICBTTUlMVGltZSBuZXh0UHJvZ3Jlc3NUaW1lKCkgY29uc3Q7CiAKKyAgICB2b2lkIHJl
c2V0KCk7CisKICAgICBzdGF0aWMgU01JTFRpbWUgcGFyc2VDbG9ja1ZhbHVlKGNvbnN0IFN0cmlu
ZyYpOwogICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZU9mZnNldFZhbHVlKGNvbnN0IFN0cmluZyYp
OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggNzZlYzllNTJlOTRiYmYyZDFlM2U3N2ZkMWYwMjNmM2I0ZDk0N2Q3NC4uNzdi
ZDliMzBkM2M3YjliNTA3NmNiOGE1Y2ZhMTE0NTE2OWJkOTkyZiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDExLTExLTIxICBKb2VsIFdlYmJlciAgPGpnd0Bnb29nbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCBzZXRDdXJyZW50VGltZSgpIGFuZCBwYXVzZUFuaW1hdGlvbnMoKSBvbiBTVkdT
VkdFbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjA3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0tbGludXgvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRjdXJy
ZW50dGltZS1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
LWxpbnV4L3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtc2V0Y3VycmVudHRpbWUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLXNldGN1cnJlbnR0aW1l
LnN2ZzogQWRkZWQuCisKIDIwMTEtMTEtMjEgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgogCiAgICAgICAgIEluc3BlY3RvciB0ZXN0cyBmbGFraWx5IGNyYXNoaW5nIG9uIExp
bnV4IGRiZyBjYW5hcnkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
LWxpbnV4L3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtc2V0Y3VycmVudHRpbWUtZXhwZWN0ZWQucG5n
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbGludXgvc3ZnL2FuaW1hdGlvbnMvYW5p
bWF0ZS1zZXRjdXJyZW50dGltZS1leHBlY3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQxM2U0ZGM4MGI4
ZDNmN2Y2NmU4OGY4OTg2ZmI4ZWU1MzI1MTcxNQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMjgz
OQp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHl+eVV7K3ZZVjJhPmkwKlopPWheaGxBJUBXcyRsSGBv
azxtfT9vVCF1OHUKejxkbWREQmZ+V0ZSM2lmZU9KZlZtR3okWWBXOClPVjZtdFZwUV5PVXEjZ1Bt
UVRxYHxZOTc4SlJ5dUVnaWxSLWg/Cnp6PXEyd1ckJnRUSEtfPUh4b01pdHpgKmhMSXdKJGFlIX5h
YDJFJTRuMV85JHkjJUxnbnJpOVU0RnEjV1NiSFFqWApsN3xqS3Z4bk1MRyY/T2hfUFQjfDdAWl5p
LURQVCpOIVBDe3hXdH4kKDY5OXVad0BtOzUKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWxpbnV4L3N2Zy9hbmltYXRpb25z
L2FuaW1hdGUtc2V0Y3VycmVudHRpbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0tbGludXgvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2E4MDI4NDRmNzY0NmNkZTk3ODNlOWFmMmIxZjY3Mzkz
ZjBkNDgyZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
LWxpbnV4L3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtc2V0Y3VycmVudHRpbWUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNSBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclZp
ZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
UmVuZGVyU1ZHUm9vdCB7c3ZnfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBSZW5kZXJTVkdQ
YXRoIHtyZWN0fSBhdCAoMCwwKSBzaXplIDgwMHg2MDAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29s
b3I9IzAwODAwMF19XSBbeD0wLjAwXSBbeT0wLjAwXSBbd2lkdGg9ODAwLjAwXSBbaGVpZ2h0PTYw
MC4wMF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtc2V0
Y3VycmVudHRpbWUuc3ZnIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRj
dXJyZW50dGltZS5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjI2MzZjM2Q4MzE2NWVlZjE2NGM3N2QzNjM4OTAx
OWVmZTcwZWMyMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L2FuaW1hdGUtc2V0Y3VycmVudHRpbWUuc3ZnCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0Mv
L0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFRE
L3N2ZzExLmR0ZCI+Cis8c3ZnIG9ubG9hZD0ic2V0VGltZUFuZFNuYXBzaG90KDEuMCkiIHZlcnNp
b249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KKyAgPHRpdGxlPlRl
c3RzIGZvciBTVkc6OnNldEN1cnJlbnRUaW1lKCk8L3RpdGxlPgorCisgIDxyZWN0IHdpZHRoPSIx
MDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InJlZCI+CisgICAgPHNldCBhdHRyaWJ1dGVOYW1lPSJm
aWxsIiBiZWdpbj0iMC41cyIgZHVyPSIxLjVzIiB0bz0iZ3JlZW4iLz4KKyAgPC9yZWN0PgorCisg
IDxzY3JpcHQ+PCFbQ0RBVEFbCisgIHZhciBzdmcgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7
CisKKyAgZnVuY3Rpb24gc2V0VGltZUFuZFNuYXBzaG90KHRpbWVJblNlY29uZHMpIHsKKyAgICBz
dmcucGF1c2VBbmltYXRpb25zKCk7CisgICAgc3ZnLnNldEN1cnJlbnRUaW1lKHRpbWVJblNlY29u
ZHMpOworICB9CisgIF1dPjwvc2NyaXB0PgorPC9zdmc+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116137</attachid>
            <date>2011-11-21 14:35:13 -0800</date>
            <delta_ts>2011-11-23 06:05:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-12073-20111121173512.patch</filename>
            <type>text/plain</type>
            <size>12607</size>
            <attacher name="Joel Webber">jgw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwOTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGY3M2M2NjE3ZjYxYzVj
ZGM1YzZkODJiZWUyMDA5MTM4ZWI4OTRkZS4uNjE4OTkzOWQ1ZDgyMzM0N2NlZjU1NjYwZDM3NjBk
ZjMxZWRiOTlhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDExLTExLTIxICBKb2Vs
IFdlYmJlciAgPGpnd0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBzZXRDdXJyZW50
VGltZSgpIGFuZCBwYXVzZUFuaW1hdGlvbnMoKSBvbiBTVkdTVkdFbGVtZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHN2Zy9hbmltYXRpb25z
L2FuaW1hdGUtc2V0Y3VycmVudHRpbWUuc3ZnCisKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpzZXRDdXJyZW50VGltZSk6
CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6U01JTFRpbWVDb250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OlNNSUxUaW1lQ29udGFpbmVyOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNv
bnRhaW5lcjo6c2V0RWxhcHNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5l
cjo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNv
bnRhaW5lci5oOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKiBzdmcv
YW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisKIDIwMTEtMTEtMTggIFBhdmVsIEZlbGRtYW4g
IDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGdldCByaWQg
b2YgUGFuZWw6OnJlc2V0IGluIHRoZSBmcm9udC1lbmQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAKaW5kZXggN2Y3NTU0Nzk3NDNiNjYxZTI5NjNmZThkMDg0NDlmODUyNjUxYWUxYS4u
OTBmZjY2ZjU2MzRlMDE2MjVkOWQ0ZGRmYmU4NzMyNDk5MTQ2NWJiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcApAQCAtNTI4LDkgKzUyOCwxNCBAQCBmbG9hdCBTVkdTVkdFbGVt
ZW50OjpnZXRDdXJyZW50VGltZSgpIGNvbnN0CiAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQobV90aW1lQ29udGFpbmVyLT5lbGFwc2VkKCkudmFsdWUoKSk7CiB9CiAKLXZvaWQgU1ZH
U1ZHRWxlbWVudDo6c2V0Q3VycmVudFRpbWUoZmxvYXQgLyogc2Vjb25kcyAqLykKK3ZvaWQgU1ZH
U1ZHRWxlbWVudDo6c2V0Q3VycmVudFRpbWUoZmxvYXQgc2Vjb25kcykKIHsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IG1lLCBidWcgMTIwNzMKKyAgICBpZiAoc2Vjb25kcyA8IDApCisgICAgICAg
IHNlY29uZHMgPSAwOworICAgIGVsc2UgaWYgKGlzbmFuKHNlY29uZHMpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3RpbWVDb250YWluZXItPnNldEVsYXBzZWQoc2Vjb25kcyk7CiB9CiAKIGJv
b2wgU1ZHU1ZHRWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4
IGE3YTc3ODM2ODdhMTY5YWE0MWUyYmYzYmI2MmQ5MDM3NzBkNDg4NTMuLjgyMzY5ZTljZDZmMjg0
NzJmYzhiNGQ5ZDAwYjUyODJhZTRhOWQ2OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC00Niw2ICs0Niw3IEBAIFNNSUxU
aW1lQ29udGFpbmVyOjpTTUlMVGltZUNvbnRhaW5lcihTVkdTVkdFbGVtZW50KiBvd25lcikKICAg
ICA6IG1fYmVnaW5UaW1lKDApCiAgICAgLCBtX3BhdXNlVGltZSgwKQogICAgICwgbV9hY2N1bXVs
YXRlZFBhdXNlVGltZSgwKQorICAgICwgbV9wcmVzZXRTdGFydFRpbWUoMCkKICAgICAsIG1fZG9j
dW1lbnRPcmRlckluZGV4ZXNEaXJ0eShmYWxzZSkKICAgICAsIG1fdGltZXIodGhpcywgJlNNSUxU
aW1lQ29udGFpbmVyOjp0aW1lckZpcmVkKQogICAgICwgbV9vd25lclNWR0VsZW1lbnQob3duZXIp
CkBAIC04OSwxNyArOTAsMjUgQEAgYm9vbCBTTUlMVGltZUNvbnRhaW5lcjo6aXNQYXVzZWQoKSBj
b25zdAogdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6YmVnaW4oKQogewogICAgIEFTU0VSVCghbV9i
ZWdpblRpbWUpOwotICAgIG1fYmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICB1cGRhdGVB
bmltYXRpb25zKDApOworICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOworCisgICAgbV9i
ZWdpblRpbWUgPSBub3cgLSBtX3ByZXNldFN0YXJ0VGltZTsKKyAgICB1cGRhdGVBbmltYXRpb25z
KFNNSUxUaW1lKG1fcHJlc2V0U3RhcnRUaW1lKSk7CisgICAgbV9wcmVzZXRTdGFydFRpbWUgPSAw
OworCisgICAgaWYgKG1fcGF1c2VUaW1lKSB7CisgICAgICAgIG1fcGF1c2VUaW1lID0gbm93Owor
ICAgICAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICB9CiB9CiAKIHZvaWQgU01JTFRpbWVDb250YWlu
ZXI6OnBhdXNlKCkKIHsKLSAgICBpZiAoIW1fYmVnaW5UaW1lKQotICAgICAgICByZXR1cm47CiAg
ICAgQVNTRVJUKCFpc1BhdXNlZCgpKTsKICAgICBtX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1lKCk7
Ci0gICAgbV90aW1lci5zdG9wKCk7CisKKyAgICBpZiAobV9iZWdpblRpbWUpCisgICAgICAgIG1f
dGltZXIuc3RvcCgpOwogfQogCiB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpyZXN1bWUoKQpAQCAt
MTEyLDYgKzEyMSwyNiBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpyZXN1bWUoKQogICAgIHN0
YXJ0VGltZXIoMCk7CiB9CiAKK3ZvaWQgU01JTFRpbWVDb250YWluZXI6OnNldEVsYXBzZWQoU01J
TFRpbWUgdGltZSkKK3sKKyAgICBpZiAoIW1fYmVnaW5UaW1lKSB7CisgICAgICAgIG1fcHJlc2V0
U3RhcnRUaW1lID0gdGltZS52YWx1ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
ZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9iZWdpblRpbWUgPSBub3cgLSB0aW1l
LnZhbHVlKCk7CisgICAgbV9hY2N1bXVsYXRlZFBhdXNlVGltZSA9IDA7CisKKyAgICBWZWN0b3I8
U1ZHU01JTEVsZW1lbnQqPiB0b1Jlc2V0OworICAgIGNvcHlUb1ZlY3RvcihtX3NjaGVkdWxlZEFu
aW1hdGlvbnMsIHRvUmVzZXQpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0b1Jlc2V0
LnNpemUoKTsgKytuKQorICAgICAgICB0b1Jlc2V0W25dLT5yZXNldCgpOworCisgICAgaWYgKGlz
UGF1c2VkKCkpCisgICAgICAgIHVwZGF0ZUFuaW1hdGlvbnMobm93IC0gbV9iZWdpblRpbWUgLSBt
X2FjY3VtdWxhdGVkUGF1c2VUaW1lKTsKK30KKwogdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c3Rh
cnRUaW1lcihTTUlMVGltZSBmaXJlVGltZSwgU01JTFRpbWUgbWluaW11bURlbGF5KQogewogICAg
IGlmICghbV9iZWdpblRpbWUgfHwgaXNQYXVzZWQoKSkKQEAgLTEyMyw3ICsxNTIsNyBAQCB2b2lk
IFNNSUxUaW1lQ29udGFpbmVyOjpzdGFydFRpbWVyKFNNSUxUaW1lIGZpcmVUaW1lLCBTTUlMVGlt
ZSBtaW5pbXVtRGVsYXkpCiAgICAgU01JTFRpbWUgZGVsYXkgPSBtYXgoZmlyZVRpbWUgLSBlbGFw
c2VkKCksIG1pbmltdW1EZWxheSk7CiAgICAgbV90aW1lci5zdGFydE9uZVNob3QoZGVsYXkudmFs
dWUoKSk7CiB9Ci0gICAgCisKIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQoVGlt
ZXI8U01JTFRpbWVDb250YWluZXI+KikKIHsKICAgICBBU1NFUlQobV9iZWdpblRpbWUpOwpAQCAt
MTMxLDcgKzE2MCw3IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQoVGltZXI8
U01JTFRpbWVDb250YWluZXI+KikKICAgICBTTUlMVGltZSBlbGFwc2VkID0gdGhpcy0+ZWxhcHNl
ZCgpOwogICAgIHVwZGF0ZUFuaW1hdGlvbnMoZWxhcHNlZCk7CiB9Ci0gCisKIHZvaWQgU01JTFRp
bWVDb250YWluZXI6OnVwZGF0ZURvY3VtZW50T3JkZXJJbmRleGVzKCkKIHsKICAgICB1bnNpZ25l
ZCB0aW1pbmdFbGVtZW50Q291bnQgPSAwOwpAQCAtMjc3LDExICszMDYsNiBAQCB2b2lkIFNNSUxU
aW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQsIGRvdWJsZSBu
ZXh0TWFudWFsU2FtcAogICAgICAgICBTTUlMVGltZSBuZXh0RmlyZVRpbWUgPSBhbmltYXRpb24t
Pm5leHRQcm9ncmVzc1RpbWUoKTsKICAgICAgICAgaWYgKG5leHRGaXJlVGltZS5pc0Zpbml0ZSgp
KQogICAgICAgICAgICAgZWFybGllcnNGaXJlVGltZSA9IG1pbihuZXh0RmlyZVRpbWUsIGVhcmxp
ZXJzRmlyZVRpbWUpOwotICAgICAgICBlbHNlIGlmICghYW5pbWF0aW9uLT5pc0NvbnRyaWJ1dGlu
ZyhlbGFwc2VkKSkgewotICAgICAgICAgICAgbV9zY2hlZHVsZWRBbmltYXRpb25zLnJlbW92ZShh
bmltYXRpb24pOwotICAgICAgICAgICAgaWYgKG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgbV9zYXZlZEJhc2VWYWx1ZXMuY2xlYXIoKTsKLSAgICAgICAg
fQogICAgIH0KICAgICAKICAgICBWZWN0b3I8U1ZHU01JTEVsZW1lbnQqPiBhbmltYXRpb25zVG9B
cHBseTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVD
b250YWluZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuaAppbmRleCA3MDA4NTA4ZjJlOWZkZjIwN2QyZDE3MDUzNzI1Y2VjYTFjMjU0ZGQ2Li5hMmQw
YjhmZWQ3N2NkNjU0YjFlNzM5Mzc5MzY1MTdiYTU4NjkzZWU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCkBAIC01OSw3ICs1OSw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIGJlZ2luKCk7CiAgICAgdm9pZCBwYXVzZSgpOwogICAgIHZvaWQg
cmVzdW1lKCk7Ci0gICAgCisgICAgdm9pZCBzZXRFbGFwc2VkKFNNSUxUaW1lKTsKKwogICAgIHZv
aWQgc2V0RG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSgpIHsgbV9kb2N1bWVudE9yZGVySW5kZXhl
c0RpcnR5ID0gdHJ1ZTsgfQogCiAgICAgLy8gTW92ZSB0byBhIHNwZWNpZmljIHRpbWUuIE9ubHkg
dXNlZCBmb3IgRFJUIHRlc3RpbmcgcHVycG9zZXMuCkBAIC04MSw2ICs4Miw3IEBAIHByaXZhdGU6
CiAgICAgZG91YmxlIG1fYmVnaW5UaW1lOwogICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKICAgICBk
b3VibGUgbV9hY2N1bXVsYXRlZFBhdXNlVGltZTsKKyAgICBkb3VibGUgbV9wcmVzZXRTdGFydFRp
bWU7CiAKICAgICBib29sIG1fZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKaW5kZXggOWQ1
OTE2OTg5MDZkNjgzZTU2ZTQ4MDZiY2I2MTA0ZGU1YTNhMjU2My4uY2Y1NWQ3MGJiMjhmZDQwMDcx
ODdkMzJhZjVkNTJmNTIyMjdmMTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TVkdTTUlMRWxlbWVudC5jcHAKQEAgLTE2Niw3ICsxNjYsMjEgQEAgc3RhdGljIGlubGlu
ZSBRdWFsaWZpZWROYW1lIGNvbnN0cnVjdFF1YWxpZmllZE5hbWUoY29uc3QgU1ZHRWxlbWVudCog
c3ZnRWxlbWVudCwKICAgICAKICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9j
YWxOYW1lLCBuYW1lc3BhY2VVUkkpOwogfQotICAgIAorCit2b2lkIFNWR1NNSUxFbGVtZW50Ojpy
ZXNldCgpCit7CisgICAgbV9hY3RpdmVTdGF0ZSA9IEluYWN0aXZlOworICAgIG1faXNXYWl0aW5n
Rm9yRmlyc3RJbnRlcnZhbCA9IHRydWU7CisgICAgbV9pbnRlcnZhbEJlZ2luID0gU01JTFRpbWU6
OnVucmVzb2x2ZWQoKTsKKyAgICBtX2ludGVydmFsRW5kID0gU01JTFRpbWU6OnVucmVzb2x2ZWQo
KTsKKyAgICBtX3ByZXZpb3VzSW50ZXJ2YWxCZWdpbiA9IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7
CisgICAgbV9sYXN0UGVyY2VudCA9IDA7CisgICAgbV9sYXN0UmVwZWF0ID0gMDsKKyAgICBtX25l
eHRQcm9ncmVzc1RpbWUgPSAwOworCisgICAgcmVzb2x2ZUZpcnN0SW50ZXJ2YWwoKTsKK30KKwog
dm9pZCBTVkdTTUlMRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIFNWR0Vs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5p
bWF0aW9uL1NWR1NNSUxFbGVtZW50LmgKaW5kZXggMmE0MjFiOTBiZDYzMGEwMzBjMjUxMWJhMTU2
YzlkNThlMjEwNmJjNi4uZWU1NzQ2MGJkMTE5YzM2OTM0ZTY0NDBkY2ZhZmY2ZDQwNTk1MmE0OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaApAQCAt
OTIsNiArOTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcm9ncmVzcyhTTUlMVGltZSBlbGFwc2Vk
LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0c0VsZW1lbnQpOwogICAgIFNNSUxUaW1lIG5leHRQcm9n
cmVzc1RpbWUoKSBjb25zdDsKIAorICAgIHZvaWQgcmVzZXQoKTsKKwogICAgIHN0YXRpYyBTTUlM
VGltZSBwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFNNSUxUaW1l
IHBhcnNlT2Zmc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NmVjOWU1MmU5NGJi
ZjJkMWUzZTc3ZmQxZjAyM2YzYjRkOTQ3ZDc0Li43N2JkOWIzMGQzYzdiOWI1MDc2Y2I4YTVjZmEx
MTQ1MTY5YmQ5OTJmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTEtMjEgIEpvZWwgV2Vi
YmVyICA8amd3QGdvb2dsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHNldEN1cnJlbnRUaW1l
KCkgYW5kIHBhdXNlQW5pbWF0aW9ucygpIG9uIFNWR1NWR0VsZW1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDczCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS1saW51
eC9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLXNldGN1cnJlbnR0aW1lLWV4cGVjdGVkLnBuZzogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tbGludXgvc3ZnL2FuaW1hdGlvbnMvYW5p
bWF0ZS1zZXRjdXJyZW50dGltZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9h
bmltYXRpb25zL2FuaW1hdGUtc2V0Y3VycmVudHRpbWUuc3ZnOiBBZGRlZC4KKwogMjAxMS0xMS0y
MSAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgSW5zcGVj
dG9yIHRlc3RzIGZsYWtpbHkgY3Jhc2hpbmcgb24gTGludXggZGJnIGNhbmFyeQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLXNldGN1cnJlbnR0
aW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMmE3ZDE2YjRiMmJhZjFkNzBlYjk0NjQyZDk5
YjJjZWE4OTA5MWZmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMCBAQAor
U1ZHIDEuMSBkeW5hbWljIGFuaW1hdGlvbiB0ZXN0cworCitUZXN0IGJlaGF2aW9yIG9mIGNvbnRy
b2xsaW5nIGFuaW1hdGlvbiB1c2luZyBTVkcuc2V0Q3VycmVudFRpbWUoKQorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyByZWN0LnguYmFzZVZhbC52YWx1ZSBpcyAwCitQQVNT
IHJlY3QueC5iYXNlVmFsLnZhbHVlIGlzIDUwCitQQVNTIHJlY3QueC5iYXNlVmFsLnZhbHVlIGlz
IDE1MAorUEFTUyByZWN0LnguYmFzZVZhbC52YWx1ZSBpcyAyMDAKK1BBU1MgcmVjdC54LmJhc2VW
YWwudmFsdWUgaXMgMjAwCitQQVNTIHJlY3QueC5iYXNlVmFsLnZhbHVlIGlzIDE3NQorUEFTUyBy
ZWN0LnguYmFzZVZhbC52YWx1ZSBpcyA3NQorUEFTUyByZWN0LnguYmFzZVZhbC52YWx1ZSBpcyA1
MAorUEFTUyByZWN0LnguYmFzZVZhbC52YWx1ZSBpcyAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS5odG1sIGIvTGF5b3V0VGVzdHMvc3Zn
L2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljYzll
OGU2YzU1YzM5NzNkZDQ0M2YzMzFlNTY0YTQyZjM0ZjI3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLXNldGN1cnJlbnR0aW1lLmh0bWwKQEAg
LTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZHluYW1pYy11cGRh
dGVzL3Jlc291cmNlcy9TVkdUZXN0Q2FzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL1NWR0FuaW1hdGlvblRlc3RDYXNlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGgxPlNWRyAxLjEgZHluYW1pYyBhbmltYXRpb24gdGVzdHM8L2gxPgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3Jp
cHQtdGVzdHMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10
ZXN0cy9hbmltYXRlLXNldGN1cnJlbnR0aW1lLmpzIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvc2NyaXB0LXRlc3RzL2FuaW1hdGUtc2V0Y3VycmVudHRpbWUuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDBl
NDA5NTNhNDcwZWU0ZTkyNDE2ZGQ1M2JmZjhkMmUwOTliOThhZAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL3NjcmlwdC10ZXN0cy9hbmltYXRlLXNldGN1cnJl
bnR0aW1lLmpzCkBAIC0wLDAgKzEsNjkgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IGJlaGF2aW9yIG9m
IGNvbnRyb2xsaW5nIGFuaW1hdGlvbiB1c2luZyBTVkcuc2V0Q3VycmVudFRpbWUoKSIpOworY3Jl
YXRlU1ZHVGVzdENhc2UoKTsKKworLy8gU2V0dXAgdGVzdCBkb2N1bWVudAordmFyIHJlY3QgPSBj
cmVhdGVTVkdFbGVtZW50KCJyZWN0Iik7CityZWN0LnNldEF0dHJpYnV0ZSgiaWQiLCAicmVjdCIp
OworcmVjdC5zZXRBdHRyaWJ1dGUoIngiLCAiMCIpOworcmVjdC5zZXRBdHRyaWJ1dGUoInkiLCAi
NDUiKTsKK3JlY3Quc2V0QXR0cmlidXRlKCJ3aWR0aCIsICIxMCIpOworcmVjdC5zZXRBdHRyaWJ1
dGUoImhlaWdodCIsICIxMCIpOworcmVjdC5zZXRBdHRyaWJ1dGUoImZpbGwiLCAiZ3JlZW4iKTsK
K3JlY3Quc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImV4ZWN1dGVUZXN0KCkiKTsKKwordmFyIGFu
aW1hdGUwID0gY3JlYXRlU1ZHRWxlbWVudCgiYW5pbWF0ZSIpOworYW5pbWF0ZTAuc2V0QXR0cmli
dXRlKCJpZCIsICJhbmltYXRpb24iKTsKK2FuaW1hdGUwLnNldEF0dHJpYnV0ZSgiYXR0cmlidXRl
TmFtZSIsICJ4Iik7CithbmltYXRlMC5zZXRBdHRyaWJ1dGUoImJlZ2luIiwgIjFzIik7Cithbmlt
YXRlMC5zZXRBdHRyaWJ1dGUoImR1ciIsICIxcyIpOworYW5pbWF0ZTAuc2V0QXR0cmlidXRlKCJm
cm9tIiwgIjUwIik7CithbmltYXRlMC5zZXRBdHRyaWJ1dGUoInRvIiwgIjEwMCIpOworYW5pbWF0
ZTAuc2V0QXR0cmlidXRlKCJmaWxsIiwgImZyZWV6ZSIpOworcmVjdC5hcHBlbmRDaGlsZChhbmlt
YXRlMCk7CisKK3ZhciBhbmltYXRlMSA9IGNyZWF0ZVNWR0VsZW1lbnQoImFuaW1hdGUiKTsKK2Fu
aW1hdGUxLnNldEF0dHJpYnV0ZSgiaWQiLCAiYW5pbWF0aW9uIik7CithbmltYXRlMS5zZXRBdHRy
aWJ1dGUoImF0dHJpYnV0ZU5hbWUiLCAieCIpOworYW5pbWF0ZTEuc2V0QXR0cmlidXRlKCJiZWdp
biIsICIycyIpOworYW5pbWF0ZTEuc2V0QXR0cmlidXRlKCJkdXIiLCAiMXMiKTsKK2FuaW1hdGUx
LnNldEF0dHJpYnV0ZSgiZnJvbSIsICIxNTAiKTsKK2FuaW1hdGUxLnNldEF0dHJpYnV0ZSgidG8i
LCAiMjAwIik7CithbmltYXRlMS5zZXRBdHRyaWJ1dGUoImZpbGwiLCAiZnJlZXplIik7CityZWN0
LmFwcGVuZENoaWxkKGFuaW1hdGUxKTsKKworcm9vdFNWR0VsZW1lbnQuYXBwZW5kQ2hpbGQocmVj
dCk7CisKKy8vIFNldHVwIGFuaW1hdGlvbiB0ZXN0Cit2YXIgdGVzdHMsIGN1cklkeCA9IDA7CisK
K2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgdmFyIHRlc3QgPSB0ZXN0c1tjdXJJZHgrK107Cisg
ICAgcm9vdFNWR0VsZW1lbnQuc2V0Q3VycmVudFRpbWUodGVzdC50aW1lKTsKKyAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBzaG91bGRCZSh0ZXN0LnByb3BlcnR5LCBTdHJpbmco
dGVzdC52YWx1ZSkpOworICAgICAgICBpZiAoY3VySWR4ID09IHRlc3RzLmxlbmd0aCkKKyAgICAg
ICAgICAgIGNvbXBsZXRlVGVzdCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBydW5UZXN0
KCk7CisgICAgfSwgMCk7Cit9CisKK2Z1bmN0aW9uIGV4ZWN1dGVUZXN0KCkgeworICAgIHJvb3RT
VkdFbGVtZW50LnBhdXNlQW5pbWF0aW9ucygpOworICAgIHRlc3RzID0gWworICAgICAgICB7dGlt
ZTowLjAsIHByb3BlcnR5OiJyZWN0LnguYmFzZVZhbC52YWx1ZSIsIHZhbHVlOjB9LAorICAgICAg
ICB7dGltZToxLjAsIHByb3BlcnR5OiJyZWN0LnguYmFzZVZhbC52YWx1ZSIsIHZhbHVlOjUwfSwK
KyAgICAgICAge3RpbWU6Mi4wLCBwcm9wZXJ0eToicmVjdC54LmJhc2VWYWwudmFsdWUiLCB2YWx1
ZToxNTB9LAorICAgICAgICB7dGltZTozLjAsIHByb3BlcnR5OiJyZWN0LnguYmFzZVZhbC52YWx1
ZSIsIHZhbHVlOjIwMH0sCisgICAgICAgIHt0aW1lOjMuNSwgcHJvcGVydHk6InJlY3QueC5iYXNl
VmFsLnZhbHVlIiwgdmFsdWU6MjAwfSwKKyAgICAgICAge3RpbWU6Mi41LCBwcm9wZXJ0eToicmVj
dC54LmJhc2VWYWwudmFsdWUiLCB2YWx1ZToxNzV9LAorICAgICAgICB7dGltZToxLjUsIHByb3Bl
cnR5OiJyZWN0LnguYmFzZVZhbC52YWx1ZSIsIHZhbHVlOjc1fSwKKyAgICAgICAge3RpbWU6MS4w
LCBwcm9wZXJ0eToicmVjdC54LmJhc2VWYWwudmFsdWUiLCB2YWx1ZTo1MH0sCisgICAgICAgIHt0
aW1lOjAuNSwgcHJvcGVydHk6InJlY3QueC5iYXNlVmFsLnZhbHVlIiwgdmFsdWU6MH0sCisgICAg
XTsKKyAgICBydW5UZXN0KCk7Cit9CisKKy8vIEJlZ2luIHRlc3QgYXN5bmMKK3dpbmRvdy5zZXRU
aW1lb3V0KCJ0cmlnZ2VyVXBkYXRlKDUsIDUwKSIsIDApOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116348</attachid>
            <date>2011-11-23 06:05:30 -0800</date>
            <delta_ts>2012-01-11 08:04:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-12073-20111123090529.patch</filename>
            <type>text/plain</type>
            <size>18642</size>
            <attacher name="Joel Webber">jgw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwOTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYyOGViNjlhMTAwMjk4
NzhiNDE2MDQ5ZTdiMzU0ZTJlY2RiODY3MC4uZmE0M2E5NTFiMGRjODBhYzM0ODNlMzQ4MGY5MzJl
YWE2MjMxMWY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTIxICBKb2Vs
IFdlYmJlciAgPGpnd0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBzZXRDdXJyZW50
VGltZSgpIGFuZCBwYXVzZUFuaW1hdGlvbnMoKSBvbiBTVkdTVkdFbGVtZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGhlIGFiaWxpdHkgdG8g
cmVzZXQgYW4gU1ZHU01JTEVsZW1lbnQgaW50ZXJuYWxseS4gU1ZHU01JTEVsZW1lbnRzIGFyZSBu
byBsb25nZXIgcmVtb3ZlZAorICAgICAgICBmcm9tIHRoZWlyIGNvbnRhaW5lcnMgd2hlbiB0aGV5
IGJlY29tZSBpbmFjdGl2ZSwgYmVjYXVzZSB0aGV5IHNvbWV0aW1lcyBoYXZlIHRvIGJlIHJlYWN0
aXZhdGVkCisgICAgICAgIHdoZW4gdGhlIGNvbnRhaW5lcidzIGN1cnJlbnQgdGltZSBpcyBjaGFu
Z2VkLgorCisgICAgICAgIFRlc3Q6IHN2Zy9hbmltYXRpb25zL2FuaW1hdGUtc2V0Y3VycmVudHRp
bWUuaHRtbAorCisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRpbWUpOgorICAgICAgICAqIHN2Zy9hbmlt
YXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVD
b250YWluZXI6OlNNSUxUaW1lQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1l
Q29udGFpbmVyOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6
cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnNldEVsYXBzZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMp
OgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaDoKKyAgICAgICAg
KiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1NNSUxFbGVtZW50OjpyZXNldCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5oOgorCiAyMDExLTExLTIxICBEYXZpZCBCYXJyICA8ZGF2aWRiYXJyQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSRUdSRVNTSU9OKHI5ODU0Mik6IENocm9taXVtOiBDU1MgdGV4dCBpcyBy
ZW5kZXJlZCBvbiBwYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKaW5kZXggN2Y3
NTU0Nzk3NDNiNjYxZTI5NjNmZThkMDg0NDlmODUyNjUxYWUxYS4uY2UxYWZjYmZhZGIxZjM4ZGQ3
YmE3MzEyNjEwNDMwMmI2ZGZkMWIyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNw
cApAQCAtNTI4LDkgKzUyOCwxMiBAQCBmbG9hdCBTVkdTVkdFbGVtZW50OjpnZXRDdXJyZW50VGlt
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV90aW1lQ29udGFp
bmVyLT5lbGFwc2VkKCkudmFsdWUoKSk7CiB9CiAKLXZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3Vy
cmVudFRpbWUoZmxvYXQgLyogc2Vjb25kcyAqLykKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3Vy
cmVudFRpbWUoZmxvYXQgc2Vjb25kcykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lLCBi
dWcgMTIwNzMKKyAgICBpZiAoaXNuYW4oc2Vjb25kcykpCisgICAgICAgIHJldHVybjsKKyAgICBz
ZWNvbmRzID0gbWF4KHNlY29uZHMsIDAuMGYpOworICAgIG1fdGltZUNvbnRhaW5lci0+c2V0RWxh
cHNlZChzZWNvbmRzKTsKIH0KIAogYm9vbCBTVkdTVkdFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVM
ZW5ndGhzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24v
U01JTFRpbWVDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZUNvbnRhaW5lci5jcHAKaW5kZXggYTdhNzc4MzY4N2ExNjlhYTQxZTJiZjNiYjYyZDkwMzc3
MGQ0ODg1My4uODIzNjllOWNkNmYyODQ3MmZjOGI0ZDlkMDBiNTI4MmFlNGE5ZDY5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAK
QEAgLTQ2LDYgKzQ2LDcgQEAgU01JTFRpbWVDb250YWluZXI6OlNNSUxUaW1lQ29udGFpbmVyKFNW
R1NWR0VsZW1lbnQqIG93bmVyKQogICAgIDogbV9iZWdpblRpbWUoMCkKICAgICAsIG1fcGF1c2VU
aW1lKDApCiAgICAgLCBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lKDApCisgICAgLCBtX3ByZXNldFN0
YXJ0VGltZSgwKQogICAgICwgbV9kb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5KGZhbHNlKQogICAg
ICwgbV90aW1lcih0aGlzLCAmU01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQpCiAgICAgLCBt
X293bmVyU1ZHRWxlbWVudChvd25lcikKQEAgLTg5LDE3ICs5MCwyNSBAQCBib29sIFNNSUxUaW1l
Q29udGFpbmVyOjppc1BhdXNlZCgpIGNvbnN0CiB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpiZWdp
bigpCiB7CiAgICAgQVNTRVJUKCFtX2JlZ2luVGltZSk7Ci0gICAgbV9iZWdpblRpbWUgPSBjdXJy
ZW50VGltZSgpOwotICAgIHVwZGF0ZUFuaW1hdGlvbnMoMCk7CisgICAgZG91YmxlIG5vdyA9IGN1
cnJlbnRUaW1lKCk7CisKKyAgICBtX2JlZ2luVGltZSA9IG5vdyAtIG1fcHJlc2V0U3RhcnRUaW1l
OworICAgIHVwZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUobV9wcmVzZXRTdGFydFRpbWUpKTsKKyAg
ICBtX3ByZXNldFN0YXJ0VGltZSA9IDA7CisKKyAgICBpZiAobV9wYXVzZVRpbWUpIHsKKyAgICAg
ICAgbV9wYXVzZVRpbWUgPSBub3c7CisgICAgICAgIG1fdGltZXIuc3RvcCgpOworICAgIH0KIH0K
IAogdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6cGF1c2UoKQogewotICAgIGlmICghbV9iZWdpblRp
bWUpCi0gICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIWlzUGF1c2VkKCkpOwogICAgIG1fcGF1
c2VUaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBtX3RpbWVyLnN0b3AoKTsKKworICAgIGlmICht
X2JlZ2luVGltZSkKKyAgICAgICAgbV90aW1lci5zdG9wKCk7CiB9CiAKIHZvaWQgU01JTFRpbWVD
b250YWluZXI6OnJlc3VtZSgpCkBAIC0xMTIsNiArMTIxLDI2IEBAIHZvaWQgU01JTFRpbWVDb250
YWluZXI6OnJlc3VtZSgpCiAgICAgc3RhcnRUaW1lcigwKTsKIH0KIAordm9pZCBTTUlMVGltZUNv
bnRhaW5lcjo6c2V0RWxhcHNlZChTTUlMVGltZSB0aW1lKQoreworICAgIGlmICghbV9iZWdpblRp
bWUpIHsKKyAgICAgICAgbV9wcmVzZXRTdGFydFRpbWUgPSB0aW1lLnZhbHVlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWUoKTsKKyAgICBt
X2JlZ2luVGltZSA9IG5vdyAtIHRpbWUudmFsdWUoKTsKKyAgICBtX2FjY3VtdWxhdGVkUGF1c2VU
aW1lID0gMDsKKworICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IHRvUmVzZXQ7CisgICAgY29w
eVRvVmVjdG9yKG1fc2NoZWR1bGVkQW5pbWF0aW9ucywgdG9SZXNldCk7CisgICAgZm9yICh1bnNp
Z25lZCBuID0gMDsgbiA8IHRvUmVzZXQuc2l6ZSgpOyArK24pCisgICAgICAgIHRvUmVzZXRbbl0t
PnJlc2V0KCk7CisKKyAgICBpZiAoaXNQYXVzZWQoKSkKKyAgICAgICAgdXBkYXRlQW5pbWF0aW9u
cyhub3cgLSBtX2JlZ2luVGltZSAtIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWUpOworfQorCiB2b2lk
IFNNSUxUaW1lQ29udGFpbmVyOjpzdGFydFRpbWVyKFNNSUxUaW1lIGZpcmVUaW1lLCBTTUlMVGlt
ZSBtaW5pbXVtRGVsYXkpCiB7CiAgICAgaWYgKCFtX2JlZ2luVGltZSB8fCBpc1BhdXNlZCgpKQpA
QCAtMTIzLDcgKzE1Miw3IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnN0YXJ0VGltZXIoU01J
TFRpbWUgZmlyZVRpbWUsIFNNSUxUaW1lIG1pbmltdW1EZWxheSkKICAgICBTTUlMVGltZSBkZWxh
eSA9IG1heChmaXJlVGltZSAtIGVsYXBzZWQoKSwgbWluaW11bURlbGF5KTsKICAgICBtX3RpbWVy
LnN0YXJ0T25lU2hvdChkZWxheS52YWx1ZSgpKTsKIH0KLSAgICAKKwogdm9pZCBTTUlMVGltZUNv
bnRhaW5lcjo6dGltZXJGaXJlZChUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4qKQogewogICAgIEFT
U0VSVChtX2JlZ2luVGltZSk7CkBAIC0xMzEsNyArMTYwLDcgQEAgdm9pZCBTTUlMVGltZUNvbnRh
aW5lcjo6dGltZXJGaXJlZChUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4qKQogICAgIFNNSUxUaW1l
IGVsYXBzZWQgPSB0aGlzLT5lbGFwc2VkKCk7CiAgICAgdXBkYXRlQW5pbWF0aW9ucyhlbGFwc2Vk
KTsKIH0KLSAKKwogdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlRG9jdW1lbnRPcmRlcklu
ZGV4ZXMoKQogewogICAgIHVuc2lnbmVkIHRpbWluZ0VsZW1lbnRDb3VudCA9IDA7CkBAIC0yNzcs
MTEgKzMwNiw2IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01J
TFRpbWUgZWxhcHNlZCwgZG91YmxlIG5leHRNYW51YWxTYW1wCiAgICAgICAgIFNNSUxUaW1lIG5l
eHRGaXJlVGltZSA9IGFuaW1hdGlvbi0+bmV4dFByb2dyZXNzVGltZSgpOwogICAgICAgICBpZiAo
bmV4dEZpcmVUaW1lLmlzRmluaXRlKCkpCiAgICAgICAgICAgICBlYXJsaWVyc0ZpcmVUaW1lID0g
bWluKG5leHRGaXJlVGltZSwgZWFybGllcnNGaXJlVGltZSk7Ci0gICAgICAgIGVsc2UgaWYgKCFh
bmltYXRpb24tPmlzQ29udHJpYnV0aW5nKGVsYXBzZWQpKSB7Ci0gICAgICAgICAgICBtX3NjaGVk
dWxlZEFuaW1hdGlvbnMucmVtb3ZlKGFuaW1hdGlvbik7Ci0gICAgICAgICAgICBpZiAobV9zY2hl
ZHVsZWRBbmltYXRpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX3NhdmVkQmFzZVZh
bHVlcy5jbGVhcigpOwotICAgICAgICB9CiAgICAgfQogICAgIAogICAgIFZlY3RvcjxTVkdTTUlM
RWxlbWVudCo+IGFuaW1hdGlvbnNUb0FwcGx5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oCmluZGV4IDcwMDg1MDhmMmU5ZmRmMjA3ZDJkMTcw
NTM3MjVjZWNhMWMyNTRkZDYuLmEyZDBiOGZlZDc3Y2Q2NTRiMWU3MzkzNzkzNjUxN2JhNTg2OTNl
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250
YWluZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFp
bmVyLmgKQEAgLTU5LDcgKzU5LDggQEAgcHVibGljOgogICAgIHZvaWQgYmVnaW4oKTsKICAgICB2
b2lkIHBhdXNlKCk7CiAgICAgdm9pZCByZXN1bWUoKTsKLSAgICAKKyAgICB2b2lkIHNldEVsYXBz
ZWQoU01JTFRpbWUpOworCiAgICAgdm9pZCBzZXREb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5KCkg
eyBtX2RvY3VtZW50T3JkZXJJbmRleGVzRGlydHkgPSB0cnVlOyB9CiAKICAgICAvLyBNb3ZlIHRv
IGEgc3BlY2lmaWMgdGltZS4gT25seSB1c2VkIGZvciBEUlQgdGVzdGluZyBwdXJwb3Nlcy4KQEAg
LTgxLDYgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV9iZWdpblRpbWU7CiAgICAgZG91
YmxlIG1fcGF1c2VUaW1lOwogICAgIGRvdWJsZSBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lOworICAg
IGRvdWJsZSBtX3ByZXNldFN0YXJ0VGltZTsKIAogICAgIGJvb2wgbV9kb2N1bWVudE9yZGVySW5k
ZXhlc0RpcnR5OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmNwcAppbmRleCA5ZDU5MTY5ODkwNmQ2ODNlNTZlNDgwNmJjYjYxMDRkZTVhM2Ey
NTYzLi4yYjY3MjI5NDE2OWQ4ZWU5ODcwMWU4Zjg4NGRmZmFiOGU4OTZmMjY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtMTM0LDYg
KzEzNCw3IEBAIFNWR1NNSUxFbGVtZW50OjpTVkdTTUlMRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgICwgbV9jYWNoZWRNaW4oaW52YWxpZENh
Y2hlZFRpbWUpCiAgICAgLCBtX2NhY2hlZE1heChpbnZhbGlkQ2FjaGVkVGltZSkKIHsKKyAgICBy
ZXNldCgpOwogfQogCiBTVkdTTUlMRWxlbWVudDo6flNWR1NNSUxFbGVtZW50KCkKQEAgLTE2Niw3
ICsxNjcsMjEgQEAgc3RhdGljIGlubGluZSBRdWFsaWZpZWROYW1lIGNvbnN0cnVjdFF1YWxpZmll
ZE5hbWUoY29uc3QgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCwKICAgICAKICAgICByZXR1cm4gUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpOwogfQotICAgIAor
Cit2b2lkIFNWR1NNSUxFbGVtZW50OjpyZXNldCgpCit7CisgICAgbV9hY3RpdmVTdGF0ZSA9IElu
YWN0aXZlOworICAgIG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbCA9IHRydWU7CisgICAgbV9p
bnRlcnZhbEJlZ2luID0gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKKyAgICBtX2ludGVydmFsRW5k
ID0gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKKyAgICBtX3ByZXZpb3VzSW50ZXJ2YWxCZWdpbiA9
IFNNSUxUaW1lOjp1bnJlc29sdmVkKCk7CisgICAgbV9sYXN0UGVyY2VudCA9IDA7CisgICAgbV9s
YXN0UmVwZWF0ID0gMDsKKyAgICBtX25leHRQcm9ncmVzc1RpbWUgPSAwOworCisgICAgcmVzb2x2
ZUZpcnN0SW50ZXJ2YWwoKTsKK30KKwogdm9pZCBTVkdTTUlMRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKQogewogICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgKaW5kZXggMmE0
MjFiOTBiZDYzMGEwMzBjMjUxMWJhMTU2YzlkNThlMjEwNmJjNi4uZWU1NzQ2MGJkMTE5YzM2OTM0
ZTY0NDBkY2ZhZmY2ZDQwNTk1MmE0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TVkdTTUlMRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRp
b24vU1ZHU01JTEVsZW1lbnQuaApAQCAtOTIsNiArOTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
cm9ncmVzcyhTTUlMVGltZSBlbGFwc2VkLCBTVkdTTUlMRWxlbWVudCogcmVzdWx0c0VsZW1lbnQp
OwogICAgIFNNSUxUaW1lIG5leHRQcm9ncmVzc1RpbWUoKSBjb25zdDsKIAorICAgIHZvaWQgcmVz
ZXQoKTsKKwogICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3RyaW5n
Jik7CiAgICAgc3RhdGljIFNNSUxUaW1lIHBhcnNlT2Zmc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7
CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCA5MGMyMTRhYmNlNGZhZTEyZjBjMWEzZDZhNWM4Y2Y2NTUxOWZhYzczLi45MzM1
ZWJkZDk0NzVhOThjODc4OGZhYTVkZWQzMjRiMGJjMzdlYzM0IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMTEtMjEgIEpvZWwgV2ViYmVyICA8amd3QGdvb2dsZS5jb20+CisKKyAgICAgICAg
SW1wbGVtZW50IHNldEN1cnJlbnRUaW1lKCkgYW5kIHBhdXNlQW5pbWF0aW9ucygpIG9uIFNWR1NW
R0VsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyMDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS1saW51eC9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLXNldGN1cnJl
bnR0aW1lLWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0t
bGludXgvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHN2Zy9hbmltYXRpb25zL2FuaW1hdGUtc2V0Y3VycmVudHRpbWUu
c3ZnOiBBZGRlZC4KKwogMjAxMS0xMS0yMSAgRGF2aWQgQmFyciAgPGRhdmlkYmFyckBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyOTg1NDIpOiBDaHJvbWl1bTogQ1NTIHRleHQg
aXMgcmVuZGVyZWQgb24gcGFnZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlv
bnMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdmcv
YW5pbWF0aW9ucy9hbmltYXRlLXNldGN1cnJlbnR0aW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45YTQwODEzMWFmMDMxMGY4ZDkxN2ZhNDA4YzFiNWI1NmFlZGYwZDQ0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw5MyBAQAorU1ZHIDEuMSBkeW5hbWljIGFuaW1hdGlvbiB0
ZXN0cworCisgUEFTUyBwbGFpbi54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBzZXF1ZW50aWFs
LnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIGFjY3VtdWxhdGluZy54LmFuaW1WYWwudmFsdWUg
aXMgMAorUEFTUyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgbmVzdGVkLngu
YW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIHBsYWluLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNT
IHNlcXVlbnRpYWwueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgYWNjdW11bGF0aW5nLnguYW5p
bVZhbC52YWx1ZSBpcyAwCitQQVNTIHJlcGVhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFT
UyBuZXN0ZWQueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgcGxhaW4ueC5hbmltVmFsLnZhbHVl
IGlzIDEyOAorUEFTUyBzZXF1ZW50aWFsLnguYW5pbVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgYWNj
dW11bGF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgcmVwZWF0aW5nLnguYW5pbVZh
bC52YWx1ZSBpcyAxMjgKK1BBU1MgbmVzdGVkLnguYW5pbVZhbC52YWx1ZSBpcyAxMjgKK1BBU1Mg
cGxhaW4ueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1Mgc2VxdWVudGlhbC54LmFuaW1WYWwudmFs
dWUgaXMgMAorUEFTUyBhY2N1bXVsYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgcmVw
ZWF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIG5lc3RlZC54LmFuaW1WYWwudmFsdWUg
aXMgMAorUEFTUyBwbGFpbi54LmFuaW1WYWwudmFsdWUgaXMgMzIKK1BBU1Mgc2VxdWVudGlhbC54
LmFuaW1WYWwudmFsdWUgaXMgMzIKK1BBU1MgYWNjdW11bGF0aW5nLnguYW5pbVZhbC52YWx1ZSBp
cyAxMjgKK1BBU1MgcmVwZWF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgbmVzdGVk
LnguYW5pbVZhbC52YWx1ZSBpcyAzMgorUEFTUyBwbGFpbi54LmFuaW1WYWwudmFsdWUgaXMgNjQK
K1BBU1Mgc2VxdWVudGlhbC54LmFuaW1WYWwudmFsdWUgaXMgMzIKK1BBU1MgYWNjdW11bGF0aW5n
LnguYW5pbVZhbC52YWx1ZSBpcyAyNTYKK1BBU1MgcmVwZWF0aW5nLnguYW5pbVZhbC52YWx1ZSBp
cyAwCitQQVNTIG5lc3RlZC54LmFuaW1WYWwudmFsdWUgaXMgNjQKK1BBU1MgcGxhaW4ueC5hbmlt
VmFsLnZhbHVlIGlzIDk2CitQQVNTIHNlcXVlbnRpYWwueC5hbmltVmFsLnZhbHVlIGlzIDY0CitQ
QVNTIGFjY3VtdWxhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMTkyCitQQVNTIHJlcGVhdGluZy54
LmFuaW1WYWwudmFsdWUgaXMgMTI4CitQQVNTIG5lc3RlZC54LmFuaW1WYWwudmFsdWUgaXMgOTYK
K1BBU1MgcGxhaW4ueC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyBzZXF1ZW50aWFsLnguYW5p
bVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgYWNjdW11bGF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAx
MjgKK1BBU1MgcmVwZWF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgbmVzdGVkLngu
YW5pbVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgcGxhaW4ueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BB
U1Mgc2VxdWVudGlhbC54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBhY2N1bXVsYXRpbmcueC5h
bmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgcmVwZWF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQ
QVNTIG5lc3RlZC54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBwbGFpbi54LmFuaW1WYWwudmFs
dWUgaXMgMAorUEFTUyBzZXF1ZW50aWFsLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIGFjY3Vt
dWxhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyByZXBlYXRpbmcueC5hbmltVmFsLnZh
bHVlIGlzIDAKK1BBU1MgbmVzdGVkLnguYW5pbVZhbC52YWx1ZSBpcyAzMgorUEFTUyBwbGFpbi54
LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBzZXF1ZW50aWFsLnguYW5pbVZhbC52YWx1ZSBpcyAw
CitQQVNTIGFjY3VtdWxhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyByZXBlYXRpbmcu
eC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgbmVzdGVkLnguYW5pbVZhbC52YWx1ZSBpcyA2NAor
UEFTUyBwbGFpbi54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBzZXF1ZW50aWFsLnguYW5pbVZh
bC52YWx1ZSBpcyAwCitQQVNTIGFjY3VtdWxhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFT
UyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgbmVzdGVkLnguYW5pbVZhbC52
YWx1ZSBpcyA5NgorUEFTUyBwbGFpbi54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBzZXF1ZW50
aWFsLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIGFjY3VtdWxhdGluZy54LmFuaW1WYWwudmFs
dWUgaXMgMAorUEFTUyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgbmVzdGVk
LnguYW5pbVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgcGxhaW4ueC5hbmltVmFsLnZhbHVlIGlzIDAK
K1BBU1Mgc2VxdWVudGlhbC54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBhY2N1bXVsYXRpbmcu
eC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgcmVwZWF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAw
CitQQVNTIG5lc3RlZC54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBwbGFpbi54LmFuaW1WYWwu
dmFsdWUgaXMgMzIKK1BBU1Mgc2VxdWVudGlhbC54LmFuaW1WYWwudmFsdWUgaXMgMzIKK1BBU1Mg
YWNjdW11bGF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgcmVwZWF0aW5nLnguYW5p
bVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgbmVzdGVkLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNT
IHBsYWluLnguYW5pbVZhbC52YWx1ZSBpcyA2NAorUEFTUyBzZXF1ZW50aWFsLnguYW5pbVZhbC52
YWx1ZSBpcyAzMgorUEFTUyBhY2N1bXVsYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDI1NgorUEFT
UyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgbmVzdGVkLnguYW5pbVZhbC52
YWx1ZSBpcyAwCitQQVNTIHBsYWluLnguYW5pbVZhbC52YWx1ZSBpcyA5NgorUEFTUyBzZXF1ZW50
aWFsLnguYW5pbVZhbC52YWx1ZSBpcyA2NAorUEFTUyBhY2N1bXVsYXRpbmcueC5hbmltVmFsLnZh
bHVlIGlzIDE5MgorUEFTUyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyBu
ZXN0ZWQueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgcGxhaW4ueC5hbmltVmFsLnZhbHVlIGlz
IDEyOAorUEFTUyBzZXF1ZW50aWFsLnguYW5pbVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgYWNjdW11
bGF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAxMjgKK1BBU1MgcmVwZWF0aW5nLnguYW5pbVZhbC52
YWx1ZSBpcyAxMjgKK1BBU1MgbmVzdGVkLnguYW5pbVZhbC52YWx1ZSBpcyAwCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtc2V0Y3VycmVudHRpbWUuaHRt
bCBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtc2V0Y3VycmVudHRpbWUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41NzJjNTcyMGNkZjNlODRmYjhmYzgzNDI0MDk2Y2IxZjNmMjY4ODY4Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRj
dXJyZW50dGltZS5odG1sCkBAIC0wLDAgKzEsMTIyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorICA8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICA8IS0t
c2NyaXB0IHNyYz0iLi4vZHluYW1pYy11cGRhdGVzL3Jlc291cmNlcy9TVkdUZXN0Q2FzZS5qcyI+
PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvU1ZHQW5pbWF0aW9uVGVzdENhc2Uu
anMiPjwvc2NyaXB0LS0+Cis8L2hlYWQ+CisKKzxib2R5PgorICA8aDE+U1ZHIDEuMSBkeW5hbWlj
IGFuaW1hdGlvbiB0ZXN0czwvaDE+CisKKyAgPHN2ZyBpZD0nb3V0ZXItc3ZnJyB4bWxucz0naHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hsaW5rJyB4bWw6c3BhY2U9J3ByZXNlcnZlJz4KKyAgICA8IS0tIHNlcXVlbnRpYWwgYW5p
bWF0aW9ucyAtLT4KKyAgICA8cmVjdCBpZD0ncGxhaW4nIHg9JzAnIHk9JzAnIHdpZHRoPSczMicg
aGVpZ2h0PSczMicgZmlsbD0nZ3JlZW4nPgorICAgICAgPGFuaW1hdGUgaWQ9J3BsYWluLWFuaW0n
IGF0dHJpYnV0ZU5hbWU9J3gnIGZyb209JzAnIHRvPScxMjgnIGJlZ2luPScwcycgZHVyPSc0cycg
ZmlsbD0nZnJlZXplJy8+CisgICAgPC9yZWN0PgorCisgICAgPCEtLSBzZXF1ZW50aWFsIGFuaW1h
dGlvbnMgLS0+CisgICAgPHJlY3QgaWQ9J3NlcXVlbnRpYWwnIHg9JzAnIHk9JzMyJyB3aWR0aD0n
MzInIGhlaWdodD0nMzInIGZpbGw9J2dyZWVuJz4KKyAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5h
bWU9J3gnICBmcm9tPScwJyAgdG89JzMyJyBiZWdpbj0nMHMnIGR1cj0nMXMnIGZpbGw9J2ZyZWV6
ZScvPgorICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0neCcgZnJvbT0nNjQnIHRvPScxMjgn
IGJlZ2luPSczcycgZHVyPScxcycgZmlsbD0nZnJlZXplJy8+CisgICAgPC9yZWN0PgorCisgICAg
PCEtLSBhY2N1bXVsYXRpbmcgdmFsdWVzIC0tPgorICAgIDxyZWN0IGlkPSdhY2N1bXVsYXRpbmcn
IHg9JzAnIHk9JzY0JyB3aWR0aD0nMzInIGhlaWdodD0nMzInIGZpbGw9J2dyZWVuJz4KKyAgICAg
IDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9J3gnIHZhbHVlcz0nMDsgMjU2OyAxMjgnIGFkZGl0aXZl
PSdzdW0nIGFjY3VtdWxhdGU9J3N1bScgYmVnaW49JzBzJyBkdXI9JzRzJyBmaWxsPSdmcmVlemUn
Lz4KKyAgICA8L3JlY3Q+CisKKyAgICA8IS0tIHJlcGVhdGluZyAtLT4KKyAgICA8cmVjdCBpZD0n
cmVwZWF0aW5nJyB4PScwJyB5PSc5Nicgd2lkdGg9JzMyJyBoZWlnaHQ9JzMyJyBmaWxsPSdncmVl
bic+CisgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSd4JyB2YWx1ZXM9JzA7IDI1NjsgMTI4
OyAwOyAxMjgnIGJlZ2luPScwcycgZHVyPScycycgZmlsbD0nZnJlZXplJyByZXBlYXRDb3VudD0n
MicvPgorICAgIDwvcmVjdD4KKworICAgIDwhLS0gbmVzdGVkIC0tPgorICAgIDxzdmcgaWQ9J25l
c3RlZC1zdmcnIHg9JzAnIHk9JzEyOCc+CisgICAgICA8cmVjdCBpZD0nbmVzdGVkJyB4PScwJyB5
PScwJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIGZpbGw9J2dyZWVuJz4KKyAgICAgICAgPGFuaW1h
dGUgYXR0cmlidXRlTmFtZT0neCcgZnJvbT0nMCcgdG89JzEyOCcgYmVnaW49JzBzJyBkdXI9JzRz
JyBmaWxsPSdmcmVlemUnLz4KKyAgICAgIDwvcmVjdD4KKyAgICA8L3N2Zz4KKworICAgIDxzY3Jp
cHQ+CisgICAgdmFyIHN2ZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdXRlci1zdmcnKSwK
KyAgICAgICAgbmVzdGVkc3ZnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25lc3RlZC1zdmcn
KTsKKyAgICB2YXIgdGVzdHMsIGN1cklkeCA9IDA7CisKKyAgICB2YXIgcGxhaW4gPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgncGxhaW4nKTsKKyAgICB2YXIgc2VxdWVudGlhbCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdzZXF1ZW50aWFsJyk7CisgICAgdmFyIGFjY3VtdWxhdGluZyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2N1bXVsYXRpbmcnKTsKKyAgICB2YXIgcmVwZWF0aW5n
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcGVhdGluZycpOworICAgIHZhciBuZXN0ZWQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmVzdGVkJyk7CisKKyAgICBmdW5jdGlvbiBydW5U
ZXN0KCkgeworICAgICAgdmFyIHRlc3QgPSB0ZXN0c1tjdXJJZHgrK107CisKKyAgICAgIHN2Zy5z
ZXRDdXJyZW50VGltZSh0ZXN0LnRpbWVbMF0pOworICAgICAgbmVzdGVkc3ZnLnNldEN1cnJlbnRU
aW1lKHRlc3QudGltZVsxXSk7CisKKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgIGZvciAodmFyIGF0dHIgaW4gdGVzdC52YWx1ZXMpIHsKKyAgICAgICAgICBzaG91bGRCZShh
dHRyICsgJy5hbmltVmFsLnZhbHVlJywgU3RyaW5nKHRlc3QudmFsdWVzW2F0dHJdKSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoY3VySWR4ID09IHRlc3RzLmxlbmd0aCkgeworICAgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICAgIHJ1blRlc3QoKTsKKyAgICAgIH0sIDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGV4ZWN1
dGVUZXN0cygpIHsKKyAgICAgIG5lc3RlZHN2Zy5wYXVzZUFuaW1hdGlvbnMoKTsKKyAgICAgIHN2
Zy5wYXVzZUFuaW1hdGlvbnMoKTsKKworICAgICAgdGVzdHMgPSBbCisgICAgICAgIC8vIFRlc3Qg
aW52YWxpZCB2YWx1ZXMuCisgICAgICAgIHsgdGltZTogWyd0aW50aW4nLCBOYU5dLCB2YWx1ZXM6
IHsgJ3BsYWluLngnOiAgIDAsICdzZXF1ZW50aWFsLngnOiAgIDAsICdhY2N1bXVsYXRpbmcueCc6
ICAgMCwgJ3JlcGVhdGluZy54JzogICAwLCAnbmVzdGVkLngnOiAgIDAgfSB9LAorCisgICAgICAg
IC8vIFRlc3Qgb3V0LW9mLXJhbmdlIHZhbHVlcy4KKyAgICAgICAgeyB0aW1lOiBbLTEsIC0xXSwg
dmFsdWVzOiB7ICdwbGFpbi54JzogICAwLCAnc2VxdWVudGlhbC54JzogICAwLCAnYWNjdW11bGF0
aW5nLngnOiAgIDAsICdyZXBlYXRpbmcueCc6ICAgMCwgJ25lc3RlZC54JzogICAwIH0gfSwKKyAg
ICAgICAgeyB0aW1lOiBbIDUsICA1XSwgdmFsdWVzOiB7ICdwbGFpbi54JzogMTI4LCAnc2VxdWVu
dGlhbC54JzogMTI4LCAnYWNjdW11bGF0aW5nLngnOiAxMjgsICdyZXBlYXRpbmcueCc6IDEyOCwg
J25lc3RlZC54JzogMTI4IH0gfSwKKworICAgICAgICAvLyBUZXN0IGNoYW5naW5nIHRpbWUgb25s
eSBmb3IgYWxsIGVsZW1lbnRzLgorICAgICAgICB7IHRpbWU6IFswLCAwXSwgdmFsdWVzOiB7ICdw
bGFpbi54JzogICAwLCAnc2VxdWVudGlhbC54JzogICAwLCAnYWNjdW11bGF0aW5nLngnOiAgIDAs
ICdyZXBlYXRpbmcueCc6ICAgMCwgJ25lc3RlZC54JzogICAwIH0gfSwKKyAgICAgICAgeyB0aW1l
OiBbMSwgMV0sIHZhbHVlczogeyAncGxhaW4ueCc6ICAzMiwgJ3NlcXVlbnRpYWwueCc6ICAzMiwg
J2FjY3VtdWxhdGluZy54JzogMTI4LCAncmVwZWF0aW5nLngnOiAxMjgsICduZXN0ZWQueCc6ICAz
MiB9IH0sCisgICAgICAgIHsgdGltZTogWzIsIDJdLCB2YWx1ZXM6IHsgJ3BsYWluLngnOiAgNjQs
ICdzZXF1ZW50aWFsLngnOiAgMzIsICdhY2N1bXVsYXRpbmcueCc6IDI1NiwgJ3JlcGVhdGluZy54
JzogICAwLCAnbmVzdGVkLngnOiAgNjQgfSB9LAorICAgICAgICB7IHRpbWU6IFszLCAzXSwgdmFs
dWVzOiB7ICdwbGFpbi54JzogIDk2LCAnc2VxdWVudGlhbC54JzogIDY0LCAnYWNjdW11bGF0aW5n
LngnOiAxOTIsICdyZXBlYXRpbmcueCc6IDEyOCwgJ25lc3RlZC54JzogIDk2IH0gfSwKKyAgICAg
ICAgeyB0aW1lOiBbNCwgNF0sIHZhbHVlczogeyAncGxhaW4ueCc6IDEyOCwgJ3NlcXVlbnRpYWwu
eCc6IDEyOCwgJ2FjY3VtdWxhdGluZy54JzogMTI4LCAncmVwZWF0aW5nLngnOiAxMjgsICduZXN0
ZWQueCc6IDEyOCB9IH0sCisKKyAgICAgICAgLy8gVGVzdCBjaGFuZ2luZyB0aW1lIG9ubHkgZm9y
IHRoZSBuZXN0ZWQgc3ZnIGVsZW1lbnQuCisgICAgICAgIHsgdGltZTogWzAsIDBdLCB2YWx1ZXM6
IHsgJ3BsYWluLngnOiAgIDAsICdzZXF1ZW50aWFsLngnOiAgIDAsICdhY2N1bXVsYXRpbmcueCc6
ICAgMCwgJ3JlcGVhdGluZy54JzogICAwLCAnbmVzdGVkLngnOiAgIDAgfSB9LAorICAgICAgICB7
IHRpbWU6IFswLCAxXSwgdmFsdWVzOiB7ICdwbGFpbi54JzogICAwLCAnc2VxdWVudGlhbC54Jzog
ICAwLCAnYWNjdW11bGF0aW5nLngnOiAgIDAsICdyZXBlYXRpbmcueCc6ICAgMCwgJ25lc3RlZC54
JzogIDMyIH0gfSwKKyAgICAgICAgeyB0aW1lOiBbMCwgMl0sIHZhbHVlczogeyAncGxhaW4ueCc6
ICAgMCwgJ3NlcXVlbnRpYWwueCc6ICAgMCwgJ2FjY3VtdWxhdGluZy54JzogICAwLCAncmVwZWF0
aW5nLngnOiAgIDAsICduZXN0ZWQueCc6ICA2NCB9IH0sCisgICAgICAgIHsgdGltZTogWzAsIDNd
LCB2YWx1ZXM6IHsgJ3BsYWluLngnOiAgIDAsICdzZXF1ZW50aWFsLngnOiAgIDAsICdhY2N1bXVs
YXRpbmcueCc6ICAgMCwgJ3JlcGVhdGluZy54JzogICAwLCAnbmVzdGVkLngnOiAgOTYgfSB9LAor
ICAgICAgICB7IHRpbWU6IFswLCA0XSwgdmFsdWVzOiB7ICdwbGFpbi54JzogICAwLCAnc2VxdWVu
dGlhbC54JzogICAwLCAnYWNjdW11bGF0aW5nLngnOiAgIDAsICdyZXBlYXRpbmcueCc6ICAgMCwg
J25lc3RlZC54JzogMTI4IH0gfSwKKworICAgICAgICAvLyBUZXN0IGNoYW5naW5nIHRpbWUgb25s
eSBmb3IgdGhlIG91dGVyIHN2ZyBlbGVtZW50LgorICAgICAgICB7IHRpbWU6IFswLCAwXSwgdmFs
dWVzOiB7ICdwbGFpbi54JzogICAwLCAnc2VxdWVudGlhbC54JzogICAwLCAnYWNjdW11bGF0aW5n
LngnOiAgIDAsICdyZXBlYXRpbmcueCc6ICAgMCwgJ25lc3RlZC54JzogICAwIH0gfSwKKyAgICAg
ICAgeyB0aW1lOiBbMSwgMF0sIHZhbHVlczogeyAncGxhaW4ueCc6ICAzMiwgJ3NlcXVlbnRpYWwu
eCc6ICAzMiwgJ2FjY3VtdWxhdGluZy54JzogMTI4LCAncmVwZWF0aW5nLngnOiAxMjgsICduZXN0
ZWQueCc6ICAgMCB9IH0sCisgICAgICAgIHsgdGltZTogWzIsIDBdLCB2YWx1ZXM6IHsgJ3BsYWlu
LngnOiAgNjQsICdzZXF1ZW50aWFsLngnOiAgMzIsICdhY2N1bXVsYXRpbmcueCc6IDI1NiwgJ3Jl
cGVhdGluZy54JzogICAwLCAnbmVzdGVkLngnOiAgIDAgfSB9LAorICAgICAgICB7IHRpbWU6IFsz
LCAwXSwgdmFsdWVzOiB7ICdwbGFpbi54JzogIDk2LCAnc2VxdWVudGlhbC54JzogIDY0LCAnYWNj
dW11bGF0aW5nLngnOiAxOTIsICdyZXBlYXRpbmcueCc6IDEyOCwgJ25lc3RlZC54JzogICAwIH0g
fSwKKyAgICAgICAgeyB0aW1lOiBbNCwgMF0sIHZhbHVlczogeyAncGxhaW4ueCc6IDEyOCwgJ3Nl
cXVlbnRpYWwueCc6IDEyOCwgJ2FjY3VtdWxhdGluZy54JzogMTI4LCAncmVwZWF0aW5nLngnOiAx
MjgsICduZXN0ZWQueCc6ICAgMCB9IH0sCisgICAgICBdOworCisgICAgICBydW5UZXN0KCk7Cisg
ICAgfQorCisgICAgLy8gQmVnaW4gdGVzdCBhc3luYworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKQor
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpCisgICAgfQorICAgIGV4
ZWN1dGVUZXN0cygpOworICAgIDwvc2NyaXB0PgorICA8L3N2Zz4KKworICA8cCBpZD0iZGVzY3Jp
cHRpb24iPjwvcD4KKyAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+
CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122026</attachid>
            <date>2012-01-11 08:05:02 -0800</date>
            <delta_ts>2012-01-11 09:55:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-12073-20120111110501.patch</filename>
            <type>text/plain</type>
            <size>18552</size>
            <attacher name="Joel Webber">jgw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzRkNTk1MDk4Njk0YTdm
NzU0M2FlN2I5OWMwZWVmMTU0OWFmMzE4My4uZmE5NDBlOGUwYjg3ZTY1NTgzY2IyYWU2MjlkNTlh
YTYwZjBjM2IzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAxLTExICBKb2Vs
IFdlYmJlciAgPGpnd0Bnb29nbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBzZXRDdXJyZW50
VGltZSgpIGFuZCBwYXVzZUFuaW1hdGlvbnMoKSBvbiBTVkdTVkdFbGVtZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KKworICAgICAgICBBZGRzIHRoZSBhYmlsaXR5
IHRvIHJlc2V0IGFuIFNWR1NNSUxFbGVtZW50IGludGVybmFsbHkuIFNWR1NNSUxFbGVtZW50cyBh
cmUgbm8gbG9uZ2VyIHJlbW92ZWQKKyAgICAgICAgZnJvbSB0aGVpciBjb250YWluZXJzIHdoZW4g
dGhleSBiZWNvbWUgaW5hY3RpdmUsIGJlY2F1c2UgdGhleSBzb21ldGltZXMgaGF2ZSB0byBiZSBy
ZWFjdGl2YXRlZAorICAgICAgICB3aGVuIHRoZSBjb250YWluZXIncyBjdXJyZW50IHRpbWUgaXMg
Y2hhbmdlZC4KKworICAgICAgICBUZXN0OiBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLXNldGN1cnJl
bnR0aW1lLmh0bWwKKworICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRUaW1lKToKKyAgICAgICAgKiBzdmcv
YW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxU
aW1lQ29udGFpbmVyOjpTTUlMVGltZUNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlM
VGltZUNvbnRhaW5lcjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWlu
ZXI6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpzZXRFbGFw
c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRp
b25zKToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmg6CisgICAg
ICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTTUlMRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01J
TEVsZW1lbnQuaDoKKwogMjAxMi0wMS0xMSAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhv
ICA8Y2Fpby5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIEF2b2lkIHNlcGFyYXRl
IGhlYXAgYWxsb2NhdGlvbiBmb3IgZWFjaCBSZW5kZXJSZWdpb25SYW5nZSBpbiBSZW5kZXJGbG93
VGhyZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKaW5kZXggYzBiZThlOGVhZmZh
ZDk0Y2RhOWQ5OWJkMDY2YjQ2ZWMxYTMzZTAwZC4uMGQyNjY4Mjk3YTM5NmRhNGU0OWRlZGE3NmUz
ZjMzOTY4MmM2MmQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcApAQCAtNTI0
LDkgKzUyNCwxMiBAQCBmbG9hdCBTVkdTVkdFbGVtZW50OjpnZXRDdXJyZW50VGltZSgpIGNvbnN0
CiAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV90aW1lQ29udGFpbmVyLT5lbGFw
c2VkKCkudmFsdWUoKSk7CiB9CiAKLXZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRpbWUo
ZmxvYXQgLyogc2Vjb25kcyAqLykKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRpbWUo
ZmxvYXQgc2Vjb25kcykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lLCBidWcgMTIwNzMK
KyAgICBpZiAoaXNuYW4oc2Vjb25kcykpCisgICAgICAgIHJldHVybjsKKyAgICBzZWNvbmRzID0g
bWF4KHNlY29uZHMsIDAuMGYpOworICAgIG1fdGltZUNvbnRhaW5lci0+c2V0RWxhcHNlZChzZWNv
bmRzKTsKIH0KIAogYm9vbCBTVkdTVkdFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVD
b250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRh
aW5lci5jcHAKaW5kZXggYTdhNzc4MzY4N2ExNjlhYTQxZTJiZjNiYjYyZDkwMzc3MGQ0ODg1My4u
ODIzNjllOWNkNmYyODQ3MmZjOGI0ZDlkMDBiNTI4MmFlNGE5ZDY5OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKQEAgLTQ2LDYg
KzQ2LDcgQEAgU01JTFRpbWVDb250YWluZXI6OlNNSUxUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1l
bnQqIG93bmVyKQogICAgIDogbV9iZWdpblRpbWUoMCkKICAgICAsIG1fcGF1c2VUaW1lKDApCiAg
ICAgLCBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lKDApCisgICAgLCBtX3ByZXNldFN0YXJ0VGltZSgw
KQogICAgICwgbV9kb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5KGZhbHNlKQogICAgICwgbV90aW1l
cih0aGlzLCAmU01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQpCiAgICAgLCBtX293bmVyU1ZH
RWxlbWVudChvd25lcikKQEAgLTg5LDE3ICs5MCwyNSBAQCBib29sIFNNSUxUaW1lQ29udGFpbmVy
Ojppc1BhdXNlZCgpIGNvbnN0CiB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpiZWdpbigpCiB7CiAg
ICAgQVNTRVJUKCFtX2JlZ2luVGltZSk7Ci0gICAgbV9iZWdpblRpbWUgPSBjdXJyZW50VGltZSgp
OwotICAgIHVwZGF0ZUFuaW1hdGlvbnMoMCk7CisgICAgZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1l
KCk7CisKKyAgICBtX2JlZ2luVGltZSA9IG5vdyAtIG1fcHJlc2V0U3RhcnRUaW1lOworICAgIHVw
ZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUobV9wcmVzZXRTdGFydFRpbWUpKTsKKyAgICBtX3ByZXNl
dFN0YXJ0VGltZSA9IDA7CisKKyAgICBpZiAobV9wYXVzZVRpbWUpIHsKKyAgICAgICAgbV9wYXVz
ZVRpbWUgPSBub3c7CisgICAgICAgIG1fdGltZXIuc3RvcCgpOworICAgIH0KIH0KIAogdm9pZCBT
TUlMVGltZUNvbnRhaW5lcjo6cGF1c2UoKQogewotICAgIGlmICghbV9iZWdpblRpbWUpCi0gICAg
ICAgIHJldHVybjsKICAgICBBU1NFUlQoIWlzUGF1c2VkKCkpOwogICAgIG1fcGF1c2VUaW1lID0g
Y3VycmVudFRpbWUoKTsKLSAgICBtX3RpbWVyLnN0b3AoKTsKKworICAgIGlmIChtX2JlZ2luVGlt
ZSkKKyAgICAgICAgbV90aW1lci5zdG9wKCk7CiB9CiAKIHZvaWQgU01JTFRpbWVDb250YWluZXI6
OnJlc3VtZSgpCkBAIC0xMTIsNiArMTIxLDI2IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnJl
c3VtZSgpCiAgICAgc3RhcnRUaW1lcigwKTsKIH0KIAordm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6
c2V0RWxhcHNlZChTTUlMVGltZSB0aW1lKQoreworICAgIGlmICghbV9iZWdpblRpbWUpIHsKKyAg
ICAgICAgbV9wcmVzZXRTdGFydFRpbWUgPSB0aW1lLnZhbHVlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWUoKTsKKyAgICBtX2JlZ2luVGlt
ZSA9IG5vdyAtIHRpbWUudmFsdWUoKTsKKyAgICBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lID0gMDsK
KworICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+IHRvUmVzZXQ7CisgICAgY29weVRvVmVjdG9y
KG1fc2NoZWR1bGVkQW5pbWF0aW9ucywgdG9SZXNldCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0g
MDsgbiA8IHRvUmVzZXQuc2l6ZSgpOyArK24pCisgICAgICAgIHRvUmVzZXRbbl0tPnJlc2V0KCk7
CisKKyAgICBpZiAoaXNQYXVzZWQoKSkKKyAgICAgICAgdXBkYXRlQW5pbWF0aW9ucyhub3cgLSBt
X2JlZ2luVGltZSAtIG1fYWNjdW11bGF0ZWRQYXVzZVRpbWUpOworfQorCiB2b2lkIFNNSUxUaW1l
Q29udGFpbmVyOjpzdGFydFRpbWVyKFNNSUxUaW1lIGZpcmVUaW1lLCBTTUlMVGltZSBtaW5pbXVt
RGVsYXkpCiB7CiAgICAgaWYgKCFtX2JlZ2luVGltZSB8fCBpc1BhdXNlZCgpKQpAQCAtMTIzLDcg
KzE1Miw3IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnN0YXJ0VGltZXIoU01JTFRpbWUgZmly
ZVRpbWUsIFNNSUxUaW1lIG1pbmltdW1EZWxheSkKICAgICBTTUlMVGltZSBkZWxheSA9IG1heChm
aXJlVGltZSAtIGVsYXBzZWQoKSwgbWluaW11bURlbGF5KTsKICAgICBtX3RpbWVyLnN0YXJ0T25l
U2hvdChkZWxheS52YWx1ZSgpKTsKIH0KLSAgICAKKwogdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6
dGltZXJGaXJlZChUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4qKQogewogICAgIEFTU0VSVChtX2Jl
Z2luVGltZSk7CkBAIC0xMzEsNyArMTYwLDcgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dGlt
ZXJGaXJlZChUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4qKQogICAgIFNNSUxUaW1lIGVsYXBzZWQg
PSB0aGlzLT5lbGFwc2VkKCk7CiAgICAgdXBkYXRlQW5pbWF0aW9ucyhlbGFwc2VkKTsKIH0KLSAK
Kwogdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlRG9jdW1lbnRPcmRlckluZGV4ZXMoKQog
ewogICAgIHVuc2lnbmVkIHRpbWluZ0VsZW1lbnRDb3VudCA9IDA7CkBAIC0yNzcsMTEgKzMwNiw2
IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUgZWxh
cHNlZCwgZG91YmxlIG5leHRNYW51YWxTYW1wCiAgICAgICAgIFNNSUxUaW1lIG5leHRGaXJlVGlt
ZSA9IGFuaW1hdGlvbi0+bmV4dFByb2dyZXNzVGltZSgpOwogICAgICAgICBpZiAobmV4dEZpcmVU
aW1lLmlzRmluaXRlKCkpCiAgICAgICAgICAgICBlYXJsaWVyc0ZpcmVUaW1lID0gbWluKG5leHRG
aXJlVGltZSwgZWFybGllcnNGaXJlVGltZSk7Ci0gICAgICAgIGVsc2UgaWYgKCFhbmltYXRpb24t
PmlzQ29udHJpYnV0aW5nKGVsYXBzZWQpKSB7Ci0gICAgICAgICAgICBtX3NjaGVkdWxlZEFuaW1h
dGlvbnMucmVtb3ZlKGFuaW1hdGlvbik7Ci0gICAgICAgICAgICBpZiAobV9zY2hlZHVsZWRBbmlt
YXRpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX3NhdmVkQmFzZVZhbHVlcy5jbGVh
cigpOwotICAgICAgICB9CiAgICAgfQogICAgIAogICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+
IGFuaW1hdGlvbnNUb0FwcGx5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1h
dGlvbi9TTUlMVGltZUNvbnRhaW5lci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZUNvbnRhaW5lci5oCmluZGV4IDcwMDg1MDhmMmU5ZmRmMjA3ZDJkMTcwNTM3MjVjZWNh
MWMyNTRkZDYuLmEyZDBiOGZlZDc3Y2Q2NTRiMWU3MzkzNzkzNjUxN2JhNTg2OTNlZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmgKQEAg
LTU5LDcgKzU5LDggQEAgcHVibGljOgogICAgIHZvaWQgYmVnaW4oKTsKICAgICB2b2lkIHBhdXNl
KCk7CiAgICAgdm9pZCByZXN1bWUoKTsKLSAgICAKKyAgICB2b2lkIHNldEVsYXBzZWQoU01JTFRp
bWUpOworCiAgICAgdm9pZCBzZXREb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5KCkgeyBtX2RvY3Vt
ZW50T3JkZXJJbmRleGVzRGlydHkgPSB0cnVlOyB9CiAKICAgICAvLyBNb3ZlIHRvIGEgc3BlY2lm
aWMgdGltZS4gT25seSB1c2VkIGZvciBEUlQgdGVzdGluZyBwdXJwb3Nlcy4KQEAgLTgxLDYgKzgy
LDcgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV9iZWdpblRpbWU7CiAgICAgZG91YmxlIG1fcGF1
c2VUaW1lOwogICAgIGRvdWJsZSBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lOworICAgIGRvdWJsZSBt
X3ByZXNldFN0YXJ0VGltZTsKIAogICAgIGJvb2wgbV9kb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlM
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50
LmNwcAppbmRleCA5ZDU5MTY5ODkwNmQ2ODNlNTZlNDgwNmJjYjYxMDRkZTVhM2EyNTYzLi4yYjY3
MjI5NDE2OWQ4ZWU5ODcwMWU4Zjg4NGRmZmFiOGU4OTZmMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtMTM0LDYgKzEzNCw3IEBA
IFNWR1NNSUxFbGVtZW50OjpTVkdTTUlMRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jKQogICAgICwgbV9jYWNoZWRNaW4oaW52YWxpZENhY2hlZFRpbWUp
CiAgICAgLCBtX2NhY2hlZE1heChpbnZhbGlkQ2FjaGVkVGltZSkKIHsKKyAgICByZXNldCgpOwog
fQogCiBTVkdTTUlMRWxlbWVudDo6flNWR1NNSUxFbGVtZW50KCkKQEAgLTE2Niw3ICsxNjcsMjEg
QEAgc3RhdGljIGlubGluZSBRdWFsaWZpZWROYW1lIGNvbnN0cnVjdFF1YWxpZmllZE5hbWUoY29u
c3QgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCwKICAgICAKICAgICByZXR1cm4gUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpOwogfQotICAgIAorCit2b2lkIFNW
R1NNSUxFbGVtZW50OjpyZXNldCgpCit7CisgICAgbV9hY3RpdmVTdGF0ZSA9IEluYWN0aXZlOwor
ICAgIG1faXNXYWl0aW5nRm9yRmlyc3RJbnRlcnZhbCA9IHRydWU7CisgICAgbV9pbnRlcnZhbEJl
Z2luID0gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKKyAgICBtX2ludGVydmFsRW5kID0gU01JTFRp
bWU6OnVucmVzb2x2ZWQoKTsKKyAgICBtX3ByZXZpb3VzSW50ZXJ2YWxCZWdpbiA9IFNNSUxUaW1l
Ojp1bnJlc29sdmVkKCk7CisgICAgbV9sYXN0UGVyY2VudCA9IDA7CisgICAgbV9sYXN0UmVwZWF0
ID0gMDsKKyAgICBtX25leHRQcm9ncmVzc1RpbWUgPSAwOworCisgICAgcmVzb2x2ZUZpcnN0SW50
ZXJ2YWwoKTsKK30KKwogdm9pZCBTVkdTTUlMRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
KQogewogICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgKaW5kZXggMmE0MjFiOTBiZDYz
MGEwMzBjMjUxMWJhMTU2YzlkNThlMjEwNmJjNi4uZWU1NzQ2MGJkMTE5YzM2OTM0ZTY0NDBkY2Zh
ZmY2ZDQwNTk1MmE0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
VkdTTUlMRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01J
TEVsZW1lbnQuaApAQCAtOTIsNiArOTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcm9ncmVzcyhT
TUlMVGltZSBlbGFwc2VkLCBTVkdTTUlMRWxlbWVudCogcmVzdWx0c0VsZW1lbnQpOwogICAgIFNN
SUxUaW1lIG5leHRQcm9ncmVzc1RpbWUoKSBjb25zdDsKIAorICAgIHZvaWQgcmVzZXQoKTsKKwog
ICAgIHN0YXRpYyBTTUlMVGltZSBwYXJzZUNsb2NrVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAg
c3RhdGljIFNNSUxUaW1lIHBhcnNlT2Zmc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA4ZTlmZmY0MmVmOWZlODc3OWEwYmYwODgxM2YzZDdjNjliOWE2ODA2Li4yZjEzODNiNzUzNjIx
NmRjNTUwMTEyZmU3NTVmZDM0MjM5N2I5OGZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTIt
MDEtMTEgIEpvZWwgV2ViYmVyICA8amd3QGdvb2dsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50
IHNldEN1cnJlbnRUaW1lKCkgYW5kIHBhdXNlQW5pbWF0aW9ucygpIG9uIFNWR1NWR0VsZW1lbnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDczCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgorCisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0tbGludXgvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRjdXJyZW50dGlt
ZS1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLWxpbnV4
L3N2Zy9hbmltYXRpb25zL2FuaW1hdGUtc2V0Y3VycmVudHRpbWUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBzdmcvYW5pbWF0aW9ucy9hbmltYXRlLXNldGN1cnJlbnR0aW1lLnN2Zzog
QWRkZWQuCisKIDIwMTItMDEtMTEgIEdhYm9yIFJhcGNzYW55aSAgPHJnYWJvckB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFtRdF0gU29tZSBjc3MzIGZpbHRlciB0ZXN0cyBhcmUgZmFpbGluZyBhZnRl
ciByMTA0Njk4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRl
LXNldGN1cnJlbnR0aW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy9hbmltYXRpb25z
L2FuaW1hdGUtc2V0Y3VycmVudHRpbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhNDA4MTMx
YWYwMzEwZjhkOTE3ZmE0MDhjMWI1YjU2YWVkZjBkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLXNldGN1cnJlbnR0aW1lLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDkzIEBACitTVkcgMS4xIGR5bmFtaWMgYW5pbWF0aW9uIHRlc3RzCisKKyBQ
QVNTIHBsYWluLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIHNlcXVlbnRpYWwueC5hbmltVmFs
LnZhbHVlIGlzIDAKK1BBU1MgYWNjdW11bGF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNT
IHJlcGVhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBuZXN0ZWQueC5hbmltVmFsLnZh
bHVlIGlzIDAKK1BBU1MgcGxhaW4ueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1Mgc2VxdWVudGlh
bC54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBhY2N1bXVsYXRpbmcueC5hbmltVmFsLnZhbHVl
IGlzIDAKK1BBU1MgcmVwZWF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIG5lc3RlZC54
LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBwbGFpbi54LmFuaW1WYWwudmFsdWUgaXMgMTI4CitQ
QVNTIHNlcXVlbnRpYWwueC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyBhY2N1bXVsYXRpbmcu
eC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlz
IDEyOAorUEFTUyBuZXN0ZWQueC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyBwbGFpbi54LmFu
aW1WYWwudmFsdWUgaXMgMAorUEFTUyBzZXF1ZW50aWFsLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQ
QVNTIGFjY3VtdWxhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyByZXBlYXRpbmcueC5h
bmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgbmVzdGVkLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNT
IHBsYWluLnguYW5pbVZhbC52YWx1ZSBpcyAzMgorUEFTUyBzZXF1ZW50aWFsLnguYW5pbVZhbC52
YWx1ZSBpcyAzMgorUEFTUyBhY2N1bXVsYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFT
UyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyBuZXN0ZWQueC5hbmltVmFs
LnZhbHVlIGlzIDMyCitQQVNTIHBsYWluLnguYW5pbVZhbC52YWx1ZSBpcyA2NAorUEFTUyBzZXF1
ZW50aWFsLnguYW5pbVZhbC52YWx1ZSBpcyAzMgorUEFTUyBhY2N1bXVsYXRpbmcueC5hbmltVmFs
LnZhbHVlIGlzIDI1NgorUEFTUyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1Mg
bmVzdGVkLnguYW5pbVZhbC52YWx1ZSBpcyA2NAorUEFTUyBwbGFpbi54LmFuaW1WYWwudmFsdWUg
aXMgOTYKK1BBU1Mgc2VxdWVudGlhbC54LmFuaW1WYWwudmFsdWUgaXMgNjQKK1BBU1MgYWNjdW11
bGF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAxOTIKK1BBU1MgcmVwZWF0aW5nLnguYW5pbVZhbC52
YWx1ZSBpcyAxMjgKK1BBU1MgbmVzdGVkLnguYW5pbVZhbC52YWx1ZSBpcyA5NgorUEFTUyBwbGFp
bi54LmFuaW1WYWwudmFsdWUgaXMgMTI4CitQQVNTIHNlcXVlbnRpYWwueC5hbmltVmFsLnZhbHVl
IGlzIDEyOAorUEFTUyBhY2N1bXVsYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyBy
ZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyBuZXN0ZWQueC5hbmltVmFsLnZh
bHVlIGlzIDEyOAorUEFTUyBwbGFpbi54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBzZXF1ZW50
aWFsLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIGFjY3VtdWxhdGluZy54LmFuaW1WYWwudmFs
dWUgaXMgMAorUEFTUyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgbmVzdGVk
LnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIHBsYWluLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQ
QVNTIHNlcXVlbnRpYWwueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgYWNjdW11bGF0aW5nLngu
YW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIHJlcGVhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMAor
UEFTUyBuZXN0ZWQueC5hbmltVmFsLnZhbHVlIGlzIDMyCitQQVNTIHBsYWluLnguYW5pbVZhbC52
YWx1ZSBpcyAwCitQQVNTIHNlcXVlbnRpYWwueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgYWNj
dW11bGF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIHJlcGVhdGluZy54LmFuaW1WYWwu
dmFsdWUgaXMgMAorUEFTUyBuZXN0ZWQueC5hbmltVmFsLnZhbHVlIGlzIDY0CitQQVNTIHBsYWlu
LnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIHNlcXVlbnRpYWwueC5hbmltVmFsLnZhbHVlIGlz
IDAKK1BBU1MgYWNjdW11bGF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIHJlcGVhdGlu
Zy54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBuZXN0ZWQueC5hbmltVmFsLnZhbHVlIGlzIDk2
CitQQVNTIHBsYWluLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIHNlcXVlbnRpYWwueC5hbmlt
VmFsLnZhbHVlIGlzIDAKK1BBU1MgYWNjdW11bGF0aW5nLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQ
QVNTIHJlcGVhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBuZXN0ZWQueC5hbmltVmFs
LnZhbHVlIGlzIDEyOAorUEFTUyBwbGFpbi54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBzZXF1
ZW50aWFsLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIGFjY3VtdWxhdGluZy54LmFuaW1WYWwu
dmFsdWUgaXMgMAorUEFTUyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgbmVz
dGVkLnguYW5pbVZhbC52YWx1ZSBpcyAwCitQQVNTIHBsYWluLnguYW5pbVZhbC52YWx1ZSBpcyAz
MgorUEFTUyBzZXF1ZW50aWFsLnguYW5pbVZhbC52YWx1ZSBpcyAzMgorUEFTUyBhY2N1bXVsYXRp
bmcueC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVl
IGlzIDEyOAorUEFTUyBuZXN0ZWQueC5hbmltVmFsLnZhbHVlIGlzIDAKK1BBU1MgcGxhaW4ueC5h
bmltVmFsLnZhbHVlIGlzIDY0CitQQVNTIHNlcXVlbnRpYWwueC5hbmltVmFsLnZhbHVlIGlzIDMy
CitQQVNTIGFjY3VtdWxhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMjU2CitQQVNTIHJlcGVhdGlu
Zy54LmFuaW1WYWwudmFsdWUgaXMgMAorUEFTUyBuZXN0ZWQueC5hbmltVmFsLnZhbHVlIGlzIDAK
K1BBU1MgcGxhaW4ueC5hbmltVmFsLnZhbHVlIGlzIDk2CitQQVNTIHNlcXVlbnRpYWwueC5hbmlt
VmFsLnZhbHVlIGlzIDY0CitQQVNTIGFjY3VtdWxhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMTky
CitQQVNTIHJlcGVhdGluZy54LmFuaW1WYWwudmFsdWUgaXMgMTI4CitQQVNTIG5lc3RlZC54LmFu
aW1WYWwudmFsdWUgaXMgMAorUEFTUyBwbGFpbi54LmFuaW1WYWwudmFsdWUgaXMgMTI4CitQQVNT
IHNlcXVlbnRpYWwueC5hbmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyBhY2N1bXVsYXRpbmcueC5h
bmltVmFsLnZhbHVlIGlzIDEyOAorUEFTUyByZXBlYXRpbmcueC5hbmltVmFsLnZhbHVlIGlzIDEy
OAorUEFTUyBuZXN0ZWQueC5hbmltVmFsLnZhbHVlIGlzIDAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS5odG1sIGIvTGF5b3V0
VGVzdHMvc3ZnL2FuaW1hdGlvbnMvYW5pbWF0ZS1zZXRjdXJyZW50dGltZS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE4ZTNmNjgwY2IxNTY1ZDNkMjQ4NjBmNzk3N2FjMmRmN2M5ZmQwY2UKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdmcvYW5pbWF0aW9ucy9hbmltYXRlLXNldGN1cnJlbnR0aW1l
Lmh0bWwKQEAgLTAsMCArMSwxMjAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+CisgIDxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5
PgorICA8aDE+U1ZHIDEuMSBkeW5hbWljIGFuaW1hdGlvbiB0ZXN0czwvaDE+CisKKyAgPHN2ZyBp
ZD0nb3V0ZXItc3ZnJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhs
aW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4bWw6c3BhY2U9J3ByZXNlcnZlJz4K
KyAgICA8IS0tIHNlcXVlbnRpYWwgYW5pbWF0aW9ucyAtLT4KKyAgICA8cmVjdCBpZD0ncGxhaW4n
IHg9JzAnIHk9JzAnIHdpZHRoPSczMicgaGVpZ2h0PSczMicgZmlsbD0nZ3JlZW4nPgorICAgICAg
PGFuaW1hdGUgaWQ9J3BsYWluLWFuaW0nIGF0dHJpYnV0ZU5hbWU9J3gnIGZyb209JzAnIHRvPScx
MjgnIGJlZ2luPScwcycgZHVyPSc0cycgZmlsbD0nZnJlZXplJy8+CisgICAgPC9yZWN0PgorCisg
ICAgPCEtLSBzZXF1ZW50aWFsIGFuaW1hdGlvbnMgLS0+CisgICAgPHJlY3QgaWQ9J3NlcXVlbnRp
YWwnIHg9JzAnIHk9JzMyJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIGZpbGw9J2dyZWVuJz4KKyAg
ICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9J3gnICBmcm9tPScwJyAgdG89JzMyJyBiZWdpbj0n
MHMnIGR1cj0nMXMnIGZpbGw9J2ZyZWV6ZScvPgorICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFt
ZT0neCcgZnJvbT0nNjQnIHRvPScxMjgnIGJlZ2luPSczcycgZHVyPScxcycgZmlsbD0nZnJlZXpl
Jy8+CisgICAgPC9yZWN0PgorCisgICAgPCEtLSBhY2N1bXVsYXRpbmcgdmFsdWVzIC0tPgorICAg
IDxyZWN0IGlkPSdhY2N1bXVsYXRpbmcnIHg9JzAnIHk9JzY0JyB3aWR0aD0nMzInIGhlaWdodD0n
MzInIGZpbGw9J2dyZWVuJz4KKyAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9J3gnIHZhbHVl
cz0nMDsgMjU2OyAxMjgnIGFkZGl0aXZlPSdzdW0nIGFjY3VtdWxhdGU9J3N1bScgYmVnaW49JzBz
JyBkdXI9JzRzJyBmaWxsPSdmcmVlemUnLz4KKyAgICA8L3JlY3Q+CisKKyAgICA8IS0tIHJlcGVh
dGluZyAtLT4KKyAgICA8cmVjdCBpZD0ncmVwZWF0aW5nJyB4PScwJyB5PSc5Nicgd2lkdGg9JzMy
JyBoZWlnaHQ9JzMyJyBmaWxsPSdncmVlbic+CisgICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1l
PSd4JyB2YWx1ZXM9JzA7IDI1NjsgMTI4OyAwOyAxMjgnIGJlZ2luPScwcycgZHVyPScycycgZmls
bD0nZnJlZXplJyByZXBlYXRDb3VudD0nMicvPgorICAgIDwvcmVjdD4KKworICAgIDwhLS0gbmVz
dGVkIC0tPgorICAgIDxzdmcgaWQ9J25lc3RlZC1zdmcnIHg9JzAnIHk9JzEyOCc+CisgICAgICA8
cmVjdCBpZD0nbmVzdGVkJyB4PScwJyB5PScwJyB3aWR0aD0nMzInIGhlaWdodD0nMzInIGZpbGw9
J2dyZWVuJz4KKyAgICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0neCcgZnJvbT0nMCcgdG89
JzEyOCcgYmVnaW49JzBzJyBkdXI9JzRzJyBmaWxsPSdmcmVlemUnLz4KKyAgICAgIDwvcmVjdD4K
KyAgICA8L3N2Zz4KKworICAgIDxzY3JpcHQ+CisgICAgdmFyIHN2ZyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdvdXRlci1zdmcnKSwKKyAgICAgICAgbmVzdGVkc3ZnID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ25lc3RlZC1zdmcnKTsKKyAgICB2YXIgdGVzdHMsIGN1cklkeCA9IDA7CisK
KyAgICB2YXIgcGxhaW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxhaW4nKTsKKyAgICB2
YXIgc2VxdWVudGlhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXF1ZW50aWFsJyk7Cisg
ICAgdmFyIGFjY3VtdWxhdGluZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2N1bXVsYXRp
bmcnKTsKKyAgICB2YXIgcmVwZWF0aW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcGVh
dGluZycpOworICAgIHZhciBuZXN0ZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmVzdGVk
Jyk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgdmFyIHRlc3QgPSB0ZXN0c1tj
dXJJZHgrK107CisKKyAgICAgIHN2Zy5zZXRDdXJyZW50VGltZSh0ZXN0LnRpbWVbMF0pOworICAg
ICAgbmVzdGVkc3ZnLnNldEN1cnJlbnRUaW1lKHRlc3QudGltZVsxXSk7CisKKyAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGZvciAodmFyIGF0dHIgaW4gdGVzdC52YWx1ZXMp
IHsKKyAgICAgICAgICBzaG91bGRCZShhdHRyICsgJy5hbmltVmFsLnZhbHVlJywgU3RyaW5nKHRl
c3QudmFsdWVzW2F0dHJdKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VySWR4ID09IHRl
c3RzLmxlbmd0aCkgeworICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHJ1blRlc3QoKTsKKyAgICAgIH0sIDApOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGV4ZWN1dGVUZXN0cygpIHsKKyAgICAgIG5lc3RlZHN2Zy5wYXVz
ZUFuaW1hdGlvbnMoKTsKKyAgICAgIHN2Zy5wYXVzZUFuaW1hdGlvbnMoKTsKKworICAgICAgdGVz
dHMgPSBbCisgICAgICAgIC8vIFRlc3QgaW52YWxpZCB2YWx1ZXMuCisgICAgICAgIHsgdGltZTog
Wyd0aW50aW4nLCBOYU5dLCB2YWx1ZXM6IHsgJ3BsYWluLngnOiAgIDAsICdzZXF1ZW50aWFsLngn
OiAgIDAsICdhY2N1bXVsYXRpbmcueCc6ICAgMCwgJ3JlcGVhdGluZy54JzogICAwLCAnbmVzdGVk
LngnOiAgIDAgfSB9LAorCisgICAgICAgIC8vIFRlc3Qgb3V0LW9mLXJhbmdlIHZhbHVlcy4KKyAg
ICAgICAgeyB0aW1lOiBbLTEsIC0xXSwgdmFsdWVzOiB7ICdwbGFpbi54JzogICAwLCAnc2VxdWVu
dGlhbC54JzogICAwLCAnYWNjdW11bGF0aW5nLngnOiAgIDAsICdyZXBlYXRpbmcueCc6ICAgMCwg
J25lc3RlZC54JzogICAwIH0gfSwKKyAgICAgICAgeyB0aW1lOiBbIDUsICA1XSwgdmFsdWVzOiB7
ICdwbGFpbi54JzogMTI4LCAnc2VxdWVudGlhbC54JzogMTI4LCAnYWNjdW11bGF0aW5nLngnOiAx
MjgsICdyZXBlYXRpbmcueCc6IDEyOCwgJ25lc3RlZC54JzogMTI4IH0gfSwKKworICAgICAgICAv
LyBUZXN0IGNoYW5naW5nIHRpbWUgb25seSBmb3IgYWxsIGVsZW1lbnRzLgorICAgICAgICB7IHRp
bWU6IFswLCAwXSwgdmFsdWVzOiB7ICdwbGFpbi54JzogICAwLCAnc2VxdWVudGlhbC54JzogICAw
LCAnYWNjdW11bGF0aW5nLngnOiAgIDAsICdyZXBlYXRpbmcueCc6ICAgMCwgJ25lc3RlZC54Jzog
ICAwIH0gfSwKKyAgICAgICAgeyB0aW1lOiBbMSwgMV0sIHZhbHVlczogeyAncGxhaW4ueCc6ICAz
MiwgJ3NlcXVlbnRpYWwueCc6ICAzMiwgJ2FjY3VtdWxhdGluZy54JzogMTI4LCAncmVwZWF0aW5n
LngnOiAxMjgsICduZXN0ZWQueCc6ICAzMiB9IH0sCisgICAgICAgIHsgdGltZTogWzIsIDJdLCB2
YWx1ZXM6IHsgJ3BsYWluLngnOiAgNjQsICdzZXF1ZW50aWFsLngnOiAgMzIsICdhY2N1bXVsYXRp
bmcueCc6IDI1NiwgJ3JlcGVhdGluZy54JzogICAwLCAnbmVzdGVkLngnOiAgNjQgfSB9LAorICAg
ICAgICB7IHRpbWU6IFszLCAzXSwgdmFsdWVzOiB7ICdwbGFpbi54JzogIDk2LCAnc2VxdWVudGlh
bC54JzogIDY0LCAnYWNjdW11bGF0aW5nLngnOiAxOTIsICdyZXBlYXRpbmcueCc6IDEyOCwgJ25l
c3RlZC54JzogIDk2IH0gfSwKKyAgICAgICAgeyB0aW1lOiBbNCwgNF0sIHZhbHVlczogeyAncGxh
aW4ueCc6IDEyOCwgJ3NlcXVlbnRpYWwueCc6IDEyOCwgJ2FjY3VtdWxhdGluZy54JzogMTI4LCAn
cmVwZWF0aW5nLngnOiAxMjgsICduZXN0ZWQueCc6IDEyOCB9IH0sCisKKyAgICAgICAgLy8gVGVz
dCBjaGFuZ2luZyB0aW1lIG9ubHkgZm9yIHRoZSBuZXN0ZWQgc3ZnIGVsZW1lbnQuCisgICAgICAg
IHsgdGltZTogWzAsIDBdLCB2YWx1ZXM6IHsgJ3BsYWluLngnOiAgIDAsICdzZXF1ZW50aWFsLngn
OiAgIDAsICdhY2N1bXVsYXRpbmcueCc6ICAgMCwgJ3JlcGVhdGluZy54JzogICAwLCAnbmVzdGVk
LngnOiAgIDAgfSB9LAorICAgICAgICB7IHRpbWU6IFswLCAxXSwgdmFsdWVzOiB7ICdwbGFpbi54
JzogICAwLCAnc2VxdWVudGlhbC54JzogICAwLCAnYWNjdW11bGF0aW5nLngnOiAgIDAsICdyZXBl
YXRpbmcueCc6ICAgMCwgJ25lc3RlZC54JzogIDMyIH0gfSwKKyAgICAgICAgeyB0aW1lOiBbMCwg
Ml0sIHZhbHVlczogeyAncGxhaW4ueCc6ICAgMCwgJ3NlcXVlbnRpYWwueCc6ICAgMCwgJ2FjY3Vt
dWxhdGluZy54JzogICAwLCAncmVwZWF0aW5nLngnOiAgIDAsICduZXN0ZWQueCc6ICA2NCB9IH0s
CisgICAgICAgIHsgdGltZTogWzAsIDNdLCB2YWx1ZXM6IHsgJ3BsYWluLngnOiAgIDAsICdzZXF1
ZW50aWFsLngnOiAgIDAsICdhY2N1bXVsYXRpbmcueCc6ICAgMCwgJ3JlcGVhdGluZy54JzogICAw
LCAnbmVzdGVkLngnOiAgOTYgfSB9LAorICAgICAgICB7IHRpbWU6IFswLCA0XSwgdmFsdWVzOiB7
ICdwbGFpbi54JzogICAwLCAnc2VxdWVudGlhbC54JzogICAwLCAnYWNjdW11bGF0aW5nLngnOiAg
IDAsICdyZXBlYXRpbmcueCc6ICAgMCwgJ25lc3RlZC54JzogMTI4IH0gfSwKKworICAgICAgICAv
LyBUZXN0IGNoYW5naW5nIHRpbWUgb25seSBmb3IgdGhlIG91dGVyIHN2ZyBlbGVtZW50LgorICAg
ICAgICB7IHRpbWU6IFswLCAwXSwgdmFsdWVzOiB7ICdwbGFpbi54JzogICAwLCAnc2VxdWVudGlh
bC54JzogICAwLCAnYWNjdW11bGF0aW5nLngnOiAgIDAsICdyZXBlYXRpbmcueCc6ICAgMCwgJ25l
c3RlZC54JzogICAwIH0gfSwKKyAgICAgICAgeyB0aW1lOiBbMSwgMF0sIHZhbHVlczogeyAncGxh
aW4ueCc6ICAzMiwgJ3NlcXVlbnRpYWwueCc6ICAzMiwgJ2FjY3VtdWxhdGluZy54JzogMTI4LCAn
cmVwZWF0aW5nLngnOiAxMjgsICduZXN0ZWQueCc6ICAgMCB9IH0sCisgICAgICAgIHsgdGltZTog
WzIsIDBdLCB2YWx1ZXM6IHsgJ3BsYWluLngnOiAgNjQsICdzZXF1ZW50aWFsLngnOiAgMzIsICdh
Y2N1bXVsYXRpbmcueCc6IDI1NiwgJ3JlcGVhdGluZy54JzogICAwLCAnbmVzdGVkLngnOiAgIDAg
fSB9LAorICAgICAgICB7IHRpbWU6IFszLCAwXSwgdmFsdWVzOiB7ICdwbGFpbi54JzogIDk2LCAn
c2VxdWVudGlhbC54JzogIDY0LCAnYWNjdW11bGF0aW5nLngnOiAxOTIsICdyZXBlYXRpbmcueCc6
IDEyOCwgJ25lc3RlZC54JzogICAwIH0gfSwKKyAgICAgICAgeyB0aW1lOiBbNCwgMF0sIHZhbHVl
czogeyAncGxhaW4ueCc6IDEyOCwgJ3NlcXVlbnRpYWwueCc6IDEyOCwgJ2FjY3VtdWxhdGluZy54
JzogMTI4LCAncmVwZWF0aW5nLngnOiAxMjgsICduZXN0ZWQueCc6ICAgMCB9IH0sCisgICAgICBd
OworCisgICAgICBydW5UZXN0KCk7CisgICAgfQorCisgICAgLy8gQmVnaW4gdGVzdCBhc3luYwor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKQorICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpCisgICAgfQorICAgIGV4ZWN1dGVUZXN0cygpOworICAgIDwvc2NyaXB0PgorICA8
L3N2Zz4KKworICA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKyAgPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
      

    </bug>

</bugzilla>