<?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>78051</bug_id>
          
          <creation_ts>2012-02-07 15:32:54 -0800</creation_ts>
          <short_desc>Simplified discreteTimeConstantForSampleRate</short_desc>
          <delta_ts>2012-03-03 14:30:46 -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>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>77666</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raymond Toy">rtoy</reporter>
          <assigned_to name="Raymond Toy">rtoy</assigned_to>
          <cc>crogers</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>551472</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-07 15:32:54 -0800</bug_when>
    <thetext>In AudioUtilities.cpp, discreteTimeConstantForSampleRate has 


    // hardcoded value is temporary build fix for Windows.
    // FIXME: replace hardcode 2.718282 with M_E until the correct MathExtras.h solution is determined.
    return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));

This can be simplified to 1 - exp(-1 / (sampleRate * timeConstant)).

There maybe some issues with roundoff if sampleRate * timeConstant is large because we compute exp(&lt;small&gt;) ~ 1, so 1 - exp(&lt;small&gt;) can have significant roundoff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553562</commentid>
    <comment_count>1</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-09 15:22:10 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; In AudioUtilities.cpp, discreteTimeConstantForSampleRate has 
&gt; 
&gt; 
&gt;     // hardcoded value is temporary build fix for Windows.
&gt;     // FIXME: replace hardcode 2.718282 with M_E until the correct MathExtras.h solution is determined.
&gt;     return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));
&gt; 
&gt; This can be simplified to 1 - exp(-1 / (sampleRate * timeConstant)).
&gt; 
&gt; There maybe some issues with roundoff if sampleRate * timeConstant is large because we compute exp(&lt;small&gt;) ~ 1, so 1 - exp(&lt;small&gt;) can have significant roundoff.

If accuracy is important we can use the identity

1 - exp(-z) = 2*tanh(z/2)/(1 + tanh(z/2))

This doesn&apos;t have roundoff problem for z small because tanh(z/2) ~ z/2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553595</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-09 16:11:38 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)
&gt; &gt; In AudioUtilities.cpp, discreteTimeConstantForSampleRate has 
&gt; &gt; 
&gt; &gt; 
&gt; &gt;     // hardcoded value is temporary build fix for Windows.
&gt; &gt;     // FIXME: replace hardcode 2.718282 with M_E until the correct MathExtras.h solution is determined.
&gt; &gt;     return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));
&gt; &gt; 
&gt; &gt; This can be simplified to 1 - exp(-1 / (sampleRate * timeConstant)).
&gt; &gt; 
&gt; &gt; There maybe some issues with roundoff if sampleRate * timeConstant is large because we compute exp(&lt;small&gt;) ~ 1, so 1 - exp(&lt;small&gt;) can have significant roundoff.
&gt; 
&gt; If accuracy is important we can use the identity
&gt; 
&gt; 1 - exp(-z) = 2*tanh(z/2)/(1 + tanh(z/2))
&gt; 
&gt; This doesn&apos;t have roundoff problem for z small because tanh(z/2) ~ z/2.

Are you seeing accuracy problems with the current version?
return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553609</commentid>
    <comment_count>3</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-09 16:29:19 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; (In reply to comment #0)
&gt; &gt; &gt; In AudioUtilities.cpp, discreteTimeConstantForSampleRate has 
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt;     // hardcoded value is temporary build fix for Windows.
&gt; &gt; &gt;     // FIXME: replace hardcode 2.718282 with M_E until the correct MathExtras.h solution is determined.
&gt; &gt; &gt;     return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));
&gt; &gt; &gt; 
&gt; &gt; &gt; This can be simplified to 1 - exp(-1 / (sampleRate * timeConstant)).
&gt; &gt; &gt; 
&gt; &gt; &gt; There maybe some issues with roundoff if sampleRate * timeConstant is large because we compute exp(&lt;small&gt;) ~ 1, so 1 - exp(&lt;small&gt;) can have significant roundoff.
&gt; &gt; 
&gt; &gt; If accuracy is important we can use the identity
&gt; &gt; 
&gt; &gt; 1 - exp(-z) = 2*tanh(z/2)/(1 + tanh(z/2))
&gt; &gt; 
&gt; &gt; This doesn&apos;t have roundoff problem for z small because tanh(z/2) ~ z/2.
&gt; 
&gt; Are you seeing accuracy problems with the current version?
&gt; return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));

No, but I&apos;m using fairly small time constants like .01 sec at a sample rate of 44100.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553741</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-09 19:18:34 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; (In reply to comment #0)
&gt; &gt; &gt; &gt; In AudioUtilities.cpp, discreteTimeConstantForSampleRate has 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt;     // hardcoded value is temporary build fix for Windows.
&gt; &gt; &gt; &gt;     // FIXME: replace hardcode 2.718282 with M_E until the correct MathExtras.h solution is determined.
&gt; &gt; &gt; &gt;     return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This can be simplified to 1 - exp(-1 / (sampleRate * timeConstant)).
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; There maybe some issues with roundoff if sampleRate * timeConstant is large because we compute exp(&lt;small&gt;) ~ 1, so 1 - exp(&lt;small&gt;) can have significant roundoff.
&gt; &gt; &gt; 
&gt; &gt; &gt; If accuracy is important we can use the identity
&gt; &gt; &gt; 
&gt; &gt; &gt; 1 - exp(-z) = 2*tanh(z/2)/(1 + tanh(z/2))
&gt; &gt; &gt; 
&gt; &gt; &gt; This doesn&apos;t have roundoff problem for z small because tanh(z/2) ~ z/2.
&gt; &gt; 
&gt; &gt; Are you seeing accuracy problems with the current version?
&gt; &gt; return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));
&gt; 
&gt; No, but I&apos;m using fairly small time constants like .01 sec at a sample rate of 44100.

How large do the time constants have to get before things get too bad?  Is the problem that serious?

Ideally, we&apos;d just use your simplified and clear equation:
1 - exp(-1 / (sampleRate * timeConstant))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553792</commentid>
    <comment_count>5</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-09 21:18:48 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; &gt; (In reply to comment #0)
&gt; &gt; &gt; &gt; &gt; In AudioUtilities.cpp, discreteTimeConstantForSampleRate has 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt;     // hardcoded value is temporary build fix for Windows.
&gt; &gt; &gt; &gt; &gt;     // FIXME: replace hardcode 2.718282 with M_E until the correct MathExtras.h solution is determined.
&gt; &gt; &gt; &gt; &gt;     return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; This can be simplified to 1 - exp(-1 / (sampleRate * timeConstant)).
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; There maybe some issues with roundoff if sampleRate * timeConstant is large because we compute exp(&lt;small&gt;) ~ 1, so 1 - exp(&lt;small&gt;) can have significant roundoff.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; If accuracy is important we can use the identity
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 1 - exp(-z) = 2*tanh(z/2)/(1 + tanh(z/2))
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This doesn&apos;t have roundoff problem for z small because tanh(z/2) ~ z/2.
&gt; &gt; &gt; 
&gt; &gt; &gt; Are you seeing accuracy problems with the current version?
&gt; &gt; &gt; return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));
&gt; &gt; 
&gt; &gt; No, but I&apos;m using fairly small time constants like .01 sec at a sample rate of 44100.
&gt; 
&gt; How large do the time constants have to get before things get too bad?  Is the problem that serious?
&gt; 
&gt; Ideally, we&apos;d just use your simplified and clear equation:
&gt; 1 - exp(-1 / (sampleRate * timeConstant))

(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; &gt; (In reply to comment #0)
&gt; &gt; &gt; &gt; &gt; In AudioUtilities.cpp, discreteTimeConstantForSampleRate has 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt;     // hardcoded value is temporary build fix for Windows.
&gt; &gt; &gt; &gt; &gt;     // FIXME: replace hardcode 2.718282 with M_E until the correct MathExtras.h solution is determined.
&gt; &gt; &gt; &gt; &gt;     return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; This can be simplified to 1 - exp(-1 / (sampleRate * timeConstant)).
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; There maybe some issues with roundoff if sampleRate * timeConstant is large because we compute exp(&lt;small&gt;) ~ 1, so 1 - exp(&lt;small&gt;) can have significant roundoff.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; If accuracy is important we can use the identity
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 1 - exp(-z) = 2*tanh(z/2)/(1 + tanh(z/2))
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This doesn&apos;t have roundoff problem for z small because tanh(z/2) ~ z/2.
&gt; &gt; &gt; 
&gt; &gt; &gt; Are you seeing accuracy problems with the current version?
&gt; &gt; &gt; return 1 - powf(1 / 2.718282f, 1 / (sampleRate * timeConstant));
&gt; &gt; 
&gt; &gt; No, but I&apos;m using fairly small time constants like .01 sec at a sample rate of 44100.
&gt; 
&gt; How large do the time constants have to get before things get too bad?  Is the problem that serious?

Probably not.  I don&apos;t have a good feel for what kind of time constant people might use.
&gt; 
&gt; Ideally, we&apos;d just use your simplified and clear equation:
&gt; 1 - exp(-1 / (sampleRate * timeConstant))

Well, assuming I did the math right, 1-exp(-1/192000) works out to be 5.185604e-6, as a float.  The true value is closer to 5.2083197e-6.  So we&apos;re only accurate to 2 digits now.

Since this is used in setTargetValueAtTime, I think it doesn&apos;t matter which value we use because it&apos;s so small that the roundoff error in computing the new values using this multiplier will be the dominating factor.  value += (target - value)*multiplier.  If value is about 1 and target is 0, we&apos;re adding a very small value.   We might want to consider doing the computation in double-float instead.  Or just accept the noisy result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559886</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-19 00:52:37 -0800</bug_when>
    <thetext>Generally, I&apos;d like to see this type of math in double-precision, unless the code is inside of tight loops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561066</commentid>
    <comment_count>7</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-21 11:20:45 -0800</bug_when>
    <thetext>It would be best to update this after bug 77666 is fixed so that we get tests for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567798</commentid>
    <comment_count>8</comment_count>
      <attachid>129486</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 11:51:45 -0800</bug_when>
    <thetext>Created attachment 129486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568030</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-29 15:45:57 -0800</bug_when>
    <thetext>The patch looks good in general, but you should check all calling sites to avoid compiler warning/error due to loss-of-precision 64bit double -&gt; 32bit float (which can happen on certain mac-port builds)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568049</commentid>
    <comment_count>10</comment_count>
      <attachid>129542</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 16:07:20 -0800</bug_when>
    <thetext>Created attachment 129542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568055</commentid>
    <comment_count>11</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 16:09:04 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; The patch looks good in general, but you should check all calling sites to avoid compiler warning/error due to loss-of-precision 64bit double -&gt; 32bit float (which can happen on certain mac-port builds)

Done.  Only two places needed the cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568056</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-29 16:10:11 -0800</bug_when>
    <thetext>I&apos;m assuming this builds on Windows?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568080</commentid>
    <comment_count>13</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 16:22:00 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I&apos;m assuming this builds on Windows?

It did when I did the first implementation, but I will check again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568703</commentid>
    <comment_count>14</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-01 09:16:31 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; I&apos;m assuming this builds on Windows?
&gt; 
&gt; It did when I did the first implementation, but I will check again.

Builds fine.  Don&apos;t know of any layout tests that cover this, except for the ones in bug 77666, which hasn&apos;t landed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568792</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-01 11:45:12 -0800</bug_when>
    <thetext>Does 77666 layout test run with this patch on Windows?  If so, the patch looks good, but you&apos;ll have to update to latest sources and re-upload the patch since the patch didn&apos;t apply cleanly (purple EWS)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568817</commentid>
    <comment_count>16</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-01 12:28:46 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Does 77666 layout test run with this patch on Windows?  If so, the patch looks good, but you&apos;ll have to update to latest sources and re-upload the patch since the patch didn&apos;t apply cleanly (purple EWS)

I believe I tried this, but I&apos;m no longer sure because I updated my sources on Windows.  I&apos;d like to wait for 77666 to land and then I&apos;ll try this out on Windows and let you know what happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569992</commentid>
    <comment_count>17</comment_count>
      <attachid>129967</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-02 15:35:59 -0800</bug_when>
    <thetext>Created attachment 129967
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569996</commentid>
    <comment_count>18</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-02 15:38:26 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Does 77666 layout test run with this patch on Windows?  If so, the patch looks good, but you&apos;ll have to update to latest sources and re-upload the patch since the patch didn&apos;t apply cleanly (purple EWS)

Ran it (finally) on Windows and all tests pass, including the new audioparam timeline tests which does exercise discreteTimeConstantForSampleRate.

New patch uploaded too, based on current code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570076</commentid>
    <comment_count>19</comment_count>
      <attachid>129967</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-02 18:43:33 -0800</bug_when>
    <thetext>Comment on attachment 129967
Patch

Rejecting attachment 129967 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

Last 500 characters of output:
_by_email
    return self._reviewer_only(self.account_by_email(email))
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/common/config/committers.py&quot;, line 632, in account_by_email
    return self._email_to_account_map().get(email.lower()) if email else None
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/common/config/committers.py&quot;, line 525, in _email_to_account_map
    assert(email not in self._accounts_by_email)  # We should never have duplicate emails.
AssertionError

Full output: http://queues.webkit.org/results/11801211</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570172</commentid>
    <comment_count>20</comment_count>
      <attachid>129967</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-03 14:30:40 -0800</bug_when>
    <thetext>Comment on attachment 129967
Patch

Clearing flags on attachment: 129967

Committed r109665: &lt;http://trac.webkit.org/changeset/109665&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570173</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-03 14:30:46 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129486</attachid>
            <date>2012-02-29 11:51:45 -0800</date>
            <delta_ts>2012-02-29 16:07:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78051-20120229115144.patch</filename>
            <type>text/plain</type>
            <size>2906</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQxNGE2ZDIxMjMxZmNl
ZTgzZDU0OWQ4MTg3ODMwODIxMjE5MTdkZC4uMWU3ZDg2NTU5NzMwYzQyMDJjOTU3MzQ4NDJjZGFk
ZDE3MzNiMTRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAyLTI5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBTaW1wbGlmaWVkIGRpc2NyZXRl
VGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzgwNTEKKworICAgICAgICBSZW1vdmUgaGFyZGNvZGVkIGNvbnN0
YW50IGFuZCBzaW1wbGlmeSBjb21wdXRhdGlvbiBvZiBkaXNjcmV0ZQorICAgICAgICB0aW1lIGNv
bnN0YW50LgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZC4gIENvdmVyZWQgYnkgZXhpc3RpbmcgQXVkaW9Q
YXJhbSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVXRpbGl0aWVzOjpkaXNjcmV0ZVRpbWVDb25zdGFu
dEZvclNhbXBsZVJhdGUpOgorICAgICAgICBTaW1wbGlmeSBmb3JtdWxhLgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0F1ZGlvVXRpbGl0aWVzLmg6CisgICAgICAgIChBdWRpb1V0aWxpdGllcyk6
IFVwZGF0ZSBmdW5jdGlvbiBzaWduYXR1cmUuCisKIDIwMTItMDItMjcgIElseWEgVGlraG9ub3Zz
a3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtjaHJv
bWl1bV0gUHJvZmlsZXMgLSBUb29sdGlwIHdpdGggb2JqZWN0L3Byb3BlcnR5IHR5cGVzIHN0YXlz
IG9uIHNjcmVlbiB3aGVuIGFub3RoZXIgdGFiIHNlbGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1V0aWxpdGllcy5jcHAKaW5kZXggN2VjODMzY2NkNTQ0Y2U2
MjY4MGUwZDYzZGVmOWU5ODQ1NmQ2NWI3NC4uNTdjMDA1MjhiYzQ3OGQ4OTg0N2Y1MzJmMDcwYmI2
NTU4ZDYzMjJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVk
aW9VdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlv
VXRpbGl0aWVzLmNwcApAQCAtNDksMTEgKzQ5LDkgQEAgZmxvYXQgbGluZWFyVG9EZWNpYmVscyhm
bG9hdCBsaW5lYXIpCiAgICAgcmV0dXJuIDIwICogbG9nMTBmKGxpbmVhcik7CiB9CiAKLWZsb2F0
IGRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZShmbG9hdCB0aW1lQ29uc3RhbnQsIGZs
b2F0IHNhbXBsZVJhdGUpCitkb3VibGUgZGlzY3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRl
KGRvdWJsZSB0aW1lQ29uc3RhbnQsIGRvdWJsZSBzYW1wbGVSYXRlKQogewotICAgIC8vIGhhcmRj
b2RlZCB2YWx1ZSBpcyB0ZW1wb3JhcnkgYnVpbGQgZml4IGZvciBXaW5kb3dzLgotICAgIC8vIEZJ
WE1FOiByZXBsYWNlIGhhcmRjb2RlIDIuNzE4MjgyIHdpdGggTV9FIHVudGlsIHRoZSBjb3JyZWN0
IE1hdGhFeHRyYXMuaCBzb2x1dGlvbiBpcyBkZXRlcm1pbmVkLgotICAgIHJldHVybiAxIC0gcG93
ZigxIC8gMi43MTgyODJmLCAxIC8gKHNhbXBsZVJhdGUgKiB0aW1lQ29uc3RhbnQpKTsKKyAgICBy
ZXR1cm4gMSAtIGV4cCgtMSAvIChzYW1wbGVSYXRlICogdGltZUNvbnN0YW50KSk7CiB9CiAKIHNp
emVfdCB0aW1lVG9TYW1wbGVGcmFtZShkb3VibGUgdGltZSwgZG91YmxlIHNhbXBsZVJhdGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1V0aWxpdGllcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9VdGlsaXRpZXMuaAppbmRleCBl
ZDI5NDVmYjY4YzQyYzdlMjA0MjZkMTExMThkYjAyZjdkMzBjYWI3Li5jMTkxZTg3MWMyM2ZhNDFl
YzMyZGEwMmFkMjg1YmFmYWY3MzBkNDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9BdWRpb1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvVXRpbGl0aWVzLmgKQEAgLTM2LDcgKzM2LDcgQEAgZmxvYXQgZGVjaWJlbHNU
b0xpbmVhcihmbG9hdCk7CiAvLyB0aW1lQ29uc3RhbnQgaXMgdGhlIHRpbWUgaXQgdGFrZXMgYSBm
aXJzdC1vcmRlciBsaW5lYXIgdGltZS1pbnZhcmlhbnQgc3lzdGVtCiAvLyB0byByZWFjaCB0aGUg
dmFsdWUgMSAtIDEvZSAoYXJvdW5kIDYzLjIlKSBnaXZlbiBhIHN0ZXAgaW5wdXQgcmVzcG9uc2Uu
CiAvLyBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUoKSB3aWxsIHJldHVybiB0aGUg
ZGlzY3JldGUgdGltZS1jb25zdGFudCBmb3IgdGhlIHNwZWNpZmljIHNhbXBsZVJhdGUuCi1mbG9h
dCBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUoZmxvYXQgdGltZUNvbnN0YW50LCBm
bG9hdCBzYW1wbGVSYXRlKTsKK2RvdWJsZSBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJh
dGUoZG91YmxlIHRpbWVDb25zdGFudCwgZG91YmxlIHNhbXBsZVJhdGUpOwogCiAvLyBDb252ZXJ0
IHRoZSB0aW1lIHRvIGEgc2FtcGxlIGZyYW1lIGF0IHRoZSBnaXZlbiBzYW1wbGUgcmF0ZS4KIHNp
emVfdCB0aW1lVG9TYW1wbGVGcmFtZShkb3VibGUgdGltZSwgZG91YmxlIHNhbXBsZVJhdGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129542</attachid>
            <date>2012-02-29 16:07:20 -0800</date>
            <delta_ts>2012-03-02 15:35:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78051-20120229160719.patch</filename>
            <type>text/plain</type>
            <size>5059</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQxNGE2ZDIxMjMxZmNl
ZTgzZDU0OWQ4MTg3ODMwODIxMjE5MTdkZC4uODFlYWI3MDllNzYxNGRlZDNmZDE4YmI0NWZkNDNm
NGE0Y2JhOTBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTAyLTI5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBTaW1wbGlmaWVkIGRpc2NyZXRl
VGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzgwNTEKKworICAgICAgICBSZW1vdmUgaGFyZGNvZGVkIGNvbnN0
YW50IGFuZCBzaW1wbGlmeSBjb21wdXRhdGlvbiBvZiBkaXNjcmV0ZQorICAgICAgICB0aW1lIGNv
bnN0YW50LgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZC4gIENvdmVyZWQgYnkgZXhpc3RpbmcgQXVkaW9Q
YXJhbSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVXRpbGl0aWVzOjpkaXNjcmV0ZVRpbWVDb25zdGFu
dEZvclNhbXBsZVJhdGUpOgorICAgICAgICBTaW1wbGlmeSBmb3JtdWxhLgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0F1ZGlvVXRpbGl0aWVzLmg6CisgICAgICAgIChBdWRpb1V0aWxpdGllcyk6
IFVwZGF0ZSBmdW5jdGlvbiBzaWduYXR1cmUuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29t
cHJlc3Nvcktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAgICAgICAgY2FzdCB0
byBmbG9hdCB0byBhdm9pZCB3YXJuaW5ncy4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1BhcmFt
VGltZWxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1
ZXNGb3JUaW1lUmFuZ2VJbXBsKTogY2FzdCB0bworICAgICAgICBmbG9hdCB0byBhdm9pZCB3YXJu
aW5ncy4KKwogMjAxMi0wMi0yNyAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW2Nocm9taXVtXSBQcm9maWxlcyAtIFRvb2x0
aXAgd2l0aCBvYmplY3QvcHJvcGVydHkgdHlwZXMgc3RheXMgb24gc2NyZWVuIHdoZW4gYW5vdGhl
ciB0YWIgc2VsZWN0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlv
VXRpbGl0aWVzLmNwcAppbmRleCA3ZWM4MzNjY2Q1NDRjZTYyNjgwZTBkNjNkZWY5ZTk4NDU2ZDY1
Yjc0Li41N2MwMDUyOGJjNDc4ZDg5ODQ3ZjUzMmYwNzBiYjY1NThkNjMyMmUyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1V0aWxpdGllcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9VdGlsaXRpZXMuY3BwCkBAIC00OSwx
MSArNDksOSBAQCBmbG9hdCBsaW5lYXJUb0RlY2liZWxzKGZsb2F0IGxpbmVhcikKICAgICByZXR1
cm4gMjAgKiBsb2cxMGYobGluZWFyKTsKIH0KIAotZmxvYXQgZGlzY3JldGVUaW1lQ29uc3RhbnRG
b3JTYW1wbGVSYXRlKGZsb2F0IHRpbWVDb25zdGFudCwgZmxvYXQgc2FtcGxlUmF0ZSkKK2RvdWJs
ZSBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUoZG91YmxlIHRpbWVDb25zdGFudCwg
ZG91YmxlIHNhbXBsZVJhdGUpCiB7Ci0gICAgLy8gaGFyZGNvZGVkIHZhbHVlIGlzIHRlbXBvcmFy
eSBidWlsZCBmaXggZm9yIFdpbmRvd3MuCi0gICAgLy8gRklYTUU6IHJlcGxhY2UgaGFyZGNvZGUg
Mi43MTgyODIgd2l0aCBNX0UgdW50aWwgdGhlIGNvcnJlY3QgTWF0aEV4dHJhcy5oIHNvbHV0aW9u
IGlzIGRldGVybWluZWQuCi0gICAgcmV0dXJuIDEgLSBwb3dmKDEgLyAyLjcxODI4MmYsIDEgLyAo
c2FtcGxlUmF0ZSAqIHRpbWVDb25zdGFudCkpOworICAgIHJldHVybiAxIC0gZXhwKC0xIC8gKHNh
bXBsZVJhdGUgKiB0aW1lQ29uc3RhbnQpKTsKIH0KIAogc2l6ZV90IHRpbWVUb1NhbXBsZUZyYW1l
KGRvdWJsZSB0aW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9BdWRpb1V0aWxpdGllcy5oCmluZGV4IGVkMjk0NWZiNjhjNDJjN2UyMDQyNmQx
MTExOGRiMDJmN2QzMGNhYjcuLmMxOTFlODcxYzIzZmE0MWVjMzJkYTAyYWQyODViYWZhZjczMGQ0
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvVXRpbGl0
aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9VdGlsaXRpZXMu
aApAQCAtMzYsNyArMzYsNyBAQCBmbG9hdCBkZWNpYmVsc1RvTGluZWFyKGZsb2F0KTsKIC8vIHRp
bWVDb25zdGFudCBpcyB0aGUgdGltZSBpdCB0YWtlcyBhIGZpcnN0LW9yZGVyIGxpbmVhciB0aW1l
LWludmFyaWFudCBzeXN0ZW0KIC8vIHRvIHJlYWNoIHRoZSB2YWx1ZSAxIC0gMS9lIChhcm91bmQg
NjMuMiUpIGdpdmVuIGEgc3RlcCBpbnB1dCByZXNwb25zZS4KIC8vIGRpc2NyZXRlVGltZUNvbnN0
YW50Rm9yU2FtcGxlUmF0ZSgpIHdpbGwgcmV0dXJuIHRoZSBkaXNjcmV0ZSB0aW1lLWNvbnN0YW50
IGZvciB0aGUgc3BlY2lmaWMgc2FtcGxlUmF0ZS4KLWZsb2F0IGRpc2NyZXRlVGltZUNvbnN0YW50
Rm9yU2FtcGxlUmF0ZShmbG9hdCB0aW1lQ29uc3RhbnQsIGZsb2F0IHNhbXBsZVJhdGUpOworZG91
YmxlIGRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZShkb3VibGUgdGltZUNvbnN0YW50
LCBkb3VibGUgc2FtcGxlUmF0ZSk7CiAKIC8vIENvbnZlcnQgdGhlIHRpbWUgdG8gYSBzYW1wbGUg
ZnJhbWUgYXQgdGhlIGdpdmVuIHNhbXBsZSByYXRlLgogc2l6ZV90IHRpbWVUb1NhbXBsZUZyYW1l
KGRvdWJsZSB0aW1lLCBkb3VibGUgc2FtcGxlUmF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAppbmRl
eCAzZTk0M2QxMjA3NTdhYTdlOWZmMTZlYjU0NTA3YmNhZDU1YzQzOGIxLi45MzEwNTU0MTBlNGE2
MDk3YzgwZmIxNzNkN2RjNGY2OTE4MDEzNmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKQEAgLTYz
LDcgKzYzLDcgQEAgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpEeW5hbWljc0NvbXByZXNzb3JL
ZXJuZWwoZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnUKICAgICAvLyBJbml0aWFsaXplcyBt
b3N0IG1lbWJlciB2YXJpYWJsZXMKICAgICByZXNldCgpOwogICAgIAotICAgIG1fbWV0ZXJpbmdS
ZWxlYXNlSyA9IGRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZShtZXRlcmluZ1JlbGVh
c2VUaW1lQ29uc3RhbnQsIHNhbXBsZVJhdGUpOworICAgIG1fbWV0ZXJpbmdSZWxlYXNlSyA9IHN0
YXRpY19jYXN0PGZsb2F0PihkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUobWV0ZXJp
bmdSZWxlYXNlVGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKSk7CiB9CiAKIHZvaWQgRHluYW1pY3ND
b21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGlt
ZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNw
cAppbmRleCBjZDhmNTM2NzYyYTRjZTBjMDMwMzUzMzk2OTE4ZmQ2MWM1YjVjNDI0Li5lMzU0ZTlj
NTM1Mjk3N2VjMDNmY2QzYTAzMzQ5NWFlYjgwY2M3ZmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAKQEAgLTI3OSw3ICsyNzksNyBAQCBmbG9h
dCBBdWRpb1BhcmFtVGltZWxpbmU6OnZhbHVlc0ZvclRpbWVSYW5nZUltcGwoZmxvYXQgc3RhcnRU
aW1lLAogICAgICAgICAgICAgICAgICAgICAvLyBFeHBvbmVudGlhbCBhcHByb2FjaCB0byB0YXJn
ZXQgdmFsdWUgd2l0aCBnaXZlbiB0aW1lIGNvbnN0YW50LgogICAgICAgICAgICAgICAgICAgICBm
bG9hdCB0YXJnZXRWYWx1ZSA9IGV2ZW50LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IHRpbWVDb25zdGFudCA9IGV2ZW50LnRpbWVDb25zdGFudCgpOwotICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBkaXNjcmV0ZVRpbWVDb25zdGFudCA9IEF1ZGlvVXRpbGl0aWVzOjpkaXNjcmV0
ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUodGltZUNvbnN0YW50LCBjb250cm9sUmF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IGRpc2NyZXRlVGltZUNvbnN0YW50ID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KEF1ZGlvVXRpbGl0aWVzOjpkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJh
dGUodGltZUNvbnN0YW50LCBjb250cm9sUmF0ZSkpOwogCiAgICAgICAgICAgICAgICAgICAgIGZv
ciAoOyB3cml0ZUluZGV4IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVzW3dyaXRlSW5kZXhdID0gdmFsdWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129967</attachid>
            <date>2012-03-02 15:35:59 -0800</date>
            <delta_ts>2012-03-03 14:30:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78051-20120302153558.patch</filename>
            <type>text/plain</type>
            <size>5012</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTkxOTRmOGVmYjgyNWNi
NjVkMDE0NDhjNTk3Yjk2YTAxY2E2NTFkYS4uMGQ2NWUyNjJjNTk2MDM2MzVmMzIwMzg1YzI1OWVh
ODgwNmVmOWYyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTAyLTI5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBTaW1wbGlmaWVkIGRpc2NyZXRl
VGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzgwNTEKKworICAgICAgICBSZW1vdmUgaGFyZGNvZGVkIGNvbnN0
YW50IGFuZCBzaW1wbGlmeSBjb21wdXRhdGlvbiBvZiBkaXNjcmV0ZQorICAgICAgICB0aW1lIGNv
bnN0YW50LgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIG5lZWRlZC4gIENvdmVyZWQgYnkgZXhpc3RpbmcgQXVkaW9Q
YXJhbSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVXRpbGl0aWVzOjpkaXNjcmV0ZVRpbWVDb25zdGFu
dEZvclNhbXBsZVJhdGUpOgorICAgICAgICBTaW1wbGlmeSBmb3JtdWxhLgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0F1ZGlvVXRpbGl0aWVzLmg6CisgICAgICAgIChBdWRpb1V0aWxpdGllcyk6
IFVwZGF0ZSBmdW5jdGlvbiBzaWduYXR1cmUuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29t
cHJlc3Nvcktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAgICAgICAgY2FzdCB0
byBmbG9hdCB0byBhdm9pZCB3YXJuaW5ncy4KKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb1BhcmFt
VGltZWxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1
ZXNGb3JUaW1lUmFuZ2VJbXBsKTogY2FzdCB0bworICAgICAgICBmbG9hdCB0byBhdm9pZCB3YXJu
aW5ncy4KKwogMjAxMi0wMy0wMiAgVy4gSmFtZXMgTWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZW1vdmUgVFJBQ0VfRVZFTlQgZnJvbSBDQ1F1
YWRDdWxsZXI6OmN1bGxPY2NsdWRlZFF1YWRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vQXVkaW9VdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9VdGlsaXRpZXMuY3BwCmluZGV4IDdlYzgzM2NjZDU0NGNlNjI2ODBlMGQ2
M2RlZjllOTg0NTZkNjViNzQuLjU3YzAwNTI4YmM0NzhkODk4NDdmNTMyZjA3MGJiNjU1OGQ2MzIy
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvVXRpbGl0
aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1V0aWxpdGll
cy5jcHAKQEAgLTQ5LDExICs0OSw5IEBAIGZsb2F0IGxpbmVhclRvRGVjaWJlbHMoZmxvYXQgbGlu
ZWFyKQogICAgIHJldHVybiAyMCAqIGxvZzEwZihsaW5lYXIpOwogfQogCi1mbG9hdCBkaXNjcmV0
ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUoZmxvYXQgdGltZUNvbnN0YW50LCBmbG9hdCBzYW1w
bGVSYXRlKQorZG91YmxlIGRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZShkb3VibGUg
dGltZUNvbnN0YW50LCBkb3VibGUgc2FtcGxlUmF0ZSkKIHsKLSAgICAvLyBoYXJkY29kZWQgdmFs
dWUgaXMgdGVtcG9yYXJ5IGJ1aWxkIGZpeCBmb3IgV2luZG93cy4KLSAgICAvLyBGSVhNRTogcmVw
bGFjZSBoYXJkY29kZSAyLjcxODI4MiB3aXRoIE1fRSB1bnRpbCB0aGUgY29ycmVjdCBNYXRoRXh0
cmFzLmggc29sdXRpb24gaXMgZGV0ZXJtaW5lZC4KLSAgICByZXR1cm4gMSAtIHBvd2YoMSAvIDIu
NzE4MjgyZiwgMSAvIChzYW1wbGVSYXRlICogdGltZUNvbnN0YW50KSk7CisgICAgcmV0dXJuIDEg
LSBleHAoLTEgLyAoc2FtcGxlUmF0ZSAqIHRpbWVDb25zdGFudCkpOwogfQogCiBzaXplX3QgdGlt
ZVRvU2FtcGxlRnJhbWUoZG91YmxlIHRpbWUsIGRvdWJsZSBzYW1wbGVSYXRlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9VdGlsaXRpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvVXRpbGl0aWVzLmgKaW5kZXggZWQyOTQ1ZmI2
OGM0MmM3ZTIwNDI2ZDExMTE4ZGIwMmY3ZDMwY2FiNy4uYzE5MWU4NzFjMjNmYTQxZWMzMmRhMDJh
ZDI4NWJhZmFmNzMwZDQ3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9VdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9B
dWRpb1V0aWxpdGllcy5oCkBAIC0zNiw3ICszNiw3IEBAIGZsb2F0IGRlY2liZWxzVG9MaW5lYXIo
ZmxvYXQpOwogLy8gdGltZUNvbnN0YW50IGlzIHRoZSB0aW1lIGl0IHRha2VzIGEgZmlyc3Qtb3Jk
ZXIgbGluZWFyIHRpbWUtaW52YXJpYW50IHN5c3RlbQogLy8gdG8gcmVhY2ggdGhlIHZhbHVlIDEg
LSAxL2UgKGFyb3VuZCA2My4yJSkgZ2l2ZW4gYSBzdGVwIGlucHV0IHJlc3BvbnNlLgogLy8gZGlz
Y3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKCkgd2lsbCByZXR1cm4gdGhlIGRpc2NyZXRl
IHRpbWUtY29uc3RhbnQgZm9yIHRoZSBzcGVjaWZpYyBzYW1wbGVSYXRlLgotZmxvYXQgZGlzY3Jl
dGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKGZsb2F0IHRpbWVDb25zdGFudCwgZmxvYXQgc2Ft
cGxlUmF0ZSk7Citkb3VibGUgZGlzY3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKGRvdWJs
ZSB0aW1lQ29uc3RhbnQsIGRvdWJsZSBzYW1wbGVSYXRlKTsKIAogLy8gQ29udmVydCB0aGUgdGlt
ZSB0byBhIHNhbXBsZSBmcmFtZSBhdCB0aGUgZ2l2ZW4gc2FtcGxlIHJhdGUuCiBzaXplX3QgdGlt
ZVRvU2FtcGxlRnJhbWUoZG91YmxlIHRpbWUsIGRvdWJsZSBzYW1wbGVSYXRlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5l
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JL
ZXJuZWwuY3BwCmluZGV4IGMxMTU5N2E1MTJiMDhmMGIzYzdlODE4ZjQzMjg0OGYyZDRhYmQ4ODcu
LjlkNGUzMGNmYmEyZjY1NTViNDA2YmE1MzZjNDg0ZjAzZjRhZDIzMTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsLmNwcApAQCAtNjgsNyArNjgsNyBAQCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OkR5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbChmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudQogICAgIC8v
IEluaXRpYWxpemVzIG1vc3QgbWVtYmVyIHZhcmlhYmxlcwogICAgIHJlc2V0KCk7CiAKLSAgICBt
X21ldGVyaW5nUmVsZWFzZUsgPSBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUobWV0
ZXJpbmdSZWxlYXNlVGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKTsKKyAgICBtX21ldGVyaW5nUmVs
ZWFzZUsgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZGlzY3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVS
YXRlKG1ldGVyaW5nUmVsZWFzZVRpbWVDb25zdGFudCwgc2FtcGxlUmF0ZSkpOwogfQogCiB2b2lk
IER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9QYXJhbVRpbWVsaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1U
aW1lbGluZS5jcHAKaW5kZXggOGJlNDhjNTY5NjA2ZmQ0NTBkODc1NDYyN2EzMTY1MTM2ZmI1NTE5
NC4uNjNjMmJiNjM5ZmE3MzJhYmU5NzgxOWExZWFjMGU3YjhhZmM0YmU2OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCkBAIC0yNzksNyArMjc5
LDcgQEAgZmxvYXQgQXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1ZXNGb3JUaW1lUmFuZ2VJbXBsKGZs
b2F0IHN0YXJ0VGltZSwKICAgICAgICAgICAgICAgICAgICAgLy8gRXhwb25lbnRpYWwgYXBwcm9h
Y2ggdG8gdGFyZ2V0IHZhbHVlIHdpdGggZ2l2ZW4gdGltZSBjb25zdGFudC4KICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgdGFyZ2V0VmFsdWUgPSBldmVudC52YWx1ZSgpOwogICAgICAgICAgICAg
ICAgICAgICBmbG9hdCB0aW1lQ29uc3RhbnQgPSBldmVudC50aW1lQ29uc3RhbnQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgZGlzY3JldGVUaW1lQ29uc3RhbnQgPSBBdWRpb1V0aWxpdGll
czo6ZGlzY3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKHRpbWVDb25zdGFudCwgY29udHJv
bFJhdGUpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBkaXNjcmV0ZVRpbWVDb25zdGFudCA9
IHN0YXRpY19jYXN0PGZsb2F0PihBdWRpb1V0aWxpdGllczo6ZGlzY3JldGVUaW1lQ29uc3RhbnRG
b3JTYW1wbGVSYXRlKHRpbWVDb25zdGFudCwgY29udHJvbFJhdGUpKTsKIAogICAgICAgICAgICAg
ICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1t3cml0ZUluZGV4XSA9IHZhbHVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>