<?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>77666</bug_id>
          
          <creation_ts>2012-02-02 12:04:26 -0800</creation_ts>
          <short_desc>AudioParam needs tests for the parameter automation routines.</short_desc>
          <delta_ts>2012-03-02 00:01:23 -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>78035</dependson>
          <blocked>76919</blocked>
    
    <blocked>78051</blocked>
    
    <blocked>78386</blocked>
          <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>548040</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-02 12:04:26 -0800</bug_when>
    <thetext>There should be tests to verify the automation routines for AudioParam, including setValueAtTime, linearRampToValueAtTime, exponentialRampToValueAtTime, setTargetValueAtTime, setValueCurveAtTime, and cancelScheduledValues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563380</commentid>
    <comment_count>1</comment_count>
      <attachid>128538</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-23 12:54:39 -0800</bug_when>
    <thetext>Created attachment 128538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563523</commentid>
    <comment_count>2</comment_count>
      <attachid>128538</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-23 15:02:25 -0800</bug_when>
    <thetext>Comment on attachment 128538
Patch

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

Overall is looking good - added some comments:

&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:332
&gt; +                        unsigned curveIndex = static_cast&lt;unsigned&gt;(round(curveVirtualIndex));

I appreciate using common functions in MathExtras such as round(), but this is inside a tight loop that we want as fast as possible so it&apos;s not ideal.  Can we define a tighter inline function for this?

&gt; LayoutTests/webaudio/audioparam-setValueAtTime.html:33
&gt; +// For setValueAtTime(), we don&apos;t need to do anything for automation.

nit: you say &quot;setValueAtTime()&quot;, but the function is called automation()

maybe elaborate a little on this comment, adding that &quot;because the value is set initially by setValue() at the start time, it remains constant for the duration of the interval&quot;

&gt; LayoutTests/webaudio/audioparam-setValueCurveAtTime.html:37
&gt; +// For setValueCurveAtTime, the automation just sets the curve.

how about simplifying the comment like this:

// Sets the curve data for the entire time interval.

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:48
&gt; +// |createConstantBuffer|, but with the parameters to match the other create functions.

I don&apos;t understand this function.  It&apos;s named createConstantArray(), but it returns a JS object of type AudioBuffer and not Array
These are two very different types of objects
can that be right?

Also, you should note that &quot;endValue&quot; is effectively ignored in this function

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:98
&gt; +    return 1 - Math.pow(1 / 2.718282, 1 / (sampleRate * timeConstant));

Can we use Math.E ?

I know we have a hard-coded constant in the .cpp file, but we should at least see if it&apos;s possible here...

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:105
&gt; +function createExponentialApproachArray(startTime, endTime, startValue, endValue, sampleRate, timeConstant)

endValue -&gt; targetValue

&quot;endValue&quot; isn&apos;t a good name because it&apos;s not the true end value of the array, and may not even be anywhere close to it if the timeConstant is very slow

I know this is trying to be consistent with the other similar functions where it is the true &quot;end&quot; value, but in this case we should be clear that it&apos;s just a target</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563548</commentid>
    <comment_count>3</comment_count>
      <attachid>128538</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-23 15:25:30 -0800</bug_when>
    <thetext>Comment on attachment 128538
Patch

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

&gt;&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:332
&gt;&gt; +                        unsigned curveIndex = static_cast&lt;unsigned&gt;(round(curveVirtualIndex));
&gt; 
&gt; I appreciate using common functions in MathExtras such as round(), but this is inside a tight loop that we want as fast as possible so it&apos;s not ideal.  Can we define a tighter inline function for this?

We could do static_cast&lt;unsigned&gt;(0.5 + curveVirtualIndex).  But, as the comments for round() say, this causes loss of precision.  And this will have round-off problems on Windows.  I don&apos;t think any tests currently show this effect though.

I know how to do a fast round-to-even (two floating-point adds, two compares).  Don&apos;t know how well that will work on windows with the x87 registers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563557</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-23 15:31:56 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 128538 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128538&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:332
&gt; &gt;&gt; +                        unsigned curveIndex = static_cast&lt;unsigned&gt;(round(curveVirtualIndex));
&gt; &gt; 
&gt; &gt; I appreciate using common functions in MathExtras such as round(), but this is inside a tight loop that we want as fast as possible so it&apos;s not ideal.  Can we define a tighter inline function for this?
&gt; 
&gt; We could do static_cast&lt;unsigned&gt;(0.5 + curveVirtualIndex).  But, as the comments for round() say, this causes loss of precision.  And this will have round-off problems on Windows.  I don&apos;t think any tests currently show this effect though.
&gt; 
&gt; I know how to do a fast round-to-even (two floating-point adds, two compares).  Don&apos;t know how well that will work on windows with the x87 registers.

I&apos;m not very concerned about small losses of precision here.  Speed is much more important.
So, if at all possible, let&apos;s use static_cast&lt;unsigned&gt;(0.5 + curveVirtualIndex)
and include a comment that we avoid round() in the inner-loop and can accept some small loss of precision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563568</commentid>
    <comment_count>5</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-23 15:42:22 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 128538 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128538&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:332
&gt; &gt; &gt;&gt; +                        unsigned curveIndex = static_cast&lt;unsigned&gt;(round(curveVirtualIndex));
&gt; &gt; &gt; 
&gt; &gt; &gt; I appreciate using common functions in MathExtras such as round(), but this is inside a tight loop that we want as fast as possible so it&apos;s not ideal.  Can we define a tighter inline function for this?
&gt; &gt; 
&gt; &gt; We could do static_cast&lt;unsigned&gt;(0.5 + curveVirtualIndex).  But, as the comments for round() say, this causes loss of precision.  And this will have round-off problems on Windows.  I don&apos;t think any tests currently show this effect though.
&gt; &gt; 
&gt; &gt; I know how to do a fast round-to-even (two floating-point adds, two compares).  Don&apos;t know how well that will work on windows with the x87 registers.
&gt; 
&gt; I&apos;m not very concerned about small losses of precision here.  Speed is much more important.
&gt; So, if at all possible, let&apos;s use static_cast&lt;unsigned&gt;(0.5 + curveVirtualIndex)
&gt; and include a comment that we avoid round() in the inner-loop and can accept some small loss of precision.

Ok, but there may be issues on Windows then.  Curiously, though, this round-off issue was found on linux, not windows, where the setValueCurveAtTime test passes without this rounding fix.  I will need to do a few more tests....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563640</commentid>
    <comment_count>6</comment_count>
      <attachid>128538</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-23 16:19:43 -0800</bug_when>
    <thetext>Comment on attachment 128538
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:332
&gt;&gt;&gt;&gt;&gt; +                        unsigned curveIndex = static_cast&lt;unsigned&gt;(round(curveVirtualIndex));
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I appreciate using common functions in MathExtras such as round(), but this is inside a tight loop that we want as fast as possible so it&apos;s not ideal.  Can we define a tighter inline function for this?
&gt;&gt;&gt; 
&gt;&gt;&gt; We could do static_cast&lt;unsigned&gt;(0.5 + curveVirtualIndex).  But, as the comments for round() say, this causes loss of precision.  And this will have round-off problems on Windows.  I don&apos;t think any tests currently show this effect though.
&gt;&gt;&gt; 
&gt;&gt;&gt; I know how to do a fast round-to-even (two floating-point adds, two compares).  Don&apos;t know how well that will work on windows with the x87 registers.
&gt;&gt; 
&gt;&gt; I&apos;m not very concerned about small losses of precision here.  Speed is much more important.
&gt;&gt; So, if at all possible, let&apos;s use static_cast&lt;unsigned&gt;(0.5 + curveVirtualIndex)
&gt;&gt; and include a comment that we avoid round() in the inner-loop and can accept some small loss of precision.
&gt; 
&gt; Ok, but there may be issues on Windows then.  Curiously, though, this round-off issue was found on linux, not windows, where the setValueCurveAtTime test passes without this rounding fix.  I will need to do a few more tests....

Tested on windows.  No apparent issues.

&gt;&gt; LayoutTests/webaudio/audioparam-setValueAtTime.html:33
&gt;&gt; +// For setValueAtTime(), we don&apos;t need to do anything for automation.
&gt; 
&gt; nit: you say &quot;setValueAtTime()&quot;, but the function is called automation()
&gt; 
&gt; maybe elaborate a little on this comment, adding that &quot;because the value is set initially by setValue() at the start time, it remains constant for the duration of the interval&quot;

Done.

&gt;&gt; LayoutTests/webaudio/audioparam-setValueCurveAtTime.html:37
&gt;&gt; +// For setValueCurveAtTime, the automation just sets the curve.
&gt; 
&gt; how about simplifying the comment like this:
&gt; 
&gt; // Sets the curve data for the entire time interval.

Done.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:48
&gt;&gt; +// |createConstantBuffer|, but with the parameters to match the other create functions.
&gt; 
&gt; I don&apos;t understand this function.  It&apos;s named createConstantArray(), but it returns a JS object of type AudioBuffer and not Array
&gt; These are two very different types of objects
&gt; can that be right?
&gt; 
&gt; Also, you should note that &quot;endValue&quot; is effectively ignored in this function

Oops.  createConstantArray used to have the same body as createConstantBuffer, so I decided to reuse createConstantBuffer, but forgot to return the array instead of the buffer.

Comment added for endValue.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:98
&gt;&gt; +    return 1 - Math.pow(1 / 2.718282, 1 / (sampleRate * timeConstant));
&gt; 
&gt; Can we use Math.E ?
&gt; 
&gt; I know we have a hard-coded constant in the .cpp file, but we should at least see if it&apos;s possible here...

Rewrote to use the (proposed) exp(-1/(sampleRate*timeConstant).

No problems with the tests.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:105
&gt;&gt; +function createExponentialApproachArray(startTime, endTime, startValue, endValue, sampleRate, timeConstant)
&gt; 
&gt; endValue -&gt; targetValue
&gt; 
&gt; &quot;endValue&quot; isn&apos;t a good name because it&apos;s not the true end value of the array, and may not even be anywhere close to it if the timeConstant is very slow
&gt; 
&gt; I know this is trying to be consistent with the other similar functions where it is the true &quot;end&quot; value, but in this case we should be clear that it&apos;s just a target

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563642</commentid>
    <comment_count>7</comment_count>
      <attachid>128591</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-23 16:20:23 -0800</bug_when>
    <thetext>Created attachment 128591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563780</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-23 18:04:26 -0800</bug_when>
    <thetext>&gt; &gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:48
&gt; &gt;&gt; +// |createConstantBuffer|, but with the parameters to match the other create functions.
&gt; &gt; 
&gt; &gt; I don&apos;t understand this function.  It&apos;s named createConstantArray(), but it returns a JS object of type AudioBuffer and not Array
&gt; &gt; These are two very different types of objects
&gt; &gt; can that be right?
&gt; &gt; 
&gt; &gt; Also, you should note that &quot;endValue&quot; is effectively ignored in this function
&gt; 
&gt; Oops.  createConstantArray used to have the same body as createConstantBuffer, so I decided to reuse createConstantBuffer, but forgot to return the array instead of the buffer.

Ok, but then how was the audioparam-setValueAtTime.html layout test actually passing (in your first patch) since you were using that function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564350</commentid>
    <comment_count>9</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-24 08:58:02 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; &gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:48
&gt; &gt; &gt;&gt; +// |createConstantBuffer|, but with the parameters to match the other create functions.
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t understand this function.  It&apos;s named createConstantArray(), but it returns a JS object of type AudioBuffer and not Array
&gt; &gt; &gt; These are two very different types of objects
&gt; &gt; &gt; can that be right?
&gt; &gt; &gt; 
&gt; &gt; &gt; Also, you should note that &quot;endValue&quot; is effectively ignored in this function
&gt; &gt; 
&gt; &gt; Oops.  createConstantArray used to have the same body as createConstantBuffer, so I decided to reuse createConstantBuffer, but forgot to return the array instead of the buffer.
&gt; 
&gt; Ok, but then how was the audioparam-setValueAtTime.html layout test actually passing (in your first patch) since you were using that function?

Good question!  It passes because the expected values are undefined, which javascript converts to NaN, so the computed error in comparePartialSignals is also NaN, which is never greater than maxError, so the tests pass.

I&apos;ve added a check in comparePartialSignals to catch NaN&apos;s in either the rendered data or the reference data.  This also caught an error in setTargetValueAtTime test.

Updated patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564406</commentid>
    <comment_count>10</comment_count>
      <attachid>128752</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-24 10:00:15 -0800</bug_when>
    <thetext>Created attachment 128752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567714</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-29 10:30:22 -0800</bug_when>
    <thetext>Thanks for reminding me.  Have you verified that each of the tests will fail if you introduce a small bug in the code at appropriate points?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567721</commentid>
    <comment_count>12</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 10:41:28 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Thanks for reminding me.  Have you verified that each of the tests will fail if you introduce a small bug in the code at appropriate points?

I did before, but let me check again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567759</commentid>
    <comment_count>13</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 11:15:03 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Thanks for reminding me.  Have you verified that each of the tests will fail if you introduce a small bug in the code at appropriate points?
&gt; 
&gt; I did before, but let me check again.

If small errors are made to the time or to the discrete time constant, then the tests fail.  We already know that canary builds fail on the exponential ramp (bad starting value) and the setValueCurveAtTime (round off error in computing the time values), and these tests fail on a canary build as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567896</commentid>
    <comment_count>14</comment_count>
      <attachid>128752</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-29 13:55:47 -0800</bug_when>
    <thetext>Comment on attachment 128752
Patch

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

&gt; Source/WebCore/ChangeLog:6
&gt; +        Add tests the AudioParam automation functions.

nit: Add tests &quot;to&quot; the AudioParam...

Actually, this additional comment is probably not even necessary given the title (line 3)

&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:332
&gt; +                        // Ideally use round() from MathExtras, but we&apos;re in a tight loop here and

&quot;Ideally use&quot; -&gt; &quot;Ideally we&apos;d&quot;

&gt; LayoutTests/webaudio/audioparam-linearRampToValueAtTime.html:39
&gt; +    // above.

seems unnecessary to wrap the line for a single word.

&gt; LayoutTests/webaudio/audioparam-setTargetValueAtTime.html:56
&gt; +                            discontinuityThreshold,

I see that discontinuityThreshold is defined in audioparam-testing.js but is not initialized to any value?

Could you please look into why this test was passing/failing as expected even though this seems to be uninitialized (at least in my naive reading of the code).

&gt; LayoutTests/webaudio/audioparam-setValueCurveAtTime.html:29
&gt; +var sineAmplitude = 100;

This is a pretty enormous amplitude +40dB gain to scale the signal by.  Can&apos;t we choose a value more in-tune with real-world usage?

&gt; LayoutTests/webaudio/audioparam-setValueCurveAtTime.html:40
&gt; +    // For a value curve, we ignore the |value| and |endTime|.

Does it make sense to compute the &quot;duration&quot; (3rd param) as (endTime - startTime) instead of using the global &quot;timeInterval&quot;?

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:4
&gt; +// interval.

nit: unneeded line wrapping for a single word.

maybe could be simplified to make this easier to read: &quot;starting and ending&quot; -&gt; &quot;starting/ending&quot;

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:29
&gt; +function renderLength(tests)

tests -&gt; numberOfTests

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:69
&gt; +    var buffer = new Array(length);

why is this called &quot;buffer&quot; when it is not type AudioBuffer, but is Array?

buffer -&gt; array : here and in rest of function

Also, is there any reason we&apos;re not using Float32Array here?

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:113
&gt; +    var buffer = new Array(length);

buffer -&gt; array : here and in rest of function

Array -&gt; Float32Array?

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:176
&gt; +            maxError = 1e300;

1e300 seems a little dramatic and hard to read - can we use a simpler large value?

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:178
&gt; +            testFailed(&quot;Invalid number for rendered data at &quot; + maxErrorIndex);

Instead of &quot;Invalid&quot; can we say NaN or Inf --- Invalid is a bit vague

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:184
&gt; +            testFailed(&quot;Invalid number for reference data at &quot; + maxErrorIndex);

ditto

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:216
&gt; +    if (breaks.length &gt;= numberOfTests) {

please add simple comment explaining why we subtract one

&gt; LayoutTests/webaudio/resources/audioparam-testing.js:239
&gt; +        if (breaks.length + 1 == numberOfTests) {

It&apos;s hard to follow the voodoo with adding 1 and subtracing 1 in various parts of this function --- can this be made more clear for those poor souls trying to understand the test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567966</commentid>
    <comment_count>15</comment_count>
      <attachid>128752</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 14:43:47 -0800</bug_when>
    <thetext>Comment on attachment 128752
Patch

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

&gt;&gt; LayoutTests/webaudio/audioparam-setTargetValueAtTime.html:56
&gt;&gt; +                            discontinuityThreshold,
&gt; 
&gt; I see that discontinuityThreshold is defined in audioparam-testing.js but is not initialized to any value?
&gt; 
&gt; Could you please look into why this test was passing/failing as expected even though this seems to be uninitialized (at least in my naive reading of the code).

discontinuityThreshold and timeConstant are optional parameters.  For this test, we don&apos;t need the threshold (the default that is computed in createAudioGraphAndTest works), but we need the time constant.

The other tests don&apos;t need a time constant and set the threshold as needed.

I will rework this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567996</commentid>
    <comment_count>16</comment_count>
      <attachid>129532</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 15:21:50 -0800</bug_when>
    <thetext>Created attachment 129532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567997</commentid>
    <comment_count>17</comment_count>
      <attachid>128752</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-29 15:22:17 -0800</bug_when>
    <thetext>Comment on attachment 128752
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:6
&gt;&gt; +        Add tests the AudioParam automation functions.
&gt; 
&gt; nit: Add tests &quot;to&quot; the AudioParam...
&gt; 
&gt; Actually, this additional comment is probably not even necessary given the title (line 3)

Removed.

&gt;&gt; Source/WebCore/webaudio/AudioParamTimeline.cpp:332
&gt;&gt; +                        // Ideally use round() from MathExtras, but we&apos;re in a tight loop here and
&gt; 
&gt; &quot;Ideally use&quot; -&gt; &quot;Ideally we&apos;d&quot;

Done.

&gt;&gt; LayoutTests/webaudio/audioparam-linearRampToValueAtTime.html:39
&gt;&gt; +    // above.
&gt; 
&gt; seems unnecessary to wrap the line for a single word.

Done.

&gt;&gt;&gt; LayoutTests/webaudio/audioparam-setTargetValueAtTime.html:56
&gt;&gt;&gt; +                            discontinuityThreshold,
&gt;&gt; 
&gt;&gt; I see that discontinuityThreshold is defined in audioparam-testing.js but is not initialized to any value?
&gt;&gt; 
&gt;&gt; Could you please look into why this test was passing/failing as expected even though this seems to be uninitialized (at least in my naive reading of the code).
&gt; 
&gt; discontinuityThreshold and timeConstant are optional parameters.  For this test, we don&apos;t need the threshold (the default that is computed in createAudioGraphAndTest works), but we need the time constant.
&gt; 
&gt; The other tests don&apos;t need a time constant and set the threshold as needed.
&gt; 
&gt; I will rework this.

Reworked.  I hope it&apos;s clearer now.

&gt;&gt; LayoutTests/webaudio/audioparam-setValueCurveAtTime.html:29
&gt;&gt; +var sineAmplitude = 100;
&gt; 
&gt; This is a pretty enormous amplitude +40dB gain to scale the signal by.  Can&apos;t we choose a value more in-tune with real-world usage?

Changed to 1.

&gt;&gt; LayoutTests/webaudio/audioparam-setValueCurveAtTime.html:40
&gt;&gt; +    // For a value curve, we ignore the |value| and |endTime|.
&gt; 
&gt; Does it make sense to compute the &quot;duration&quot; (3rd param) as (endTime - startTime) instead of using the global &quot;timeInterval&quot;?

Done.  Should be ok.  Any roundoff in the computation should not matter since it should be way below the sample frame interval.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:4
&gt;&gt; +// interval.
&gt; 
&gt; nit: unneeded line wrapping for a single word.
&gt; 
&gt; maybe could be simplified to make this easier to read: &quot;starting and ending&quot; -&gt; &quot;starting/ending&quot;

Done.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:29
&gt;&gt; +function renderLength(tests)
&gt; 
&gt; tests -&gt; numberOfTests

Done.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:69
&gt;&gt; +    var buffer = new Array(length);
&gt; 
&gt; why is this called &quot;buffer&quot; when it is not type AudioBuffer, but is Array?
&gt; 
&gt; buffer -&gt; array : here and in rest of function
&gt; 
&gt; Also, is there any reason we&apos;re not using Float32Array here?

Changed to array everywhere.

I think it&apos;s nice to have the reference have as much accuracy as possible, even if the rendered data only has float precision.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:113
&gt;&gt; +    var buffer = new Array(length);
&gt; 
&gt; buffer -&gt; array : here and in rest of function
&gt; 
&gt; Array -&gt; Float32Array?

Done.  See above comment for line 69.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:176
&gt;&gt; +            maxError = 1e300;
&gt; 
&gt; 1e300 seems a little dramatic and hard to read - can we use a simpler large value?

Changed to use javascript Infinity.  That should compare as we expect it to.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:178
&gt;&gt; +            testFailed(&quot;Invalid number for rendered data at &quot; + maxErrorIndex);
&gt; 
&gt; Instead of &quot;Invalid&quot; can we say NaN or Inf --- Invalid is a bit vague

Done.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:184
&gt;&gt; +            testFailed(&quot;Invalid number for reference data at &quot; + maxErrorIndex);
&gt; 
&gt; ditto

Done.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:216
&gt;&gt; +    if (breaks.length &gt;= numberOfTests) {
&gt; 
&gt; please add simple comment explaining why we subtract one

Comment added.  I hope it makes it clearer why we do this here and in the following code.

&gt;&gt; LayoutTests/webaudio/resources/audioparam-testing.js:239
&gt;&gt; +        if (breaks.length + 1 == numberOfTests) {
&gt; 
&gt; It&apos;s hard to follow the voodoo with adding 1 and subtracing 1 in various parts of this function --- can this be made more clear for those poor souls trying to understand the test?

Code cleaned up a little and I hope the comment added near line 216 makes it clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568016</commentid>
    <comment_count>18</comment_count>
      <attachid>129532</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-29 15:37:34 -0800</bug_when>
    <thetext>Comment on attachment 129532
Patch

Looks good - thanks for the tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568212</commentid>
    <comment_count>19</comment_count>
      <attachid>129532</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-29 18:43:50 -0800</bug_when>
    <thetext>Comment on attachment 129532
Patch

Rejecting attachment 129532 from review queue.

crogers@google.com does not have reviewer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

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

- If you have reviewer 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 reviewer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568812</commentid>
    <comment_count>20</comment_count>
      <attachid>129532</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-01 12:15:58 -0800</bug_when>
    <thetext>Comment on attachment 129532
Patch

Re-trying commit queue - committers.py seems fine...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568875</commentid>
    <comment_count>21</comment_count>
      <attachid>129532</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 13:49:04 -0800</bug_when>
    <thetext>Comment on attachment 129532
Patch

Rejecting attachment 129532 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: 2

Last 500 characters of output:
e conflict in Source/WebKit2/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 [DRT] Remove all PlainTextController usages in existing tests by adding internal API

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.

Full output: http://queues.webkit.org/results/11757592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568899</commentid>
    <comment_count>22</comment_count>
      <attachid>129742</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-01 14:06:54 -0800</bug_when>
    <thetext>Created attachment 129742
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568900</commentid>
    <comment_count>23</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-03-01 14:08:03 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Created an attachment (id=129742) [details]
&gt; Patch

Updated patch against current sources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568904</commentid>
    <comment_count>24</comment_count>
      <attachid>129742</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-01 14:18:37 -0800</bug_when>
    <thetext>Comment on attachment 129742
Patch

trying commit queue again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569340</commentid>
    <comment_count>25</comment_count>
      <attachid>129742</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-02 00:01:17 -0800</bug_when>
    <thetext>Comment on attachment 129742
Patch

Clearing flags on attachment: 129742

Committed r109518: &lt;http://trac.webkit.org/changeset/109518&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569343</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-02 00:01:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128538</attachid>
            <date>2012-02-23 12:54:39 -0800</date>
            <delta_ts>2012-02-23 16:20:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77666-20120223125438.patch</filename>
            <type>text/plain</type>
            <size>37632</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTdkNDY4ZDQyODkxMzc5
YjNlNjA3MTU2N2ViMzNhNmYwZTY4ZWM1ZS4uZjRmOGMyOTllYzZhODlkOWJiZmY4ZmM0MzNkYTNh
NDA2OGFlZTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAyLTIzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBdWRpb1BhcmFtIG5lZWRzIHRl
c3RzIGZvciB0aGUgcGFyYW1ldGVyIGF1dG9tYXRpb24gcm91dGluZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzY2NgorCisgICAgICAgIEFkZCB0
ZXN0cyB0aGUgQXVkaW9QYXJhbSBhdXRvbWF0aW9uIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRp
by9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKKyAgICAgICAgICAgICAg
IHdlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFsdWVBdFRpbWUuaHRtbAorICAgICAgICAg
ICAgICAgd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS5odG1sCisgICAgICAgICAg
ICAgICB3ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUuaHRtbAorCisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlSW1wbCk6IFJvdW5kIHRoZQor
ICAgICAgICBjdXJ2ZUluZGV4IHRvIGZpeCB0aW1pbmcgaXNzdWUgaW4gc2V0VmFsdWVDdXJ2ZUF0
VGltZS4KKwogMjAxMi0wMi0yMiAgSWdvciBPbGl2ZWlyYSAgPGlnb3Iub0BzaXNhLnNhbXN1bmcu
Y29tPgogCiAgICAgICAgIEV2ZXJ5IGNhbGwgdG8gUmVuZGVyT2JqZWN0OjpzZXRBbmltYXRhYmxl
U3R5bGUoKSBpdGVyYXRlcyB0aHJvdWdoIGFsbCBtX2NvbXBvc2l0ZUFuaW1hdGlvbnM6IHBvdGVu
dGlhbGx5IE8oTl4yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YXJhbVRpbWVsaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1l
bGluZS5jcHAKaW5kZXggY2Q4ZjUzNjc2MmE0Y2UwYzAzMDM1MzM5NjkxOGZkNjFjNWI1YzQyNC4u
MmI2MDBmYTdiOWQ5NWI2NTBiNDI1ODljM2NiOGU5MzEyYWI3ZTAyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCkBAIC0zMjksNyArMzI5LDgg
QEAgZmxvYXQgQXVkaW9QYXJhbVRpbWVsaW5lOjp2YWx1ZXNGb3JUaW1lUmFuZ2VJbXBsKGZsb2F0
IHN0YXJ0VGltZSwKICAgICAgICAgICAgICAgICAgICAgLy8gUmVuZGVyIHRoZSBzdHJldGNoZWQg
Y3VydmUgZGF0YSB1c2luZyBuZWFyZXN0IG5laWdoYm9yIHNhbXBsaW5nLgogICAgICAgICAgICAg
ICAgICAgICAvLyBPdmVyc2FtcGxlZCBjdXJ2ZSBkYXRhIGNhbiBiZSBwcm92aWRlZCBpZiBzbW9v
dGhuZXNzIGlzIGRlc2lyZWQuCiAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB3cml0ZUluZGV4
IDwgZmlsbFRvRnJhbWU7ICsrd3JpdGVJbmRleCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY3VydmVJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjdXJ2ZVZpcnR1YWxJ
bmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjdXJ2ZUluZGV4ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJvdW5kKGN1cnZlVmlydHVhbEluZGV4KSk7CisKICAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnZlVmlydHVhbEluZGV4ICs9IGN1cnZlUG9pbnRzUGVyRnJhbWU7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdW5kcyBjaGVjay4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlN2Mw
NWE2NDkyOGRiNmJkNzJkNWY0YzgyYjEwNmQxYWY0ZDk1MGZiLi44ZDZhYjQ0YTBjNTFhMjUwYTEw
MzliYzIxMGE1M2FjNTMxNmI1Mjk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTItMDItMjMg
IFJheW1vbmQgVG95ICA8cnRveUBnb29nbGUuY29tPgorCisgICAgICAgIEF1ZGlvUGFyYW0gbmVl
ZHMgdGVzdHMgZm9yIHRoZSBwYXJhbWV0ZXIgYXV0b21hdGlvbiByb3V0aW5lcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NjY2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb3Bh
cmFtLWV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuaHRtbDoKKyAgICAgICAgKiB3ZWJhdWRp
by9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVl
QXRUaW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJh
bS1zZXRUYXJnZXRWYWx1ZUF0VGltZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9h
dWRpb3BhcmFtLXNldFZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
d2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUu
aHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVz
dGluZy5qczoKKyAgICAgICAgKHJlbmRlckxlbmd0aCk6CisgICAgICAgIChjcmVhdGVDb25zdGFu
dEFycmF5KToKKyAgICAgICAgKGNyZWF0ZUxpbmVhclJhbXBBcnJheSk6CisgICAgICAgIChkaXNj
cmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUpOgorICAgICAgICAoY3JlYXRlRXhwb25lbnRp
YWxBcHByb2FjaEFycmF5KToKKyAgICAgICAgKGNyZWF0ZVNpbmVXYXZlQXJyYXkpOgorICAgICAg
ICAoZW5kVmFsdWVEZWx0YSk6CisgICAgICAgICh2YWx1ZVVwZGF0ZSk6CisgICAgICAgIChjb21w
YXJlUGFydGlhbFNpZ25hbHMpOgorICAgICAgICAodmVyaWZ5RGlzY29udGludWl0aWVzKToKKyAg
ICAgICAgKGNvbXBhcmVTaWduYWxzKToKKyAgICAgICAgKGNoZWNrUmVzdWx0RnVuY3Rpb24ucmV0
dXJuLnZhcik6CisgICAgICAgIChjaGVja1Jlc3VsdEZ1bmN0aW9uKToKKyAgICAgICAgKGRvQXV0
b21hdGlvbik6CisgICAgICAgIChjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdCk6CisKIDIwMTItMDIt
MjMgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtD
aHJvbWl1bV0gVW5yZXZpZXdlZCB0ZXN0IGV4cGVjdGF0aW9ucyB1cGRhdGUgZm9yIGZhc3QvY3Nz
L2ZvbnQtZmFjZS1kZWZhdWx0LWZvbnQuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vYXVkaW9wYXJhbS1leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUu
aHRtbAppbmRleCAzZTYyZjg0MjM2NjE4YjQxMWRhMjUzNzk1ZmFjOTlhOTRkOTcwZGQ1Li4wMmUx
NzAyN2I2OGM5ZDI3ZGRmMDYyM2ZlYTc3NWY5ZWNmYWRmYzhmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWV4cG9uZW50aWFsUmFtcFRv
VmFsdWVBdFRpbWUuaHRtbApAQCAtMjAsNDUgKzIwLDE1IEBACiAgICAgICAvLyBkaXNjb250aW51
aXR5IGlzIGZvciB0ZXN0aW5nIHRpbWluZy4gIEFsc28sIHdlIGFsdGVybmF0ZSBiZXR3ZWVuIGFu
IGluY3JlYXNpbmcgYW5kCiAgICAgICAvLyBkZWNyZWFzaW5nIHJhbXAgZm9yIGVhY2ggaW50ZXJ2
YWwuCiAKKyAgICAgIC8vIE51bWJlciBvZiB0ZXN0cyB0byBydW4uCisgICAgICB2YXIgbnVtYmVy
T2ZUZXN0cyA9IDEwMDsKKwogICAgICAgLy8gTWF4IGFsbG93ZWQgZGlmZmVyZW5jZSBiZXR3ZWVu
IHRoZSByZW5kZXJlZCBkYXRhIGFuZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgogICAgICAgdmFyIG1h
eEFsbG93ZWRFcnJvciA9IDYuNzVlLTQ7CiAKLSAgICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHRo
ZSBzdGFydGluZyBhbmQgZW5kaW5nIHRpbWVzIGFuZCBzdGFydGluZyBhbmQgZW5kaW5nIHZhbHVl
cyBmb3IgZWFjaAotICAgICAgLy8gdGltZSBpbnRlcnZhbC4KLSAgICAgIHZhciB0aW1lVmFsdWVJ
bmZvOwotCiAgICAgICAvLyBUaGUgQXVkaW9HYWluTm9kZSBzdGFydHMgd2l0aCB0aGlzIHZhbHVl
IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgdmFsdWUuCiAgICAgICB2YXIgaW5pdGlhbFZhbHVlID0g
MTAwOwogCi0gICAgICAvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YXJ0aW5nIHZhbHVlcyBi
ZXR3ZWVuIGVhY2ggdGltZSBpbnRlcnZhbC4KLSAgICAgIHZhciBzdGFydGluZ1ZhbHVlRGVsdGEg
PSBpbml0aWFsVmFsdWUgLyBudW1iZXJPZlRlc3RzOwotICAgICAgCi0gICAgICAvLyBFYWNoIGV4
cG9uZW50aWFsIHJhbXAgd2lsbCBpbmNyZWFzZSBvciBkZWNyZWFzZSBieSB0aGlzIG11Y2ggZnJv
bSB0aGUgc3RhcnQgdG8gdGhlIGVuZCBvZgotICAgICAgLy8gdGhlIHRpbWUgaW50ZXJ2YWwuICBX
ZSBjaG9vc2UgaGFsZiBvZiBzdGFydGluZ1ZhbHVlRGVsdGEgc28gdGhhdCB0aGUgZW5kaW5nIHZh
bHVlIG9mIHRoZQotICAgICAgLy8gcmFtcCB3aWxsIGJlIGRpc3RpbmN0IGZyb20gdGhlIHN0YXJ0
aW5nIHZhbHVlIG9mIHRoZSByYW1wIGZvciBuZXh0IHRpbWUgaW50ZXJ2YWwuICBUaGlzCi0gICAg
ICAvLyBhbGxvd3MgdXMgdG8gZGV0ZWN0IHdoZXJlIHRoZSByYW1wIGJlZ2lucyBhbmQgZW5kcy4K
LSAgICAgIHZhciBzdGFydEVuZFZhbHVlQ2hhbmdlID0gc3RhcnRpbmdWYWx1ZURlbHRhIC8gMjsK
LQotICAgICAgLy8gVGhyZXNob2xkIHRvIHVzZSBmb3IgZGV0ZWN0aW5nIGRpc2NvbnRpbnVpdGll
cyB0aGF0IHNob3VsZCBhcHBlYXIgYXQgZWFjaCB0aW1lIGludGVydmFsLgotICAgICAgdmFyIGRp
c2NvbnRpbnVpdHlUaHJlc2hvbGQgPSBzdGFydEVuZFZhbHVlQ2hhbmdlIC8gMjsKLQotICAgICAg
dmFyIGdhaW5Ob2RlOwotICAgICAgCi0gICAgICB2YXIgY29uc3RhbnRCdWZmZXI7Ci0gICAgICB2
YXIgYnVmZmVyU291cmNlOwotCi0gICAgICAvLyBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biB0aGUgc3RhcnRpbmcgdmFsdWUgYW5kIHRoZSBlbmRpbmcgdmFsdWUgZm9yIHRpbWUgaW50ZXJ2
YWwKLSAgICAgIC8vIHx0aW1lSW50ZXJ2YWxJbmRleHwuICBXZSBhbHRlcm5hdGUgYmV0d2VlbiBh
biBlbmQgdmFsdWUgdGhhdCBpcyBhYm92ZSBvciBiZWxvdyB0aGUgc3RhcnRpbmcKLSAgICAgIC8v
IHZhbHVlLgotICAgICAgZnVuY3Rpb24gZW5kVmFsdWVEZWx0YSh0aW1lSW50ZXJ2YWxJbmRleCkK
LSAgICAgIHsKLSAgICAgICAgICBpZiAodGltZUludGVydmFsSW5kZXggJiAxKSB7Ci0gICAgICAg
ICAgICAgIHJldHVybiAtc3RhcnRFbmRWYWx1ZUNoYW5nZTsKLSAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICByZXR1cm4gc3RhcnRFbmRWYWx1ZUNoYW5nZTsKLSAgICAgICAgICB9Ci0g
ICAgICB9Ci0KICAgICAgIC8vIFNldCB0aGUgZ2FpbiBub2RlIHZhbHVlIHRvIHRoZSBzcGVjaWZp
ZWQgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCB0aW1lLgogICAgICAgZnVuY3Rpb24gc2V0VmFsdWUo
dmFsdWUsIHRpbWUpCiAgICAgICB7CkBAIC03Myw2NSArNDMsMTYgQEAKICAgICAgICAgICBnYWlu
Tm9kZS5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIGVuZFRpbWUpCiAg
ICAgICB9CiAgICAgICAKLSAgICAgIC8vIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRo
ZSBzdGFydGluZyB2YWx1ZSBhdCB8dGltZUludGVydmFsSW5kZXh8IGFuZCB0aGUgc3RhcnRpbmcK
LSAgICAgIC8vIHZhbHVlIGF0IHRoZSBuZXh0IHRpbWUgaW50ZXJ2YWwuICBTaW5jZSB3ZSBzdGFy
dGVkIGF0IGEgbGFyZ2UgaW5pdGlhbCB2YWx1ZSwgd2UgZGVjcmVhc2UKLSAgICAgIC8vIHRoZSB2
YWx1ZSBhdCBlYWNoIHRpbWUgaW50ZXJ2YWwuCi0gICAgICBmdW5jdGlvbiB2YWx1ZVVwZGF0ZSh0
aW1lSW50ZXJ2YWxJbmRleCkKLSAgICAgIHsKLSAgICAgICAgICByZXR1cm4gLXN0YXJ0aW5nVmFs
dWVEZWx0YTsKLSAgICAgIH0KLQotICAgICAgZnVuY3Rpb24gY2hlY2tSZXN1bHQoZXZlbnQpCi0g
ICAgICB7Ci0gICAgICAgICAgdmFyIGJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOwotICAg
ICAgICAgIHJlbmRlcmVkRGF0YSA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKLQotICAgICAg
ICAgIGNvbXBhcmVTaWduYWxzKCJleHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKCkiLCBtYXhB
bGxvd2VkRXJyb3IsIHJlbmRlcmVkRGF0YSwgY3JlYXRlRXhwb25lbnRpYWxSYW1wQXJyYXksIHRp
bWVWYWx1ZUluZm8sIGRpc2NvbnRpbnVpdHlUaHJlc2hvbGQpOwotCi0gICAgICAgICAgZmluaXNo
SlNUZXN0KCk7Ci0gICAgICB9Ci0gICAgICAKICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQogICAg
ICAgewotICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAgICAgfQotCi0g
ICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAgIGNyZWF0ZUF1
ZGlvR3JhcGhBbmRUZXN0KG51bWJlck9mVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5pdGlhbFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlUmFt
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwb25lbnRpYWxSYW1wVG9W
YWx1ZUF0VGltZSgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhBbGxv
d2VkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRXhwb25l
bnRpYWxSYW1wQXJyYXkpOwogCi0gICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29u
dGV4dC4KLSAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCByZW5k
ZXJMZW5ndGgsIHNhbXBsZVJhdGUpOwotICAgICAgICAgIGNvbnN0YW50QnVmZmVyID0gY3JlYXRl
Q29uc3RhbnRCdWZmZXIoY29udGV4dCwgMSwgcmVuZGVyTGVuZ3RoKTsKLQotICAgICAgICAgIC8v
IFdlIHVzZSBhbiBBdWRpb0dhaW5Ob2RlIGhlcmUgc2ltcGx5IGFzIGEgY29udmVuaWVudCB3YXkg
dG8gdGVzdCB0aGUgQXVkaW9QYXJhbQotICAgICAgICAgIC8vIGF1dG9tYXRpb24sIHNpbmNlIGl0
J3MgZWFzeSB0byBwYXNzIGEgY29uc3RhbnQgdmFsdWUgdGhyb3VnaCB0aGUgbm9kZSwgYXV0b21h
dGUgdGhlCi0gICAgICAgICAgLy8gLmdhaW4gYXR0cmlidXRlIGFuZCBvYnNlcnZlIHRoZSByZXN1
bHRpbmcgdmFsdWVzLgotCi0gICAgICAgICAgZ2Fpbk5vZGUgPSBjb250ZXh0LmNyZWF0ZUdhaW5O
b2RlKCk7Ci0KLSAgICAgICAgICBidWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNv
dXJjZSgpOwotICAgICAgICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgPSBjb25zdGFudEJ1ZmZlcjsK
LSAgICAgICAgICBidWZmZXJTb3VyY2UuY29ubmVjdChnYWluTm9kZSk7Ci0gICAgICAgICAgZ2Fp
bk5vZGUuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKLQotICAgICAgICAgIC8vIEF0IGVh
Y2ggdGltZSBpbnRlcnZhbCwgd2UgYWRqdXN0IHRoZSB2YWx1ZSBieSBzdGFydGluZ1ZhbHVlRGVs
dGEuICBIb3dldmVyLCB0aGUKLSAgICAgICAgICAvLyBleHBvbmVudGlhbCByYW1wIGVuZCB2YWx1
ZSBpcyB0aGUgdmFsdWUgKy8tIHN0YXJ0RW5kVmFsdWVDaGFuZ2UuICAoV2UgYWx0ZXJuYXRlbHkK
LSAgICAgICAgICAvLyBzcGVjaWZ5IHRoZSBlbmQgdmFsdWUgdG8gYmUgZ3JlYXRlciBvciBzbWFs
bGVyIHRoYW4gdGhlIHN0YXJ0aW5nIHZhbHVlLCB0byB0ZXN0IHRoZQotICAgICAgICAgIC8vIHJh
bXAgZ29pbmcgdXAgYW5kIGRvd24uKQotICAgICAgICAgIC8vCi0gICAgICAgICAgLy8gQnkgZG9p
bmcgaXQgdGhpcyB3YXksIHdlIGdldCBhIGRpc2NvbnRpbnVpdHkgYXQgZWFjaCB0aW1lIGludGVy
dmFsIHdoaWNoIHdlIGNhbiB1c2UgdG8KLSAgICAgICAgICAvLyB0ZXN0IGlmIHRoZSByYW1wIHN0
YXJ0ZWQgYW5kIGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUuCi0gICAgICAgICAgdGltZVZhbHVl
SW5mbyA9IGRvQXV0b21hdGlvbihpbml0aWFsVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbmRWYWx1ZURlbHRhLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnZW5lcmF0ZVJhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZVVwZGF0ZSk7Ci0KLSAgICAgICAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOwot
ICAgICAgCi0gICAgICAgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tSZXN1bHQ7Ci0gICAg
ICAgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOwogICAgICAgfQogCiAgICAgICBydW5UZXN0
KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxpbmVhclJh
bXBUb1ZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlv
cGFyYW0tbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1
YWI1N2E2NTdiZjhiMTkxYjJhNzcxZjlkMzNmNjk1OWRlZmNhMTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1l
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0IEF1ZGlvUGFyYW0gbGluZWFyUmFt
cFRvVmFsdWVBdFRpbWUoKSBmdW5jdGlvbmFsaXR5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKK1BBU1MgQWxsIDEwMCB0ZXN0cyBzdGFydGVkIGFuZCBlbmRlZCBhdCB0aGUgY29ycmVj
dCB0aW1lLgorUEFTUyBBbGwgMTAwIHRlc3RzIHBhc3NlZCB3aXRoaW4gYW4gYWNjZXB0YWJsZSB0
b2xlcmFuY2UuCitQQVNTIEF1ZGlvUGFyYW0gbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoKSB0ZXN0
IHBhc3NlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxpbmVhclJh
bXBUb1ZhbHVlQXRUaW1lLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxp
bmVhclJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQxZjhkNzdiZjRlNjM4MzU0
ZWRmYmI4MzBjOWIzN2IwMzk3MzUwYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2F1ZGlvcGFyYW0tbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUuaHRtbApAQCAtMCwwICsx
LDYxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFu
c2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1
ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpb3Bh
cmFtLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlk
PSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlw
dD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEF1ZGlvUGFyYW0gbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUo
KSBmdW5jdGlvbmFsaXR5LiIpOworCisvLyBQbGF5IGEgbG9uZyBEQyBzaWduYWwgb3V0IHRocm91
Z2ggYW4gQXVkaW9HYWluTm9kZSwgYW5kIGNhbGwgc2V0VmFsdWVBdFRpbWUoKSBhbmQKKy8vIGxp
bmVhclJhbXBUb1ZhbHVlQXRUaW1lKCkgYXQgcmVndWxhciBpbnRlcnZhbHMgdG8gc2V0IHRoZSBz
dGFydGluZyBhbmQgZW5kaW5nIHZhbHVlcyBmb3IgYQorLy8gbGluZWFyIHJhbXAuIEVhY2ggdGlt
ZSBpbnRlcnZhbCBoYXMgYSByYW1wIHdpdGggYSBkaWZmZXJlbnQgc3RhcnRpbmcgYW5kIGVuZGlu
ZyB2YWx1ZSBzbworLy8gdGhhdCB0aGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkgYXQgZWFjaCB0aW1l
IGludGVydmFsIGJvdW5kYXJ5LiAgVGhlIGRpc2NvbnRpbnVpdHkgaXMgZm9yCisvLyB0ZXN0aW5n
IHRpbWluZy4gIEFsc28sIHdlIGFsdGVybmF0ZSBiZXR3ZWVuIGFuIGluY3JlYXNpbmcgYW5kIGRl
Y3JlYXNpbmcgcmFtcCBmb3IgZWFjaAorLy8gaW50ZXJ2YWwuCisKKy8vIE51bWJlciBvZiB0ZXN0
cyB0byBydW4uCit2YXIgbnVtYmVyT2ZUZXN0cyA9IDEwMDsKKworLy8gTWF4IGFsbG93ZWQgZGlm
ZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW5kZXJlZCBkYXRhIGFuZCB0aGUgZXhwZWN0ZWQgcmVzdWx0
LgordmFyIG1heEFsbG93ZWRFcnJvciA9IDYuNWUtNzsKKworLy8gU2V0IHRoZSBnYWluIG5vZGUg
dmFsdWUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuCitmdW5j
dGlvbiBzZXRWYWx1ZSh2YWx1ZSwgdGltZSkKK3sKKyAgICBnYWluTm9kZS5nYWluLnNldFZhbHVl
QXRUaW1lKHZhbHVlLCB0aW1lKTsKK30KKworLy8gR2VuZXJhdGUgYSBsaW5lYXIgcmFtcCBlbmRp
bmcgYXQgdGltZSB8ZW5kVGltZXwgd2l0aCBhbiBlbmRpbmcgdmFsdWUgb2YgfHZhbHVlfC4KK2Z1
bmN0aW9uIGdlbmVyYXRlUmFtcCh2YWx1ZSwgc3RhcnRUaW1lLCBlbmRUaW1lKQoreworICAgIC8v
IHxzdGFydFRpbWV8IGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgbGluZWFyIHJhbXAgdXNlcyB0aGUg
dmFsdWUgZnJvbSB0aGUgc2V0VmFsdWVBdFRpbWUoKSBjYWxsCisgICAgLy8gYWJvdmUuCisgICAg
Z2Fpbk5vZGUuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSkKK30K
KworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgY3JlYXRlQXVkaW9HcmFwaEFuZFRlc3QobnVt
YmVyT2ZUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRlUmFtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZWFyUmFtcFRvVmFs
dWVBdFRpbWUoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4QWxsb3dlZEVycm9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUxpbmVhclJhbXBBcnJheSk7Cit9
CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgIAorPC9zY3JpcHQ+
CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYXVkaW9wYXJhbS1zZXRUYXJnZXRWYWx1ZUF0VGltZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jYzZkMmEwZjFjYjUxOGI3NzNiNmIwYWVlOTA0MTRiOTBhODJlY2Q0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRUYXJn
ZXRWYWx1ZUF0VGltZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGVzdCBBdWRpb1Bh
cmFtIHNldFRhcmdldFZhbHVlQXRUaW1lKCkgZnVuY3Rpb25hbGl0eS4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCitQQVNTIEFsbCAxMDAgdGVzdHMgc3RhcnRlZCBhbmQgZW5kZWQgYXQg
dGhlIGNvcnJlY3QgdGltZS4KK1BBU1MgQWxsIDEwMCB0ZXN0cyBwYXNzZWQgd2l0aGluIGFuIGFj
Y2VwdGFibGUgdG9sZXJhbmNlLgorUEFTUyBBdWRpb1BhcmFtIHNldFRhcmdldFZhbHVlQXRUaW1l
KCkgdGVzdCBwYXNzZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1z
ZXRUYXJnZXRWYWx1ZUF0VGltZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJh
bS1zZXRUYXJnZXRWYWx1ZUF0VGltZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwZTQ1ZDBkYTI1YjdlMWY1
YTE4ODNkMWRiYzY3NzYwNmI5NjM2NWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLmh0bWwKQEAgLTAsMCArMSw2
NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNp
dGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRp
by10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW9wYXJh
bS10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0i
ZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGVzdCBBdWRpb1BhcmFtIHNldFRhcmdldFZhbHVlQXRUaW1lKCkgZnVu
Y3Rpb25hbGl0eS4iKTsKKworLy8gUGxheSBhIGxvbmcgREMgc2lnbmFsIG91dCB0aHJvdWdoIGFu
IEF1ZGlvR2Fpbk5vZGUsIGFuZCBjYWxsIHNldFZhbHVlQXRUaW1lKCkgYW5kCisvLyBzZXRUYXJn
ZXRWYWx1ZUF0VGltZSBhdCByZWd1bGFyIGludGVydmFscyB0byBzZXQgdGhlIHN0YXJ0aW5nIHZh
bHVlIGFuZCB0aGUgdGFyZ2V0CisvLyB2YWx1ZS4gRWFjaCB0aW1lIGludGVydmFsIGhhcyBhIHJh
bXAgd2l0aCBhIGRpZmZlcmVudCBzdGFydGluZyBhbmQgdGFyZ2V0IHZhbHVlIHNvIHRoYXQKKy8v
IHRoZXJlIGlzIGEgZGlzY29udGludWl0eSBhdCBlYWNoIHRpbWUgaW50ZXJ2YWwgYm91bmRhcnku
ICBUaGUgZGlzY29udGludWl0eSBpcyBmb3IgdGVzdGluZworLy8gdGltaW5nLiAgQWxzbywgd2Ug
YWx0ZXJuYXRlIGJldHdlZW4gYW4gaW5jcmVhc2luZyBhbmQgZGVjcmVhc2luZyByYW1wIGZvciBl
YWNoIGludGVydmFsLgorCisvLyBOdW1iZXIgb2YgdGVzdHMgdG8gcnVuLgordmFyIG51bWJlck9m
VGVzdHMgPSAxMDA7CisKKy8vIE1heCBhbGxvd2VkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVu
ZGVyZWQgZGF0YSBhbmQgdGhlIGV4cGVjdGVkIHJlc3VsdC4KK3ZhciBtYXhBbGxvd2VkRXJyb3Ig
PSAwOworCisvLyBUaGUgQXVkaW9HYWluTm9kZSBzdGFydHMgd2l0aCB0aGlzIHZhbHVlIGluc3Rl
YWQgb2YgdGhlIGRlZmF1bHQgdmFsdWUuCit2YXIgaW5pdGlhbFZhbHVlID0gMTAwOworCisvLyBT
b21lIHN1aXRhYmxlIHRpbWUgY29uc3RhbnQgc28gdGhhdCB3ZSBjYW4gc2VlIGEgc2lnbmlmaWNh
bnQgY2hhbmdlIG92ZXIgYSB0aW1lSW50ZXJ2YWwuCit2YXIgdGltZUNvbnN0YW50ID0gdGltZUlu
dGVydmFsIC8gMzsKKworLy8gU2V0IHRoZSBnYWluIG5vZGUgdmFsdWUgdG8gdGhlIHNwZWNpZmll
ZCB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuCitmdW5jdGlvbiBzZXRWYWx1ZSh2YWx1ZSwg
dGltZSkKK3sKKyAgICBnYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTsK
K30KKworLy8gR2VuZXJhdGUgYW4gZXhwb25lbnRpYWwgYXBwcm9hY2ggc3RhcnRpbmcgYXQgfHN0
YXJ0VGltZXwgd2l0aCBhIHRhcmdldCB2YWx1ZSBvZiB8dmFsdWV8LgorZnVuY3Rpb24gYXV0b21h
dGlvbih2YWx1ZSwgc3RhcnRUaW1lLCBlbmRUaW1lKQoreworICAgIC8vIGVuZFRpbWUgaXMgbm90
IHVzZWQgZm9yIHNldFRhcmdldFZhbHVlQXRUaW1lLgorICAgIGdhaW5Ob2RlLmdhaW4uc2V0VGFy
Z2V0VmFsdWVBdFRpbWUodmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KQorfQorCitmdW5j
dGlvbiBydW5UZXN0KCkKK3sKKyAgICBjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdChudW1iZXJPZlRl
c3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvbWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRUYXJnZXRWYWx1
ZUF0VGltZSgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhBbGxvd2VkRXJyb3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRXhwb25lbnRpYWxBcHByb2FjaEFy
cmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NvbnRpbnVpdHlUaHJlc2hvbGQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZUNvbnN0YW50KTsKK30KKworcnVuVGVz
dCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJh
bS1zZXRWYWx1ZUF0VGltZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRp
b3BhcmFtLXNldFZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGJlMzVjMjRj
Y2M2Yzc4OWY3OGMxNzcyOWM2NTA0ODI5MjFhOWMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwxMSBAQAorVGVzdCBBdWRpb1BhcmFtIHNldFZhbHVlQXRUaW1lKCkgZnVuY3Rpb25h
bGl0eS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIEFsbCAxMDAgdGVzdHMg
c3RhcnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4KK1BBU1MgQWxsIDEwMCB0ZXN0
cyBwYXNzZWQgd2l0aGluIGFuIGFjY2VwdGFibGUgdG9sZXJhbmNlLgorUEFTUyBBdWRpb1BhcmFt
IHNldFZhbHVlQXRUaW1lKCkgdGVzdCBwYXNzZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
YXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhYmE5NDA1NGI3NzUw
ZjVmMzEyZjMwYTg3ZmQ5NDM0YzA3ZmFmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQXRUaW1lLmh0bWwKQEAgLTAsMCArMSw1NyBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlv
bmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10
ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW9wYXJhbS10
ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Citk
ZXNjcmlwdGlvbigiVGVzdCBBdWRpb1BhcmFtIHNldFZhbHVlQXRUaW1lKCkgZnVuY3Rpb25hbGl0
eS4iKTsKKworLy8gUGxheSBhIGxvbmcgREMgc2lnbmFsIG91dCB0aHJvdWdoIGFuIEF1ZGlvR2Fp
bk5vZGUsIGFuZCBjYWxsIHNldFZhbHVlQXRUaW1lKCkgYXQgcmVndWxhcgorLy8gaW50ZXJ2YWxz
IHRvIHNldCB0aGUgdmFsdWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgaW50ZXJ2YWwuICBFYWNo
IHRpbWUgaW50ZXJ2YWwgaGFzCisvLyBkaWZmZXJlbnQgdmFsdWUgc28gdGhhdCB0aGVyZSBpcyBh
IGRpc2NvbnRpbnVpdHkgYXQgZWFjaCB0aW1lIGludGVydmFsIGJvdW5kYXJ5LiAgVGhlCisvLyBk
aXNjb250aW51aXR5IGlzIGZvciB0ZXN0aW5nIHRpbWluZy4KKworLy8gTnVtYmVyIG9mIHRlc3Rz
IHRvIHJ1bi4KK3ZhciBudW1iZXJPZlRlc3RzID0gMTAwOworCisvLyBNYXggYWxsb3dlZCBkaWZm
ZXJlbmNlIGJldHdlZW4gdGhlIHJlbmRlcmVkIGRhdGEgYW5kIHRoZSBleHBlY3RlZCByZXN1bHQu
Cit2YXIgbWF4QWxsb3dlZEVycm9yID0gNmUtODsKKworLy8gU2V0IHRoZSBnYWluIG5vZGUgdmFs
dWUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuCitmdW5jdGlv
biBzZXRWYWx1ZSh2YWx1ZSwgdGltZSkKK3sKKyAgICBnYWluTm9kZS5nYWluLnNldFZhbHVlQXRU
aW1lKHZhbHVlLCB0aW1lKTsKK30KKworLy8gRm9yIHNldFZhbHVlQXRUaW1lKCksIHdlIGRvbid0
IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIGF1dG9tYXRpb24uCitmdW5jdGlvbiBhdXRvbWF0aW9u
KHZhbHVlLCBzdGFydFRpbWUsIGVuZFRpbWUpCit7CisgICAgLy8gRG8gbm90aGluZy4KK30KKwor
ZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgY3JlYXRlQXVkaW9HcmFwaEFuZFRlc3QobnVtYmVy
T2ZUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9t
YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldFZhbHVlQXRUaW1lKCkiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEFsbG93ZWRFcnJvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVDb25zdGFudEFycmF5KTsKK30KKworcnVuVGVzdCgpOwor
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRW
YWx1ZUN1cnZlQXRUaW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlv
cGFyYW0tc2V0VmFsdWVDdXJ2ZUF0VGltZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzM3N2Ji
MDk0MTZmNWJkNDIxNDg5MWE0NTZlNzM5YjY5ZDdkYTExYgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVDdXJ2ZUF0VGltZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGVzdCBBdWRpb1BhcmFtIHNldFZhbHVlQ3VydmVBdFRp
bWUoKSBmdW5jdGlvbmFsaXR5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1Mg
QWxsIDIwIHRlc3RzIHN0YXJ0ZWQgYW5kIGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUuCitQQVNT
IEFsbCAyMCB0ZXN0cyBwYXNzZWQgd2l0aGluIGFuIGFjY2VwdGFibGUgdG9sZXJhbmNlLgorUEFT
UyBBdWRpb1BhcmFtIHNldFZhbHVlQ3VydmVBdFRpbWUoKSB0ZXN0IHBhc3NlZC4KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVDdXJ2ZUF0VGltZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI2NmZmZGY2MjhhMDI5NThjOTFmNjBhNDIwZjU3ZDUwMTEwNzBhMzcKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVl
Q3VydmVBdFRpbWUuaHRtbApAQCAtMCwwICsxLDc1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEF1ZGlvUGFy
YW0gc2V0VmFsdWVDdXJ2ZUF0VGltZSgpIGZ1bmN0aW9uYWxpdHkuIik7CisKKy8vIFBsYXkgYSBs
b25nIERDIHNpZ25hbCBvdXQgdGhyb3VnaCBhbiBBdWRpb0dhaW5Ob2RlIGFuZCBmb3IgZWFjaCB0
aW1lIGludGVydmFsIGNhbGwKKy8vIHNldFZhbHVlQ3VydmVBdFRpbWUoKSB0byBzZXQgdGhlIHZh
bHVlcyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBpbnRlcnZhbC4gIEVhY2ggY3VydmUgaXMgYSBz
aW5lCisvLyB3YXZlLCBhbmQgd2UgYXNzdW1lIHRoYXQgdGhlIHRpbWUgaW50ZXJ2YWwgaXMgbm90
IGFuIGV4YWN0IG11bHRpcGxlIG9mIHRoZSBwZXJpb2QuIFRoaXMgY2F1c2VzIGEKKy8vIGRpc2Nv
bnRpbnVpdHkgYmV0d2VlbiB0aW1lIGludGVydmFscyB3aGljaCBpcyB1c2VkIHRvIHRlc3QgdGlt
aW5nLgorCisvLyBOdW1iZXIgb2YgdGVzdHMgdG8gcnVuLgordmFyIG51bWJlck9mVGVzdHMgPSAy
MDsKKworLy8gTWF4IGFsbG93ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW5kZXJlZCBkYXRh
IGFuZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LiAgKFRoZSBlcnJvciBpcyB6ZXJvCisvLyBiZWNhdXNl
IHRoZSByZW5kZXJlZCBjdXJ2ZSBzaG91bGQgcmVhbGx5IGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMg
dGhlIHJlZmVyZW5jZS4pCit2YXIgbWF4QWxsb3dlZEVycm9yID0gMDsKKworLy8gVGhlIGFtcGxp
dHVkZSBvZiB0aGUgc2luZSB3YXZlLgordmFyIHNpbmVBbXBsaXR1ZGUgPSAxMDA7CisKKy8vIEZy
ZXF1ZW5jeSBvZiB0aGUgc2luZSB3YXZlLgordmFyIGZyZXFIeiA9IDQ0MDsKKworLy8gQ3VydmUg
dG8gdXNlIGZvciBzZXRWYWx1ZUN1cnZlQXRUaW1lKCkuCit2YXIgY3VydmU7CisKKy8vIEZvciBz
ZXRWYWx1ZUN1cnZlQXRUaW1lLCB0aGUgYXV0b21hdGlvbiBqdXN0IHNldHMgdGhlIGN1cnZlLgor
ZnVuY3Rpb24gYXV0b21hdGlvbih2YWx1ZSwgc3RhcnRUaW1lLCBlbmRUaW1lKQoreworICAgIC8v
IEZvciBhIHZhbHVlIGN1cnZlLCB3ZSBpZ25vcmUgdGhlIHx2YWx1ZXwgYW5kIHxlbmRUaW1lfC4K
KyAgICBnYWluTm9kZS5nYWluLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHN0YXJ0VGltZSwg
dGltZUludGVydmFsKTsKK30KKworLy8gQ3JlYXRlIGEgc2luZSB3YXZlIG9mIHRoZSBzcGVjaWZp
ZWQgZHVyYXRpb24uCitmdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2VTaW5lQXJyYXkoc3RhcnRUaW1l
LCBlbmRUaW1lLCBzdGFydFZhbHVlLCBlbmRWYWx1ZSwgc2FtcGxlUmF0ZSkKK3sKKyAgICAvLyBJ
Z25vcmUgfHN0YXJ0VmFsdWV8IGFuZCB8ZW5kVmFsdWV8IGZvciB0aGUgc2luZSB3YXZlLgorICAg
IHJldHVybiBjcmVhdGVTaW5lV2F2ZUFycmF5KGVuZFRpbWUgLSBzdGFydFRpbWUsIGZyZXFIeiwg
c2luZUFtcGxpdHVkZSwgc2FtcGxlUmF0ZSk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSAKK3sK
KyAgICAvLyBUaGUgY3VydmUgb2YgdmFsdWVzIHRvIHVzZS4KKyAgICBjdXJ2ZSA9IGNyZWF0ZVNp
bmVXYXZlQXJyYXkodGltZUludGVydmFsLCBmcmVxSHosIHNpbmVBbXBsaXR1ZGUsIHNhbXBsZVJh
dGUpOworCisgICAgY3JlYXRlQXVkaW9HcmFwaEFuZFRlc3QobnVtYmVyT2ZUZXN0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaW5lQW1wbGl0dWRlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKGspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRG9uJ3QgbmVlZCB0byBzZXQgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAic2V0VmFsdWVDdXJ2ZUF0VGltZSgpIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXhBbGxvd2VkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlUmVmZXJlbmNlU2luZUFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDIgKiBNYXRoLlBJICogc2luZUFtcGxpdHVkZSAqIGZyZXFIeiAvIHNhbXBsZVJhdGUpOwor
fQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4K
KworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRp
by9yZXNvdXJjZXMvYXVkaW9wYXJhbS10ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
cmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVzdGluZy5qcwppbmRleCBjY2EzNGM5NmQwYjE4MzlmMjBk
YWNlZjU5N2JiMGFlNmNlNmU4MTE0Li5kMWU1MGQwYzhkZDY0NWEyYTE4OTYyY2YyZTYwYjk5NDM3
MWZkMWRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW9w
YXJhbS10ZXN0aW5nLmpzCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRp
b3BhcmFtLXRlc3RpbmcuanMKQEAgLTEsMTggKzEsMzYgQEAKIHZhciBzYW1wbGVSYXRlID0gNDQx
MDA7CiAKLS8vIE51bWJlciBvZiB0ZXN0cyB0byBydW4uCi12YXIgbnVtYmVyT2ZUZXN0cyA9IDEw
MDsKKy8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHRpbWVzIGFu
ZCBzdGFydGluZyBhbmQgZW5kaW5nIHZhbHVlcyBmb3IgZWFjaCB0aW1lCisvLyBpbnRlcnZhbC4K
K3ZhciB0aW1lVmFsdWVJbmZvOworCisvLyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YXJ0aW5n
IHZhbHVlcyBiZXR3ZWVuIGVhY2ggdGltZSBpbnRlcnZhbC4KK3ZhciBzdGFydGluZ1ZhbHVlRGVs
dGE7CisgICAgICAKKy8vIEZvciBhbnkgYXV0b21hdGlvbiBmdW5jdGlvbiB0aGF0IGhhcyBhbiBl
bmQgb3IgdGFyZ2V0IHZhbHVlLCB0aGUgZW5kIHZhbHVlIGlzIGJhc2VkIHRoZSBzdGFydGluZwor
Ly8gdmFsdWUgb2YgdGhlIHRpbWUgaW50ZXJ2YWwuICBUaGUgc3RhcnRpbmcgdmFsdWUgd2lsbCBi
ZSBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIGJ5CisvLyB8c3RhcnRFbmRWYWx1ZUNoYW5nZXwuIFdl
IGNob29zZSBoYWxmIG9mIHxzdGFydGluZ1ZhbHVlRGVsdGF8IHNvIHRoYXQgdGhlIGVuZGluZyB2
YWx1ZSB3aWxsIGJlCisvLyBkaXN0aW5jdCBmcm9tIHRoZSBzdGFydGluZyB2YWx1ZSBmb3IgbmV4
dCB0aW1lIGludGVydmFsLiAgVGhpcyBhbGxvd3MgdXMgdG8gZGV0ZWN0IHdoZXJlIHRoZSByYW1w
CisvLyBiZWdpbnMgYW5kIGVuZHMuCit2YXIgc3RhcnRFbmRWYWx1ZUNoYW5nZTsKKworLy8gRGVm
YXVsdCB0aHJlc2hvbGQgdG8gdXNlIGZvciBkZXRlY3RpbmcgZGlzY29udGludWl0aWVzIHRoYXQg
c2hvdWxkIGFwcGVhciBhdCBlYWNoIHRpbWUgaW50ZXJ2YWwuCit2YXIgZGlzY29udGludWl0eVRo
cmVzaG9sZDsKIAogLy8gVGltZSBpbnRlcnZhbCBiZXR3ZWVuIHZhbHVlIGNoYW5nZXMuICBJdCBp
cyBiZXN0IGlmIDEgLyBudW1iZXJPZlRlc3RzIGlzIG5vdCBjbG9zZSB0bwogLy8gdGltZUludGVy
dmFsLgogdmFyIHRpbWVJbnRlcnZhbCA9IC4wMzsKIAotLy8gTWFrZSBzdXJlIHdlIHJlbmRlciBs
b25nIGVub3VnaCB0byBjYXB0dXJlIGFsbCBvZiBvdXIgdGVzdCBkYXRhLgotdmFyIHJlbmRlclRp
bWUgPSAobnVtYmVyT2ZUZXN0cyArIDEpICogdGltZUludGVydmFsOwotdmFyIHJlbmRlckxlbmd0
aCA9IHRpbWVUb1NhbXBsZUZyYW1lKHJlbmRlclRpbWUsIHNhbXBsZVJhdGUpOwordmFyIGdhaW5O
b2RlOwogCiB2YXIgY29udGV4dDsKIAorLy8gTWFrZSBzdXJlIHdlIHJlbmRlciBsb25nIGVub3Vn
aCB0byBjYXB0dXJlIGFsbCBvZiBvdXIgdGVzdCBkYXRhLgorZnVuY3Rpb24gcmVuZGVyTGVuZ3Ro
KHRlc3RzKQoreworICAgIHJldHVybiB0aW1lVG9TYW1wbGVGcmFtZSgodGVzdHMgKyAxKSAqIHRp
bWVJbnRlcnZhbCwgc2FtcGxlUmF0ZSk7Cit9CisKIC8vIENyZWF0ZSBhIGJ1ZmZlciBjb250YWlu
aW5nIHRoZSBzYW1lIGNvbnN0YW50IHZhbHVlLgogZnVuY3Rpb24gY3JlYXRlQ29uc3RhbnRCdWZm
ZXIoY29udGV4dCwgY29uc3RhbnQsIGxlbmd0aCkgewogICAgIHZhciBidWZmZXIgPSBjb250ZXh0
LmNyZWF0ZUJ1ZmZlcigxLCBsZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7CkBAIC0yNiw2ICs0
NCwzNiBAQCBmdW5jdGlvbiBjcmVhdGVDb25zdGFudEJ1ZmZlcihjb250ZXh0LCBjb25zdGFudCwg
bGVuZ3RoKSB7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAorLy8gQ3JlYXRlIGEgY29uc3RhbnQg
cmVmZXJlbmNlIHNpZ25hbCB3aXRoIHRoZSBnaXZlbiB8dmFsdWV8LiAgQmFzaWNhbGx5IHRoZSBz
YW1lIGFzCisvLyB8Y3JlYXRlQ29uc3RhbnRCdWZmZXJ8LCBidXQgd2l0aCB0aGUgcGFyYW1ldGVy
cyB0byBtYXRjaCB0aGUgb3RoZXIgY3JlYXRlIGZ1bmN0aW9ucy4KK2Z1bmN0aW9uIGNyZWF0ZUNv
bnN0YW50QXJyYXkoc3RhcnRUaW1lLCBlbmRUaW1lLCB2YWx1ZSwgZW5kVmFsdWUsIHNhbXBsZVJh
dGUpCit7CisgICAgdmFyIHN0YXJ0RnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZShzdGFydFRpbWUs
IHNhbXBsZVJhdGUpOworICAgIHZhciBlbmRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGVuZFRp
bWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBsZW5ndGggPSBlbmRGcmFtZSAtIHN0YXJ0RnJhbWU7
CisKKyAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnRCdWZmZXIoY29udGV4dCwgdmFsdWUsIGxlbmd0
aCk7Cit9CisKKy8vIENyZWF0ZSBhIGxpbmVhciByYW1wIHN0YXJ0aW5nIGF0IHxzdGFydFZhbHVl
fCBhbmQgZW5kaW5nIGF0IHxlbmRWYWx1ZXwuICBUaGUgcmFtcCBzdGFydHMgYXQgdGltZQorLy8g
fHN0YXJ0VGltZXwgYW5kIGVuZHMgYXQgfGVuZFRpbWV8LiAgKFRoZSBzdGFydCBhbmQgZW5kIHRp
bWVzIGFyZSBvbmx5IHVzZWQgdG8gY29tcHV0ZSBob3cgbWFueQorLy8gc2FtcGxlcyB0byByZXR1
cm4uKQorZnVuY3Rpb24gY3JlYXRlTGluZWFyUmFtcEFycmF5KHN0YXJ0VGltZSwgZW5kVGltZSwg
c3RhcnRWYWx1ZSwgZW5kVmFsdWUsIHNhbXBsZVJhdGUpCit7CisgICAgdmFyIHN0YXJ0RnJhbWUg
PSB0aW1lVG9TYW1wbGVGcmFtZShzdGFydFRpbWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBlbmRG
cmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGVuZFRpbWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBs
ZW5ndGggPSBlbmRGcmFtZSAtIHN0YXJ0RnJhbWU7CisgICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJh
eShsZW5ndGgpOworCisgICAgdmFyIHN0ZXAgPSAoZW5kVmFsdWUgLSBzdGFydFZhbHVlKSAvIGxl
bmd0aDsKKworICAgIGZvciAoayA9IDA7IGsgPCBsZW5ndGg7ICsraykgeworICAgICAgICBidWZm
ZXJba10gPSBzdGFydFZhbHVlICsgayAqIHN0ZXA7CisgICAgfQorCisgICAgcmV0dXJuIGJ1ZmZl
cjsKK30KKwogLy8gQ3JlYXRlIGFuIGV4cG9uZW50aWFsIHJhbXAgc3RhcnRpbmcgYXQgfHN0YXJ0
VmFsdWV8IGFuZCBlbmRpbmcgYXQgfGVuZFZhbHVlfC4gIFRoZSByYW1wIHN0YXJ0cyBhdAogLy8g
dGltZSB8c3RhcnRUaW1lfCBhbmQgZW5kcyBhdCB8ZW5kVGltZXwuICAoVGhlIHN0YXJ0IGFuZCBl
bmQgdGltZXMgYXJlIG9ubHkgdXNlZCB0byBjb21wdXRlIGhvdwogLy8gbWFueSBzYW1wbGVzIHRv
IHJldHVybi4pCkBAIC00NSw4ICs5Myw3MSBAQCBmdW5jdGlvbiBjcmVhdGVFeHBvbmVudGlhbFJh
bXBBcnJheShzdGFydFRpbWUsIGVuZFRpbWUsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBzYQogICAg
IHJldHVybiBidWZmZXI7CiB9CiAKK2Z1bmN0aW9uIGRpc2NyZXRlVGltZUNvbnN0YW50Rm9yU2Ft
cGxlUmF0ZSh0aW1lQ29uc3RhbnQsIHNhbXBsZVJhdGUpCit7CisgICAgcmV0dXJuIDEgLSBNYXRo
LnBvdygxIC8gMi43MTgyODIsIDEgLyAoc2FtcGxlUmF0ZSAqIHRpbWVDb25zdGFudCkpOworfQor
CisvLyBDcmVhdGUgYSBzaWduYWwgdGhhdCBzdGFydHMgYXQgfHN0YXJ0VmFsdWV8IGFuZCBleHBv
bmVudGlhbGx5IGFwcHJvYWNoZXMgdGhlIGVuZGluZyB2YWx1ZSBvZgorLy8gfGVuZFZhbHVlfCwg
dXNpbmcgYSB0aW1lIGNvbnN0YW50IG9mIHx0aW1lQ29uc3RhbnR8LiAgVGhlIHJhbXAgc3RhcnRz
IGF0IHRpbWUgfHN0YXJ0VGltZXwgYW5kCisvLyBlbmRzIGF0IHxlbmRUaW1lfC4gIChUaGUgc3Rh
cnQgYW5kIGVuZCB0aW1lcyBhcmUgb25seSB1c2VkIHRvIGNvbXB1dGUgaG93IG1hbnkgc2FtcGxl
cyB0bworLy8gcmV0dXJuLikKK2Z1bmN0aW9uIGNyZWF0ZUV4cG9uZW50aWFsQXBwcm9hY2hBcnJh
eShzdGFydFRpbWUsIGVuZFRpbWUsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBzYW1wbGVSYXRlLCB0
aW1lQ29uc3RhbnQpCit7CisgICAgdmFyIHN0YXJ0RnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZShz
dGFydFRpbWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBlbmRGcmFtZSA9IHRpbWVUb1NhbXBsZUZy
YW1lKGVuZFRpbWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBsZW5ndGggPSBlbmRGcmFtZSAtIHN0
YXJ0RnJhbWU7CisgICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsZW5ndGgpOworICAgIHZhciBj
ID0gZGlzY3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKHRpbWVDb25zdGFudCwgc2FtcGxl
UmF0ZSk7CisKKyAgICB2YXIgdmFsdWUgPSBzdGFydFZhbHVlOworICAgIAorICAgIGZvciAodmFy
IGsgPSAwOyBrIDwgbGVuZ3RoOyArK2spIHsKKyAgICAgICAgYnVmZmVyW2tdID0gdmFsdWU7Cisg
ICAgICAgIHZhbHVlICs9IChlbmRWYWx1ZSAtIHZhbHVlKSAqIGM7CisgICAgfQorCisgICAgcmV0
dXJuIGJ1ZmZlcjsKK30KKworLy8gQ3JlYXRlIGEgc2luZSB3YXZlIG9mIHRoZSBnaXZlbiBmcmVx
dWVuY3kgYW5kIGFtcGxpdHVkZS4gIFRoZSBzaW5lIHdhdmUgaXMgb2Zmc2V0IGJ5IGhhbGYgdGhl
CisvLyBhbXBsaXR1ZGUgc28gdGhhdCByZXN1bHQgaXMgYWx3YXlzIHBvc2l0aXZlLgorZnVuY3Rp
b24gY3JlYXRlU2luZVdhdmVBcnJheShkdXJhdGlvblNlY29uZHMsIGZyZXFIeiwgYW1wbGl0dWRl
LCBzYW1wbGVSYXRlKQoreworICAgIHZhciBsZW5ndGggPSB0aW1lVG9TYW1wbGVGcmFtZShkdXJh
dGlvblNlY29uZHMsIHNhbXBsZVJhdGUpOworICAgIHZhciBzaWduYWwgPSBuZXcgRmxvYXQzMkFy
cmF5KGxlbmd0aCk7CisgICAgdmFyIG9tZWdhID0gMiAqIE1hdGguUEkgKiBmcmVxSHogLyBzYW1w
bGVSYXRlOworICAgIHZhciBoYWxmQW1wbGl0dWRlID0gYW1wbGl0dWRlIC8gMjsKKyAgICAKKyAg
ICBmb3IgKHZhciBrID0gMDsgayA8IGxlbmd0aDsgKytrKSB7CisgICAgICAgIHNpZ25hbFtrXSA9
IGhhbGZBbXBsaXR1ZGUgKyBoYWxmQW1wbGl0dWRlICogTWF0aC5zaW4ob21lZ2EgKiBrKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc2lnbmFsOworfQorCisvLyBSZXR1cm4gdGhlIGRpZmZlcmVuY2Ug
YmV0d2VlbiB0aGUgc3RhcnRpbmcgdmFsdWUgYW5kIHRoZSBlbmRpbmcgdmFsdWUgZm9yIHRpbWUg
aW50ZXJ2YWwKKy8vIHx0aW1lSW50ZXJ2YWxJbmRleHwuICBXZSBhbHRlcm5hdGUgYmV0d2VlbiBh
biBlbmQgdmFsdWUgdGhhdCBpcyBhYm92ZSBvciBiZWxvdyB0aGUgc3RhcnRpbmcKKy8vIHZhbHVl
LgorZnVuY3Rpb24gZW5kVmFsdWVEZWx0YSh0aW1lSW50ZXJ2YWxJbmRleCkKK3sKKyAgICBpZiAo
dGltZUludGVydmFsSW5kZXggJiAxKSB7CisgICAgICAgIHJldHVybiAtc3RhcnRFbmRWYWx1ZUNo
YW5nZTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gc3RhcnRFbmRWYWx1ZUNoYW5nZTsK
KyAgICB9Cit9CisKKy8vIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzdGFydGlu
ZyB2YWx1ZSBhdCB8dGltZUludGVydmFsSW5kZXh8IGFuZCB0aGUgc3RhcnRpbmcgdmFsdWUgYXQK
Ky8vIHRoZSBuZXh0IHRpbWUgaW50ZXJ2YWwuICBTaW5jZSB3ZSBzdGFydGVkIGF0IGEgbGFyZ2Ug
aW5pdGlhbCB2YWx1ZSwgd2UgZGVjcmVhc2UgdGhlIHZhbHVlIGF0IGVhY2gKKy8vIHRpbWUgaW50
ZXJ2YWwuCitmdW5jdGlvbiB2YWx1ZVVwZGF0ZSh0aW1lSW50ZXJ2YWxJbmRleCkKK3sKKyAgICBy
ZXR1cm4gLXN0YXJ0aW5nVmFsdWVEZWx0YTsKK30KKwogLy8gQ29tcGFyZSBhIHNlY3Rpb24gb2Yg
dGhlIHJlbmRlcmVkIGRhdGEgYWdhaW5zdCBvdXIgZXhwZWN0ZWQgc2lnbmFsLgotZnVuY3Rpb24g
Y29tcGFyZVBhcnRpYWxTaWduYWxzKHJlbmRlcmVkLCBleHBlY3RlZEZ1bmN0aW9uLCBzdGFydFRp
bWUsIGVuZFRpbWUsIHZhbHVlSW5mbywgc2FtcGxlUmF0ZSkKK2Z1bmN0aW9uIGNvbXBhcmVQYXJ0
aWFsU2lnbmFscyhyZW5kZXJlZCwgZXhwZWN0ZWRGdW5jdGlvbiwgc3RhcnRUaW1lLCBlbmRUaW1l
LCB2YWx1ZUluZm8sIHNhbXBsZVJhdGUsIHRpbWVDb25zdGFudCkKIHsKICAgICB2YXIgc3RhcnRT
YW1wbGUgPSB0aW1lVG9TYW1wbGVGcmFtZShzdGFydFRpbWUsIHNhbXBsZVJhdGUpOwogICAgIHZh
ciBleHBlY3RlZCA9IGV4cGVjdGVkRnVuY3Rpb24oc3RhcnRUaW1lLCBlbmRUaW1lLCB2YWx1ZUlu
Zm8uc3RhcnRWYWx1ZSwgdmFsdWVJbmZvLmVuZFZhbHVlLCBzYW1wbGVSYXRlKTsKQEAgLTgzLDkg
KzE5NCwxOSBAQCBmdW5jdGlvbiB2ZXJpZnlEaXNjb250aW51aXRpZXModmFsdWVzLCB0aW1lcywg
dGhyZXNob2xkKQogICAgICAgICB9CiAgICAgfQogCisgICAgdmFyIHRlc3RDb3VudDsKKworICAg
IGlmIChicmVha3MubGVuZ3RoID49IG51bWJlck9mVGVzdHMpIHsKKyAgICAgICAgdGVzdENvdW50
ID0gbnVtYmVyT2ZUZXN0cyAtIDE7CisgICAgICAgIHRlc3RGYWlsZWQoIkZvdW5kIG1vcmUgZGlz
Y29udGludWl0aWVzICgiICsgYnJlYWtzLmxlbmd0aCArICIpIHRoYW4gZXhwZWN0ZWQuICBPbmx5
IGNvbXBhcmluZyBmaXJzdCAiICsgKG51bWJlck9mVGVzdHMgKyAxKSArICJkaXNjb250aW51aXRp
ZXMuIik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICB0
ZXN0Q291bnQgPSBicmVha3MubGVuZ3RoOworICAgIH0KKyAgICAKICAgICAvLyBDb21wYXJlIHRo
ZSBsb2NhdGlvbiBvZiBlYWNoIGRpc2NvbnRpbnVpdHkgd2l0aCB0aGUgZW5kIHRpbWUgb2YgZWFj
aCBpbnRlcnZhbC4gKFRoZXJlIGlzIG5vCiAgICAgLy8gZGlzY29udGludWl0eSBhdCB0aGUgc3Rh
cnQgb2YgdGhlIHNpZ25hbC4pCi0gICAgZm9yICh2YXIgayA9IDA7IGsgPCBicmVha3MubGVuZ3Ro
OyArK2spIHsKKyAgICBmb3IgKHZhciBrID0gMDsgayA8IHRlc3RDb3VudDsgKytrKSB7CiAgICAg
ICAgIHZhciBleHBlY3RlZFNhbXBsZUZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUodGltZXNbayAr
IDFdLCBzYW1wbGVSYXRlKTsKICAgICAgICAgaWYgKGJyZWFrc1trXSAhPSBleHBlY3RlZFNhbXBs
ZUZyYW1lKSB7CiAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CkBAIC05Niw4ICsyMTcsMTQg
QEAgZnVuY3Rpb24gdmVyaWZ5RGlzY29udGludWl0aWVzKHZhbHVlcywgdGltZXMsIHRocmVzaG9s
ZCkKIAogICAgIGlmIChiYWRMb2NhdGlvbnMpIHsKICAgICAgICAgdGVzdEZhaWxlZChiYWRMb2Nh
dGlvbnMgKyAiIGRpc2NvbnRpbnVpdGllcyBhdCBpbmNvcnJlY3QgbG9jYXRpb25zIik7CisgICAg
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICB9IGVsc2UgewotICAgICAgICB0ZXN0UGFzc2VkKCJB
bGwgIiArIChicmVha3MubGVuZ3RoICsgMSkgKyAiIHRlc3RzIHN0YXJ0ZWQgYW5kIGVuZGVkIGF0
IHRoZSBjb3JyZWN0IHRpbWUuIik7CisgICAgICAgIGlmIChicmVha3MubGVuZ3RoICsgMSA9PSBu
dW1iZXJPZlRlc3RzKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJBbGwgIiArIChicmVha3Mu
bGVuZ3RoICsgMSkgKyAiIHRlc3RzIHN0YXJ0ZWQgYW5kIGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRp
bWUuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJGb3VuZCAi
ICsgYnJlYWtzLmxlbmd0aCArICIgZGlzY29udGludWl0aWVzIGJ1dCBleHBlY3RlZCAiICsgKG51
bWJlck9mVGVzdHMgLSAxKSk7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CkBAIC0xMTcsNyArMjQ0LDcgQEAg
ZnVuY3Rpb24gdmVyaWZ5RGlzY29udGludWl0aWVzKHZhbHVlcywgdGltZXMsIHRocmVzaG9sZCkK
IC8vIHZhbHVlcyBvZiBlYWNoIGludGVydmFsLgogLy8KIC8vIGJyZWFrVGhyZXNob2xkIC0gdGhy
ZXNob2xkIHRvIHVzZSBmb3IgZGV0ZXJtaW5pbmcgZGlzY29udGludWl0aWVzLgotZnVuY3Rpb24g
Y29tcGFyZVNpZ25hbHModGVzdE5hbWUsIG1heEVycm9yLCByZW5kZXJlZERhdGEsIGV4cGVjdGVk
RnVuY3Rpb24sIHRpbWVWYWx1ZUluZm8sIGJyZWFrVGhyZXNob2xkKQorZnVuY3Rpb24gY29tcGFy
ZVNpZ25hbHModGVzdE5hbWUsIG1heEVycm9yLCByZW5kZXJlZERhdGEsIGV4cGVjdGVkRnVuY3Rp
b24sIHRpbWVWYWx1ZUluZm8sIGJyZWFrVGhyZXNob2xkLCB0aW1lQ29uc3RhbnQpCiB7CiAgICAg
dmFyIHN1Y2Nlc3MgPSB0cnVlOwogICAgIHZhciBmYWlsZWRUZXN0Q291bnQgPSAwOwpAQCAtMTI4
LDEwICsyNTUsMTAgQEAgZnVuY3Rpb24gY29tcGFyZVNpZ25hbHModGVzdE5hbWUsIG1heEVycm9y
LCByZW5kZXJlZERhdGEsIGV4cGVjdGVkRnVuY3Rpb24sIHRpbWUKICAgICBzdWNjZXNzID0gdmVy
aWZ5RGlzY29udGludWl0aWVzKHJlbmRlcmVkRGF0YSwgdGltZXMsIGJyZWFrVGhyZXNob2xkKTsK
IAogICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbjsgKytrKSB7Ci0gICAgICAgIHZhciByZXN1bHQg
PSBjb21wYXJlUGFydGlhbFNpZ25hbHMocmVuZGVyZWREYXRhLCBleHBlY3RlZEZ1bmN0aW9uLCB0
aW1lc1trXSwgdGltZXNbayArIDFdLCB2YWx1ZXNba10sIHNhbXBsZVJhdGUpOworICAgICAgICB2
YXIgcmVzdWx0ID0gY29tcGFyZVBhcnRpYWxTaWduYWxzKHJlbmRlcmVkRGF0YSwgZXhwZWN0ZWRG
dW5jdGlvbiwgdGltZXNba10sIHRpbWVzW2sgKyAxXSwgdmFsdWVzW2tdLCBzYW1wbGVSYXRlLCB0
aW1lQ29uc3RhbnQpOwogCiAgICAgICAgIGlmIChyZXN1bHQubWF4RXJyb3IgPiBtYXhFcnJvcikg
ewotICAgICAgICAgICAgdGVzdEZhaWxlZCgiSW5jb3JyZWN0IGdhaW4gZm9yIHRlc3QgIiArIGsg
KyAiLiBNYXggZXJyb3IgPSAiICsgcmVzdWx0Lm1heEVycm9yICsgIiBhdCBvZmZzZXQgIiArIChy
ZXN1bHQuaW5kZXggKyB0aW1lVG9TYW1wbGVGcmFtZSh0aW1lc1trXSwgc2FtcGxlUmF0ZSkpKTsK
KyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkluY29ycmVjdCB2YWx1ZSBmb3IgdGVzdCAiICsgayAr
ICIuIE1heCBlcnJvciA9ICIgKyByZXN1bHQubWF4RXJyb3IgKyAiIGF0IG9mZnNldCAiICsgKHJl
c3VsdC5pbmRleCArIHRpbWVUb1NhbXBsZUZyYW1lKHRpbWVzW2tdLCBzYW1wbGVSYXRlKSkpOwog
ICAgICAgICAgICAgKytmYWlsZWRUZXN0Q291bnQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTAs
MjMgKzI3Nyw1NCBAQCBmdW5jdGlvbiBjb21wYXJlU2lnbmFscyh0ZXN0TmFtZSwgbWF4RXJyb3Is
IHJlbmRlcmVkRGF0YSwgZXhwZWN0ZWRGdW5jdGlvbiwgdGltZQogICAgIH0KIH0KIAorLy8gQ3Jl
YXRlIGEgZnVuY3Rpb24gdG8gdGVzdCB0aGUgcmVuZGVyZWQgZGF0YSB3aXRoIHRoZSByZWZlcmVu
Y2UgZGF0YS4KKy8vCisvLyB0ZXN0TmFtZSAtIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0ZXN0Cisv
LworLy8gZXJyb3IgLSBtYXggYWxsb3dlZCBlcnJvciBiZXR3ZWVuIHJlbmRlcmVkIGRhdGEgYW5k
IHRoZSByZWZlcmVuY2UgZGF0YS4KKy8vCisvLyByZWZlcmVuY2VGdW5jdGlvbiAtIGZ1bmN0aW9u
IHRoYXQgZ2VuZXJhdGVzIHRoZSByZWZlcmVuY2UgZGF0YSB0byBiZSBjb21wYXJlZCB3aXRoIHRo
ZSByZW5kZXJlZAorLy8gZGF0YS4KKy8vCisvLyBqdW1wVGhyZXNob2xkIC0gb3B0aW9uYWwgcGFy
YW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSB0aHJlc2hvbGQgdG8gdXNlIGZvciBkZXRlY3RpbmcK
Ky8vIGRpc2NvbnRpbnVpdGllcy4gIElmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIGRpc2Nv
bnRpbnVpdHlUaHJlc2hvbGQuCisvLworLy8gdGltZUNvbnN0YW50IC0gb3B0aW9uYWwgcGFyYW1l
dGVyIHNwZWNpZnlpbmcgdGhlIHRpbWUgY29uc3RhbnQsIGlmIG5lZWRlZC4gIChDdXJyZW50bHkg
b25seQorLy8gbmVlZGVkIGZvciBzZXRUYXJnZXRWYWx1ZUF0VGltZSgpLikKK2Z1bmN0aW9uIGNo
ZWNrUmVzdWx0RnVuY3Rpb24odGVzdE5hbWUsIGVycm9yLCByZWZlcmVuY2VGdW5jdGlvbiwganVt
cFRocmVzaG9sZCwgdGltZUNvbnN0YW50KQoreworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkg
eworICAgICAgICB2YXIgYnVmZmVyID0gZXZlbnQucmVuZGVyZWRCdWZmZXI7CisgICAgICAgIHJl
bmRlcmVkRGF0YSA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgICAgICB2YXIgdGhy
ZXNob2xkOworCisgICAgICAgIGlmICghanVtcFRocmVzaG9sZCkgeworICAgICAgICAgICAgdGhy
ZXNob2xkID0gZGlzY29udGludWl0eVRocmVzaG9sZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHRocmVzaG9sZCA9IGp1bXBUaHJlc2hvbGQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGNvbXBhcmVTaWduYWxzKHRlc3ROYW1lLCBlcnJvciwgcmVuZGVyZWREYXRhLCByZWZl
cmVuY2VGdW5jdGlvbiwgdGltZVZhbHVlSW5mbywgdGhyZXNob2xkLCB0aW1lQ29uc3RhbnQpOwor
CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30KKwogLy8gUnVuIGFsbCB0aGUgYXV0
b21hdGlvbiB0ZXN0cy4KIC8vCi0vLyBpbml0aWFsVmFsdWUgLSBUaGUgaW5pdGlhbCB2YWx1ZSBv
ZiB0aGUgZmlyc3QgdGltZSBpbnRlcnZhbC4KKy8vIG51bWJlck9mVGVzdHMgLSBudW1iZXIgb2Yg
dGVzdHMgKHRpbWUgaW50ZXJ2YWxzKSB0byBydW4uCiAvLwotLy8gZW5kVmFsdWVEZWx0YUZ1bmN0
aW9uIC0gSG93IG11Y2ggdGhlIGVuZCB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHZhbHVlIGF0IHRo
ZSBzdGFydCBvZiB0aGUKLS8vIGludGVydmFsLgorLy8gaW5pdGlhbFZhbHVlIC0gVGhlIGluaXRp
YWwgdmFsdWUgb2YgdGhlIGZpcnN0IHRpbWUgaW50ZXJ2YWwuCiAvLwogLy8gc2V0VmFsdWVGdW5j
dGlvbiAtIGZ1bmN0aW9uIHRoYXQgc2V0cyB0aGUgc3BlY2lmaWVkIHZhbHVlIGF0IHRoZSBzdGFy
dCBvZiBhIHRpbWUgaW50ZXJ2YWwuCiAvLwogLy8gYXV0b21hdGlvbkZ1bmN0aW9uIC0gZnVuY3Rp
b24gdGhhdCBzZXRzIHRoZSBlbmQgdmFsdWUgZm9yIHRoZSB0aW1lIGludGVydmFsLiAgSXQgc3Bl
Y2lmaWVzIGhvdwogLy8gdGhlIHZhbHVlIGFwcHJvYWNoZXMgdGhlIGVuZCB2YWx1ZS4KIC8vCi0v
LyB2YWx1ZVVwZGF0ZUZ1bmN0aW9uIC0gVGhlIHN0YXJ0aW5nIHZhbHVlIGF0IHRpbWUgaW50ZXJ2
YWwgayBpcyBhZGp1c3RlZCBieSB2YWx1ZVVwZGF0ZUZ1bmN0aW9uKGspIHRvIGdpdmUgdGhlIG5l
dyBzdGFydGluZyB2YWx1ZSBhdCB0aW1lIGludGVydmFsIGsgKyAxLgotLy8KIC8vIEFuIG9iamVj
dCBpcyByZXR1cm5lZCBjb250YWluaW5nIGFuIGFycmF5IG9mIHN0YXJ0IHRpbWVzIGZvciBlYWNo
IHRpbWUgaW50ZXJ2YWwsIGFuZCBhbiBhcnJheQogLy8gZ2l2aW5nIHRoZSBzdGFydCBhbmQgZW5k
IHZhbHVlcyBmb3IgdGhlIGludGVydmFsLgotZnVuY3Rpb24gZG9BdXRvbWF0aW9uKGluaXRpYWxW
YWx1ZSwgZW5kVmFsdWVEZWx0YUZ1bmN0aW9uLCBzZXRWYWx1ZUZ1bmN0aW9uLCBhdXRvbWF0aW9u
RnVuY3Rpb24sIHZhbHVlVXBkYXRlRnVuY3Rpb24pCitmdW5jdGlvbiBkb0F1dG9tYXRpb24obnVt
YmVyT2ZUZXN0cywgaW5pdGlhbFZhbHVlLCBzZXRWYWx1ZUZ1bmN0aW9uLCBhdXRvbWF0aW9uRnVu
Y3Rpb24pCiB7CiAgICAgdmFyIHRpbWVJbmZvID0gWzBdOwogICAgIHZhciB2YWx1ZUluZm8gPSBb
XTsKQEAgLTE3NSwyMCArMzMzLDg3IEBAIGZ1bmN0aW9uIGRvQXV0b21hdGlvbihpbml0aWFsVmFs
dWUsIGVuZFZhbHVlRGVsdGFGdW5jdGlvbiwgc2V0VmFsdWVGdW5jdGlvbiwgYXV0CiAgICAgZm9y
ICh2YXIgayA9IDA7IGsgPCBudW1iZXJPZlRlc3RzOyArK2spIHsKICAgICAgICAgdmFyIHN0YXJ0
VGltZSA9IGsgKiB0aW1lSW50ZXJ2YWw7CiAgICAgICAgIHZhciBlbmRUaW1lID0gKGsgKyAxKSAq
IHRpbWVJbnRlcnZhbDsKLSAgICAgICAgdmFyIGVuZFZhbHVlID0gdmFsdWUgKyBlbmRWYWx1ZURl
bHRhRnVuY3Rpb24oayk7CisgICAgICAgIHZhciBlbmRWYWx1ZSA9IHZhbHVlICsgZW5kVmFsdWVE
ZWx0YShrKTsKIAogICAgICAgICAvLyBTZXQgdGhlIHZhbHVlIGF0IHRoZSBzdGFydCBvZiB0aGUg
dGltZSBpbnRlcnZhbC4KICAgICAgICAgc2V0VmFsdWVGdW5jdGlvbih2YWx1ZSwgc3RhcnRUaW1l
KTsKIAotICAgICAgICAvLyBTcGVjaWZ5IHRoZSB0YXJnZXQgdmFsdWUsIGFuZCBob3cgd2Ugc2hv
dWxkIGFwcHJvYWNoIHRoZSB0YXJnZXQgdmFsdWUuCisgICAgICAgIC8vIFNwZWNpZnkgdGhlIGVu
ZCBvciB0YXJnZXQgdmFsdWUsIGFuZCBob3cgd2Ugc2hvdWxkIGFwcHJvYWNoIGl0LgogICAgICAg
ICBhdXRvbWF0aW9uRnVuY3Rpb24oZW5kVmFsdWUsIHN0YXJ0VGltZSwgZW5kVGltZSk7CiAKICAg
ICAgICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgc3RhcnQgdGltZXMsIGFuZCB0aGUgc3RhcnQgYW5k
IGVuZCB2YWx1ZXMgZm9yIGVhY2ggdGltZSBpbnRlcnZhbC4KICAgICAgICAgdGltZUluZm8ucHVz
aChlbmRUaW1lKTsKICAgICAgICAgdmFsdWVJbmZvLnB1c2goe3N0YXJ0VmFsdWU6IHZhbHVlLCBl
bmRWYWx1ZSA6IGVuZFZhbHVlfSk7CiAKLSAgICAgICAgdmFsdWUgKz0gdmFsdWVVcGRhdGVGdW5j
dGlvbihrKTsKKyAgICAgICAgdmFsdWUgKz0gdmFsdWVVcGRhdGUoayk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHt0aW1lcyA6IHRpbWVJbmZvLCB2YWx1ZXMgOiB2YWx1ZUluZm99OwogfQorCisvLyBD
cmVhdGUgdGhlIGF1ZGlvIGdyYXBoIGZvciB0aGUgdGVzdCBhbmQgdGhlbiBydW4gdGhlIHRlc3Qu
CisvLworLy8gbnVtYmVyT2ZUZXN0cyAtIG51bWJlciBvZiB0aW1lIGludGVydmFscyAodGVzdHMp
IHRvIHJ1bi4KKy8vCisvLyBpbml0aWFsVmFsdWUgLSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUg
Z2FpbiBhdCB0aW1lIDAuCisvLworLy8gc2V0VmFsdWVGdW5jdGlvbiAtIGZ1bmN0aW9uIHRvIHNl
dCB0aGUgdmFsdWUgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHRpbWUgaW50ZXJ2YWwuCisvLwor
Ly8gYXV0b21hdGlvbkZ1bmN0aW9uIC0gdGhlIEF1ZGlvUGFyYW1UaW1lbGluZSBhdXRvbWF0aW9u
IGZ1bmN0aW9uCisvLworLy8gdGVzdE5hbWUgLSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgdGVzdCB0
aGF0IGlzIGJlaW5nIHJ1bi4KKy8vCisvLyBtYXhFcnJvciAtIG1heGltdW0gYWxsb3dlZCBlcnJv
ciBiZXR3ZWVuIHRoZSByZW5kZXJlZCBkYXRhIGFuZCB0aGUgcmVmZXJlbmNlIGRhdGEKKy8vCisv
LyByZWZlcmVuY2VGdW5jdGlvbiAtIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSByZWZlcmVu
Y2UgZGF0YSB0byBiZSBjb21wYXJlZCBhZ2FpbnN0IHRoZQorLy8gcmVuZGVyZWQgZGF0YS4KKy8v
CisvLyBqdW1wVGhyZXNob2xkIC0gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRo
ZSB0aHJlc2hvbGQgdG8gdXNlIGZvciBkZXRlY3RpbmcKKy8vIGRpc2NvbnRpbnVpdGllcy4gIElm
IG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIGRpc2NvbnRpbnVpdHlUaHJlc2hvbGQuCisvLwor
Ly8gdGltZUNvbnN0YW50IC0gb3B0aW9uYWwgcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlIHRpbWUg
Y29uc3RhbnQsIGlmIG5lZWRlZC4gIChDdXJyZW50bHkgb25seQorLy8gbmVlZGVkIGZvciBzZXRU
YXJnZXRWYWx1ZUF0VGltZSgpLikKK2Z1bmN0aW9uIGNyZWF0ZUF1ZGlvR3JhcGhBbmRUZXN0KG51
bWJlck9mVGVzdHMsIGluaXRpYWxWYWx1ZSwgc2V0VmFsdWVGdW5jdGlvbiwgYXV0b21hdGlvbkZ1
bmN0aW9uLCB0ZXN0TmFtZSwgbWF4RXJyb3IsIHJlZmVyZW5jZUZ1bmN0aW9uLCBqdW1wVGhyZXNo
b2xkLCB0aW1lQ29uc3RhbnQpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB3aW5k
b3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBj
b250ZXh0LgorICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHJlbmRlckxl
bmd0aChudW1iZXJPZlRlc3RzKSwgc2FtcGxlUmF0ZSk7CisgICAgdmFyIGNvbnN0YW50QnVmZmVy
ID0gY3JlYXRlQ29uc3RhbnRCdWZmZXIoY29udGV4dCwgMSwgcmVuZGVyTGVuZ3RoKG51bWJlck9m
VGVzdHMpKTsKKworICAgIC8vIFdlIHVzZSBhbiBBdWRpb0dhaW5Ob2RlIGhlcmUgc2ltcGx5IGFz
IGEgY29udmVuaWVudCB3YXkgdG8gdGVzdCB0aGUgQXVkaW9QYXJhbQorICAgIC8vIGF1dG9tYXRp
b24sIHNpbmNlIGl0J3MgZWFzeSB0byBwYXNzIGEgY29uc3RhbnQgdmFsdWUgdGhyb3VnaCB0aGUg
bm9kZSwgYXV0b21hdGUgdGhlCisgICAgLy8gLmdhaW4gYXR0cmlidXRlIGFuZCBvYnNlcnZlIHRo
ZSByZXN1bHRpbmcgdmFsdWVzLgorCisgICAgZ2Fpbk5vZGUgPSBjb250ZXh0LmNyZWF0ZUdhaW5O
b2RlKCk7CisKKyAgICB2YXIgYnVmZmVyU291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3Vy
Y2UoKTsKKyAgICBidWZmZXJTb3VyY2UuYnVmZmVyID0gY29uc3RhbnRCdWZmZXI7CisgICAgYnVm
ZmVyU291cmNlLmNvbm5lY3QoZ2Fpbk5vZGUpOworICAgIGdhaW5Ob2RlLmNvbm5lY3QoY29udGV4
dC5kZXN0aW5hdGlvbik7CisKKyAgICAvLyBTZXQgdXAgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBw
YXJhbWV0ZXJzIHRoYXQgY29udHJvbCBob3cgdGhlIGF1dG9tYXRpb24gdGVzdCB2YWx1ZXMgcHJv
Z3Jlc3MKKyAgICAvLyBmb3IgZWFjaCB0aW1lIGludGVydmFsLgorICAgIHN0YXJ0aW5nVmFsdWVE
ZWx0YSA9IGluaXRpYWxWYWx1ZSAvIG51bWJlck9mVGVzdHM7CisgICAgc3RhcnRFbmRWYWx1ZUNo
YW5nZSA9IHN0YXJ0aW5nVmFsdWVEZWx0YSAvIDI7CisgICAgZGlzY29udGludWl0eVRocmVzaG9s
ZCA9IHN0YXJ0RW5kVmFsdWVDaGFuZ2UgLyAyOworCisgICAgLy8gUnVuIHRoZSBhdXRvbWF0aW9u
IHRlc3RzLgorICAgIHRpbWVWYWx1ZUluZm8gPSBkb0F1dG9tYXRpb24obnVtYmVyT2ZUZXN0cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlRnVuY3Rpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aW9uRnVuY3Rpb24pOworICAgIGJ1ZmZlclNvdXJj
ZS5ub3RlT24oMCk7CisgICAgICAKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja1Jlc3Vs
dEZ1bmN0aW9uKHRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWZlcmVuY2VGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGp1bXBUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lQ29uc3RhbnQpOworICAgIGNvbnRleHQuc3RhcnRSZW5k
ZXJpbmcoKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128591</attachid>
            <date>2012-02-23 16:20:23 -0800</date>
            <delta_ts>2012-02-24 10:00:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77666-20120223162022.patch</filename>
            <type>text/plain</type>
            <size>38019</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTdkNDY4ZDQyODkxMzc5
YjNlNjA3MTU2N2ViMzNhNmYwZTY4ZWM1ZS4uZjRmOGMyOTllYzZhODlkOWJiZmY4ZmM0MzNkYTNh
NDA2OGFlZTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAyLTIzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBdWRpb1BhcmFtIG5lZWRzIHRl
c3RzIGZvciB0aGUgcGFyYW1ldGVyIGF1dG9tYXRpb24gcm91dGluZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzY2NgorCisgICAgICAgIEFkZCB0
ZXN0cyB0aGUgQXVkaW9QYXJhbSBhdXRvbWF0aW9uIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRp
by9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKKyAgICAgICAgICAgICAg
IHdlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFsdWVBdFRpbWUuaHRtbAorICAgICAgICAg
ICAgICAgd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS5odG1sCisgICAgICAgICAg
ICAgICB3ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUuaHRtbAorCisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlSW1wbCk6IFJvdW5kIHRoZQor
ICAgICAgICBjdXJ2ZUluZGV4IHRvIGZpeCB0aW1pbmcgaXNzdWUgaW4gc2V0VmFsdWVDdXJ2ZUF0
VGltZS4KKwogMjAxMi0wMi0yMiAgSWdvciBPbGl2ZWlyYSAgPGlnb3Iub0BzaXNhLnNhbXN1bmcu
Y29tPgogCiAgICAgICAgIEV2ZXJ5IGNhbGwgdG8gUmVuZGVyT2JqZWN0OjpzZXRBbmltYXRhYmxl
U3R5bGUoKSBpdGVyYXRlcyB0aHJvdWdoIGFsbCBtX2NvbXBvc2l0ZUFuaW1hdGlvbnM6IHBvdGVu
dGlhbGx5IE8oTl4yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YXJhbVRpbWVsaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1l
bGluZS5jcHAKaW5kZXggY2Q4ZjUzNjc2MmE0Y2UwYzAzMDM1MzM5NjkxOGZkNjFjNWI1YzQyNC4u
MmJjMmYyNGM1YjFiZDNlMDNhMDBmNjEzMzM1YmVkZmMwY2EyZDA2YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCkBAIC0zMjksNyArMzI5LDEw
IEBAIGZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlSW1wbChmbG9h
dCBzdGFydFRpbWUsCiAgICAgICAgICAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgc3RyZXRjaGVk
IGN1cnZlIGRhdGEgdXNpbmcgbmVhcmVzdCBuZWlnaGJvciBzYW1wbGluZy4KICAgICAgICAgICAg
ICAgICAgICAgLy8gT3ZlcnNhbXBsZWQgY3VydmUgZGF0YSBjYW4gYmUgcHJvdmlkZWQgaWYgc21v
b3RobmVzcyBpcyBkZXNpcmVkLgogICAgICAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRl
eCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGN1cnZlSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY3VydmVWaXJ0dWFs
SW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlYWxseSB1c2Ugcm91bmQoKSBm
cm9tIE1hdGhFeHRyYXMsIGJ1dCB3ZSdyZSBpbiBhIHRpZ2h0IGxvb3AgaGVyZSBhbmQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHdlJ3JlIHRyYWRpbmcgb2ZmIHByZWNpc2lvbiBmb3IgZXh0
cmEgc3BlZWQuCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjdXJ2ZUluZGV4ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDAuNSArIGN1cnZlVmlydHVhbEluZGV4KTsKKwogICAgICAg
ICAgICAgICAgICAgICAgICAgY3VydmVWaXJ0dWFsSW5kZXggKz0gY3VydmVQb2ludHNQZXJGcmFt
ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm91bmRzIGNoZWNrLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU3
YzA1YTY0OTI4ZGI2YmQ3MmQ1ZjRjODJiMTA2ZDFhZjRkOTUwZmIuLjhkNmFiNDRhMGM1MWEyNTBh
MTAzOWJjMjEwYTUzYWM1MzE2YjUyOTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMi0wMi0y
MyAgUmF5bW9uZCBUb3kgIDxydG95QGdvb2dsZS5jb20+CisKKyAgICAgICAgQXVkaW9QYXJhbSBu
ZWVkcyB0ZXN0cyBmb3IgdGhlIHBhcmFtZXRlciBhdXRvbWF0aW9uIHJvdXRpbmVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2NjYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlv
cGFyYW0tZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZS5odG1sOgorICAgICAgICAqIHdlYmF1
ZGlvL2F1ZGlvcGFyYW0tbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1l
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFs
dWVBdFRpbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb3Bh
cmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlv
L2F1ZGlvcGFyYW0tc2V0VmFsdWVBdFRpbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQXRUaW1lLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVDdXJ2ZUF0VGltZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVDdXJ2ZUF0VGlt
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW9wYXJhbS10
ZXN0aW5nLmpzOgorICAgICAgICAocmVuZGVyTGVuZ3RoKToKKyAgICAgICAgKGNyZWF0ZUNvbnN0
YW50QXJyYXkpOgorICAgICAgICAoY3JlYXRlTGluZWFyUmFtcEFycmF5KToKKyAgICAgICAgKGRp
c2NyZXRlVGltZUNvbnN0YW50Rm9yU2FtcGxlUmF0ZSk6CisgICAgICAgIChjcmVhdGVFeHBvbmVu
dGlhbEFwcHJvYWNoQXJyYXkpOgorICAgICAgICAoY3JlYXRlU2luZVdhdmVBcnJheSk6CisgICAg
ICAgIChlbmRWYWx1ZURlbHRhKToKKyAgICAgICAgKHZhbHVlVXBkYXRlKToKKyAgICAgICAgKGNv
bXBhcmVQYXJ0aWFsU2lnbmFscyk6CisgICAgICAgICh2ZXJpZnlEaXNjb250aW51aXRpZXMpOgor
ICAgICAgICAoY29tcGFyZVNpZ25hbHMpOgorICAgICAgICAoY2hlY2tSZXN1bHRGdW5jdGlvbi5y
ZXR1cm4udmFyKToKKyAgICAgICAgKGNoZWNrUmVzdWx0RnVuY3Rpb24pOgorICAgICAgICAoZG9B
dXRvbWF0aW9uKToKKyAgICAgICAgKGNyZWF0ZUF1ZGlvR3JhcGhBbmRUZXN0KToKKwogMjAxMi0w
Mi0yMyAgS2VuaWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W0Nocm9taXVtXSBVbnJldmlld2VkIHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZSBmb3IgZmFzdC9j
c3MvZm9udC1mYWNlLWRlZmF1bHQtZm9udC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJhdWRpby9hdWRpb3BhcmFtLWV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGlt
ZS5odG1sCmluZGV4IDNlNjJmODQyMzY2MThiNDExZGEyNTM3OTVmYWM5OWE5NGQ5NzBkZDUuLjAy
ZTE3MDI3YjY4YzlkMjdkZGYwNjIzZmVhNzc1ZjllY2ZhZGZjOGYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZS5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tZXhwb25lbnRpYWxSYW1w
VG9WYWx1ZUF0VGltZS5odG1sCkBAIC0yMCw0NSArMjAsMTUgQEAKICAgICAgIC8vIGRpc2NvbnRp
bnVpdHkgaXMgZm9yIHRlc3RpbmcgdGltaW5nLiAgQWxzbywgd2UgYWx0ZXJuYXRlIGJldHdlZW4g
YW4gaW5jcmVhc2luZyBhbmQKICAgICAgIC8vIGRlY3JlYXNpbmcgcmFtcCBmb3IgZWFjaCBpbnRl
cnZhbC4KIAorICAgICAgLy8gTnVtYmVyIG9mIHRlc3RzIHRvIHJ1bi4KKyAgICAgIHZhciBudW1i
ZXJPZlRlc3RzID0gMTAwOworCiAgICAgICAvLyBNYXggYWxsb3dlZCBkaWZmZXJlbmNlIGJldHdl
ZW4gdGhlIHJlbmRlcmVkIGRhdGEgYW5kIHRoZSBleHBlY3RlZCByZXN1bHQuCiAgICAgICB2YXIg
bWF4QWxsb3dlZEVycm9yID0gNi43NWUtNDsKIAotICAgICAgLy8gSW5mb3JtYXRpb24gYWJvdXQg
dGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgdGltZXMgYW5kIHN0YXJ0aW5nIGFuZCBlbmRpbmcgdmFs
dWVzIGZvciBlYWNoCi0gICAgICAvLyB0aW1lIGludGVydmFsLgotICAgICAgdmFyIHRpbWVWYWx1
ZUluZm87Ci0KICAgICAgIC8vIFRoZSBBdWRpb0dhaW5Ob2RlIHN0YXJ0cyB3aXRoIHRoaXMgdmFs
dWUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCB2YWx1ZS4KICAgICAgIHZhciBpbml0aWFsVmFsdWUg
PSAxMDA7CiAKLSAgICAgIC8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc3RhcnRpbmcgdmFsdWVz
IGJldHdlZW4gZWFjaCB0aW1lIGludGVydmFsLgotICAgICAgdmFyIHN0YXJ0aW5nVmFsdWVEZWx0
YSA9IGluaXRpYWxWYWx1ZSAvIG51bWJlck9mVGVzdHM7Ci0gICAgICAKLSAgICAgIC8vIEVhY2gg
ZXhwb25lbnRpYWwgcmFtcCB3aWxsIGluY3JlYXNlIG9yIGRlY3JlYXNlIGJ5IHRoaXMgbXVjaCBm
cm9tIHRoZSBzdGFydCB0byB0aGUgZW5kIG9mCi0gICAgICAvLyB0aGUgdGltZSBpbnRlcnZhbC4g
IFdlIGNob29zZSBoYWxmIG9mIHN0YXJ0aW5nVmFsdWVEZWx0YSBzbyB0aGF0IHRoZSBlbmRpbmcg
dmFsdWUgb2YgdGhlCi0gICAgICAvLyByYW1wIHdpbGwgYmUgZGlzdGluY3QgZnJvbSB0aGUgc3Rh
cnRpbmcgdmFsdWUgb2YgdGhlIHJhbXAgZm9yIG5leHQgdGltZSBpbnRlcnZhbC4gIFRoaXMKLSAg
ICAgIC8vIGFsbG93cyB1cyB0byBkZXRlY3Qgd2hlcmUgdGhlIHJhbXAgYmVnaW5zIGFuZCBlbmRz
LgotICAgICAgdmFyIHN0YXJ0RW5kVmFsdWVDaGFuZ2UgPSBzdGFydGluZ1ZhbHVlRGVsdGEgLyAy
OwotCi0gICAgICAvLyBUaHJlc2hvbGQgdG8gdXNlIGZvciBkZXRlY3RpbmcgZGlzY29udGludWl0
aWVzIHRoYXQgc2hvdWxkIGFwcGVhciBhdCBlYWNoIHRpbWUgaW50ZXJ2YWwuCi0gICAgICB2YXIg
ZGlzY29udGludWl0eVRocmVzaG9sZCA9IHN0YXJ0RW5kVmFsdWVDaGFuZ2UgLyAyOwotCi0gICAg
ICB2YXIgZ2Fpbk5vZGU7Ci0gICAgICAKLSAgICAgIHZhciBjb25zdGFudEJ1ZmZlcjsKLSAgICAg
IHZhciBidWZmZXJTb3VyY2U7Ci0KLSAgICAgIC8vIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3
ZWVuIHRoZSBzdGFydGluZyB2YWx1ZSBhbmQgdGhlIGVuZGluZyB2YWx1ZSBmb3IgdGltZSBpbnRl
cnZhbAotICAgICAgLy8gfHRpbWVJbnRlcnZhbEluZGV4fC4gIFdlIGFsdGVybmF0ZSBiZXR3ZWVu
IGFuIGVuZCB2YWx1ZSB0aGF0IGlzIGFib3ZlIG9yIGJlbG93IHRoZSBzdGFydGluZwotICAgICAg
Ly8gdmFsdWUuCi0gICAgICBmdW5jdGlvbiBlbmRWYWx1ZURlbHRhKHRpbWVJbnRlcnZhbEluZGV4
KQotICAgICAgewotICAgICAgICAgIGlmICh0aW1lSW50ZXJ2YWxJbmRleCAmIDEpIHsKLSAgICAg
ICAgICAgICAgcmV0dXJuIC1zdGFydEVuZFZhbHVlQ2hhbmdlOwotICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgIHJldHVybiBzdGFydEVuZFZhbHVlQ2hhbmdlOwotICAgICAgICAgIH0K
LSAgICAgIH0KLQogICAgICAgLy8gU2V0IHRoZSBnYWluIG5vZGUgdmFsdWUgdG8gdGhlIHNwZWNp
ZmllZCB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuCiAgICAgICBmdW5jdGlvbiBzZXRWYWx1
ZSh2YWx1ZSwgdGltZSkKICAgICAgIHsKQEAgLTczLDY1ICs0MywxNiBAQAogICAgICAgICAgIGdh
aW5Ob2RlLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSkK
ICAgICAgIH0KICAgICAgIAotICAgICAgLy8gUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g
dGhlIHN0YXJ0aW5nIHZhbHVlIGF0IHx0aW1lSW50ZXJ2YWxJbmRleHwgYW5kIHRoZSBzdGFydGlu
ZwotICAgICAgLy8gdmFsdWUgYXQgdGhlIG5leHQgdGltZSBpbnRlcnZhbC4gIFNpbmNlIHdlIHN0
YXJ0ZWQgYXQgYSBsYXJnZSBpbml0aWFsIHZhbHVlLCB3ZSBkZWNyZWFzZQotICAgICAgLy8gdGhl
IHZhbHVlIGF0IGVhY2ggdGltZSBpbnRlcnZhbC4KLSAgICAgIGZ1bmN0aW9uIHZhbHVlVXBkYXRl
KHRpbWVJbnRlcnZhbEluZGV4KQotICAgICAgewotICAgICAgICAgIHJldHVybiAtc3RhcnRpbmdW
YWx1ZURlbHRhOwotICAgICAgfQotCi0gICAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdChldmVudCkK
LSAgICAgIHsKLSAgICAgICAgICB2YXIgYnVmZmVyID0gZXZlbnQucmVuZGVyZWRCdWZmZXI7Ci0g
ICAgICAgICAgcmVuZGVyZWREYXRhID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApOwotCi0gICAg
ICAgICAgY29tcGFyZVNpZ25hbHMoImV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoKSIsIG1h
eEFsbG93ZWRFcnJvciwgcmVuZGVyZWREYXRhLCBjcmVhdGVFeHBvbmVudGlhbFJhbXBBcnJheSwg
dGltZVZhbHVlSW5mbywgZGlzY29udGludWl0eVRocmVzaG9sZCk7Ci0KLSAgICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKLSAgICAgIH0KLSAgICAgIAogICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCiAg
ICAgICB7Ci0gICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLSAgICAgICAgICB9Ci0K
LSAgICAgICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgICAgY3JlYXRl
QXVkaW9HcmFwaEFuZFRlc3QobnVtYmVyT2ZUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbml0aWFsVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVS
YW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBvbmVudGlhbFJhbXBU
b1ZhbHVlQXRUaW1lKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEFs
bG93ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFeHBv
bmVudGlhbFJhbXBBcnJheSk7CiAKLSAgICAgICAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBj
b250ZXh0LgotICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHJl
bmRlckxlbmd0aCwgc2FtcGxlUmF0ZSk7Ci0gICAgICAgICAgY29uc3RhbnRCdWZmZXIgPSBjcmVh
dGVDb25zdGFudEJ1ZmZlcihjb250ZXh0LCAxLCByZW5kZXJMZW5ndGgpOwotCi0gICAgICAgICAg
Ly8gV2UgdXNlIGFuIEF1ZGlvR2Fpbk5vZGUgaGVyZSBzaW1wbHkgYXMgYSBjb252ZW5pZW50IHdh
eSB0byB0ZXN0IHRoZSBBdWRpb1BhcmFtCi0gICAgICAgICAgLy8gYXV0b21hdGlvbiwgc2luY2Ug
aXQncyBlYXN5IHRvIHBhc3MgYSBjb25zdGFudCB2YWx1ZSB0aHJvdWdoIHRoZSBub2RlLCBhdXRv
bWF0ZSB0aGUKLSAgICAgICAgICAvLyAuZ2FpbiBhdHRyaWJ1dGUgYW5kIG9ic2VydmUgdGhlIHJl
c3VsdGluZyB2YWx1ZXMuCi0KLSAgICAgICAgICBnYWluTm9kZSA9IGNvbnRleHQuY3JlYXRlR2Fp
bk5vZGUoKTsKLQotICAgICAgICAgIGJ1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVy
U291cmNlKCk7Ci0gICAgICAgICAgYnVmZmVyU291cmNlLmJ1ZmZlciA9IGNvbnN0YW50QnVmZmVy
OwotICAgICAgICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0KGdhaW5Ob2RlKTsKLSAgICAgICAgICBn
YWluTm9kZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOwotCi0gICAgICAgICAgLy8gQXQg
ZWFjaCB0aW1lIGludGVydmFsLCB3ZSBhZGp1c3QgdGhlIHZhbHVlIGJ5IHN0YXJ0aW5nVmFsdWVE
ZWx0YS4gIEhvd2V2ZXIsIHRoZQotICAgICAgICAgIC8vIGV4cG9uZW50aWFsIHJhbXAgZW5kIHZh
bHVlIGlzIHRoZSB2YWx1ZSArLy0gc3RhcnRFbmRWYWx1ZUNoYW5nZS4gIChXZSBhbHRlcm5hdGVs
eQotICAgICAgICAgIC8vIHNwZWNpZnkgdGhlIGVuZCB2YWx1ZSB0byBiZSBncmVhdGVyIG9yIHNt
YWxsZXIgdGhhbiB0aGUgc3RhcnRpbmcgdmFsdWUsIHRvIHRlc3QgdGhlCi0gICAgICAgICAgLy8g
cmFtcCBnb2luZyB1cCBhbmQgZG93bi4pCi0gICAgICAgICAgLy8KLSAgICAgICAgICAvLyBCeSBk
b2luZyBpdCB0aGlzIHdheSwgd2UgZ2V0IGEgZGlzY29udGludWl0eSBhdCBlYWNoIHRpbWUgaW50
ZXJ2YWwgd2hpY2ggd2UgY2FuIHVzZSB0bwotICAgICAgICAgIC8vIHRlc3QgaWYgdGhlIHJhbXAg
c3RhcnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4KLSAgICAgICAgICB0aW1lVmFs
dWVJbmZvID0gZG9BdXRvbWF0aW9uKGluaXRpYWxWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZFZhbHVlRGVsdGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdlbmVyYXRlUmFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlVXBkYXRlKTsKLQotICAgICAgICAgIGJ1ZmZlclNvdXJjZS5ub3RlT24oMCk7
Ci0gICAgICAKLSAgICAgICAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja1Jlc3VsdDsKLSAg
ICAgICAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7CiAgICAgICB9CiAKICAgICAgIHJ1blRl
c3QoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tbGluZWFy
UmFtcFRvVmFsdWVBdFRpbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVk
aW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDVhYjU3YTY1N2JmOGIxOTFiMmE3NzFmOWQzM2Y2OTU5ZGVmY2ExMgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tbGluZWFyUmFtcFRvVmFsdWVBdFRp
bWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3QgQXVkaW9QYXJhbSBsaW5lYXJS
YW1wVG9WYWx1ZUF0VGltZSgpIGZ1bmN0aW9uYWxpdHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworUEFTUyBBbGwgMTAwIHRlc3RzIHN0YXJ0ZWQgYW5kIGVuZGVkIGF0IHRoZSBjb3Jy
ZWN0IHRpbWUuCitQQVNTIEFsbCAxMDAgdGVzdHMgcGFzc2VkIHdpdGhpbiBhbiBhY2NlcHRhYmxl
IHRvbGVyYW5jZS4KK1BBU1MgQXVkaW9QYXJhbSBsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgpIHRl
c3QgcGFzc2VkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tbGluZWFy
UmFtcFRvVmFsdWVBdFRpbWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0t
bGluZWFyUmFtcFRvVmFsdWVBdFRpbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDFmOGQ3N2JmNGU2Mzgz
NTRlZGZiYjgzMGM5YjM3YjAzOTczNTBjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYXVkaW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS5odG1sCkBAIC0wLDAg
KzEsNjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRy
YW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
YXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlv
cGFyYW0tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2Ny
aXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQXVkaW9QYXJhbSBsaW5lYXJSYW1wVG9WYWx1ZUF0VGlt
ZSgpIGZ1bmN0aW9uYWxpdHkuIik7CisKKy8vIFBsYXkgYSBsb25nIERDIHNpZ25hbCBvdXQgdGhy
b3VnaCBhbiBBdWRpb0dhaW5Ob2RlLCBhbmQgY2FsbCBzZXRWYWx1ZUF0VGltZSgpIGFuZAorLy8g
bGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoKSBhdCByZWd1bGFyIGludGVydmFscyB0byBzZXQgdGhl
IHN0YXJ0aW5nIGFuZCBlbmRpbmcgdmFsdWVzIGZvciBhCisvLyBsaW5lYXIgcmFtcC4gRWFjaCB0
aW1lIGludGVydmFsIGhhcyBhIHJhbXAgd2l0aCBhIGRpZmZlcmVudCBzdGFydGluZyBhbmQgZW5k
aW5nIHZhbHVlIHNvCisvLyB0aGF0IHRoZXJlIGlzIGEgZGlzY29udGludWl0eSBhdCBlYWNoIHRp
bWUgaW50ZXJ2YWwgYm91bmRhcnkuICBUaGUgZGlzY29udGludWl0eSBpcyBmb3IKKy8vIHRlc3Rp
bmcgdGltaW5nLiAgQWxzbywgd2UgYWx0ZXJuYXRlIGJldHdlZW4gYW4gaW5jcmVhc2luZyBhbmQg
ZGVjcmVhc2luZyByYW1wIGZvciBlYWNoCisvLyBpbnRlcnZhbC4KKworLy8gTnVtYmVyIG9mIHRl
c3RzIHRvIHJ1bi4KK3ZhciBudW1iZXJPZlRlc3RzID0gMTAwOworCisvLyBNYXggYWxsb3dlZCBk
aWZmZXJlbmNlIGJldHdlZW4gdGhlIHJlbmRlcmVkIGRhdGEgYW5kIHRoZSBleHBlY3RlZCByZXN1
bHQuCit2YXIgbWF4QWxsb3dlZEVycm9yID0gNi41ZS03OworCisvLyBTZXQgdGhlIGdhaW4gbm9k
ZSB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgdGltZS4KK2Z1
bmN0aW9uIHNldFZhbHVlKHZhbHVlLCB0aW1lKQoreworICAgIGdhaW5Ob2RlLmdhaW4uc2V0VmFs
dWVBdFRpbWUodmFsdWUsIHRpbWUpOworfQorCisvLyBHZW5lcmF0ZSBhIGxpbmVhciByYW1wIGVu
ZGluZyBhdCB0aW1lIHxlbmRUaW1lfCB3aXRoIGFuIGVuZGluZyB2YWx1ZSBvZiB8dmFsdWV8Lgor
ZnVuY3Rpb24gZ2VuZXJhdGVSYW1wKHZhbHVlLCBzdGFydFRpbWUsIGVuZFRpbWUpCit7CisgICAg
Ly8gfHN0YXJ0VGltZXwgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSBsaW5lYXIgcmFtcCB1c2VzIHRo
ZSB2YWx1ZSBmcm9tIHRoZSBzZXRWYWx1ZUF0VGltZSgpIGNhbGwKKyAgICAvLyBhYm92ZS4KKyAg
ICBnYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKQor
fQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdChu
dW1iZXJPZlRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdGVSYW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lYXJSYW1wVG9W
YWx1ZUF0VGltZSgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhBbGxvd2VkRXJy
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTGluZWFyUmFtcEFycmF5KTsK
K30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgCis8L3Njcmlw
dD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
dWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFsdWVBdFRpbWUtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmNjNmQyYTBmMWNiNTE4Yjc3M2I2YjBhZWU5MDQxNGI5MGE4MmVjZDQK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRh
cmdldFZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0IEF1ZGlv
UGFyYW0gc2V0VGFyZ2V0VmFsdWVBdFRpbWUoKSBmdW5jdGlvbmFsaXR5LgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKK1BBU1MgQWxsIDEwMCB0ZXN0cyBzdGFydGVkIGFuZCBlbmRlZCBh
dCB0aGUgY29ycmVjdCB0aW1lLgorUEFTUyBBbGwgMTAwIHRlc3RzIHBhc3NlZCB3aXRoaW4gYW4g
YWNjZXB0YWJsZSB0b2xlcmFuY2UuCitQQVNTIEF1ZGlvUGFyYW0gc2V0VGFyZ2V0VmFsdWVBdFRp
bWUoKSB0ZXN0IHBhc3NlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFt
LXNldFRhcmdldFZhbHVlQXRUaW1lLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3Bh
cmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTBlNDVkMGRhMjViN2Ux
ZjVhMTg4M2QxZGJjNjc3NjA2Yjk2MzY1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFsdWVBdFRpbWUuaHRtbApAQCAtMCwwICsx
LDY3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFu
c2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1
ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpb3Bh
cmFtLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlk
PSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlw
dD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEF1ZGlvUGFyYW0gc2V0VGFyZ2V0VmFsdWVBdFRpbWUoKSBm
dW5jdGlvbmFsaXR5LiIpOworCisvLyBQbGF5IGEgbG9uZyBEQyBzaWduYWwgb3V0IHRocm91Z2gg
YW4gQXVkaW9HYWluTm9kZSwgYW5kIGNhbGwgc2V0VmFsdWVBdFRpbWUoKSBhbmQKKy8vIHNldFRh
cmdldFZhbHVlQXRUaW1lIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzIHRvIHNldCB0aGUgc3RhcnRpbmcg
dmFsdWUgYW5kIHRoZSB0YXJnZXQKKy8vIHZhbHVlLiBFYWNoIHRpbWUgaW50ZXJ2YWwgaGFzIGEg
cmFtcCB3aXRoIGEgZGlmZmVyZW50IHN0YXJ0aW5nIGFuZCB0YXJnZXQgdmFsdWUgc28gdGhhdAor
Ly8gdGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IGVhY2ggdGltZSBpbnRlcnZhbCBib3VuZGFy
eS4gIFRoZSBkaXNjb250aW51aXR5IGlzIGZvciB0ZXN0aW5nCisvLyB0aW1pbmcuICBBbHNvLCB3
ZSBhbHRlcm5hdGUgYmV0d2VlbiBhbiBpbmNyZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHJhbXAgZm9y
IGVhY2ggaW50ZXJ2YWwuCisKKy8vIE51bWJlciBvZiB0ZXN0cyB0byBydW4uCit2YXIgbnVtYmVy
T2ZUZXN0cyA9IDEwMDsKKworLy8gTWF4IGFsbG93ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBy
ZW5kZXJlZCBkYXRhIGFuZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgordmFyIG1heEFsbG93ZWRFcnJv
ciA9IDA7CisKKy8vIFRoZSBBdWRpb0dhaW5Ob2RlIHN0YXJ0cyB3aXRoIHRoaXMgdmFsdWUgaW5z
dGVhZCBvZiB0aGUgZGVmYXVsdCB2YWx1ZS4KK3ZhciBpbml0aWFsVmFsdWUgPSAxMDA7CisKKy8v
IFNvbWUgc3VpdGFibGUgdGltZSBjb25zdGFudCBzbyB0aGF0IHdlIGNhbiBzZWUgYSBzaWduaWZp
Y2FudCBjaGFuZ2Ugb3ZlciBhIHRpbWVJbnRlcnZhbC4KK3ZhciB0aW1lQ29uc3RhbnQgPSB0aW1l
SW50ZXJ2YWwgLyAzOworCisvLyBTZXQgdGhlIGdhaW4gbm9kZSB2YWx1ZSB0byB0aGUgc3BlY2lm
aWVkIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgdGltZS4KK2Z1bmN0aW9uIHNldFZhbHVlKHZhbHVl
LCB0aW1lKQoreworICAgIGdhaW5Ob2RlLmdhaW4uc2V0VmFsdWVBdFRpbWUodmFsdWUsIHRpbWUp
OworfQorCisvLyBHZW5lcmF0ZSBhbiBleHBvbmVudGlhbCBhcHByb2FjaCBzdGFydGluZyBhdCB8
c3RhcnRUaW1lfCB3aXRoIGEgdGFyZ2V0IHZhbHVlIG9mIHx2YWx1ZXwuCitmdW5jdGlvbiBhdXRv
bWF0aW9uKHZhbHVlLCBzdGFydFRpbWUsIGVuZFRpbWUpCit7CisgICAgLy8gZW5kVGltZSBpcyBu
b3QgdXNlZCBmb3Igc2V0VGFyZ2V0VmFsdWVBdFRpbWUuCisgICAgZ2Fpbk5vZGUuZ2Fpbi5zZXRU
YXJnZXRWYWx1ZUF0VGltZSh2YWx1ZSwgc3RhcnRUaW1lLCB0aW1lQ29uc3RhbnQpCit9CisKK2Z1
bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGNyZWF0ZUF1ZGlvR3JhcGhBbmRUZXN0KG51bWJlck9m
VGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG9tYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldFRhcmdldFZh
bHVlQXRUaW1lKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEFsbG93ZWRFcnJv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFeHBvbmVudGlhbEFwcHJvYWNo
QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzY29udGludWl0eVRocmVzaG9s
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lQ29uc3RhbnQpOworfQorCitydW5U
ZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlw
dCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3Bh
cmFtLXNldFZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1
ZGlvcGFyYW0tc2V0VmFsdWVBdFRpbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkYmUzNWMy
NGNjYzZjNzg5Zjc4YzE3NzI5YzY1MDQ4MjkyMWE5YzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDExIEBACitUZXN0IEF1ZGlvUGFyYW0gc2V0VmFsdWVBdFRpbWUoKSBmdW5jdGlv
bmFsaXR5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgQWxsIDEwMCB0ZXN0
cyBzdGFydGVkIGFuZCBlbmRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLgorUEFTUyBBbGwgMTAwIHRl
c3RzIHBhc3NlZCB3aXRoaW4gYW4gYWNjZXB0YWJsZSB0b2xlcmFuY2UuCitQQVNTIEF1ZGlvUGFy
YW0gc2V0VmFsdWVBdFRpbWUoKSB0ZXN0IHBhc3NlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
dWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQXRUaW1lLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9hdWRpb3BhcmFtLXNldFZhbHVlQXRUaW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTg4OTRkODIxY2Ux
ZmNhMTM2NDZmNDdiYzVjMGNkYWIzYmY4ODBhNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVBdFRpbWUuaHRtbApAQCAtMCwwICsxLDU5
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0
aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlv
LXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpb3BhcmFt
LXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCJUZXN0IEF1ZGlvUGFyYW0gc2V0VmFsdWVBdFRpbWUoKSBmdW5jdGlvbmFs
aXR5LiIpOworCisvLyBQbGF5IGEgbG9uZyBEQyBzaWduYWwgb3V0IHRocm91Z2ggYW4gQXVkaW9H
YWluTm9kZSwgYW5kIGNhbGwgc2V0VmFsdWVBdFRpbWUoKSBhdCByZWd1bGFyCisvLyBpbnRlcnZh
bHMgdG8gc2V0IHRoZSB2YWx1ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBpbnRlcnZhbC4gIEVh
Y2ggdGltZSBpbnRlcnZhbCBoYXMKKy8vIGRpZmZlcmVudCB2YWx1ZSBzbyB0aGF0IHRoZXJlIGlz
IGEgZGlzY29udGludWl0eSBhdCBlYWNoIHRpbWUgaW50ZXJ2YWwgYm91bmRhcnkuICBUaGUKKy8v
IGRpc2NvbnRpbnVpdHkgaXMgZm9yIHRlc3RpbmcgdGltaW5nLgorCisvLyBOdW1iZXIgb2YgdGVz
dHMgdG8gcnVuLgordmFyIG51bWJlck9mVGVzdHMgPSAxMDA7CisKKy8vIE1heCBhbGxvd2VkIGRp
ZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVuZGVyZWQgZGF0YSBhbmQgdGhlIGV4cGVjdGVkIHJlc3Vs
dC4KK3ZhciBtYXhBbGxvd2VkRXJyb3IgPSA2ZS04OworCisvLyBTZXQgdGhlIGdhaW4gbm9kZSB2
YWx1ZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgdGltZS4KK2Z1bmN0
aW9uIHNldFZhbHVlKHZhbHVlLCB0aW1lKQoreworICAgIGdhaW5Ob2RlLmdhaW4uc2V0VmFsdWVB
dFRpbWUodmFsdWUsIHRpbWUpOworfQorCisvLyBGb3IgdGVzdGluZyBzZXRWYWx1ZUF0VGltZSgp
LCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBhdXRvbWF0aW9uLiBiZWNhdXNlIHRo
ZSB2YWx1ZSBhdAorLy8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaW50ZXJ2YWwgaXMgc2V0IGJ5IHNl
dFZhbHVlIGFuZCBpdCByZW1haW5zIGNvbnN0YW50IGZvciB0aGUgZHVyYXRpb24sIHdoaWNoCisv
LyBpcyB3aGF0IHdlIHdhbnQuCitmdW5jdGlvbiBhdXRvbWF0aW9uKHZhbHVlLCBzdGFydFRpbWUs
IGVuZFRpbWUpCit7CisgICAgLy8gRG8gbm90aGluZy4KK30KKworZnVuY3Rpb24gcnVuVGVzdCgp
Cit7CisgICAgY3JlYXRlQXVkaW9HcmFwaEFuZFRlc3QobnVtYmVyT2ZUZXN0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZh
bHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInNldFZhbHVlQXRUaW1lKCkiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1heEFsbG93ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVDb25zdGFudEFycmF5KTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUN1cnZlQXRUaW1lLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVDdXJ2
ZUF0VGltZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzM3N2JiMDk0MTZmNWJkNDIxNDg5MWE0
NTZlNzM5YjY5ZDdkYTExYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2F1ZGlvcGFyYW0tc2V0VmFsdWVDdXJ2ZUF0VGltZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
MSBAQAorVGVzdCBBdWRpb1BhcmFtIHNldFZhbHVlQ3VydmVBdFRpbWUoKSBmdW5jdGlvbmFsaXR5
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgQWxsIDIwIHRlc3RzIHN0YXJ0
ZWQgYW5kIGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUuCitQQVNTIEFsbCAyMCB0ZXN0cyBwYXNz
ZWQgd2l0aGluIGFuIGFjY2VwdGFibGUgdG9sZXJhbmNlLgorUEFTUyBBdWRpb1BhcmFtIHNldFZh
bHVlQ3VydmVBdFRpbWUoKSB0ZXN0IHBhc3NlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRp
by9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVDdXJ2ZUF0VGltZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyYWVl
NjUyYzg3YTA3NTZmZGU0M2ZjOWMxYmRmZTFlMzRhY2EwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUuaHRtbApA
QCAtMCwwICsxLDc1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwg
NC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9hdWRpb3BhcmFtLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+
Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEF1ZGlvUGFyYW0gc2V0VmFsdWVDdXJ2ZUF0
VGltZSgpIGZ1bmN0aW9uYWxpdHkuIik7CisKKy8vIFBsYXkgYSBsb25nIERDIHNpZ25hbCBvdXQg
dGhyb3VnaCBhbiBBdWRpb0dhaW5Ob2RlIGFuZCBmb3IgZWFjaCB0aW1lIGludGVydmFsIGNhbGwK
Ky8vIHNldFZhbHVlQ3VydmVBdFRpbWUoKSB0byBzZXQgdGhlIHZhbHVlcyBmb3IgdGhlIGR1cmF0
aW9uIG9mIHRoZSBpbnRlcnZhbC4gIEVhY2ggY3VydmUgaXMgYSBzaW5lCisvLyB3YXZlLCBhbmQg
d2UgYXNzdW1lIHRoYXQgdGhlIHRpbWUgaW50ZXJ2YWwgaXMgbm90IGFuIGV4YWN0IG11bHRpcGxl
IG9mIHRoZSBwZXJpb2QuIFRoaXMgY2F1c2VzIGEKKy8vIGRpc2NvbnRpbnVpdHkgYmV0d2VlbiB0
aW1lIGludGVydmFscyB3aGljaCBpcyB1c2VkIHRvIHRlc3QgdGltaW5nLgorCisvLyBOdW1iZXIg
b2YgdGVzdHMgdG8gcnVuLgordmFyIG51bWJlck9mVGVzdHMgPSAyMDsKKworLy8gTWF4IGFsbG93
ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW5kZXJlZCBkYXRhIGFuZCB0aGUgZXhwZWN0ZWQg
cmVzdWx0LiAgKFRoZSBlcnJvciBpcyB6ZXJvCisvLyBiZWNhdXNlIHRoZSByZW5kZXJlZCBjdXJ2
ZSBzaG91bGQgcmVhbGx5IGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIHJlZmVyZW5jZS4pCit2
YXIgbWF4QWxsb3dlZEVycm9yID0gMDsKKworLy8gVGhlIGFtcGxpdHVkZSBvZiB0aGUgc2luZSB3
YXZlLgordmFyIHNpbmVBbXBsaXR1ZGUgPSAxMDA7CisKKy8vIEZyZXF1ZW5jeSBvZiB0aGUgc2lu
ZSB3YXZlLgordmFyIGZyZXFIeiA9IDQ0MDsKKworLy8gQ3VydmUgdG8gdXNlIGZvciBzZXRWYWx1
ZUN1cnZlQXRUaW1lKCkuCit2YXIgY3VydmU7CisKKy8vIFNldHMgdGhlIGN1cnZlIGRhdGEgZm9y
IHRoZSBlbnRpcmUgdGltZSBpbnRlcnZhbC4KK2Z1bmN0aW9uIGF1dG9tYXRpb24odmFsdWUsIHN0
YXJ0VGltZSwgZW5kVGltZSkKK3sKKyAgICAvLyBGb3IgYSB2YWx1ZSBjdXJ2ZSwgd2UgaWdub3Jl
IHRoZSB8dmFsdWV8IGFuZCB8ZW5kVGltZXwuCisgICAgZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUN1
cnZlQXRUaW1lKGN1cnZlLCBzdGFydFRpbWUsIHRpbWVJbnRlcnZhbCk7Cit9CisKKy8vIENyZWF0
ZSBhIHNpbmUgd2F2ZSBvZiB0aGUgc3BlY2lmaWVkIGR1cmF0aW9uLgorZnVuY3Rpb24gY3JlYXRl
UmVmZXJlbmNlU2luZUFycmF5KHN0YXJ0VGltZSwgZW5kVGltZSwgc3RhcnRWYWx1ZSwgZW5kVmFs
dWUsIHNhbXBsZVJhdGUpCit7CisgICAgLy8gSWdub3JlIHxzdGFydFZhbHVlfCBhbmQgfGVuZFZh
bHVlfCBmb3IgdGhlIHNpbmUgd2F2ZS4KKyAgICByZXR1cm4gY3JlYXRlU2luZVdhdmVBcnJheShl
bmRUaW1lIC0gc3RhcnRUaW1lLCBmcmVxSHosIHNpbmVBbXBsaXR1ZGUsIHNhbXBsZVJhdGUpOwor
fQorCitmdW5jdGlvbiBydW5UZXN0KCkgCit7CisgICAgLy8gVGhlIGN1cnZlIG9mIHZhbHVlcyB0
byB1c2UuCisgICAgY3VydmUgPSBjcmVhdGVTaW5lV2F2ZUFycmF5KHRpbWVJbnRlcnZhbCwgZnJl
cUh6LCBzaW5lQW1wbGl0dWRlLCBzYW1wbGVSYXRlKTsKKworICAgIGNyZWF0ZUF1ZGlvR3JhcGhB
bmRUZXN0KG51bWJlck9mVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZUFt
cGxpdHVkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihrKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB2YWx1
ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG9tYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldFZhbHVl
Q3VydmVBdFRpbWUoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4QWxsb3dlZEVy
cm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVJlZmVyZW5jZVNpbmVBcnJh
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogTWF0aC5QSSAqIHNpbmVBbXBsaXR1
ZGUgKiBmcmVxSHogLyBzYW1wbGVSYXRlKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVzdGlu
Zy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpb3BhcmFtLXRlc3Rpbmcu
anMKaW5kZXggY2NhMzRjOTZkMGIxODM5ZjIwZGFjZWY1OTdiYjBhZTZjZTZlODExNC4uNzBjMjNm
ZTQ0NDUyNGQ3ZDNhNjNlMjVlMWQ0MjYxN2MxZjBiYWZhNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVzdGluZy5qcworKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW9wYXJhbS10ZXN0aW5nLmpzCkBAIC0xLDE4ICsx
LDM2IEBACiB2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwOwogCi0vLyBOdW1iZXIgb2YgdGVzdHMgdG8g
cnVuLgotdmFyIG51bWJlck9mVGVzdHMgPSAxMDA7CisvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUg
c3RhcnRpbmcgYW5kIGVuZGluZyB0aW1lcyBhbmQgc3RhcnRpbmcgYW5kIGVuZGluZyB2YWx1ZXMg
Zm9yIGVhY2ggdGltZQorLy8gaW50ZXJ2YWwuCit2YXIgdGltZVZhbHVlSW5mbzsKKworLy8gVGhl
IGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFydGluZyB2YWx1ZXMgYmV0d2VlbiBlYWNoIHRpbWUgaW50
ZXJ2YWwuCit2YXIgc3RhcnRpbmdWYWx1ZURlbHRhOworICAgICAgCisvLyBGb3IgYW55IGF1dG9t
YXRpb24gZnVuY3Rpb24gdGhhdCBoYXMgYW4gZW5kIG9yIHRhcmdldCB2YWx1ZSwgdGhlIGVuZCB2
YWx1ZSBpcyBiYXNlZCB0aGUgc3RhcnRpbmcKKy8vIHZhbHVlIG9mIHRoZSB0aW1lIGludGVydmFs
LiAgVGhlIHN0YXJ0aW5nIHZhbHVlIHdpbGwgYmUgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBieQor
Ly8gfHN0YXJ0RW5kVmFsdWVDaGFuZ2V8LiBXZSBjaG9vc2UgaGFsZiBvZiB8c3RhcnRpbmdWYWx1
ZURlbHRhfCBzbyB0aGF0IHRoZSBlbmRpbmcgdmFsdWUgd2lsbCBiZQorLy8gZGlzdGluY3QgZnJv
bSB0aGUgc3RhcnRpbmcgdmFsdWUgZm9yIG5leHQgdGltZSBpbnRlcnZhbC4gIFRoaXMgYWxsb3dz
IHVzIHRvIGRldGVjdCB3aGVyZSB0aGUgcmFtcAorLy8gYmVnaW5zIGFuZCBlbmRzLgordmFyIHN0
YXJ0RW5kVmFsdWVDaGFuZ2U7CisKKy8vIERlZmF1bHQgdGhyZXNob2xkIHRvIHVzZSBmb3IgZGV0
ZWN0aW5nIGRpc2NvbnRpbnVpdGllcyB0aGF0IHNob3VsZCBhcHBlYXIgYXQgZWFjaCB0aW1lIGlu
dGVydmFsLgordmFyIGRpc2NvbnRpbnVpdHlUaHJlc2hvbGQ7CiAKIC8vIFRpbWUgaW50ZXJ2YWwg
YmV0d2VlbiB2YWx1ZSBjaGFuZ2VzLiAgSXQgaXMgYmVzdCBpZiAxIC8gbnVtYmVyT2ZUZXN0cyBp
cyBub3QgY2xvc2UgdG8KIC8vIHRpbWVJbnRlcnZhbC4KIHZhciB0aW1lSW50ZXJ2YWwgPSAuMDM7
CiAKLS8vIE1ha2Ugc3VyZSB3ZSByZW5kZXIgbG9uZyBlbm91Z2ggdG8gY2FwdHVyZSBhbGwgb2Yg
b3VyIHRlc3QgZGF0YS4KLXZhciByZW5kZXJUaW1lID0gKG51bWJlck9mVGVzdHMgKyAxKSAqIHRp
bWVJbnRlcnZhbDsKLXZhciByZW5kZXJMZW5ndGggPSB0aW1lVG9TYW1wbGVGcmFtZShyZW5kZXJU
aW1lLCBzYW1wbGVSYXRlKTsKK3ZhciBnYWluTm9kZTsKIAogdmFyIGNvbnRleHQ7CiAKKy8vIE1h
a2Ugc3VyZSB3ZSByZW5kZXIgbG9uZyBlbm91Z2ggdG8gY2FwdHVyZSBhbGwgb2Ygb3VyIHRlc3Qg
ZGF0YS4KK2Z1bmN0aW9uIHJlbmRlckxlbmd0aCh0ZXN0cykKK3sKKyAgICByZXR1cm4gdGltZVRv
U2FtcGxlRnJhbWUoKHRlc3RzICsgMSkgKiB0aW1lSW50ZXJ2YWwsIHNhbXBsZVJhdGUpOworfQor
CiAvLyBDcmVhdGUgYSBidWZmZXIgY29udGFpbmluZyB0aGUgc2FtZSBjb25zdGFudCB2YWx1ZS4K
IGZ1bmN0aW9uIGNyZWF0ZUNvbnN0YW50QnVmZmVyKGNvbnRleHQsIGNvbnN0YW50LCBsZW5ndGgp
IHsKICAgICB2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgbGVuZ3RoLCBjb250
ZXh0LnNhbXBsZVJhdGUpOwpAQCAtMjYsNiArNDQsMzkgQEAgZnVuY3Rpb24gY3JlYXRlQ29uc3Rh
bnRCdWZmZXIoY29udGV4dCwgY29uc3RhbnQsIGxlbmd0aCkgewogICAgIHJldHVybiBidWZmZXI7
CiB9CiAKKy8vIENyZWF0ZSBhIGNvbnN0YW50IHJlZmVyZW5jZSBzaWduYWwgd2l0aCB0aGUgZ2l2
ZW4gfHZhbHVlfC4gIEJhc2ljYWxseSB0aGUgc2FtZSBhcworLy8gfGNyZWF0ZUNvbnN0YW50QnVm
ZmVyfCwgYnV0IHdpdGggdGhlIHBhcmFtZXRlcnMgdG8gbWF0Y2ggdGhlIG90aGVyIGNyZWF0ZSBm
dW5jdGlvbnMuICBUaGUKKy8vIHxlbmRWYWx1ZXwgaXMgaWdub3JlZC4KK2Z1bmN0aW9uIGNyZWF0
ZUNvbnN0YW50QXJyYXkoc3RhcnRUaW1lLCBlbmRUaW1lLCB2YWx1ZSwgZW5kVmFsdWUsIHNhbXBs
ZVJhdGUpCit7CisgICAgdmFyIHN0YXJ0RnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZShzdGFydFRp
bWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBlbmRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGVu
ZFRpbWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBsZW5ndGggPSBlbmRGcmFtZSAtIHN0YXJ0RnJh
bWU7CisKKyAgICB2YXIgYnVmZmVyID0gY3JlYXRlQ29uc3RhbnRCdWZmZXIoY29udGV4dCwgdmFs
dWUsIGxlbmd0aCk7CisKKyAgICByZXR1cm4gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApOworfQor
CisvLyBDcmVhdGUgYSBsaW5lYXIgcmFtcCBzdGFydGluZyBhdCB8c3RhcnRWYWx1ZXwgYW5kIGVu
ZGluZyBhdCB8ZW5kVmFsdWV8LiAgVGhlIHJhbXAgc3RhcnRzIGF0IHRpbWUKKy8vIHxzdGFydFRp
bWV8IGFuZCBlbmRzIGF0IHxlbmRUaW1lfC4gIChUaGUgc3RhcnQgYW5kIGVuZCB0aW1lcyBhcmUg
b25seSB1c2VkIHRvIGNvbXB1dGUgaG93IG1hbnkKKy8vIHNhbXBsZXMgdG8gcmV0dXJuLikKK2Z1
bmN0aW9uIGNyZWF0ZUxpbmVhclJhbXBBcnJheShzdGFydFRpbWUsIGVuZFRpbWUsIHN0YXJ0VmFs
dWUsIGVuZFZhbHVlLCBzYW1wbGVSYXRlKQoreworICAgIHZhciBzdGFydEZyYW1lID0gdGltZVRv
U2FtcGxlRnJhbWUoc3RhcnRUaW1lLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgZW5kRnJhbWUgPSB0
aW1lVG9TYW1wbGVGcmFtZShlbmRUaW1lLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgbGVuZ3RoID0g
ZW5kRnJhbWUgLSBzdGFydEZyYW1lOworICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobGVuZ3Ro
KTsKKworICAgIHZhciBzdGVwID0gKGVuZFZhbHVlIC0gc3RhcnRWYWx1ZSkgLyBsZW5ndGg7CisK
KyAgICBmb3IgKGsgPSAwOyBrIDwgbGVuZ3RoOyArK2spIHsKKyAgICAgICAgYnVmZmVyW2tdID0g
c3RhcnRWYWx1ZSArIGsgKiBzdGVwOworICAgIH0KKworICAgIHJldHVybiBidWZmZXI7Cit9CisK
IC8vIENyZWF0ZSBhbiBleHBvbmVudGlhbCByYW1wIHN0YXJ0aW5nIGF0IHxzdGFydFZhbHVlfCBh
bmQgZW5kaW5nIGF0IHxlbmRWYWx1ZXwuICBUaGUgcmFtcCBzdGFydHMgYXQKIC8vIHRpbWUgfHN0
YXJ0VGltZXwgYW5kIGVuZHMgYXQgfGVuZFRpbWV8LiAgKFRoZSBzdGFydCBhbmQgZW5kIHRpbWVz
IGFyZSBvbmx5IHVzZWQgdG8gY29tcHV0ZSBob3cKIC8vIG1hbnkgc2FtcGxlcyB0byByZXR1cm4u
KQpAQCAtNDUsOCArOTYsNzEgQEAgZnVuY3Rpb24gY3JlYXRlRXhwb25lbnRpYWxSYW1wQXJyYXko
c3RhcnRUaW1lLCBlbmRUaW1lLCBzdGFydFZhbHVlLCBlbmRWYWx1ZSwgc2EKICAgICByZXR1cm4g
YnVmZmVyOwogfQogCitmdW5jdGlvbiBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUo
dGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKQoreworICAgIHJldHVybiAxIC0gTWF0aC5leHAoLTEg
LyAoc2FtcGxlUmF0ZSAqIHRpbWVDb25zdGFudCkpOworfQorCisvLyBDcmVhdGUgYSBzaWduYWwg
dGhhdCBzdGFydHMgYXQgfHN0YXJ0VmFsdWV8IGFuZCBleHBvbmVudGlhbGx5IGFwcHJvYWNoZXMg
dGhlIHRhcmdldCB2YWx1ZSBvZgorLy8gfHRhcmdldFZhbHVlfCwgdXNpbmcgYSB0aW1lIGNvbnN0
YW50IG9mIHx0aW1lQ29uc3RhbnR8LiAgVGhlIHJhbXAgc3RhcnRzIGF0IHRpbWUgfHN0YXJ0VGlt
ZXwgYW5kCisvLyBlbmRzIGF0IHxlbmRUaW1lfC4gIChUaGUgc3RhcnQgYW5kIGVuZCB0aW1lcyBh
cmUgb25seSB1c2VkIHRvIGNvbXB1dGUgaG93IG1hbnkgc2FtcGxlcyB0bworLy8gcmV0dXJuLikK
K2Z1bmN0aW9uIGNyZWF0ZUV4cG9uZW50aWFsQXBwcm9hY2hBcnJheShzdGFydFRpbWUsIGVuZFRp
bWUsIHN0YXJ0VmFsdWUsIHRhcmdldFZhbHVlLCBzYW1wbGVSYXRlLCB0aW1lQ29uc3RhbnQpCit7
CisgICAgdmFyIHN0YXJ0RnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZShzdGFydFRpbWUsIHNhbXBs
ZVJhdGUpOworICAgIHZhciBlbmRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGVuZFRpbWUsIHNh
bXBsZVJhdGUpOworICAgIHZhciBsZW5ndGggPSBlbmRGcmFtZSAtIHN0YXJ0RnJhbWU7CisgICAg
dmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsZW5ndGgpOworICAgIHZhciBjID0gZGlzY3JldGVUaW1l
Q29uc3RhbnRGb3JTYW1wbGVSYXRlKHRpbWVDb25zdGFudCwgc2FtcGxlUmF0ZSk7CisKKyAgICB2
YXIgdmFsdWUgPSBzdGFydFZhbHVlOworICAgIAorICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbGVu
Z3RoOyArK2spIHsKKyAgICAgICAgYnVmZmVyW2tdID0gdmFsdWU7CisgICAgICAgIHZhbHVlICs9
ICh0YXJnZXRWYWx1ZSAtIHZhbHVlKSAqIGM7CisgICAgfQorCisgICAgcmV0dXJuIGJ1ZmZlcjsK
K30KKworLy8gQ3JlYXRlIGEgc2luZSB3YXZlIG9mIHRoZSBnaXZlbiBmcmVxdWVuY3kgYW5kIGFt
cGxpdHVkZS4gIFRoZSBzaW5lIHdhdmUgaXMgb2Zmc2V0IGJ5IGhhbGYgdGhlCisvLyBhbXBsaXR1
ZGUgc28gdGhhdCByZXN1bHQgaXMgYWx3YXlzIHBvc2l0aXZlLgorZnVuY3Rpb24gY3JlYXRlU2lu
ZVdhdmVBcnJheShkdXJhdGlvblNlY29uZHMsIGZyZXFIeiwgYW1wbGl0dWRlLCBzYW1wbGVSYXRl
KQoreworICAgIHZhciBsZW5ndGggPSB0aW1lVG9TYW1wbGVGcmFtZShkdXJhdGlvblNlY29uZHMs
IHNhbXBsZVJhdGUpOworICAgIHZhciBzaWduYWwgPSBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7
CisgICAgdmFyIG9tZWdhID0gMiAqIE1hdGguUEkgKiBmcmVxSHogLyBzYW1wbGVSYXRlOworICAg
IHZhciBoYWxmQW1wbGl0dWRlID0gYW1wbGl0dWRlIC8gMjsKKyAgICAKKyAgICBmb3IgKHZhciBr
ID0gMDsgayA8IGxlbmd0aDsgKytrKSB7CisgICAgICAgIHNpZ25hbFtrXSA9IGhhbGZBbXBsaXR1
ZGUgKyBoYWxmQW1wbGl0dWRlICogTWF0aC5zaW4ob21lZ2EgKiBrKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc2lnbmFsOworfQorCisvLyBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUg
c3RhcnRpbmcgdmFsdWUgYW5kIHRoZSBlbmRpbmcgdmFsdWUgZm9yIHRpbWUgaW50ZXJ2YWwKKy8v
IHx0aW1lSW50ZXJ2YWxJbmRleHwuICBXZSBhbHRlcm5hdGUgYmV0d2VlbiBhbiBlbmQgdmFsdWUg
dGhhdCBpcyBhYm92ZSBvciBiZWxvdyB0aGUgc3RhcnRpbmcKKy8vIHZhbHVlLgorZnVuY3Rpb24g
ZW5kVmFsdWVEZWx0YSh0aW1lSW50ZXJ2YWxJbmRleCkKK3sKKyAgICBpZiAodGltZUludGVydmFs
SW5kZXggJiAxKSB7CisgICAgICAgIHJldHVybiAtc3RhcnRFbmRWYWx1ZUNoYW5nZTsKKyAgICB9
IGVsc2UgeworICAgICAgICByZXR1cm4gc3RhcnRFbmRWYWx1ZUNoYW5nZTsKKyAgICB9Cit9CisK
Ky8vIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzdGFydGluZyB2YWx1ZSBhdCB8
dGltZUludGVydmFsSW5kZXh8IGFuZCB0aGUgc3RhcnRpbmcgdmFsdWUgYXQKKy8vIHRoZSBuZXh0
IHRpbWUgaW50ZXJ2YWwuICBTaW5jZSB3ZSBzdGFydGVkIGF0IGEgbGFyZ2UgaW5pdGlhbCB2YWx1
ZSwgd2UgZGVjcmVhc2UgdGhlIHZhbHVlIGF0IGVhY2gKKy8vIHRpbWUgaW50ZXJ2YWwuCitmdW5j
dGlvbiB2YWx1ZVVwZGF0ZSh0aW1lSW50ZXJ2YWxJbmRleCkKK3sKKyAgICByZXR1cm4gLXN0YXJ0
aW5nVmFsdWVEZWx0YTsKK30KKwogLy8gQ29tcGFyZSBhIHNlY3Rpb24gb2YgdGhlIHJlbmRlcmVk
IGRhdGEgYWdhaW5zdCBvdXIgZXhwZWN0ZWQgc2lnbmFsLgotZnVuY3Rpb24gY29tcGFyZVBhcnRp
YWxTaWduYWxzKHJlbmRlcmVkLCBleHBlY3RlZEZ1bmN0aW9uLCBzdGFydFRpbWUsIGVuZFRpbWUs
IHZhbHVlSW5mbywgc2FtcGxlUmF0ZSkKK2Z1bmN0aW9uIGNvbXBhcmVQYXJ0aWFsU2lnbmFscyhy
ZW5kZXJlZCwgZXhwZWN0ZWRGdW5jdGlvbiwgc3RhcnRUaW1lLCBlbmRUaW1lLCB2YWx1ZUluZm8s
IHNhbXBsZVJhdGUsIHRpbWVDb25zdGFudCkKIHsKICAgICB2YXIgc3RhcnRTYW1wbGUgPSB0aW1l
VG9TYW1wbGVGcmFtZShzdGFydFRpbWUsIHNhbXBsZVJhdGUpOwogICAgIHZhciBleHBlY3RlZCA9
IGV4cGVjdGVkRnVuY3Rpb24oc3RhcnRUaW1lLCBlbmRUaW1lLCB2YWx1ZUluZm8uc3RhcnRWYWx1
ZSwgdmFsdWVJbmZvLmVuZFZhbHVlLCBzYW1wbGVSYXRlKTsKQEAgLTgzLDkgKzE5NywxOSBAQCBm
dW5jdGlvbiB2ZXJpZnlEaXNjb250aW51aXRpZXModmFsdWVzLCB0aW1lcywgdGhyZXNob2xkKQog
ICAgICAgICB9CiAgICAgfQogCisgICAgdmFyIHRlc3RDb3VudDsKKworICAgIGlmIChicmVha3Mu
bGVuZ3RoID49IG51bWJlck9mVGVzdHMpIHsKKyAgICAgICAgdGVzdENvdW50ID0gbnVtYmVyT2ZU
ZXN0cyAtIDE7CisgICAgICAgIHRlc3RGYWlsZWQoIkZvdW5kIG1vcmUgZGlzY29udGludWl0aWVz
ICgiICsgYnJlYWtzLmxlbmd0aCArICIpIHRoYW4gZXhwZWN0ZWQuICBPbmx5IGNvbXBhcmluZyBm
aXJzdCAiICsgKG51bWJlck9mVGVzdHMgKyAxKSArICJkaXNjb250aW51aXRpZXMuIik7CisgICAg
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0Q291bnQgPSBi
cmVha3MubGVuZ3RoOworICAgIH0KKyAgICAKICAgICAvLyBDb21wYXJlIHRoZSBsb2NhdGlvbiBv
ZiBlYWNoIGRpc2NvbnRpbnVpdHkgd2l0aCB0aGUgZW5kIHRpbWUgb2YgZWFjaCBpbnRlcnZhbC4g
KFRoZXJlIGlzIG5vCiAgICAgLy8gZGlzY29udGludWl0eSBhdCB0aGUgc3RhcnQgb2YgdGhlIHNp
Z25hbC4pCi0gICAgZm9yICh2YXIgayA9IDA7IGsgPCBicmVha3MubGVuZ3RoOyArK2spIHsKKyAg
ICBmb3IgKHZhciBrID0gMDsgayA8IHRlc3RDb3VudDsgKytrKSB7CiAgICAgICAgIHZhciBleHBl
Y3RlZFNhbXBsZUZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUodGltZXNbayArIDFdLCBzYW1wbGVS
YXRlKTsKICAgICAgICAgaWYgKGJyZWFrc1trXSAhPSBleHBlY3RlZFNhbXBsZUZyYW1lKSB7CiAg
ICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CkBAIC05Niw4ICsyMjAsMTQgQEAgZnVuY3Rpb24g
dmVyaWZ5RGlzY29udGludWl0aWVzKHZhbHVlcywgdGltZXMsIHRocmVzaG9sZCkKIAogICAgIGlm
IChiYWRMb2NhdGlvbnMpIHsKICAgICAgICAgdGVzdEZhaWxlZChiYWRMb2NhdGlvbnMgKyAiIGRp
c2NvbnRpbnVpdGllcyBhdCBpbmNvcnJlY3QgbG9jYXRpb25zIik7CisgICAgICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsKICAgICB9IGVsc2UgewotICAgICAgICB0ZXN0UGFzc2VkKCJBbGwgIiArIChicmVh
a3MubGVuZ3RoICsgMSkgKyAiIHRlc3RzIHN0YXJ0ZWQgYW5kIGVuZGVkIGF0IHRoZSBjb3JyZWN0
IHRpbWUuIik7CisgICAgICAgIGlmIChicmVha3MubGVuZ3RoICsgMSA9PSBudW1iZXJPZlRlc3Rz
KSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJBbGwgIiArIChicmVha3MubGVuZ3RoICsgMSkg
KyAiIHRlc3RzIHN0YXJ0ZWQgYW5kIGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUuIik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJGb3VuZCAiICsgYnJlYWtzLmxl
bmd0aCArICIgZGlzY29udGludWl0aWVzIGJ1dCBleHBlY3RlZCAiICsgKG51bWJlck9mVGVzdHMg
LSAxKSk7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAg
ICAgCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CkBAIC0xMTcsNyArMjQ3LDcgQEAgZnVuY3Rpb24gdmVy
aWZ5RGlzY29udGludWl0aWVzKHZhbHVlcywgdGltZXMsIHRocmVzaG9sZCkKIC8vIHZhbHVlcyBv
ZiBlYWNoIGludGVydmFsLgogLy8KIC8vIGJyZWFrVGhyZXNob2xkIC0gdGhyZXNob2xkIHRvIHVz
ZSBmb3IgZGV0ZXJtaW5pbmcgZGlzY29udGludWl0aWVzLgotZnVuY3Rpb24gY29tcGFyZVNpZ25h
bHModGVzdE5hbWUsIG1heEVycm9yLCByZW5kZXJlZERhdGEsIGV4cGVjdGVkRnVuY3Rpb24sIHRp
bWVWYWx1ZUluZm8sIGJyZWFrVGhyZXNob2xkKQorZnVuY3Rpb24gY29tcGFyZVNpZ25hbHModGVz
dE5hbWUsIG1heEVycm9yLCByZW5kZXJlZERhdGEsIGV4cGVjdGVkRnVuY3Rpb24sIHRpbWVWYWx1
ZUluZm8sIGJyZWFrVGhyZXNob2xkLCB0aW1lQ29uc3RhbnQpCiB7CiAgICAgdmFyIHN1Y2Nlc3Mg
PSB0cnVlOwogICAgIHZhciBmYWlsZWRUZXN0Q291bnQgPSAwOwpAQCAtMTI4LDEwICsyNTgsMTAg
QEAgZnVuY3Rpb24gY29tcGFyZVNpZ25hbHModGVzdE5hbWUsIG1heEVycm9yLCByZW5kZXJlZERh
dGEsIGV4cGVjdGVkRnVuY3Rpb24sIHRpbWUKICAgICBzdWNjZXNzID0gdmVyaWZ5RGlzY29udGlu
dWl0aWVzKHJlbmRlcmVkRGF0YSwgdGltZXMsIGJyZWFrVGhyZXNob2xkKTsKIAogICAgIGZvciAo
dmFyIGsgPSAwOyBrIDwgbjsgKytrKSB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBjb21wYXJlUGFy
dGlhbFNpZ25hbHMocmVuZGVyZWREYXRhLCBleHBlY3RlZEZ1bmN0aW9uLCB0aW1lc1trXSwgdGlt
ZXNbayArIDFdLCB2YWx1ZXNba10sIHNhbXBsZVJhdGUpOworICAgICAgICB2YXIgcmVzdWx0ID0g
Y29tcGFyZVBhcnRpYWxTaWduYWxzKHJlbmRlcmVkRGF0YSwgZXhwZWN0ZWRGdW5jdGlvbiwgdGlt
ZXNba10sIHRpbWVzW2sgKyAxXSwgdmFsdWVzW2tdLCBzYW1wbGVSYXRlLCB0aW1lQ29uc3RhbnQp
OwogCiAgICAgICAgIGlmIChyZXN1bHQubWF4RXJyb3IgPiBtYXhFcnJvcikgewotICAgICAgICAg
ICAgdGVzdEZhaWxlZCgiSW5jb3JyZWN0IGdhaW4gZm9yIHRlc3QgIiArIGsgKyAiLiBNYXggZXJy
b3IgPSAiICsgcmVzdWx0Lm1heEVycm9yICsgIiBhdCBvZmZzZXQgIiArIChyZXN1bHQuaW5kZXgg
KyB0aW1lVG9TYW1wbGVGcmFtZSh0aW1lc1trXSwgc2FtcGxlUmF0ZSkpKTsKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoIkluY29ycmVjdCB2YWx1ZSBmb3IgdGVzdCAiICsgayArICIuIE1heCBlcnJv
ciA9ICIgKyByZXN1bHQubWF4RXJyb3IgKyAiIGF0IG9mZnNldCAiICsgKHJlc3VsdC5pbmRleCAr
IHRpbWVUb1NhbXBsZUZyYW1lKHRpbWVzW2tdLCBzYW1wbGVSYXRlKSkpOwogICAgICAgICAgICAg
KytmYWlsZWRUZXN0Q291bnQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTAsMjMgKzI4MCw1NCBA
QCBmdW5jdGlvbiBjb21wYXJlU2lnbmFscyh0ZXN0TmFtZSwgbWF4RXJyb3IsIHJlbmRlcmVkRGF0
YSwgZXhwZWN0ZWRGdW5jdGlvbiwgdGltZQogICAgIH0KIH0KIAorLy8gQ3JlYXRlIGEgZnVuY3Rp
b24gdG8gdGVzdCB0aGUgcmVuZGVyZWQgZGF0YSB3aXRoIHRoZSByZWZlcmVuY2UgZGF0YS4KKy8v
CisvLyB0ZXN0TmFtZSAtIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0ZXN0CisvLworLy8gZXJyb3Ig
LSBtYXggYWxsb3dlZCBlcnJvciBiZXR3ZWVuIHJlbmRlcmVkIGRhdGEgYW5kIHRoZSByZWZlcmVu
Y2UgZGF0YS4KKy8vCisvLyByZWZlcmVuY2VGdW5jdGlvbiAtIGZ1bmN0aW9uIHRoYXQgZ2VuZXJh
dGVzIHRoZSByZWZlcmVuY2UgZGF0YSB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZW5kZXJlZAor
Ly8gZGF0YS4KKy8vCisvLyBqdW1wVGhyZXNob2xkIC0gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQg
c3BlY2lmaWVzIHRoZSB0aHJlc2hvbGQgdG8gdXNlIGZvciBkZXRlY3RpbmcKKy8vIGRpc2NvbnRp
bnVpdGllcy4gIElmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIGRpc2NvbnRpbnVpdHlUaHJl
c2hvbGQuCisvLworLy8gdGltZUNvbnN0YW50IC0gb3B0aW9uYWwgcGFyYW1ldGVyIHNwZWNpZnlp
bmcgdGhlIHRpbWUgY29uc3RhbnQsIGlmIG5lZWRlZC4gIChDdXJyZW50bHkgb25seQorLy8gbmVl
ZGVkIGZvciBzZXRUYXJnZXRWYWx1ZUF0VGltZSgpLikKK2Z1bmN0aW9uIGNoZWNrUmVzdWx0RnVu
Y3Rpb24odGVzdE5hbWUsIGVycm9yLCByZWZlcmVuY2VGdW5jdGlvbiwganVtcFRocmVzaG9sZCwg
dGltZUNvbnN0YW50KQoreworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2
YXIgYnVmZmVyID0gZXZlbnQucmVuZGVyZWRCdWZmZXI7CisgICAgICAgIHJlbmRlcmVkRGF0YSA9
IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgICAgICB2YXIgdGhyZXNob2xkOworCisg
ICAgICAgIGlmICghanVtcFRocmVzaG9sZCkgeworICAgICAgICAgICAgdGhyZXNob2xkID0gZGlz
Y29udGludWl0eVRocmVzaG9sZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocmVz
aG9sZCA9IGp1bXBUaHJlc2hvbGQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvbXBh
cmVTaWduYWxzKHRlc3ROYW1lLCBlcnJvciwgcmVuZGVyZWREYXRhLCByZWZlcmVuY2VGdW5jdGlv
biwgdGltZVZhbHVlSW5mbywgdGhyZXNob2xkLCB0aW1lQ29uc3RhbnQpOworCisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0KK30KKwogLy8gUnVuIGFsbCB0aGUgYXV0b21hdGlvbiB0ZXN0
cy4KIC8vCi0vLyBpbml0aWFsVmFsdWUgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgZmlyc3Qg
dGltZSBpbnRlcnZhbC4KKy8vIG51bWJlck9mVGVzdHMgLSBudW1iZXIgb2YgdGVzdHMgKHRpbWUg
aW50ZXJ2YWxzKSB0byBydW4uCiAvLwotLy8gZW5kVmFsdWVEZWx0YUZ1bmN0aW9uIC0gSG93IG11
Y2ggdGhlIGVuZCB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHZhbHVlIGF0IHRoZSBzdGFydCBvZiB0
aGUKLS8vIGludGVydmFsLgorLy8gaW5pdGlhbFZhbHVlIC0gVGhlIGluaXRpYWwgdmFsdWUgb2Yg
dGhlIGZpcnN0IHRpbWUgaW50ZXJ2YWwuCiAvLwogLy8gc2V0VmFsdWVGdW5jdGlvbiAtIGZ1bmN0
aW9uIHRoYXQgc2V0cyB0aGUgc3BlY2lmaWVkIHZhbHVlIGF0IHRoZSBzdGFydCBvZiBhIHRpbWUg
aW50ZXJ2YWwuCiAvLwogLy8gYXV0b21hdGlvbkZ1bmN0aW9uIC0gZnVuY3Rpb24gdGhhdCBzZXRz
IHRoZSBlbmQgdmFsdWUgZm9yIHRoZSB0aW1lIGludGVydmFsLiAgSXQgc3BlY2lmaWVzIGhvdwog
Ly8gdGhlIHZhbHVlIGFwcHJvYWNoZXMgdGhlIGVuZCB2YWx1ZS4KIC8vCi0vLyB2YWx1ZVVwZGF0
ZUZ1bmN0aW9uIC0gVGhlIHN0YXJ0aW5nIHZhbHVlIGF0IHRpbWUgaW50ZXJ2YWwgayBpcyBhZGp1
c3RlZCBieSB2YWx1ZVVwZGF0ZUZ1bmN0aW9uKGspIHRvIGdpdmUgdGhlIG5ldyBzdGFydGluZyB2
YWx1ZSBhdCB0aW1lIGludGVydmFsIGsgKyAxLgotLy8KIC8vIEFuIG9iamVjdCBpcyByZXR1cm5l
ZCBjb250YWluaW5nIGFuIGFycmF5IG9mIHN0YXJ0IHRpbWVzIGZvciBlYWNoIHRpbWUgaW50ZXJ2
YWwsIGFuZCBhbiBhcnJheQogLy8gZ2l2aW5nIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcyBmb3Ig
dGhlIGludGVydmFsLgotZnVuY3Rpb24gZG9BdXRvbWF0aW9uKGluaXRpYWxWYWx1ZSwgZW5kVmFs
dWVEZWx0YUZ1bmN0aW9uLCBzZXRWYWx1ZUZ1bmN0aW9uLCBhdXRvbWF0aW9uRnVuY3Rpb24sIHZh
bHVlVXBkYXRlRnVuY3Rpb24pCitmdW5jdGlvbiBkb0F1dG9tYXRpb24obnVtYmVyT2ZUZXN0cywg
aW5pdGlhbFZhbHVlLCBzZXRWYWx1ZUZ1bmN0aW9uLCBhdXRvbWF0aW9uRnVuY3Rpb24pCiB7CiAg
ICAgdmFyIHRpbWVJbmZvID0gWzBdOwogICAgIHZhciB2YWx1ZUluZm8gPSBbXTsKQEAgLTE3NSwy
MCArMzM2LDg3IEBAIGZ1bmN0aW9uIGRvQXV0b21hdGlvbihpbml0aWFsVmFsdWUsIGVuZFZhbHVl
RGVsdGFGdW5jdGlvbiwgc2V0VmFsdWVGdW5jdGlvbiwgYXV0CiAgICAgZm9yICh2YXIgayA9IDA7
IGsgPCBudW1iZXJPZlRlc3RzOyArK2spIHsKICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IGsgKiB0
aW1lSW50ZXJ2YWw7CiAgICAgICAgIHZhciBlbmRUaW1lID0gKGsgKyAxKSAqIHRpbWVJbnRlcnZh
bDsKLSAgICAgICAgdmFyIGVuZFZhbHVlID0gdmFsdWUgKyBlbmRWYWx1ZURlbHRhRnVuY3Rpb24o
ayk7CisgICAgICAgIHZhciBlbmRWYWx1ZSA9IHZhbHVlICsgZW5kVmFsdWVEZWx0YShrKTsKIAog
ICAgICAgICAvLyBTZXQgdGhlIHZhbHVlIGF0IHRoZSBzdGFydCBvZiB0aGUgdGltZSBpbnRlcnZh
bC4KICAgICAgICAgc2V0VmFsdWVGdW5jdGlvbih2YWx1ZSwgc3RhcnRUaW1lKTsKIAotICAgICAg
ICAvLyBTcGVjaWZ5IHRoZSB0YXJnZXQgdmFsdWUsIGFuZCBob3cgd2Ugc2hvdWxkIGFwcHJvYWNo
IHRoZSB0YXJnZXQgdmFsdWUuCisgICAgICAgIC8vIFNwZWNpZnkgdGhlIGVuZCBvciB0YXJnZXQg
dmFsdWUsIGFuZCBob3cgd2Ugc2hvdWxkIGFwcHJvYWNoIGl0LgogICAgICAgICBhdXRvbWF0aW9u
RnVuY3Rpb24oZW5kVmFsdWUsIHN0YXJ0VGltZSwgZW5kVGltZSk7CiAKICAgICAgICAgLy8gS2Vl
cCB0cmFjayBvZiB0aGUgc3RhcnQgdGltZXMsIGFuZCB0aGUgc3RhcnQgYW5kIGVuZCB2YWx1ZXMg
Zm9yIGVhY2ggdGltZSBpbnRlcnZhbC4KICAgICAgICAgdGltZUluZm8ucHVzaChlbmRUaW1lKTsK
ICAgICAgICAgdmFsdWVJbmZvLnB1c2goe3N0YXJ0VmFsdWU6IHZhbHVlLCBlbmRWYWx1ZSA6IGVu
ZFZhbHVlfSk7CiAKLSAgICAgICAgdmFsdWUgKz0gdmFsdWVVcGRhdGVGdW5jdGlvbihrKTsKKyAg
ICAgICAgdmFsdWUgKz0gdmFsdWVVcGRhdGUoayk7CiAgICAgfQogCiAgICAgcmV0dXJuIHt0aW1l
cyA6IHRpbWVJbmZvLCB2YWx1ZXMgOiB2YWx1ZUluZm99OwogfQorCisvLyBDcmVhdGUgdGhlIGF1
ZGlvIGdyYXBoIGZvciB0aGUgdGVzdCBhbmQgdGhlbiBydW4gdGhlIHRlc3QuCisvLworLy8gbnVt
YmVyT2ZUZXN0cyAtIG51bWJlciBvZiB0aW1lIGludGVydmFscyAodGVzdHMpIHRvIHJ1bi4KKy8v
CisvLyBpbml0aWFsVmFsdWUgLSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgZ2FpbiBhdCB0aW1l
IDAuCisvLworLy8gc2V0VmFsdWVGdW5jdGlvbiAtIGZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWUg
YXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHRpbWUgaW50ZXJ2YWwuCisvLworLy8gYXV0b21hdGlv
bkZ1bmN0aW9uIC0gdGhlIEF1ZGlvUGFyYW1UaW1lbGluZSBhdXRvbWF0aW9uIGZ1bmN0aW9uCisv
LworLy8gdGVzdE5hbWUgLSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgdGVzdCB0aGF0IGlzIGJlaW5n
IHJ1bi4KKy8vCisvLyBtYXhFcnJvciAtIG1heGltdW0gYWxsb3dlZCBlcnJvciBiZXR3ZWVuIHRo
ZSByZW5kZXJlZCBkYXRhIGFuZCB0aGUgcmVmZXJlbmNlIGRhdGEKKy8vCisvLyByZWZlcmVuY2VG
dW5jdGlvbiAtIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSByZWZlcmVuY2UgZGF0YSB0byBi
ZSBjb21wYXJlZCBhZ2FpbnN0IHRoZQorLy8gcmVuZGVyZWQgZGF0YS4KKy8vCisvLyBqdW1wVGhy
ZXNob2xkIC0gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSB0aHJlc2hvbGQg
dG8gdXNlIGZvciBkZXRlY3RpbmcKKy8vIGRpc2NvbnRpbnVpdGllcy4gIElmIG5vdCBzcGVjaWZp
ZWQsIGRlZmF1bHRzIHRvIGRpc2NvbnRpbnVpdHlUaHJlc2hvbGQuCisvLworLy8gdGltZUNvbnN0
YW50IC0gb3B0aW9uYWwgcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlIHRpbWUgY29uc3RhbnQsIGlm
IG5lZWRlZC4gIChDdXJyZW50bHkgb25seQorLy8gbmVlZGVkIGZvciBzZXRUYXJnZXRWYWx1ZUF0
VGltZSgpLikKK2Z1bmN0aW9uIGNyZWF0ZUF1ZGlvR3JhcGhBbmRUZXN0KG51bWJlck9mVGVzdHMs
IGluaXRpYWxWYWx1ZSwgc2V0VmFsdWVGdW5jdGlvbiwgYXV0b21hdGlvbkZ1bmN0aW9uLCB0ZXN0
TmFtZSwgbWF4RXJyb3IsIHJlZmVyZW5jZUZ1bmN0aW9uLCBqdW1wVGhyZXNob2xkLCB0aW1lQ29u
c3RhbnQpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB3aW5kb3cuanNUZXN0SXNB
c3luYyA9IHRydWU7CisKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAg
IGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHJlbmRlckxlbmd0aChudW1iZXJP
ZlRlc3RzKSwgc2FtcGxlUmF0ZSk7CisgICAgdmFyIGNvbnN0YW50QnVmZmVyID0gY3JlYXRlQ29u
c3RhbnRCdWZmZXIoY29udGV4dCwgMSwgcmVuZGVyTGVuZ3RoKG51bWJlck9mVGVzdHMpKTsKKwor
ICAgIC8vIFdlIHVzZSBhbiBBdWRpb0dhaW5Ob2RlIGhlcmUgc2ltcGx5IGFzIGEgY29udmVuaWVu
dCB3YXkgdG8gdGVzdCB0aGUgQXVkaW9QYXJhbQorICAgIC8vIGF1dG9tYXRpb24sIHNpbmNlIGl0
J3MgZWFzeSB0byBwYXNzIGEgY29uc3RhbnQgdmFsdWUgdGhyb3VnaCB0aGUgbm9kZSwgYXV0b21h
dGUgdGhlCisgICAgLy8gLmdhaW4gYXR0cmlidXRlIGFuZCBvYnNlcnZlIHRoZSByZXN1bHRpbmcg
dmFsdWVzLgorCisgICAgZ2Fpbk5vZGUgPSBjb250ZXh0LmNyZWF0ZUdhaW5Ob2RlKCk7CisKKyAg
ICB2YXIgYnVmZmVyU291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICBi
dWZmZXJTb3VyY2UuYnVmZmVyID0gY29uc3RhbnRCdWZmZXI7CisgICAgYnVmZmVyU291cmNlLmNv
bm5lY3QoZ2Fpbk5vZGUpOworICAgIGdhaW5Ob2RlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlv
bik7CisKKyAgICAvLyBTZXQgdXAgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzIHRo
YXQgY29udHJvbCBob3cgdGhlIGF1dG9tYXRpb24gdGVzdCB2YWx1ZXMgcHJvZ3Jlc3MKKyAgICAv
LyBmb3IgZWFjaCB0aW1lIGludGVydmFsLgorICAgIHN0YXJ0aW5nVmFsdWVEZWx0YSA9IGluaXRp
YWxWYWx1ZSAvIG51bWJlck9mVGVzdHM7CisgICAgc3RhcnRFbmRWYWx1ZUNoYW5nZSA9IHN0YXJ0
aW5nVmFsdWVEZWx0YSAvIDI7CisgICAgZGlzY29udGludWl0eVRocmVzaG9sZCA9IHN0YXJ0RW5k
VmFsdWVDaGFuZ2UgLyAyOworCisgICAgLy8gUnVuIHRoZSBhdXRvbWF0aW9uIHRlc3RzLgorICAg
IHRpbWVWYWx1ZUluZm8gPSBkb0F1dG9tYXRpb24obnVtYmVyT2ZUZXN0cywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldFZhbHVlRnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvbWF0aW9uRnVuY3Rpb24pOworICAgIGJ1ZmZlclNvdXJjZS5ub3RlT24oMCk7
CisgICAgICAKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja1Jlc3VsdEZ1bmN0aW9uKHRl
c3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4
RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZl
cmVuY2VGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGp1bXBUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lQ29uc3RhbnQpOworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128752</attachid>
            <date>2012-02-24 10:00:15 -0800</date>
            <delta_ts>2012-02-29 15:22:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77666-20120224100013.patch</filename>
            <type>text/plain</type>
            <size>40431</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTAwMGU4YjM3MTYwNGZl
MmU5NDMwNTQ4NjZlNDc3NjFkYzkwYTUxMy4uNmYyYTMzODMwYTBlZGRhMWU5MGFlZWQ3OTdmMDcz
NGM4OTYxZGE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAyLTIzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBdWRpb1BhcmFtIG5lZWRzIHRl
c3RzIGZvciB0aGUgcGFyYW1ldGVyIGF1dG9tYXRpb24gcm91dGluZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzY2NgorCisgICAgICAgIEFkZCB0
ZXN0cyB0aGUgQXVkaW9QYXJhbSBhdXRvbWF0aW9uIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRp
by9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKKyAgICAgICAgICAgICAg
IHdlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFsdWVBdFRpbWUuaHRtbAorICAgICAgICAg
ICAgICAgd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS5odG1sCisgICAgICAgICAg
ICAgICB3ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUuaHRtbAorCisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlSW1wbCk6IFJvdW5kIHRoZQor
ICAgICAgICBjdXJ2ZUluZGV4IHRvIGZpeCB0aW1pbmcgaXNzdWUgaW4gc2V0VmFsdWVDdXJ2ZUF0
VGltZS4KKwogMjAxMi0wMi0yMyAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgU3dpdGNoIGRyYXdMaW5lRm9yQm94U2lkZSB0byB1c2UgaW50ZWdlcnMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCmluZGV4IGNk
OGY1MzY3NjJhNGNlMGMwMzAzNTMzOTY5MThmZDYxYzViNWM0MjQuLjJiYzJmMjRjNWIxYmQzZTAz
YTAwZjYxMzMzNWJlZGZjMGNhMmQwNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9QYXJhbVRpbWVsaW5lLmNwcApAQCAtMzI5LDcgKzMyOSwxMCBAQCBmbG9hdCBBdWRpb1Bh
cmFtVGltZWxpbmU6OnZhbHVlc0ZvclRpbWVSYW5nZUltcGwoZmxvYXQgc3RhcnRUaW1lLAogICAg
ICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIHN0cmV0Y2hlZCBjdXJ2ZSBkYXRhIHVzaW5n
IG5lYXJlc3QgbmVpZ2hib3Igc2FtcGxpbmcuCiAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJz
YW1wbGVkIGN1cnZlIGRhdGEgY2FuIGJlIHByb3ZpZGVkIGlmIHNtb290aG5lc3MgaXMgZGVzaXJl
ZC4KICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHdyaXRlSW5kZXggPCBmaWxsVG9GcmFtZTsg
Kyt3cml0ZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjdXJ2ZUlu
ZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGN1cnZlVmlydHVhbEluZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElkZWFsbHkgdXNlIHJvdW5kKCkgZnJvbSBNYXRoRXh0cmFzLCBi
dXQgd2UncmUgaW4gYSB0aWdodCBsb29wIGhlcmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSdyZSB0cmFkaW5nIG9mZiBwcmVjaXNpb24gZm9yIGV4dHJhIHNwZWVkLgorICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY3VydmVJbmRleCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPigwLjUgKyBjdXJ2ZVZpcnR1YWxJbmRleCk7CisKICAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnZlVmlydHVhbEluZGV4ICs9IGN1cnZlUG9pbnRzUGVyRnJhbWU7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEJvdW5kcyBjaGVjay4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiYWY2Mjc1ODAxMGE2OWY4NGNk
NThhZjBmZDNjN2I1ZWFkNGI1NTgyLi44NDM2ZDEzMmE0NGNmMDg0OTA4NGVkODE5MGExMzAxOWI4
YjVmMmRhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTItMDItMjMgIFJheW1vbmQgVG95ICA8
cnRveUBnb29nbGUuY29tPgorCisgICAgICAgIEF1ZGlvUGFyYW0gbmVlZHMgdGVzdHMgZm9yIHRo
ZSBwYXJhbWV0ZXIgYXV0b21hdGlvbiByb3V0aW5lcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NjY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb3BhcmFtLWV4cG9uZW50aWFs
UmFtcFRvVmFsdWVBdFRpbWUuaHRtbDoKKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb3BhcmFtLWxp
bmVhclJhbXBUb1ZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vi
YXVkaW8vYXVkaW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRUYXJnZXRWYWx1
ZUF0VGltZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZh
bHVlQXRUaW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9w
YXJhbS1zZXRWYWx1ZUF0VGltZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9hdWRp
b3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVzdGluZy5qczoKKyAgICAg
ICAgKHJlbmRlckxlbmd0aCk6CisgICAgICAgIChjcmVhdGVDb25zdGFudEFycmF5KToKKyAgICAg
ICAgKGNyZWF0ZUxpbmVhclJhbXBBcnJheSk6CisgICAgICAgIChkaXNjcmV0ZVRpbWVDb25zdGFu
dEZvclNhbXBsZVJhdGUpOgorICAgICAgICAoY3JlYXRlRXhwb25lbnRpYWxBcHByb2FjaEFycmF5
KToKKyAgICAgICAgKGNyZWF0ZVNpbmVXYXZlQXJyYXkpOgorICAgICAgICAoZW5kVmFsdWVEZWx0
YSk6CisgICAgICAgICh2YWx1ZVVwZGF0ZSk6CisgICAgICAgIChjb21wYXJlUGFydGlhbFNpZ25h
bHMpOgorICAgICAgICAodmVyaWZ5RGlzY29udGludWl0aWVzKToKKyAgICAgICAgKGNvbXBhcmVT
aWduYWxzKToKKyAgICAgICAgKGNoZWNrUmVzdWx0RnVuY3Rpb24ucmV0dXJuLnZhcik6CisgICAg
ICAgIChjaGVja1Jlc3VsdEZ1bmN0aW9uKToKKyAgICAgICAgKGRvQXV0b21hdGlvbik6CisgICAg
ICAgIChjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdCk6CisgICAgICAgICogd2ViYXVkaW8vcmVzb3Vy
Y2VzL2F1ZGlvLXRlc3RpbmcuanM6IE1vdmVkIGlzVmFsaWROdW1iZXIgZnJvbQorICAgICAgICBi
aXF1YWQtdGVzdGluZy5qcyB0byBoZXJlLgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9i
aXF1YWQtdGVzdGluZy5qczogTW92ZWQgaXNWYWxpZE51bWJlciBmcm9tCisgICAgICAgIGhlcmUg
dG8gYXVkaW8tdGVzdGluZy5qcy4KKwogMjAxMi0wMi0yMyAgS2VuaWNoaSBJc2hpYmFzaGkgIDxi
YXNoaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCB0ZXN0IGZpeCBhZnRlciBy
MTA4Njk5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1leHBv
bmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRp
b3BhcmFtLWV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuaHRtbAppbmRleCAzZTYyZjg0MjM2
NjE4YjQxMWRhMjUzNzk1ZmFjOTlhOTRkOTcwZGQ1Li4wMmUxNzAyN2I2OGM5ZDI3ZGRmMDYyM2Zl
YTc3NWY5ZWNmYWRmYzhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3Bh
cmFtLWV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9hdWRpb3BhcmFtLWV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUuaHRtbApAQCAt
MjAsNDUgKzIwLDE1IEBACiAgICAgICAvLyBkaXNjb250aW51aXR5IGlzIGZvciB0ZXN0aW5nIHRp
bWluZy4gIEFsc28sIHdlIGFsdGVybmF0ZSBiZXR3ZWVuIGFuIGluY3JlYXNpbmcgYW5kCiAgICAg
ICAvLyBkZWNyZWFzaW5nIHJhbXAgZm9yIGVhY2ggaW50ZXJ2YWwuCiAKKyAgICAgIC8vIE51bWJl
ciBvZiB0ZXN0cyB0byBydW4uCisgICAgICB2YXIgbnVtYmVyT2ZUZXN0cyA9IDEwMDsKKwogICAg
ICAgLy8gTWF4IGFsbG93ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW5kZXJlZCBkYXRhIGFu
ZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgogICAgICAgdmFyIG1heEFsbG93ZWRFcnJvciA9IDYuNzVl
LTQ7CiAKLSAgICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5n
IHRpbWVzIGFuZCBzdGFydGluZyBhbmQgZW5kaW5nIHZhbHVlcyBmb3IgZWFjaAotICAgICAgLy8g
dGltZSBpbnRlcnZhbC4KLSAgICAgIHZhciB0aW1lVmFsdWVJbmZvOwotCiAgICAgICAvLyBUaGUg
QXVkaW9HYWluTm9kZSBzdGFydHMgd2l0aCB0aGlzIHZhbHVlIGluc3RlYWQgb2YgdGhlIGRlZmF1
bHQgdmFsdWUuCiAgICAgICB2YXIgaW5pdGlhbFZhbHVlID0gMTAwOwogCi0gICAgICAvLyBUaGUg
ZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YXJ0aW5nIHZhbHVlcyBiZXR3ZWVuIGVhY2ggdGltZSBpbnRl
cnZhbC4KLSAgICAgIHZhciBzdGFydGluZ1ZhbHVlRGVsdGEgPSBpbml0aWFsVmFsdWUgLyBudW1i
ZXJPZlRlc3RzOwotICAgICAgCi0gICAgICAvLyBFYWNoIGV4cG9uZW50aWFsIHJhbXAgd2lsbCBp
bmNyZWFzZSBvciBkZWNyZWFzZSBieSB0aGlzIG11Y2ggZnJvbSB0aGUgc3RhcnQgdG8gdGhlIGVu
ZCBvZgotICAgICAgLy8gdGhlIHRpbWUgaW50ZXJ2YWwuICBXZSBjaG9vc2UgaGFsZiBvZiBzdGFy
dGluZ1ZhbHVlRGVsdGEgc28gdGhhdCB0aGUgZW5kaW5nIHZhbHVlIG9mIHRoZQotICAgICAgLy8g
cmFtcCB3aWxsIGJlIGRpc3RpbmN0IGZyb20gdGhlIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSByYW1w
IGZvciBuZXh0IHRpbWUgaW50ZXJ2YWwuICBUaGlzCi0gICAgICAvLyBhbGxvd3MgdXMgdG8gZGV0
ZWN0IHdoZXJlIHRoZSByYW1wIGJlZ2lucyBhbmQgZW5kcy4KLSAgICAgIHZhciBzdGFydEVuZFZh
bHVlQ2hhbmdlID0gc3RhcnRpbmdWYWx1ZURlbHRhIC8gMjsKLQotICAgICAgLy8gVGhyZXNob2xk
IHRvIHVzZSBmb3IgZGV0ZWN0aW5nIGRpc2NvbnRpbnVpdGllcyB0aGF0IHNob3VsZCBhcHBlYXIg
YXQgZWFjaCB0aW1lIGludGVydmFsLgotICAgICAgdmFyIGRpc2NvbnRpbnVpdHlUaHJlc2hvbGQg
PSBzdGFydEVuZFZhbHVlQ2hhbmdlIC8gMjsKLQotICAgICAgdmFyIGdhaW5Ob2RlOwotICAgICAg
Ci0gICAgICB2YXIgY29uc3RhbnRCdWZmZXI7Ci0gICAgICB2YXIgYnVmZmVyU291cmNlOwotCi0g
ICAgICAvLyBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3RhcnRpbmcgdmFsdWUg
YW5kIHRoZSBlbmRpbmcgdmFsdWUgZm9yIHRpbWUgaW50ZXJ2YWwKLSAgICAgIC8vIHx0aW1lSW50
ZXJ2YWxJbmRleHwuICBXZSBhbHRlcm5hdGUgYmV0d2VlbiBhbiBlbmQgdmFsdWUgdGhhdCBpcyBh
Ym92ZSBvciBiZWxvdyB0aGUgc3RhcnRpbmcKLSAgICAgIC8vIHZhbHVlLgotICAgICAgZnVuY3Rp
b24gZW5kVmFsdWVEZWx0YSh0aW1lSW50ZXJ2YWxJbmRleCkKLSAgICAgIHsKLSAgICAgICAgICBp
ZiAodGltZUludGVydmFsSW5kZXggJiAxKSB7Ci0gICAgICAgICAgICAgIHJldHVybiAtc3RhcnRF
bmRWYWx1ZUNoYW5nZTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICByZXR1cm4g
c3RhcnRFbmRWYWx1ZUNoYW5nZTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0KICAgICAgIC8vIFNl
dCB0aGUgZ2FpbiBub2RlIHZhbHVlIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgYXQgdGhlIHNwZWNp
ZmllZCB0aW1lLgogICAgICAgZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUsIHRpbWUpCiAgICAgICB7
CkBAIC03Myw2NSArNDMsMTYgQEAKICAgICAgICAgICBnYWluTm9kZS5nYWluLmV4cG9uZW50aWFs
UmFtcFRvVmFsdWVBdFRpbWUodmFsdWUsIGVuZFRpbWUpCiAgICAgICB9CiAgICAgICAKLSAgICAg
IC8vIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzdGFydGluZyB2YWx1ZSBhdCB8
dGltZUludGVydmFsSW5kZXh8IGFuZCB0aGUgc3RhcnRpbmcKLSAgICAgIC8vIHZhbHVlIGF0IHRo
ZSBuZXh0IHRpbWUgaW50ZXJ2YWwuICBTaW5jZSB3ZSBzdGFydGVkIGF0IGEgbGFyZ2UgaW5pdGlh
bCB2YWx1ZSwgd2UgZGVjcmVhc2UKLSAgICAgIC8vIHRoZSB2YWx1ZSBhdCBlYWNoIHRpbWUgaW50
ZXJ2YWwuCi0gICAgICBmdW5jdGlvbiB2YWx1ZVVwZGF0ZSh0aW1lSW50ZXJ2YWxJbmRleCkKLSAg
ICAgIHsKLSAgICAgICAgICByZXR1cm4gLXN0YXJ0aW5nVmFsdWVEZWx0YTsKLSAgICAgIH0KLQot
ICAgICAgZnVuY3Rpb24gY2hlY2tSZXN1bHQoZXZlbnQpCi0gICAgICB7Ci0gICAgICAgICAgdmFy
IGJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOwotICAgICAgICAgIHJlbmRlcmVkRGF0YSA9
IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKLQotICAgICAgICAgIGNvbXBhcmVTaWduYWxzKCJl
eHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKCkiLCBtYXhBbGxvd2VkRXJyb3IsIHJlbmRlcmVk
RGF0YSwgY3JlYXRlRXhwb25lbnRpYWxSYW1wQXJyYXksIHRpbWVWYWx1ZUluZm8sIGRpc2NvbnRp
bnVpdHlUaHJlc2hvbGQpOwotCi0gICAgICAgICAgZmluaXNoSlNUZXN0KCk7Ci0gICAgICB9Ci0g
ICAgICAKICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQogICAgICAgewotICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgd2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOworICAgICAgICAgIGNyZWF0ZUF1ZGlvR3JhcGhBbmRUZXN0KG51bWJl
ck9mVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlUmFtcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgpIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhBbGxvd2VkRXJyb3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRXhwb25lbnRpYWxSYW1wQXJyYXkpOwogCi0g
ICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KLSAgICAgICAgICBjb250
ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCByZW5kZXJMZW5ndGgsIHNhbXBsZVJhdGUp
OwotICAgICAgICAgIGNvbnN0YW50QnVmZmVyID0gY3JlYXRlQ29uc3RhbnRCdWZmZXIoY29udGV4
dCwgMSwgcmVuZGVyTGVuZ3RoKTsKLQotICAgICAgICAgIC8vIFdlIHVzZSBhbiBBdWRpb0dhaW5O
b2RlIGhlcmUgc2ltcGx5IGFzIGEgY29udmVuaWVudCB3YXkgdG8gdGVzdCB0aGUgQXVkaW9QYXJh
bQotICAgICAgICAgIC8vIGF1dG9tYXRpb24sIHNpbmNlIGl0J3MgZWFzeSB0byBwYXNzIGEgY29u
c3RhbnQgdmFsdWUgdGhyb3VnaCB0aGUgbm9kZSwgYXV0b21hdGUgdGhlCi0gICAgICAgICAgLy8g
LmdhaW4gYXR0cmlidXRlIGFuZCBvYnNlcnZlIHRoZSByZXN1bHRpbmcgdmFsdWVzLgotCi0gICAg
ICAgICAgZ2Fpbk5vZGUgPSBjb250ZXh0LmNyZWF0ZUdhaW5Ob2RlKCk7Ci0KLSAgICAgICAgICBi
dWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwotICAgICAgICAgIGJ1
ZmZlclNvdXJjZS5idWZmZXIgPSBjb25zdGFudEJ1ZmZlcjsKLSAgICAgICAgICBidWZmZXJTb3Vy
Y2UuY29ubmVjdChnYWluTm9kZSk7Ci0gICAgICAgICAgZ2Fpbk5vZGUuY29ubmVjdChjb250ZXh0
LmRlc3RpbmF0aW9uKTsKLQotICAgICAgICAgIC8vIEF0IGVhY2ggdGltZSBpbnRlcnZhbCwgd2Ug
YWRqdXN0IHRoZSB2YWx1ZSBieSBzdGFydGluZ1ZhbHVlRGVsdGEuICBIb3dldmVyLCB0aGUKLSAg
ICAgICAgICAvLyBleHBvbmVudGlhbCByYW1wIGVuZCB2YWx1ZSBpcyB0aGUgdmFsdWUgKy8tIHN0
YXJ0RW5kVmFsdWVDaGFuZ2UuICAoV2UgYWx0ZXJuYXRlbHkKLSAgICAgICAgICAvLyBzcGVjaWZ5
IHRoZSBlbmQgdmFsdWUgdG8gYmUgZ3JlYXRlciBvciBzbWFsbGVyIHRoYW4gdGhlIHN0YXJ0aW5n
IHZhbHVlLCB0byB0ZXN0IHRoZQotICAgICAgICAgIC8vIHJhbXAgZ29pbmcgdXAgYW5kIGRvd24u
KQotICAgICAgICAgIC8vCi0gICAgICAgICAgLy8gQnkgZG9pbmcgaXQgdGhpcyB3YXksIHdlIGdl
dCBhIGRpc2NvbnRpbnVpdHkgYXQgZWFjaCB0aW1lIGludGVydmFsIHdoaWNoIHdlIGNhbiB1c2Ug
dG8KLSAgICAgICAgICAvLyB0ZXN0IGlmIHRoZSByYW1wIHN0YXJ0ZWQgYW5kIGVuZGVkIGF0IHRo
ZSBjb3JyZWN0IHRpbWUuCi0gICAgICAgICAgdGltZVZhbHVlSW5mbyA9IGRvQXV0b21hdGlvbihp
bml0aWFsVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRW
YWx1ZURlbHRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVJhbXAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVVwZGF0ZSk7Ci0K
LSAgICAgICAgICBidWZmZXJTb3VyY2Uubm90ZU9uKDApOwotICAgICAgCi0gICAgICAgICAgY29u
dGV4dC5vbmNvbXBsZXRlID0gY2hlY2tSZXN1bHQ7Ci0gICAgICAgICAgY29udGV4dC5zdGFydFJl
bmRlcmluZygpOwogICAgICAgfQogCiAgICAgICBydW5UZXN0KCk7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tbGluZWFyUmFtcFRvVmFs
dWVBdFRpbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1YWI1N2E2NTdiZjhiMTkxYjJhNzcx
ZjlkMzNmNjk1OWRlZmNhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDExIEBACitUZXN0IEF1ZGlvUGFyYW0gbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoKSBmdW5j
dGlvbmFsaXR5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgQWxsIDEwMCB0
ZXN0cyBzdGFydGVkIGFuZCBlbmRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLgorUEFTUyBBbGwgMTAw
IHRlc3RzIHBhc3NlZCB3aXRoaW4gYW4gYWNjZXB0YWJsZSB0b2xlcmFuY2UuCitQQVNTIEF1ZGlv
UGFyYW0gbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoKSB0ZXN0IHBhc3NlZC4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1l
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmQxZjhkNzdiZjRlNjM4MzU0ZWRmYmI4MzBjOWIzN2IwMzk3MzUw
YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tbGlu
ZWFyUmFtcFRvVmFsdWVBdFRpbWUuaHRtbApAQCAtMCwwICsxLDYxIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0
IEF1ZGlvUGFyYW0gbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoKSBmdW5jdGlvbmFsaXR5LiIpOwor
CisvLyBQbGF5IGEgbG9uZyBEQyBzaWduYWwgb3V0IHRocm91Z2ggYW4gQXVkaW9HYWluTm9kZSwg
YW5kIGNhbGwgc2V0VmFsdWVBdFRpbWUoKSBhbmQKKy8vIGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1l
KCkgYXQgcmVndWxhciBpbnRlcnZhbHMgdG8gc2V0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHZh
bHVlcyBmb3IgYQorLy8gbGluZWFyIHJhbXAuIEVhY2ggdGltZSBpbnRlcnZhbCBoYXMgYSByYW1w
IHdpdGggYSBkaWZmZXJlbnQgc3RhcnRpbmcgYW5kIGVuZGluZyB2YWx1ZSBzbworLy8gdGhhdCB0
aGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkgYXQgZWFjaCB0aW1lIGludGVydmFsIGJvdW5kYXJ5LiAg
VGhlIGRpc2NvbnRpbnVpdHkgaXMgZm9yCisvLyB0ZXN0aW5nIHRpbWluZy4gIEFsc28sIHdlIGFs
dGVybmF0ZSBiZXR3ZWVuIGFuIGluY3JlYXNpbmcgYW5kIGRlY3JlYXNpbmcgcmFtcCBmb3IgZWFj
aAorLy8gaW50ZXJ2YWwuCisKKy8vIE51bWJlciBvZiB0ZXN0cyB0byBydW4uCit2YXIgbnVtYmVy
T2ZUZXN0cyA9IDEwMDsKKworLy8gTWF4IGFsbG93ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBy
ZW5kZXJlZCBkYXRhIGFuZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgordmFyIG1heEFsbG93ZWRFcnJv
ciA9IDYuNWUtNzsKKworLy8gU2V0IHRoZSBnYWluIG5vZGUgdmFsdWUgdG8gdGhlIHNwZWNpZmll
ZCB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuCitmdW5jdGlvbiBzZXRWYWx1ZSh2YWx1ZSwg
dGltZSkKK3sKKyAgICBnYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTsK
K30KKworLy8gR2VuZXJhdGUgYSBsaW5lYXIgcmFtcCBlbmRpbmcgYXQgdGltZSB8ZW5kVGltZXwg
d2l0aCBhbiBlbmRpbmcgdmFsdWUgb2YgfHZhbHVlfC4KK2Z1bmN0aW9uIGdlbmVyYXRlUmFtcCh2
YWx1ZSwgc3RhcnRUaW1lLCBlbmRUaW1lKQoreworICAgIC8vIHxzdGFydFRpbWV8IGlzIGlnbm9y
ZWQgYmVjYXVzZSB0aGUgbGluZWFyIHJhbXAgdXNlcyB0aGUgdmFsdWUgZnJvbSB0aGUgc2V0VmFs
dWVBdFRpbWUoKSBjYWxsCisgICAgLy8gYWJvdmUuCisgICAgZ2Fpbk5vZGUuZ2Fpbi5saW5lYXJS
YW1wVG9WYWx1ZUF0VGltZSh2YWx1ZSwgZW5kVGltZSkKK30KKworZnVuY3Rpb24gcnVuVGVzdCgp
Cit7CisgICAgY3JlYXRlQXVkaW9HcmFwaEFuZFRlc3QobnVtYmVyT2ZUZXN0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZh
bHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlUmFtcCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAibGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4QWxsb3dlZEVycm9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNyZWF0ZUxpbmVhclJhbXBBcnJheSk7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CisgIAorPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRUYXJn
ZXRWYWx1ZUF0VGltZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3Bh
cmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzZkMmEw
ZjFjYjUxOGI3NzNiNmIwYWVlOTA0MTRiOTBhODJlY2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRUYXJnZXRWYWx1ZUF0VGltZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGVzdCBBdWRpb1BhcmFtIHNldFRhcmdldFZhbHVlQXRU
aW1lKCkgZnVuY3Rpb25hbGl0eS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNT
IEFsbCAxMDAgdGVzdHMgc3RhcnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4KK1BB
U1MgQWxsIDEwMCB0ZXN0cyBwYXNzZWQgd2l0aGluIGFuIGFjY2VwdGFibGUgdG9sZXJhbmNlLgor
UEFTUyBBdWRpb1BhcmFtIHNldFRhcmdldFZhbHVlQXRUaW1lKCkgdGVzdCBwYXNzZWQuCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRUYXJnZXRWYWx1ZUF0VGltZS5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRUYXJnZXRWYWx1ZUF0VGlt
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE1NjZjY2UyZjQxMDc0YzVmOGQ3M2VkOWI3Zjc0N2QxNGM3NmRl
MzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNl
dFRhcmdldFZhbHVlQXRUaW1lLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW9wYXJhbS10ZXN0aW5nLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBB
dWRpb1BhcmFtIHNldFRhcmdldFZhbHVlQXRUaW1lKCkgZnVuY3Rpb25hbGl0eS4iKTsKKworLy8g
UGxheSBhIGxvbmcgREMgc2lnbmFsIG91dCB0aHJvdWdoIGFuIEF1ZGlvR2Fpbk5vZGUsIGFuZCBj
YWxsIHNldFZhbHVlQXRUaW1lKCkgYW5kCisvLyBzZXRUYXJnZXRWYWx1ZUF0VGltZSBhdCByZWd1
bGFyIGludGVydmFscyB0byBzZXQgdGhlIHN0YXJ0aW5nIHZhbHVlIGFuZCB0aGUgdGFyZ2V0Cisv
LyB2YWx1ZS4gRWFjaCB0aW1lIGludGVydmFsIGhhcyBhIHJhbXAgd2l0aCBhIGRpZmZlcmVudCBz
dGFydGluZyBhbmQgdGFyZ2V0IHZhbHVlIHNvIHRoYXQKKy8vIHRoZXJlIGlzIGEgZGlzY29udGlu
dWl0eSBhdCBlYWNoIHRpbWUgaW50ZXJ2YWwgYm91bmRhcnkuICBUaGUgZGlzY29udGludWl0eSBp
cyBmb3IgdGVzdGluZworLy8gdGltaW5nLiAgQWxzbywgd2UgYWx0ZXJuYXRlIGJldHdlZW4gYW4g
aW5jcmVhc2luZyBhbmQgZGVjcmVhc2luZyByYW1wIGZvciBlYWNoIGludGVydmFsLgorCisvLyBO
dW1iZXIgb2YgdGVzdHMgdG8gcnVuLgordmFyIG51bWJlck9mVGVzdHMgPSAxMDA7CisKKy8vIE1h
eCBhbGxvd2VkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVuZGVyZWQgZGF0YSBhbmQgdGhlIGV4
cGVjdGVkIHJlc3VsdC4KK3ZhciBtYXhBbGxvd2VkRXJyb3IgPSAyLjc5ZS01OworCisvLyBUaGUg
QXVkaW9HYWluTm9kZSBzdGFydHMgd2l0aCB0aGlzIHZhbHVlIGluc3RlYWQgb2YgdGhlIGRlZmF1
bHQgdmFsdWUuCit2YXIgaW5pdGlhbFZhbHVlID0gMTAwOworCisvLyBTb21lIHN1aXRhYmxlIHRp
bWUgY29uc3RhbnQgc28gdGhhdCB3ZSBjYW4gc2VlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIG92ZXIg
YSB0aW1lSW50ZXJ2YWwuCit2YXIgdGltZUNvbnN0YW50ID0gdGltZUludGVydmFsIC8gMzsKKwor
Ly8gU2V0IHRoZSBnYWluIG5vZGUgdmFsdWUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBhdCB0aGUg
c3BlY2lmaWVkIHRpbWUuCitmdW5jdGlvbiBzZXRWYWx1ZSh2YWx1ZSwgdGltZSkKK3sKKyAgICBn
YWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aW1lKTsKK30KKworLy8gR2VuZXJh
dGUgYW4gZXhwb25lbnRpYWwgYXBwcm9hY2ggc3RhcnRpbmcgYXQgfHN0YXJ0VGltZXwgd2l0aCBh
IHRhcmdldCB2YWx1ZSBvZiB8dmFsdWV8LgorZnVuY3Rpb24gYXV0b21hdGlvbih2YWx1ZSwgc3Rh
cnRUaW1lLCBlbmRUaW1lKQoreworICAgIC8vIGVuZFRpbWUgaXMgbm90IHVzZWQgZm9yIHNldFRh
cmdldFZhbHVlQXRUaW1lLgorICAgIGdhaW5Ob2RlLmdhaW4uc2V0VGFyZ2V0VmFsdWVBdFRpbWUo
dmFsdWUsIHN0YXJ0VGltZSwgdGltZUNvbnN0YW50KQorfQorCitmdW5jdGlvbiBydW5UZXN0KCkK
K3sKKyAgICBjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdChudW1iZXJPZlRlc3RzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRUYXJnZXRWYWx1ZUF0VGltZSgpIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhBbGxvd2VkRXJyb3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlRXhwb25lbnRpYWxBcHByb2FjaEFycmF5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpc2NvbnRpbnVpdHlUaHJlc2hvbGQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZUNvbnN0YW50KTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGlt
ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVl
QXRUaW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGJlMzVjMjRjY2M2Yzc4OWY3OGMxNzcy
OWM2NTA0ODI5MjFhOWMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
YXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAor
VGVzdCBBdWRpb1BhcmFtIHNldFZhbHVlQXRUaW1lKCkgZnVuY3Rpb25hbGl0eS4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIEFsbCAxMDAgdGVzdHMgc3RhcnRlZCBhbmQgZW5k
ZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4KK1BBU1MgQWxsIDEwMCB0ZXN0cyBwYXNzZWQgd2l0aGlu
IGFuIGFjY2VwdGFibGUgdG9sZXJhbmNlLgorUEFTUyBBdWRpb1BhcmFtIHNldFZhbHVlQXRUaW1l
KCkgdGVzdCBwYXNzZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1z
ZXRWYWx1ZUF0VGltZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRW
YWx1ZUF0VGltZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4ODk0ZDgyMWNlMWZjYTEzNjQ2ZjQ3YmM1YzBj
ZGFiM2JmODgwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRp
b3BhcmFtLXNldFZhbHVlQXRUaW1lLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW9wYXJhbS10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVz
dCBBdWRpb1BhcmFtIHNldFZhbHVlQXRUaW1lKCkgZnVuY3Rpb25hbGl0eS4iKTsKKworLy8gUGxh
eSBhIGxvbmcgREMgc2lnbmFsIG91dCB0aHJvdWdoIGFuIEF1ZGlvR2Fpbk5vZGUsIGFuZCBjYWxs
IHNldFZhbHVlQXRUaW1lKCkgYXQgcmVndWxhcgorLy8gaW50ZXJ2YWxzIHRvIHNldCB0aGUgdmFs
dWUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgaW50ZXJ2YWwuICBFYWNoIHRpbWUgaW50ZXJ2YWwg
aGFzCisvLyBkaWZmZXJlbnQgdmFsdWUgc28gdGhhdCB0aGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkg
YXQgZWFjaCB0aW1lIGludGVydmFsIGJvdW5kYXJ5LiAgVGhlCisvLyBkaXNjb250aW51aXR5IGlz
IGZvciB0ZXN0aW5nIHRpbWluZy4KKworLy8gTnVtYmVyIG9mIHRlc3RzIHRvIHJ1bi4KK3ZhciBu
dW1iZXJPZlRlc3RzID0gMTAwOworCisvLyBNYXggYWxsb3dlZCBkaWZmZXJlbmNlIGJldHdlZW4g
dGhlIHJlbmRlcmVkIGRhdGEgYW5kIHRoZSBleHBlY3RlZCByZXN1bHQuCit2YXIgbWF4QWxsb3dl
ZEVycm9yID0gNmUtODsKKworLy8gU2V0IHRoZSBnYWluIG5vZGUgdmFsdWUgdG8gdGhlIHNwZWNp
ZmllZCB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUuCitmdW5jdGlvbiBzZXRWYWx1ZSh2YWx1
ZSwgdGltZSkKK3sKKyAgICBnYWluTm9kZS5nYWluLnNldFZhbHVlQXRUaW1lKHZhbHVlLCB0aW1l
KTsKK30KKworLy8gRm9yIHRlc3Rpbmcgc2V0VmFsdWVBdFRpbWUoKSwgd2UgZG9uJ3QgbmVlZCB0
byBkbyBhbnl0aGluZyBmb3IgYXV0b21hdGlvbi4gYmVjYXVzZSB0aGUgdmFsdWUgYXQKKy8vIHRo
ZSBiZWdpbm5pbmcgb2YgdGhlIGludGVydmFsIGlzIHNldCBieSBzZXRWYWx1ZSBhbmQgaXQgcmVt
YWlucyBjb25zdGFudCBmb3IgdGhlIGR1cmF0aW9uLCB3aGljaAorLy8gaXMgd2hhdCB3ZSB3YW50
LgorZnVuY3Rpb24gYXV0b21hdGlvbih2YWx1ZSwgc3RhcnRUaW1lLCBlbmRUaW1lKQoreworICAg
IC8vIERvIG5vdGhpbmcuCit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGNyZWF0ZUF1
ZGlvR3JhcGhBbmRUZXN0KG51bWJlck9mVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvbWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJzZXRWYWx1ZUF0VGltZSgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhBbGxv
d2VkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ29uc3RhbnRBcnJh
eSk7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2Ny
aXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVDdXJ2ZUF0VGltZS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjczNzdiYjA5NDE2ZjViZDQyMTQ4OTFhNDU2ZTczOWI2OWQ3ZGExMWIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFZh
bHVlQ3VydmVBdFRpbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3QgQXVkaW9Q
YXJhbSBzZXRWYWx1ZUN1cnZlQXRUaW1lKCkgZnVuY3Rpb25hbGl0eS4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCitQQVNTIEFsbCAyMCB0ZXN0cyBzdGFydGVkIGFuZCBlbmRlZCBhdCB0
aGUgY29ycmVjdCB0aW1lLgorUEFTUyBBbGwgMjAgdGVzdHMgcGFzc2VkIHdpdGhpbiBhbiBhY2Nl
cHRhYmxlIHRvbGVyYW5jZS4KK1BBU1MgQXVkaW9QYXJhbSBzZXRWYWx1ZUN1cnZlQXRUaW1lKCkg
dGVzdCBwYXNzZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRW
YWx1ZUN1cnZlQXRUaW1lLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNl
dFZhbHVlQ3VydmVBdFRpbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMmFlZTY1MmM4N2EwNzU2ZmRlNDNm
YzljMWJkZmUxZTM0YWNhMDkzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUN1cnZlQXRUaW1lLmh0bWwKQEAgLTAsMCArMSw3NSBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0
aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW9wYXJhbS10ZXN0
aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0iZGVzY3Jp
cHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNj
cmlwdGlvbigiVGVzdCBBdWRpb1BhcmFtIHNldFZhbHVlQ3VydmVBdFRpbWUoKSBmdW5jdGlvbmFs
aXR5LiIpOworCisvLyBQbGF5IGEgbG9uZyBEQyBzaWduYWwgb3V0IHRocm91Z2ggYW4gQXVkaW9H
YWluTm9kZSBhbmQgZm9yIGVhY2ggdGltZSBpbnRlcnZhbCBjYWxsCisvLyBzZXRWYWx1ZUN1cnZl
QXRUaW1lKCkgdG8gc2V0IHRoZSB2YWx1ZXMgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgaW50ZXJ2
YWwuICBFYWNoIGN1cnZlIGlzIGEgc2luZQorLy8gd2F2ZSwgYW5kIHdlIGFzc3VtZSB0aGF0IHRo
ZSB0aW1lIGludGVydmFsIGlzIG5vdCBhbiBleGFjdCBtdWx0aXBsZSBvZiB0aGUgcGVyaW9kLiBU
aGlzIGNhdXNlcyBhCisvLyBkaXNjb250aW51aXR5IGJldHdlZW4gdGltZSBpbnRlcnZhbHMgd2hp
Y2ggaXMgdXNlZCB0byB0ZXN0IHRpbWluZy4KKworLy8gTnVtYmVyIG9mIHRlc3RzIHRvIHJ1bi4K
K3ZhciBudW1iZXJPZlRlc3RzID0gMjA7CisKKy8vIE1heCBhbGxvd2VkIGRpZmZlcmVuY2UgYmV0
d2VlbiB0aGUgcmVuZGVyZWQgZGF0YSBhbmQgdGhlIGV4cGVjdGVkIHJlc3VsdC4gIChUaGUgZXJy
b3IgaXMgemVybworLy8gYmVjYXVzZSB0aGUgcmVuZGVyZWQgY3VydmUgc2hvdWxkIHJlYWxseSBi
ZSBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSByZWZlcmVuY2UuKQordmFyIG1heEFsbG93ZWRFcnJv
ciA9IDA7CisKKy8vIFRoZSBhbXBsaXR1ZGUgb2YgdGhlIHNpbmUgd2F2ZS4KK3ZhciBzaW5lQW1w
bGl0dWRlID0gMTAwOworCisvLyBGcmVxdWVuY3kgb2YgdGhlIHNpbmUgd2F2ZS4KK3ZhciBmcmVx
SHogPSA0NDA7CisKKy8vIEN1cnZlIHRvIHVzZSBmb3Igc2V0VmFsdWVDdXJ2ZUF0VGltZSgpLgor
dmFyIGN1cnZlOworCisvLyBTZXRzIHRoZSBjdXJ2ZSBkYXRhIGZvciB0aGUgZW50aXJlIHRpbWUg
aW50ZXJ2YWwuCitmdW5jdGlvbiBhdXRvbWF0aW9uKHZhbHVlLCBzdGFydFRpbWUsIGVuZFRpbWUp
Cit7CisgICAgLy8gRm9yIGEgdmFsdWUgY3VydmUsIHdlIGlnbm9yZSB0aGUgfHZhbHVlfCBhbmQg
fGVuZFRpbWV8LgorICAgIGdhaW5Ob2RlLmdhaW4uc2V0VmFsdWVDdXJ2ZUF0VGltZShjdXJ2ZSwg
c3RhcnRUaW1lLCB0aW1lSW50ZXJ2YWwpOworfQorCisvLyBDcmVhdGUgYSBzaW5lIHdhdmUgb2Yg
dGhlIHNwZWNpZmllZCBkdXJhdGlvbi4KK2Z1bmN0aW9uIGNyZWF0ZVJlZmVyZW5jZVNpbmVBcnJh
eShzdGFydFRpbWUsIGVuZFRpbWUsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBzYW1wbGVSYXRlKQor
eworICAgIC8vIElnbm9yZSB8c3RhcnRWYWx1ZXwgYW5kIHxlbmRWYWx1ZXwgZm9yIHRoZSBzaW5l
IHdhdmUuCisgICAgcmV0dXJuIGNyZWF0ZVNpbmVXYXZlQXJyYXkoZW5kVGltZSAtIHN0YXJ0VGlt
ZSwgZnJlcUh6LCBzaW5lQW1wbGl0dWRlLCBzYW1wbGVSYXRlKTsKK30KKworZnVuY3Rpb24gcnVu
VGVzdCgpIAoreworICAgIC8vIFRoZSBjdXJ2ZSBvZiB2YWx1ZXMgdG8gdXNlLgorICAgIGN1cnZl
ID0gY3JlYXRlU2luZVdhdmVBcnJheSh0aW1lSW50ZXJ2YWwsIGZyZXFIeiwgc2luZUFtcGxpdHVk
ZSwgc2FtcGxlUmF0ZSk7CisKKyAgICBjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdChudW1iZXJPZlRl
c3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmVBbXBsaXR1ZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oaykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHNldCB0aGUgdmFsdWUuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRWYWx1ZUN1cnZlQXRUaW1lKCkiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEFsbG93ZWRFcnJvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVSZWZlcmVuY2VTaW5lQXJyYXksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMiAqIE1hdGguUEkgKiBzaW5lQW1wbGl0dWRlICogZnJlcUh6IC8gc2Ft
cGxlUmF0ZSk7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisK
Kzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMKaW5kZXggOGY2N2YyZDZmZjcwM2JhZjRm
MWE5ZWNiNzk5ZTAzNDlkMDUyMDg1Ni4uYWYwYWQyN2EyMzJlMjU5Y2Q4MWZlNTMzZDU3NGE3ZTI5
NWNjZGY4NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlv
LXRlc3RpbmcuanMKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRl
c3RpbmcuanMKQEAgLTEyOCwzICsxMjgsOCBAQCBmdW5jdGlvbiBncmFpbkxlbmd0aEluU2FtcGxl
RnJhbWVzKGdyYWluT2Zmc2V0LCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSkgewogCiAgICAgcmV0dXJu
IGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsKIH0KKworLy8gVHJ1ZSBpZiB0aGUgbnVtYmVyIGlzIG5v
dCBhbiBpbmZpbml0eSBvciBOYU4KK2Z1bmN0aW9uIGlzVmFsaWROdW1iZXIoeCkgeworICAgIHJl
dHVybiAhaXNOYU4oeCkgJiYgKHggIT0gSW5maW5pdHkpICYmICh4ICE9IC1JbmZpbml0eSk7Cit9
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW9wYXJhbS10
ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVz
dGluZy5qcwppbmRleCBjY2EzNGM5NmQwYjE4MzlmMjBkYWNlZjU5N2JiMGFlNmNlNmU4MTE0Li5j
NjA3ODk1N2M5MTk2NTQ5ODhlYTNkNWU2MDU2ZWRjOWE4YjQzNTk5IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW9wYXJhbS10ZXN0aW5nLmpzCisrKyBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanMKQEAgLTEs
MTggKzEsMzYgQEAKIHZhciBzYW1wbGVSYXRlID0gNDQxMDA7CiAKLS8vIE51bWJlciBvZiB0ZXN0
cyB0byBydW4uCi12YXIgbnVtYmVyT2ZUZXN0cyA9IDEwMDsKKy8vIEluZm9ybWF0aW9uIGFib3V0
IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHRpbWVzIGFuZCBzdGFydGluZyBhbmQgZW5kaW5nIHZh
bHVlcyBmb3IgZWFjaCB0aW1lCisvLyBpbnRlcnZhbC4KK3ZhciB0aW1lVmFsdWVJbmZvOworCisv
LyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YXJ0aW5nIHZhbHVlcyBiZXR3ZWVuIGVhY2ggdGlt
ZSBpbnRlcnZhbC4KK3ZhciBzdGFydGluZ1ZhbHVlRGVsdGE7CisgICAgICAKKy8vIEZvciBhbnkg
YXV0b21hdGlvbiBmdW5jdGlvbiB0aGF0IGhhcyBhbiBlbmQgb3IgdGFyZ2V0IHZhbHVlLCB0aGUg
ZW5kIHZhbHVlIGlzIGJhc2VkIHRoZSBzdGFydGluZworLy8gdmFsdWUgb2YgdGhlIHRpbWUgaW50
ZXJ2YWwuICBUaGUgc3RhcnRpbmcgdmFsdWUgd2lsbCBiZSBpbmNyZWFzZWQgb3IgZGVjcmVhc2Vk
IGJ5CisvLyB8c3RhcnRFbmRWYWx1ZUNoYW5nZXwuIFdlIGNob29zZSBoYWxmIG9mIHxzdGFydGlu
Z1ZhbHVlRGVsdGF8IHNvIHRoYXQgdGhlIGVuZGluZyB2YWx1ZSB3aWxsIGJlCisvLyBkaXN0aW5j
dCBmcm9tIHRoZSBzdGFydGluZyB2YWx1ZSBmb3IgbmV4dCB0aW1lIGludGVydmFsLiAgVGhpcyBh
bGxvd3MgdXMgdG8gZGV0ZWN0IHdoZXJlIHRoZSByYW1wCisvLyBiZWdpbnMgYW5kIGVuZHMuCit2
YXIgc3RhcnRFbmRWYWx1ZUNoYW5nZTsKKworLy8gRGVmYXVsdCB0aHJlc2hvbGQgdG8gdXNlIGZv
ciBkZXRlY3RpbmcgZGlzY29udGludWl0aWVzIHRoYXQgc2hvdWxkIGFwcGVhciBhdCBlYWNoIHRp
bWUgaW50ZXJ2YWwuCit2YXIgZGlzY29udGludWl0eVRocmVzaG9sZDsKIAogLy8gVGltZSBpbnRl
cnZhbCBiZXR3ZWVuIHZhbHVlIGNoYW5nZXMuICBJdCBpcyBiZXN0IGlmIDEgLyBudW1iZXJPZlRl
c3RzIGlzIG5vdCBjbG9zZSB0bwogLy8gdGltZUludGVydmFsLgogdmFyIHRpbWVJbnRlcnZhbCA9
IC4wMzsKIAotLy8gTWFrZSBzdXJlIHdlIHJlbmRlciBsb25nIGVub3VnaCB0byBjYXB0dXJlIGFs
bCBvZiBvdXIgdGVzdCBkYXRhLgotdmFyIHJlbmRlclRpbWUgPSAobnVtYmVyT2ZUZXN0cyArIDEp
ICogdGltZUludGVydmFsOwotdmFyIHJlbmRlckxlbmd0aCA9IHRpbWVUb1NhbXBsZUZyYW1lKHJl
bmRlclRpbWUsIHNhbXBsZVJhdGUpOwordmFyIGdhaW5Ob2RlOwogCiB2YXIgY29udGV4dDsKIAor
Ly8gTWFrZSBzdXJlIHdlIHJlbmRlciBsb25nIGVub3VnaCB0byBjYXB0dXJlIGFsbCBvZiBvdXIg
dGVzdCBkYXRhLgorZnVuY3Rpb24gcmVuZGVyTGVuZ3RoKHRlc3RzKQoreworICAgIHJldHVybiB0
aW1lVG9TYW1wbGVGcmFtZSgodGVzdHMgKyAxKSAqIHRpbWVJbnRlcnZhbCwgc2FtcGxlUmF0ZSk7
Cit9CisKIC8vIENyZWF0ZSBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBzYW1lIGNvbnN0YW50IHZh
bHVlLgogZnVuY3Rpb24gY3JlYXRlQ29uc3RhbnRCdWZmZXIoY29udGV4dCwgY29uc3RhbnQsIGxl
bmd0aCkgewogICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigxLCBsZW5ndGgs
IGNvbnRleHQuc2FtcGxlUmF0ZSk7CkBAIC0yNiw2ICs0NCwzOSBAQCBmdW5jdGlvbiBjcmVhdGVD
b25zdGFudEJ1ZmZlcihjb250ZXh0LCBjb25zdGFudCwgbGVuZ3RoKSB7CiAgICAgcmV0dXJuIGJ1
ZmZlcjsKIH0KIAorLy8gQ3JlYXRlIGEgY29uc3RhbnQgcmVmZXJlbmNlIHNpZ25hbCB3aXRoIHRo
ZSBnaXZlbiB8dmFsdWV8LiAgQmFzaWNhbGx5IHRoZSBzYW1lIGFzCisvLyB8Y3JlYXRlQ29uc3Rh
bnRCdWZmZXJ8LCBidXQgd2l0aCB0aGUgcGFyYW1ldGVycyB0byBtYXRjaCB0aGUgb3RoZXIgY3Jl
YXRlIGZ1bmN0aW9ucy4gIFRoZQorLy8gfGVuZFZhbHVlfCBpcyBpZ25vcmVkLgorZnVuY3Rpb24g
Y3JlYXRlQ29uc3RhbnRBcnJheShzdGFydFRpbWUsIGVuZFRpbWUsIHZhbHVlLCBlbmRWYWx1ZSwg
c2FtcGxlUmF0ZSkKK3sKKyAgICB2YXIgc3RhcnRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKHN0
YXJ0VGltZSwgc2FtcGxlUmF0ZSk7CisgICAgdmFyIGVuZEZyYW1lID0gdGltZVRvU2FtcGxlRnJh
bWUoZW5kVGltZSwgc2FtcGxlUmF0ZSk7CisgICAgdmFyIGxlbmd0aCA9IGVuZEZyYW1lIC0gc3Rh
cnRGcmFtZTsKKworICAgIHZhciBidWZmZXIgPSBjcmVhdGVDb25zdGFudEJ1ZmZlcihjb250ZXh0
LCB2YWx1ZSwgbGVuZ3RoKTsKKworICAgIHJldHVybiBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7
Cit9CisKKy8vIENyZWF0ZSBhIGxpbmVhciByYW1wIHN0YXJ0aW5nIGF0IHxzdGFydFZhbHVlfCBh
bmQgZW5kaW5nIGF0IHxlbmRWYWx1ZXwuICBUaGUgcmFtcCBzdGFydHMgYXQgdGltZQorLy8gfHN0
YXJ0VGltZXwgYW5kIGVuZHMgYXQgfGVuZFRpbWV8LiAgKFRoZSBzdGFydCBhbmQgZW5kIHRpbWVz
IGFyZSBvbmx5IHVzZWQgdG8gY29tcHV0ZSBob3cgbWFueQorLy8gc2FtcGxlcyB0byByZXR1cm4u
KQorZnVuY3Rpb24gY3JlYXRlTGluZWFyUmFtcEFycmF5KHN0YXJ0VGltZSwgZW5kVGltZSwgc3Rh
cnRWYWx1ZSwgZW5kVmFsdWUsIHNhbXBsZVJhdGUpCit7CisgICAgdmFyIHN0YXJ0RnJhbWUgPSB0
aW1lVG9TYW1wbGVGcmFtZShzdGFydFRpbWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBlbmRGcmFt
ZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGVuZFRpbWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBsZW5n
dGggPSBlbmRGcmFtZSAtIHN0YXJ0RnJhbWU7CisgICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShs
ZW5ndGgpOworCisgICAgdmFyIHN0ZXAgPSAoZW5kVmFsdWUgLSBzdGFydFZhbHVlKSAvIGxlbmd0
aDsKKworICAgIGZvciAoayA9IDA7IGsgPCBsZW5ndGg7ICsraykgeworICAgICAgICBidWZmZXJb
a10gPSBzdGFydFZhbHVlICsgayAqIHN0ZXA7CisgICAgfQorCisgICAgcmV0dXJuIGJ1ZmZlcjsK
K30KKwogLy8gQ3JlYXRlIGFuIGV4cG9uZW50aWFsIHJhbXAgc3RhcnRpbmcgYXQgfHN0YXJ0VmFs
dWV8IGFuZCBlbmRpbmcgYXQgfGVuZFZhbHVlfC4gIFRoZSByYW1wIHN0YXJ0cyBhdAogLy8gdGlt
ZSB8c3RhcnRUaW1lfCBhbmQgZW5kcyBhdCB8ZW5kVGltZXwuICAoVGhlIHN0YXJ0IGFuZCBlbmQg
dGltZXMgYXJlIG9ubHkgdXNlZCB0byBjb21wdXRlIGhvdwogLy8gbWFueSBzYW1wbGVzIHRvIHJl
dHVybi4pCkBAIC00NSwxNyArOTYsOTQgQEAgZnVuY3Rpb24gY3JlYXRlRXhwb25lbnRpYWxSYW1w
QXJyYXkoc3RhcnRUaW1lLCBlbmRUaW1lLCBzdGFydFZhbHVlLCBlbmRWYWx1ZSwgc2EKICAgICBy
ZXR1cm4gYnVmZmVyOwogfQogCitmdW5jdGlvbiBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBs
ZVJhdGUodGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKQoreworICAgIHJldHVybiAxIC0gTWF0aC5l
eHAoLTEgLyAoc2FtcGxlUmF0ZSAqIHRpbWVDb25zdGFudCkpOworfQorCisvLyBDcmVhdGUgYSBz
aWduYWwgdGhhdCBzdGFydHMgYXQgfHN0YXJ0VmFsdWV8IGFuZCBleHBvbmVudGlhbGx5IGFwcHJv
YWNoZXMgdGhlIHRhcmdldCB2YWx1ZSBvZgorLy8gfHRhcmdldFZhbHVlfCwgdXNpbmcgYSB0aW1l
IGNvbnN0YW50IG9mIHx0aW1lQ29uc3RhbnR8LiAgVGhlIHJhbXAgc3RhcnRzIGF0IHRpbWUgfHN0
YXJ0VGltZXwgYW5kCisvLyBlbmRzIGF0IHxlbmRUaW1lfC4gIChUaGUgc3RhcnQgYW5kIGVuZCB0
aW1lcyBhcmUgb25seSB1c2VkIHRvIGNvbXB1dGUgaG93IG1hbnkgc2FtcGxlcyB0bworLy8gcmV0
dXJuLikKK2Z1bmN0aW9uIGNyZWF0ZUV4cG9uZW50aWFsQXBwcm9hY2hBcnJheShzdGFydFRpbWUs
IGVuZFRpbWUsIHN0YXJ0VmFsdWUsIHRhcmdldFZhbHVlLCBzYW1wbGVSYXRlLCB0aW1lQ29uc3Rh
bnQpCit7CisgICAgdmFyIHN0YXJ0RnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZShzdGFydFRpbWUs
IHNhbXBsZVJhdGUpOworICAgIHZhciBlbmRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGVuZFRp
bWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBsZW5ndGggPSBlbmRGcmFtZSAtIHN0YXJ0RnJhbWU7
CisgICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShsZW5ndGgpOworICAgIHZhciBjID0gZGlzY3Jl
dGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKHRpbWVDb25zdGFudCwgc2FtcGxlUmF0ZSk7CisK
KyAgICB2YXIgdmFsdWUgPSBzdGFydFZhbHVlOworICAgIAorICAgIGZvciAodmFyIGsgPSAwOyBr
IDwgbGVuZ3RoOyArK2spIHsKKyAgICAgICAgYnVmZmVyW2tdID0gdmFsdWU7CisgICAgICAgIHZh
bHVlICs9ICh0YXJnZXRWYWx1ZSAtIHZhbHVlKSAqIGM7CisgICAgfQorCisgICAgcmV0dXJuIGJ1
ZmZlcjsKK30KKworLy8gQ3JlYXRlIGEgc2luZSB3YXZlIG9mIHRoZSBnaXZlbiBmcmVxdWVuY3kg
YW5kIGFtcGxpdHVkZS4gIFRoZSBzaW5lIHdhdmUgaXMgb2Zmc2V0IGJ5IGhhbGYgdGhlCisvLyBh
bXBsaXR1ZGUgc28gdGhhdCByZXN1bHQgaXMgYWx3YXlzIHBvc2l0aXZlLgorZnVuY3Rpb24gY3Jl
YXRlU2luZVdhdmVBcnJheShkdXJhdGlvblNlY29uZHMsIGZyZXFIeiwgYW1wbGl0dWRlLCBzYW1w
bGVSYXRlKQoreworICAgIHZhciBsZW5ndGggPSB0aW1lVG9TYW1wbGVGcmFtZShkdXJhdGlvblNl
Y29uZHMsIHNhbXBsZVJhdGUpOworICAgIHZhciBzaWduYWwgPSBuZXcgRmxvYXQzMkFycmF5KGxl
bmd0aCk7CisgICAgdmFyIG9tZWdhID0gMiAqIE1hdGguUEkgKiBmcmVxSHogLyBzYW1wbGVSYXRl
OworICAgIHZhciBoYWxmQW1wbGl0dWRlID0gYW1wbGl0dWRlIC8gMjsKKyAgICAKKyAgICBmb3Ig
KHZhciBrID0gMDsgayA8IGxlbmd0aDsgKytrKSB7CisgICAgICAgIHNpZ25hbFtrXSA9IGhhbGZB
bXBsaXR1ZGUgKyBoYWxmQW1wbGl0dWRlICogTWF0aC5zaW4ob21lZ2EgKiBrKTsKKyAgICB9CisK
KyAgICByZXR1cm4gc2lnbmFsOworfQorCisvLyBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biB0aGUgc3RhcnRpbmcgdmFsdWUgYW5kIHRoZSBlbmRpbmcgdmFsdWUgZm9yIHRpbWUgaW50ZXJ2
YWwKKy8vIHx0aW1lSW50ZXJ2YWxJbmRleHwuICBXZSBhbHRlcm5hdGUgYmV0d2VlbiBhbiBlbmQg
dmFsdWUgdGhhdCBpcyBhYm92ZSBvciBiZWxvdyB0aGUgc3RhcnRpbmcKKy8vIHZhbHVlLgorZnVu
Y3Rpb24gZW5kVmFsdWVEZWx0YSh0aW1lSW50ZXJ2YWxJbmRleCkKK3sKKyAgICBpZiAodGltZUlu
dGVydmFsSW5kZXggJiAxKSB7CisgICAgICAgIHJldHVybiAtc3RhcnRFbmRWYWx1ZUNoYW5nZTsK
KyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gc3RhcnRFbmRWYWx1ZUNoYW5nZTsKKyAgICB9
Cit9CisKKy8vIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzdGFydGluZyB2YWx1
ZSBhdCB8dGltZUludGVydmFsSW5kZXh8IGFuZCB0aGUgc3RhcnRpbmcgdmFsdWUgYXQKKy8vIHRo
ZSBuZXh0IHRpbWUgaW50ZXJ2YWwuICBTaW5jZSB3ZSBzdGFydGVkIGF0IGEgbGFyZ2UgaW5pdGlh
bCB2YWx1ZSwgd2UgZGVjcmVhc2UgdGhlIHZhbHVlIGF0IGVhY2gKKy8vIHRpbWUgaW50ZXJ2YWwu
CitmdW5jdGlvbiB2YWx1ZVVwZGF0ZSh0aW1lSW50ZXJ2YWxJbmRleCkKK3sKKyAgICByZXR1cm4g
LXN0YXJ0aW5nVmFsdWVEZWx0YTsKK30KKwogLy8gQ29tcGFyZSBhIHNlY3Rpb24gb2YgdGhlIHJl
bmRlcmVkIGRhdGEgYWdhaW5zdCBvdXIgZXhwZWN0ZWQgc2lnbmFsLgotZnVuY3Rpb24gY29tcGFy
ZVBhcnRpYWxTaWduYWxzKHJlbmRlcmVkLCBleHBlY3RlZEZ1bmN0aW9uLCBzdGFydFRpbWUsIGVu
ZFRpbWUsIHZhbHVlSW5mbywgc2FtcGxlUmF0ZSkKK2Z1bmN0aW9uIGNvbXBhcmVQYXJ0aWFsU2ln
bmFscyhyZW5kZXJlZCwgZXhwZWN0ZWRGdW5jdGlvbiwgc3RhcnRUaW1lLCBlbmRUaW1lLCB2YWx1
ZUluZm8sIHNhbXBsZVJhdGUsIHRpbWVDb25zdGFudCkKIHsKICAgICB2YXIgc3RhcnRTYW1wbGUg
PSB0aW1lVG9TYW1wbGVGcmFtZShzdGFydFRpbWUsIHNhbXBsZVJhdGUpOwotICAgIHZhciBleHBl
Y3RlZCA9IGV4cGVjdGVkRnVuY3Rpb24oc3RhcnRUaW1lLCBlbmRUaW1lLCB2YWx1ZUluZm8uc3Rh
cnRWYWx1ZSwgdmFsdWVJbmZvLmVuZFZhbHVlLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgZXhwZWN0
ZWQgPSBleHBlY3RlZEZ1bmN0aW9uKHN0YXJ0VGltZSwgZW5kVGltZSwgdmFsdWVJbmZvLnN0YXJ0
VmFsdWUsIHZhbHVlSW5mby5lbmRWYWx1ZSwgc2FtcGxlUmF0ZSwgdGltZUNvbnN0YW50KTsKIAog
ICAgIHZhciBuID0gZXhwZWN0ZWQubGVuZ3RoOwogICAgIHZhciBtYXhFcnJvciA9IC0xOwogICAg
IHZhciBtYXhFcnJvckluZGV4ID0gLTE7CiAgICAgCiAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBu
OyArK2spIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHBhc3MgdGhlc2UgdGVzdHMg
YmVjYXVzZSBhIE5hTiBoYXMgYmVlbiBnZW5lcmF0ZWQgaW4gZWl0aGVyIHRoZQorICAgICAgICAv
LyByZW5kZXJlZCBkYXRhIG9yIHRoZSByZWZlcmVuY2UgZGF0YS4KKyAgICAgICAgaWYgKCFpc1Zh
bGlkTnVtYmVyKHJlbmRlcmVkW3N0YXJ0U2FtcGxlICsga10pKSB7CisgICAgICAgICAgICBtYXhF
cnJvciA9IDFlMzAwOworICAgICAgICAgICAgbWF4RXJyb3JJbmRleCA9IHN0YXJ0U2FtcGxlICsg
azsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkludmFsaWQgbnVtYmVyIGZvciByZW5kZXJlZCBk
YXRhIGF0ICIgKyBtYXhFcnJvckluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGlmICghaXNWYWxpZE51bWJlcihleHBlY3RlZFtrXSkpIHsKKyAgICAgICAgICAg
IG1heEVycm9yID0gMWUzMDA7CisgICAgICAgICAgICBtYXhFcnJvckluZGV4ID0gc3RhcnRTYW1w
bGUgKyBrOworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSW52YWxpZCBudW1iZXIgZm9yIHJlZmVy
ZW5jZSBkYXRhIGF0ICIgKyBtYXhFcnJvckluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIHZhciBlcnJvciA9IE1hdGguYWJzKHJlbmRlcmVkW3N0YXJ0U2FtcGxl
ICsga10gLSBleHBlY3RlZFtrXSk7CiAgICAgICAgIGlmIChlcnJvciA+IG1heEVycm9yKSB7CiAg
ICAgICAgICAgICBtYXhFcnJvciA9IGVycm9yOwpAQCAtODMsOSArMjExLDE5IEBAIGZ1bmN0aW9u
IHZlcmlmeURpc2NvbnRpbnVpdGllcyh2YWx1ZXMsIHRpbWVzLCB0aHJlc2hvbGQpCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICB2YXIgdGVzdENvdW50OworCisgICAgaWYgKGJyZWFrcy5sZW5ndGgg
Pj0gbnVtYmVyT2ZUZXN0cykgeworICAgICAgICB0ZXN0Q291bnQgPSBudW1iZXJPZlRlc3RzIC0g
MTsKKyAgICAgICAgdGVzdEZhaWxlZCgiRm91bmQgbW9yZSBkaXNjb250aW51aXRpZXMgKCIgKyBi
cmVha3MubGVuZ3RoICsgIikgdGhhbiBleHBlY3RlZC4gIE9ubHkgY29tcGFyaW5nIGZpcnN0ICIg
KyAobnVtYmVyT2ZUZXN0cyArIDEpICsgImRpc2NvbnRpbnVpdGllcy4iKTsKKyAgICAgICAgc3Vj
Y2VzcyA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RDb3VudCA9IGJyZWFrcy5s
ZW5ndGg7CisgICAgfQorICAgIAogICAgIC8vIENvbXBhcmUgdGhlIGxvY2F0aW9uIG9mIGVhY2gg
ZGlzY29udGludWl0eSB3aXRoIHRoZSBlbmQgdGltZSBvZiBlYWNoIGludGVydmFsLiAoVGhlcmUg
aXMgbm8KICAgICAvLyBkaXNjb250aW51aXR5IGF0IHRoZSBzdGFydCBvZiB0aGUgc2lnbmFsLikK
LSAgICBmb3IgKHZhciBrID0gMDsgayA8IGJyZWFrcy5sZW5ndGg7ICsraykgeworICAgIGZvciAo
dmFyIGsgPSAwOyBrIDwgdGVzdENvdW50OyArK2spIHsKICAgICAgICAgdmFyIGV4cGVjdGVkU2Ft
cGxlRnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZSh0aW1lc1trICsgMV0sIHNhbXBsZVJhdGUpOwog
ICAgICAgICBpZiAoYnJlYWtzW2tdICE9IGV4cGVjdGVkU2FtcGxlRnJhbWUpIHsKICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsKQEAgLTk2LDggKzIzNCwxNCBAQCBmdW5jdGlvbiB2ZXJpZnlE
aXNjb250aW51aXRpZXModmFsdWVzLCB0aW1lcywgdGhyZXNob2xkKQogCiAgICAgaWYgKGJhZExv
Y2F0aW9ucykgewogICAgICAgICB0ZXN0RmFpbGVkKGJhZExvY2F0aW9ucyArICIgZGlzY29udGlu
dWl0aWVzIGF0IGluY29ycmVjdCBsb2NhdGlvbnMiKTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHRlc3RQYXNzZWQoIkFsbCAiICsgKGJyZWFrcy5sZW5n
dGggKyAxKSArICIgdGVzdHMgc3RhcnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4i
KTsKKyAgICAgICAgaWYgKGJyZWFrcy5sZW5ndGggKyAxID09IG51bWJlck9mVGVzdHMpIHsKKyAg
ICAgICAgICAgIHRlc3RQYXNzZWQoIkFsbCAiICsgKGJyZWFrcy5sZW5ndGggKyAxKSArICIgdGVz
dHMgc3RhcnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4iKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkZvdW5kICIgKyBicmVha3MubGVuZ3RoICsg
IiBkaXNjb250aW51aXRpZXMgYnV0IGV4cGVjdGVkICIgKyAobnVtYmVyT2ZUZXN0cyAtIDEpKTsK
KyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICByZXR1cm4gc3VjY2VzczsKQEAgLTExNyw3ICsyNjEsNyBAQCBmdW5jdGlvbiB2ZXJpZnlEaXNj
b250aW51aXRpZXModmFsdWVzLCB0aW1lcywgdGhyZXNob2xkKQogLy8gdmFsdWVzIG9mIGVhY2gg
aW50ZXJ2YWwuCiAvLwogLy8gYnJlYWtUaHJlc2hvbGQgLSB0aHJlc2hvbGQgdG8gdXNlIGZvciBk
ZXRlcm1pbmluZyBkaXNjb250aW51aXRpZXMuCi1mdW5jdGlvbiBjb21wYXJlU2lnbmFscyh0ZXN0
TmFtZSwgbWF4RXJyb3IsIHJlbmRlcmVkRGF0YSwgZXhwZWN0ZWRGdW5jdGlvbiwgdGltZVZhbHVl
SW5mbywgYnJlYWtUaHJlc2hvbGQpCitmdW5jdGlvbiBjb21wYXJlU2lnbmFscyh0ZXN0TmFtZSwg
bWF4RXJyb3IsIHJlbmRlcmVkRGF0YSwgZXhwZWN0ZWRGdW5jdGlvbiwgdGltZVZhbHVlSW5mbywg
YnJlYWtUaHJlc2hvbGQsIHRpbWVDb25zdGFudCkKIHsKICAgICB2YXIgc3VjY2VzcyA9IHRydWU7
CiAgICAgdmFyIGZhaWxlZFRlc3RDb3VudCA9IDA7CkBAIC0xMjgsMTAgKzI3MiwxMCBAQCBmdW5j
dGlvbiBjb21wYXJlU2lnbmFscyh0ZXN0TmFtZSwgbWF4RXJyb3IsIHJlbmRlcmVkRGF0YSwgZXhw
ZWN0ZWRGdW5jdGlvbiwgdGltZQogICAgIHN1Y2Nlc3MgPSB2ZXJpZnlEaXNjb250aW51aXRpZXMo
cmVuZGVyZWREYXRhLCB0aW1lcywgYnJlYWtUaHJlc2hvbGQpOwogCiAgICAgZm9yICh2YXIgayA9
IDA7IGsgPCBuOyArK2spIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IGNvbXBhcmVQYXJ0aWFsU2ln
bmFscyhyZW5kZXJlZERhdGEsIGV4cGVjdGVkRnVuY3Rpb24sIHRpbWVzW2tdLCB0aW1lc1trICsg
MV0sIHZhbHVlc1trXSwgc2FtcGxlUmF0ZSk7CisgICAgICAgIHZhciByZXN1bHQgPSBjb21wYXJl
UGFydGlhbFNpZ25hbHMocmVuZGVyZWREYXRhLCBleHBlY3RlZEZ1bmN0aW9uLCB0aW1lc1trXSwg
dGltZXNbayArIDFdLCB2YWx1ZXNba10sIHNhbXBsZVJhdGUsIHRpbWVDb25zdGFudCk7CiAKICAg
ICAgICAgaWYgKHJlc3VsdC5tYXhFcnJvciA+IG1heEVycm9yKSB7Ci0gICAgICAgICAgICB0ZXN0
RmFpbGVkKCJJbmNvcnJlY3QgZ2FpbiBmb3IgdGVzdCAiICsgayArICIuIE1heCBlcnJvciA9ICIg
KyByZXN1bHQubWF4RXJyb3IgKyAiIGF0IG9mZnNldCAiICsgKHJlc3VsdC5pbmRleCArIHRpbWVU
b1NhbXBsZUZyYW1lKHRpbWVzW2tdLCBzYW1wbGVSYXRlKSkpOworICAgICAgICAgICAgdGVzdEZh
aWxlZCgiSW5jb3JyZWN0IHZhbHVlIGZvciB0ZXN0ICIgKyBrICsgIi4gTWF4IGVycm9yID0gIiAr
IHJlc3VsdC5tYXhFcnJvciArICIgYXQgb2Zmc2V0ICIgKyAocmVzdWx0LmluZGV4ICsgdGltZVRv
U2FtcGxlRnJhbWUodGltZXNba10sIHNhbXBsZVJhdGUpKSk7CiAgICAgICAgICAgICArK2ZhaWxl
ZFRlc3RDb3VudDsKICAgICAgICAgfQogICAgIH0KQEAgLTE1MCwyMyArMjk0LDU0IEBAIGZ1bmN0
aW9uIGNvbXBhcmVTaWduYWxzKHRlc3ROYW1lLCBtYXhFcnJvciwgcmVuZGVyZWREYXRhLCBleHBl
Y3RlZEZ1bmN0aW9uLCB0aW1lCiAgICAgfQogfQogCisvLyBDcmVhdGUgYSBmdW5jdGlvbiB0byB0
ZXN0IHRoZSByZW5kZXJlZCBkYXRhIHdpdGggdGhlIHJlZmVyZW5jZSBkYXRhLgorLy8KKy8vIHRl
c3ROYW1lIC0gc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHRlc3QKKy8vCisvLyBlcnJvciAtIG1heCBh
bGxvd2VkIGVycm9yIGJldHdlZW4gcmVuZGVyZWQgZGF0YSBhbmQgdGhlIHJlZmVyZW5jZSBkYXRh
LgorLy8KKy8vIHJlZmVyZW5jZUZ1bmN0aW9uIC0gZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgdGhl
IHJlZmVyZW5jZSBkYXRhIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlbmRlcmVkCisvLyBkYXRh
LgorLy8KKy8vIGp1bXBUaHJlc2hvbGQgLSBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZp
ZXMgdGhlIHRocmVzaG9sZCB0byB1c2UgZm9yIGRldGVjdGluZworLy8gZGlzY29udGludWl0aWVz
LiAgSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gZGlzY29udGludWl0eVRocmVzaG9sZC4K
Ky8vCisvLyB0aW1lQ29uc3RhbnQgLSBvcHRpb25hbCBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUg
dGltZSBjb25zdGFudCwgaWYgbmVlZGVkLiAgKEN1cnJlbnRseSBvbmx5CisvLyBuZWVkZWQgZm9y
IHNldFRhcmdldFZhbHVlQXRUaW1lKCkuKQorZnVuY3Rpb24gY2hlY2tSZXN1bHRGdW5jdGlvbih0
ZXN0TmFtZSwgZXJyb3IsIHJlZmVyZW5jZUZ1bmN0aW9uLCBqdW1wVGhyZXNob2xkLCB0aW1lQ29u
c3RhbnQpCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBidWZm
ZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKyAgICAgICAgcmVuZGVyZWREYXRhID0gYnVmZmVy
LmdldENoYW5uZWxEYXRhKDApOworCisgICAgICAgIHZhciB0aHJlc2hvbGQ7CisKKyAgICAgICAg
aWYgKCFqdW1wVGhyZXNob2xkKSB7CisgICAgICAgICAgICB0aHJlc2hvbGQgPSBkaXNjb250aW51
aXR5VGhyZXNob2xkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyZXNob2xkID0g
anVtcFRocmVzaG9sZDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29tcGFyZVNpZ25h
bHModGVzdE5hbWUsIGVycm9yLCByZW5kZXJlZERhdGEsIHJlZmVyZW5jZUZ1bmN0aW9uLCB0aW1l
VmFsdWVJbmZvLCB0aHJlc2hvbGQsIHRpbWVDb25zdGFudCk7CisKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfQorfQorCiAvLyBSdW4gYWxsIHRoZSBhdXRvbWF0aW9uIHRlc3RzLgogLy8K
LS8vIGluaXRpYWxWYWx1ZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBmaXJzdCB0aW1lIGlu
dGVydmFsLgorLy8gbnVtYmVyT2ZUZXN0cyAtIG51bWJlciBvZiB0ZXN0cyAodGltZSBpbnRlcnZh
bHMpIHRvIHJ1bi4KIC8vCi0vLyBlbmRWYWx1ZURlbHRhRnVuY3Rpb24gLSBIb3cgbXVjaCB0aGUg
ZW5kIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgdmFsdWUgYXQgdGhlIHN0YXJ0IG9mIHRoZQotLy8g
aW50ZXJ2YWwuCisvLyBpbml0aWFsVmFsdWUgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgZmly
c3QgdGltZSBpbnRlcnZhbC4KIC8vCiAvLyBzZXRWYWx1ZUZ1bmN0aW9uIC0gZnVuY3Rpb24gdGhh
dCBzZXRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgYXQgdGhlIHN0YXJ0IG9mIGEgdGltZSBpbnRlcnZh
bC4KIC8vCiAvLyBhdXRvbWF0aW9uRnVuY3Rpb24gLSBmdW5jdGlvbiB0aGF0IHNldHMgdGhlIGVu
ZCB2YWx1ZSBmb3IgdGhlIHRpbWUgaW50ZXJ2YWwuICBJdCBzcGVjaWZpZXMgaG93CiAvLyB0aGUg
dmFsdWUgYXBwcm9hY2hlcyB0aGUgZW5kIHZhbHVlLgogLy8KLS8vIHZhbHVlVXBkYXRlRnVuY3Rp
b24gLSBUaGUgc3RhcnRpbmcgdmFsdWUgYXQgdGltZSBpbnRlcnZhbCBrIGlzIGFkanVzdGVkIGJ5
IHZhbHVlVXBkYXRlRnVuY3Rpb24oaykgdG8gZ2l2ZSB0aGUgbmV3IHN0YXJ0aW5nIHZhbHVlIGF0
IHRpbWUgaW50ZXJ2YWwgayArIDEuCi0vLwogLy8gQW4gb2JqZWN0IGlzIHJldHVybmVkIGNvbnRh
aW5pbmcgYW4gYXJyYXkgb2Ygc3RhcnQgdGltZXMgZm9yIGVhY2ggdGltZSBpbnRlcnZhbCwgYW5k
IGFuIGFycmF5CiAvLyBnaXZpbmcgdGhlIHN0YXJ0IGFuZCBlbmQgdmFsdWVzIGZvciB0aGUgaW50
ZXJ2YWwuCi1mdW5jdGlvbiBkb0F1dG9tYXRpb24oaW5pdGlhbFZhbHVlLCBlbmRWYWx1ZURlbHRh
RnVuY3Rpb24sIHNldFZhbHVlRnVuY3Rpb24sIGF1dG9tYXRpb25GdW5jdGlvbiwgdmFsdWVVcGRh
dGVGdW5jdGlvbikKK2Z1bmN0aW9uIGRvQXV0b21hdGlvbihudW1iZXJPZlRlc3RzLCBpbml0aWFs
VmFsdWUsIHNldFZhbHVlRnVuY3Rpb24sIGF1dG9tYXRpb25GdW5jdGlvbikKIHsKICAgICB2YXIg
dGltZUluZm8gPSBbMF07CiAgICAgdmFyIHZhbHVlSW5mbyA9IFtdOwpAQCAtMTc1LDIwICszNTAs
ODcgQEAgZnVuY3Rpb24gZG9BdXRvbWF0aW9uKGluaXRpYWxWYWx1ZSwgZW5kVmFsdWVEZWx0YUZ1
bmN0aW9uLCBzZXRWYWx1ZUZ1bmN0aW9uLCBhdXQKICAgICBmb3IgKHZhciBrID0gMDsgayA8IG51
bWJlck9mVGVzdHM7ICsraykgewogICAgICAgICB2YXIgc3RhcnRUaW1lID0gayAqIHRpbWVJbnRl
cnZhbDsKICAgICAgICAgdmFyIGVuZFRpbWUgPSAoayArIDEpICogdGltZUludGVydmFsOwotICAg
ICAgICB2YXIgZW5kVmFsdWUgPSB2YWx1ZSArIGVuZFZhbHVlRGVsdGFGdW5jdGlvbihrKTsKKyAg
ICAgICAgdmFyIGVuZFZhbHVlID0gdmFsdWUgKyBlbmRWYWx1ZURlbHRhKGspOwogCiAgICAgICAg
IC8vIFNldCB0aGUgdmFsdWUgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0aW1lIGludGVydmFsLgogICAg
ICAgICBzZXRWYWx1ZUZ1bmN0aW9uKHZhbHVlLCBzdGFydFRpbWUpOwogCi0gICAgICAgIC8vIFNw
ZWNpZnkgdGhlIHRhcmdldCB2YWx1ZSwgYW5kIGhvdyB3ZSBzaG91bGQgYXBwcm9hY2ggdGhlIHRh
cmdldCB2YWx1ZS4KKyAgICAgICAgLy8gU3BlY2lmeSB0aGUgZW5kIG9yIHRhcmdldCB2YWx1ZSwg
YW5kIGhvdyB3ZSBzaG91bGQgYXBwcm9hY2ggaXQuCiAgICAgICAgIGF1dG9tYXRpb25GdW5jdGlv
bihlbmRWYWx1ZSwgc3RhcnRUaW1lLCBlbmRUaW1lKTsKIAogICAgICAgICAvLyBLZWVwIHRyYWNr
IG9mIHRoZSBzdGFydCB0aW1lcywgYW5kIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcyBmb3IgZWFj
aCB0aW1lIGludGVydmFsLgogICAgICAgICB0aW1lSW5mby5wdXNoKGVuZFRpbWUpOwogICAgICAg
ICB2YWx1ZUluZm8ucHVzaCh7c3RhcnRWYWx1ZTogdmFsdWUsIGVuZFZhbHVlIDogZW5kVmFsdWV9
KTsKIAotICAgICAgICB2YWx1ZSArPSB2YWx1ZVVwZGF0ZUZ1bmN0aW9uKGspOworICAgICAgICB2
YWx1ZSArPSB2YWx1ZVVwZGF0ZShrKTsKICAgICB9CiAKICAgICByZXR1cm4ge3RpbWVzIDogdGlt
ZUluZm8sIHZhbHVlcyA6IHZhbHVlSW5mb307CiB9CisKKy8vIENyZWF0ZSB0aGUgYXVkaW8gZ3Jh
cGggZm9yIHRoZSB0ZXN0IGFuZCB0aGVuIHJ1biB0aGUgdGVzdC4KKy8vCisvLyBudW1iZXJPZlRl
c3RzIC0gbnVtYmVyIG9mIHRpbWUgaW50ZXJ2YWxzICh0ZXN0cykgdG8gcnVuLgorLy8KKy8vIGlu
aXRpYWxWYWx1ZSAtIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBnYWluIGF0IHRpbWUgMC4KKy8v
CisvLyBzZXRWYWx1ZUZ1bmN0aW9uIC0gZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBhdCB0aGUg
YmVnaW5uaW5nIG9mIGVhY2ggdGltZSBpbnRlcnZhbC4KKy8vCisvLyBhdXRvbWF0aW9uRnVuY3Rp
b24gLSB0aGUgQXVkaW9QYXJhbVRpbWVsaW5lIGF1dG9tYXRpb24gZnVuY3Rpb24KKy8vCisvLyB0
ZXN0TmFtZSAtIHN0cmluZyBpbmRpY2F0aW5nIHRoZSB0ZXN0IHRoYXQgaXMgYmVpbmcgcnVuLgor
Ly8KKy8vIG1heEVycm9yIC0gbWF4aW11bSBhbGxvd2VkIGVycm9yIGJldHdlZW4gdGhlIHJlbmRl
cmVkIGRhdGEgYW5kIHRoZSByZWZlcmVuY2UgZGF0YQorLy8KKy8vIHJlZmVyZW5jZUZ1bmN0aW9u
IC0gZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgdGhlIHJlZmVyZW5jZSBkYXRhIHRvIGJlIGNvbXBh
cmVkIGFnYWluc3QgdGhlCisvLyByZW5kZXJlZCBkYXRhLgorLy8KKy8vIGp1bXBUaHJlc2hvbGQg
LSBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHRocmVzaG9sZCB0byB1c2Ug
Zm9yIGRldGVjdGluZworLy8gZGlzY29udGludWl0aWVzLiAgSWYgbm90IHNwZWNpZmllZCwgZGVm
YXVsdHMgdG8gZGlzY29udGludWl0eVRocmVzaG9sZC4KKy8vCisvLyB0aW1lQ29uc3RhbnQgLSBv
cHRpb25hbCBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgdGltZSBjb25zdGFudCwgaWYgbmVlZGVk
LiAgKEN1cnJlbnRseSBvbmx5CisvLyBuZWVkZWQgZm9yIHNldFRhcmdldFZhbHVlQXRUaW1lKCku
KQorZnVuY3Rpb24gY3JlYXRlQXVkaW9HcmFwaEFuZFRlc3QobnVtYmVyT2ZUZXN0cywgaW5pdGlh
bFZhbHVlLCBzZXRWYWx1ZUZ1bmN0aW9uLCBhdXRvbWF0aW9uRnVuY3Rpb24sIHRlc3ROYW1lLCBt
YXhFcnJvciwgcmVmZXJlbmNlRnVuY3Rpb24sIGp1bXBUaHJlc2hvbGQsIHRpbWVDb25zdGFudCkK
K3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKKworICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgY29udGV4
dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgcmVuZGVyTGVuZ3RoKG51bWJlck9mVGVzdHMp
LCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgY29uc3RhbnRCdWZmZXIgPSBjcmVhdGVDb25zdGFudEJ1
ZmZlcihjb250ZXh0LCAxLCByZW5kZXJMZW5ndGgobnVtYmVyT2ZUZXN0cykpOworCisgICAgLy8g
V2UgdXNlIGFuIEF1ZGlvR2Fpbk5vZGUgaGVyZSBzaW1wbHkgYXMgYSBjb252ZW5pZW50IHdheSB0
byB0ZXN0IHRoZSBBdWRpb1BhcmFtCisgICAgLy8gYXV0b21hdGlvbiwgc2luY2UgaXQncyBlYXN5
IHRvIHBhc3MgYSBjb25zdGFudCB2YWx1ZSB0aHJvdWdoIHRoZSBub2RlLCBhdXRvbWF0ZSB0aGUK
KyAgICAvLyAuZ2FpbiBhdHRyaWJ1dGUgYW5kIG9ic2VydmUgdGhlIHJlc3VsdGluZyB2YWx1ZXMu
CisKKyAgICBnYWluTm9kZSA9IGNvbnRleHQuY3JlYXRlR2Fpbk5vZGUoKTsKKworICAgIHZhciBi
dWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIGJ1ZmZlclNv
dXJjZS5idWZmZXIgPSBjb25zdGFudEJ1ZmZlcjsKKyAgICBidWZmZXJTb3VyY2UuY29ubmVjdChn
YWluTm9kZSk7CisgICAgZ2Fpbk5vZGUuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKwor
ICAgIC8vIFNldCB1cCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgdGhhdCBjb250
cm9sIGhvdyB0aGUgYXV0b21hdGlvbiB0ZXN0IHZhbHVlcyBwcm9ncmVzcworICAgIC8vIGZvciBl
YWNoIHRpbWUgaW50ZXJ2YWwuCisgICAgc3RhcnRpbmdWYWx1ZURlbHRhID0gaW5pdGlhbFZhbHVl
IC8gbnVtYmVyT2ZUZXN0czsKKyAgICBzdGFydEVuZFZhbHVlQ2hhbmdlID0gc3RhcnRpbmdWYWx1
ZURlbHRhIC8gMjsKKyAgICBkaXNjb250aW51aXR5VGhyZXNob2xkID0gc3RhcnRFbmRWYWx1ZUNo
YW5nZSAvIDI7CisKKyAgICAvLyBSdW4gdGhlIGF1dG9tYXRpb24gdGVzdHMuCisgICAgdGltZVZh
bHVlSW5mbyA9IGRvQXV0b21hdGlvbihudW1iZXJPZlRlc3RzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0VmFsdWVGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG9tYXRpb25GdW5jdGlvbik7CisgICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKKyAgICAg
IAorICAgIGNvbnRleHQub25jb21wbGV0ZSA9IGNoZWNrUmVzdWx0RnVuY3Rpb24odGVzdE5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhFcnJvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUZ1
bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVt
cFRocmVzaG9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWVDb25zdGFudCk7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzCmluZGV4IGI4
NWUwYzljMmRiYzlmMjc1MzZhZDY0NTFkNzEyMmE4MWIzOThlMzcuLjQ3OTEyMDVhNDdmOTZkMTkw
ZWI2NGZkMjhjNDI1Njg2MWQyM2M0NTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcworKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9y
ZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMKQEAgLTQ4MCwxMSArNDgwLDYgQEAgZnVuY3Rpb24g
Z2VuZXJhdGVSZWZlcmVuY2UoZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1ldGVycykgewogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLS8vIFRydWUgaWYgdGhlIG51bWJlciBpcyBub3QgYW4gaW5maW5p
dHkgb3IgTmFOCi1mdW5jdGlvbiBpc1ZhbGlkTnVtYmVyKHgpIHsKLSAgICByZXR1cm4gIWlzTmFO
KHgpICYmICh4ICE9IEluZmluaXR5KSAmJiAoeCAhPSAtSW5maW5pdHkpOwotfQotCiBmdW5jdGlv
biBjaGVja0ZpbHRlclJlc3BvbnNlKGZpbHRlclR5cGUsIGZpbHRlclBhcmFtZXRlcnMpIHsKICAg
ICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgcmVuZGVyZWRCdWZmZXIgPSBldmVu
dC5yZW5kZXJlZEJ1ZmZlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129532</attachid>
            <date>2012-02-29 15:21:50 -0800</date>
            <delta_ts>2012-03-01 14:06:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77666-20120229152149.patch</filename>
            <type>text/plain</type>
            <size>40269</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhiZWI1MWMyYmRiMTJm
NjQzMmYxMjAzMjQ2ZTdiYTc3NzA5ZDdkOS4uMzRiMTkzMGZkNGMyMDdjYzY1ZmVkMGNjZjg4M2Iz
OTM5NjA3NDg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAyLTIzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBdWRpb1BhcmFtIG5lZWRzIHRl
c3RzIGZvciB0aGUgcGFyYW1ldGVyIGF1dG9tYXRpb24gcm91dGluZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzY2NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRpby9hdWRpb3Bh
cmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmF1ZGlv
L2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFsdWVBdFRpbWUuaHRtbAorICAgICAgICAgICAgICAgd2Vi
YXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS5odG1sCisgICAgICAgICAgICAgICB3ZWJh
dWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUuaHRtbAorCisgICAgICAgICogd2Vi
YXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFy
YW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlSW1wbCk6IFJvdW5kIHRoZQorICAgICAgICBj
dXJ2ZUluZGV4IHRvIGZpeCB0aW1pbmcgaXNzdWUgaW4gc2V0VmFsdWVDdXJ2ZUF0VGltZS4KKwog
MjAxMi0wMi0yOSAgTWF4IEZlaWwgIDxtZmVpbEByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0Jl
cnJ5XSBBZGQgc3VwcG9ydCBmb3IgRkxBQyBhdWRpbyBhbmQgT0dHL1ZvcmJpcyBhdWRpbwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAKaW5kZXggY2Q4
ZjUzNjc2MmE0Y2UwYzAzMDM1MzM5NjkxOGZkNjFjNWI1YzQyNC4uOGJlNDhjNTY5NjA2ZmQ0NTBk
ODc1NDYyN2EzMTY1MTM2ZmI1NTE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb1BhcmFtVGltZWxpbmUuY3BwCkBAIC0zMjksNyArMzI5LDEwIEBAIGZsb2F0IEF1ZGlvUGFy
YW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlSW1wbChmbG9hdCBzdGFydFRpbWUsCiAgICAg
ICAgICAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgc3RyZXRjaGVkIGN1cnZlIGRhdGEgdXNpbmcg
bmVhcmVzdCBuZWlnaGJvciBzYW1wbGluZy4KICAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcnNh
bXBsZWQgY3VydmUgZGF0YSBjYW4gYmUgcHJvdmlkZWQgaWYgc21vb3RobmVzcyBpcyBkZXNpcmVk
LgogICAgICAgICAgICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyAr
K3dyaXRlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGN1cnZlSW5k
ZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY3VydmVWaXJ0dWFsSW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWRlYWxseSB3ZSdkIHVzZSByb3VuZCgpIGZyb20gTWF0aEV4dHJh
cywgYnV0IHdlJ3JlIGluIGEgdGlnaHQgbG9vcCBoZXJlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhbmQgd2UncmUgdHJhZGluZyBvZmYgcHJlY2lzaW9uIGZvciBleHRyYSBzcGVlZC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGN1cnZlSW5kZXggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oMC41ICsgY3VydmVWaXJ0dWFsSW5kZXgpOworCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJ2ZVZpcnR1YWxJbmRleCArPSBjdXJ2ZVBvaW50c1BlckZyYW1lOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBCb3VuZHMgY2hlY2suCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWRjMTczNWQ5MGU5NjU5
NjcyZTI3MjcyN2M3MWYwYzliOTA5MWJmNi4uYjJmZjljNThjYmRmNzFmYzU4ZDg3ZGIzZmNiYmE3
N2M2NjQwZmQ4YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAyLTIzICBSYXltb25kIFRv
eSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBdWRpb1BhcmFtIG5lZWRzIHRlc3RzIGZv
ciB0aGUgcGFyYW1ldGVyIGF1dG9tYXRpb24gcm91dGluZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzY2NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1leHBvbmVu
dGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmh0bWw6CisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJh
bS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2F1ZGlvcGFyYW0tbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUuaHRtbDogQWRkZWQu
CisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRUYXJnZXRWYWx1ZUF0VGltZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0
VmFsdWVBdFRpbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1z
ZXRWYWx1ZUF0VGltZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1
ZGlvcGFyYW0tc2V0VmFsdWVBdFRpbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8v
YXVkaW9wYXJhbS1zZXRWYWx1ZUN1cnZlQXRUaW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUN1cnZlQXRUaW1lLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanM6Cisg
ICAgICAgIChyZW5kZXJMZW5ndGgpOgorICAgICAgICAoY3JlYXRlQ29uc3RhbnRBcnJheSk6Cisg
ICAgICAgIChjcmVhdGVMaW5lYXJSYW1wQXJyYXkpOgorICAgICAgICAoZGlzY3JldGVUaW1lQ29u
c3RhbnRGb3JTYW1wbGVSYXRlKToKKyAgICAgICAgKGNyZWF0ZUV4cG9uZW50aWFsQXBwcm9hY2hB
cnJheSk6CisgICAgICAgIChjcmVhdGVTaW5lV2F2ZUFycmF5KToKKyAgICAgICAgKGVuZFZhbHVl
RGVsdGEpOgorICAgICAgICAodmFsdWVVcGRhdGUpOgorICAgICAgICAoY29tcGFyZVBhcnRpYWxT
aWduYWxzKToKKyAgICAgICAgKHZlcmlmeURpc2NvbnRpbnVpdGllcyk6CisgICAgICAgIChjb21w
YXJlU2lnbmFscyk6CisgICAgICAgIChjaGVja1Jlc3VsdEZ1bmN0aW9uLnJldHVybi52YXIpOgor
ICAgICAgICAoY2hlY2tSZXN1bHRGdW5jdGlvbik6CisgICAgICAgIChkb0F1dG9tYXRpb24pOgor
ICAgICAgICAoY3JlYXRlQXVkaW9HcmFwaEFuZFRlc3QpOgorICAgICAgICAqIHdlYmF1ZGlvL3Jl
c291cmNlcy9hdWRpby10ZXN0aW5nLmpzOiBNb3ZlZCBpc1ZhbGlkTnVtYmVyIGZyb20KKyAgICAg
ICAgYmlxdWFkLXRlc3RpbmcuanMgdG8gaGVyZS4KKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJj
ZXMvYmlxdWFkLXRlc3RpbmcuanM6IE1vdmVkIGlzVmFsaWROdW1iZXIgZnJvbQorICAgICAgICBo
ZXJlIHRvIGF1ZGlvLXRlc3RpbmcuanMuCisKIDIwMTItMDItMjkgIEdhdmluIEJhcnJhY2xvdWdo
ICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFdyaXRhYmxlIGF0dHJpYnV0ZSBu
b3Qgc2V0IGNvcnJlY3RseSB3aGVuIHJlZGVmaW5pbmcgYW4gYWNjZXNzb3IgdG8gYSBkYXRhIGRl
c2NyaXB0b3IKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tZXhw
b25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVk
aW9wYXJhbS1leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKaW5kZXggM2U2MmY4NDIz
NjYxOGI0MTFkYTI1Mzc5NWZhYzk5YTk0ZDk3MGRkNS4uMDJlMTcwMjdiNjhjOWQyN2RkZjA2MjNm
ZWE3NzVmOWVjZmFkZmM4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9w
YXJhbS1leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYXVkaW9wYXJhbS1leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKQEAg
LTIwLDQ1ICsyMCwxNSBAQAogICAgICAgLy8gZGlzY29udGludWl0eSBpcyBmb3IgdGVzdGluZyB0
aW1pbmcuICBBbHNvLCB3ZSBhbHRlcm5hdGUgYmV0d2VlbiBhbiBpbmNyZWFzaW5nIGFuZAogICAg
ICAgLy8gZGVjcmVhc2luZyByYW1wIGZvciBlYWNoIGludGVydmFsLgogCisgICAgICAvLyBOdW1i
ZXIgb2YgdGVzdHMgdG8gcnVuLgorICAgICAgdmFyIG51bWJlck9mVGVzdHMgPSAxMDA7CisKICAg
ICAgIC8vIE1heCBhbGxvd2VkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVuZGVyZWQgZGF0YSBh
bmQgdGhlIGV4cGVjdGVkIHJlc3VsdC4KICAgICAgIHZhciBtYXhBbGxvd2VkRXJyb3IgPSA2Ljc1
ZS00OwogCi0gICAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhcnRpbmcgYW5kIGVuZGlu
ZyB0aW1lcyBhbmQgc3RhcnRpbmcgYW5kIGVuZGluZyB2YWx1ZXMgZm9yIGVhY2gKLSAgICAgIC8v
IHRpbWUgaW50ZXJ2YWwuCi0gICAgICB2YXIgdGltZVZhbHVlSW5mbzsKLQogICAgICAgLy8gVGhl
IEF1ZGlvR2Fpbk5vZGUgc3RhcnRzIHdpdGggdGhpcyB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSBkZWZh
dWx0IHZhbHVlLgogICAgICAgdmFyIGluaXRpYWxWYWx1ZSA9IDEwMDsKIAotICAgICAgLy8gVGhl
IGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFydGluZyB2YWx1ZXMgYmV0d2VlbiBlYWNoIHRpbWUgaW50
ZXJ2YWwuCi0gICAgICB2YXIgc3RhcnRpbmdWYWx1ZURlbHRhID0gaW5pdGlhbFZhbHVlIC8gbnVt
YmVyT2ZUZXN0czsKLSAgICAgIAotICAgICAgLy8gRWFjaCBleHBvbmVudGlhbCByYW1wIHdpbGwg
aW5jcmVhc2Ugb3IgZGVjcmVhc2UgYnkgdGhpcyBtdWNoIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBl
bmQgb2YKLSAgICAgIC8vIHRoZSB0aW1lIGludGVydmFsLiAgV2UgY2hvb3NlIGhhbGYgb2Ygc3Rh
cnRpbmdWYWx1ZURlbHRhIHNvIHRoYXQgdGhlIGVuZGluZyB2YWx1ZSBvZiB0aGUKLSAgICAgIC8v
IHJhbXAgd2lsbCBiZSBkaXN0aW5jdCBmcm9tIHRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgcmFt
cCBmb3IgbmV4dCB0aW1lIGludGVydmFsLiAgVGhpcwotICAgICAgLy8gYWxsb3dzIHVzIHRvIGRl
dGVjdCB3aGVyZSB0aGUgcmFtcCBiZWdpbnMgYW5kIGVuZHMuCi0gICAgICB2YXIgc3RhcnRFbmRW
YWx1ZUNoYW5nZSA9IHN0YXJ0aW5nVmFsdWVEZWx0YSAvIDI7Ci0KLSAgICAgIC8vIFRocmVzaG9s
ZCB0byB1c2UgZm9yIGRldGVjdGluZyBkaXNjb250aW51aXRpZXMgdGhhdCBzaG91bGQgYXBwZWFy
IGF0IGVhY2ggdGltZSBpbnRlcnZhbC4KLSAgICAgIHZhciBkaXNjb250aW51aXR5VGhyZXNob2xk
ID0gc3RhcnRFbmRWYWx1ZUNoYW5nZSAvIDI7Ci0KLSAgICAgIHZhciBnYWluTm9kZTsKLSAgICAg
IAotICAgICAgdmFyIGNvbnN0YW50QnVmZmVyOwotICAgICAgdmFyIGJ1ZmZlclNvdXJjZTsKLQot
ICAgICAgLy8gUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHN0YXJ0aW5nIHZhbHVl
IGFuZCB0aGUgZW5kaW5nIHZhbHVlIGZvciB0aW1lIGludGVydmFsCi0gICAgICAvLyB8dGltZUlu
dGVydmFsSW5kZXh8LiAgV2UgYWx0ZXJuYXRlIGJldHdlZW4gYW4gZW5kIHZhbHVlIHRoYXQgaXMg
YWJvdmUgb3IgYmVsb3cgdGhlIHN0YXJ0aW5nCi0gICAgICAvLyB2YWx1ZS4KLSAgICAgIGZ1bmN0
aW9uIGVuZFZhbHVlRGVsdGEodGltZUludGVydmFsSW5kZXgpCi0gICAgICB7Ci0gICAgICAgICAg
aWYgKHRpbWVJbnRlcnZhbEluZGV4ICYgMSkgewotICAgICAgICAgICAgICByZXR1cm4gLXN0YXJ0
RW5kVmFsdWVDaGFuZ2U7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJu
IHN0YXJ0RW5kVmFsdWVDaGFuZ2U7Ci0gICAgICAgICAgfQotICAgICAgfQotCiAgICAgICAvLyBT
ZXQgdGhlIGdhaW4gbm9kZSB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGF0IHRoZSBzcGVj
aWZpZWQgdGltZS4KICAgICAgIGZ1bmN0aW9uIHNldFZhbHVlKHZhbHVlLCB0aW1lKQogICAgICAg
ewpAQCAtNzMsNjUgKzQzLDE2IEBACiAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlh
bFJhbXBUb1ZhbHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKQogICAgICAgfQogICAgICAgCi0gICAg
ICAvLyBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3RhcnRpbmcgdmFsdWUgYXQg
fHRpbWVJbnRlcnZhbEluZGV4fCBhbmQgdGhlIHN0YXJ0aW5nCi0gICAgICAvLyB2YWx1ZSBhdCB0
aGUgbmV4dCB0aW1lIGludGVydmFsLiAgU2luY2Ugd2Ugc3RhcnRlZCBhdCBhIGxhcmdlIGluaXRp
YWwgdmFsdWUsIHdlIGRlY3JlYXNlCi0gICAgICAvLyB0aGUgdmFsdWUgYXQgZWFjaCB0aW1lIGlu
dGVydmFsLgotICAgICAgZnVuY3Rpb24gdmFsdWVVcGRhdGUodGltZUludGVydmFsSW5kZXgpCi0g
ICAgICB7Ci0gICAgICAgICAgcmV0dXJuIC1zdGFydGluZ1ZhbHVlRGVsdGE7Ci0gICAgICB9Ci0K
LSAgICAgIGZ1bmN0aW9uIGNoZWNrUmVzdWx0KGV2ZW50KQotICAgICAgewotICAgICAgICAgIHZh
ciBidWZmZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKLSAgICAgICAgICByZW5kZXJlZERhdGEg
PSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7Ci0KLSAgICAgICAgICBjb21wYXJlU2lnbmFscygi
ZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgpIiwgbWF4QWxsb3dlZEVycm9yLCByZW5kZXJl
ZERhdGEsIGNyZWF0ZUV4cG9uZW50aWFsUmFtcEFycmF5LCB0aW1lVmFsdWVJbmZvLCBkaXNjb250
aW51aXR5VGhyZXNob2xkKTsKLQotICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgICAgfQot
ICAgICAgCiAgICAgICBmdW5jdGlvbiBydW5UZXN0KCkKICAgICAgIHsKLSAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHdpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgICBjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdChudW1i
ZXJPZlRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVJhbXAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4QWxsb3dlZEVycm9yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUV4cG9uZW50aWFsUmFtcEFycmF5KTsKIAot
ICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCi0gICAgICAgICAgY29u
dGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgcmVuZGVyTGVuZ3RoLCBzYW1wbGVSYXRl
KTsKLSAgICAgICAgICBjb25zdGFudEJ1ZmZlciA9IGNyZWF0ZUNvbnN0YW50QnVmZmVyKGNvbnRl
eHQsIDEsIHJlbmRlckxlbmd0aCk7Ci0KLSAgICAgICAgICAvLyBXZSB1c2UgYW4gQXVkaW9HYWlu
Tm9kZSBoZXJlIHNpbXBseSBhcyBhIGNvbnZlbmllbnQgd2F5IHRvIHRlc3QgdGhlIEF1ZGlvUGFy
YW0KLSAgICAgICAgICAvLyBhdXRvbWF0aW9uLCBzaW5jZSBpdCdzIGVhc3kgdG8gcGFzcyBhIGNv
bnN0YW50IHZhbHVlIHRocm91Z2ggdGhlIG5vZGUsIGF1dG9tYXRlIHRoZQotICAgICAgICAgIC8v
IC5nYWluIGF0dHJpYnV0ZSBhbmQgb2JzZXJ2ZSB0aGUgcmVzdWx0aW5nIHZhbHVlcy4KLQotICAg
ICAgICAgIGdhaW5Ob2RlID0gY29udGV4dC5jcmVhdGVHYWluTm9kZSgpOwotCi0gICAgICAgICAg
YnVmZmVyU291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKLSAgICAgICAgICBi
dWZmZXJTb3VyY2UuYnVmZmVyID0gY29uc3RhbnRCdWZmZXI7Ci0gICAgICAgICAgYnVmZmVyU291
cmNlLmNvbm5lY3QoZ2Fpbk5vZGUpOwotICAgICAgICAgIGdhaW5Ob2RlLmNvbm5lY3QoY29udGV4
dC5kZXN0aW5hdGlvbik7Ci0KLSAgICAgICAgICAvLyBBdCBlYWNoIHRpbWUgaW50ZXJ2YWwsIHdl
IGFkanVzdCB0aGUgdmFsdWUgYnkgc3RhcnRpbmdWYWx1ZURlbHRhLiAgSG93ZXZlciwgdGhlCi0g
ICAgICAgICAgLy8gZXhwb25lbnRpYWwgcmFtcCBlbmQgdmFsdWUgaXMgdGhlIHZhbHVlICsvLSBz
dGFydEVuZFZhbHVlQ2hhbmdlLiAgKFdlIGFsdGVybmF0ZWx5Ci0gICAgICAgICAgLy8gc3BlY2lm
eSB0aGUgZW5kIHZhbHVlIHRvIGJlIGdyZWF0ZXIgb3Igc21hbGxlciB0aGFuIHRoZSBzdGFydGlu
ZyB2YWx1ZSwgdG8gdGVzdCB0aGUKLSAgICAgICAgICAvLyByYW1wIGdvaW5nIHVwIGFuZCBkb3du
LikKLSAgICAgICAgICAvLwotICAgICAgICAgIC8vIEJ5IGRvaW5nIGl0IHRoaXMgd2F5LCB3ZSBn
ZXQgYSBkaXNjb250aW51aXR5IGF0IGVhY2ggdGltZSBpbnRlcnZhbCB3aGljaCB3ZSBjYW4gdXNl
IHRvCi0gICAgICAgICAgLy8gdGVzdCBpZiB0aGUgcmFtcCBzdGFydGVkIGFuZCBlbmRlZCBhdCB0
aGUgY29ycmVjdCB0aW1lLgotICAgICAgICAgIHRpbWVWYWx1ZUluZm8gPSBkb0F1dG9tYXRpb24o
aW5pdGlhbFZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5k
VmFsdWVEZWx0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVSYW1w
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVVcGRhdGUpOwot
Ci0gICAgICAgICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKLSAgICAgIAotICAgICAgICAgIGNv
bnRleHQub25jb21wbGV0ZSA9IGNoZWNrUmVzdWx0OwotICAgICAgICAgIGNvbnRleHQuc3RhcnRS
ZW5kZXJpbmcoKTsKICAgICAgIH0KIAogICAgICAgcnVuVGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1Zh
bHVlQXRUaW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NWFiNTdhNjU3YmY4YjE5MWIyYTc3
MWY5ZDMzZjY5NTlkZWZjYTEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYXVkaW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMSBAQAorVGVzdCBBdWRpb1BhcmFtIGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCkgZnVu
Y3Rpb25hbGl0eS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIEFsbCAxMDAg
dGVzdHMgc3RhcnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4KK1BBU1MgQWxsIDEw
MCB0ZXN0cyBwYXNzZWQgd2l0aGluIGFuIGFjY2VwdGFibGUgdG9sZXJhbmNlLgorUEFTUyBBdWRp
b1BhcmFtIGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCkgdGVzdCBwYXNzZWQuCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGlt
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE4NWEyY2Q2ZDZjNzQ3M2Q2YjYyNzExZmEyOTEwOWIxYzEwMDU2
YmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxp
bmVhclJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW9wYXJhbS10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVz
dCBBdWRpb1BhcmFtIGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCkgZnVuY3Rpb25hbGl0eS4iKTsK
KworLy8gUGxheSBhIGxvbmcgREMgc2lnbmFsIG91dCB0aHJvdWdoIGFuIEF1ZGlvR2Fpbk5vZGUs
IGFuZCBjYWxsIHNldFZhbHVlQXRUaW1lKCkgYW5kCisvLyBsaW5lYXJSYW1wVG9WYWx1ZUF0VGlt
ZSgpIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzIHRvIHNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyB2
YWx1ZXMgZm9yIGEKKy8vIGxpbmVhciByYW1wLiBFYWNoIHRpbWUgaW50ZXJ2YWwgaGFzIGEgcmFt
cCB3aXRoIGEgZGlmZmVyZW50IHN0YXJ0aW5nIGFuZCBlbmRpbmcgdmFsdWUgc28KKy8vIHRoYXQg
dGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IGVhY2ggdGltZSBpbnRlcnZhbCBib3VuZGFyeS4g
IFRoZSBkaXNjb250aW51aXR5IGlzIGZvcgorLy8gdGVzdGluZyB0aW1pbmcuICBBbHNvLCB3ZSBh
bHRlcm5hdGUgYmV0d2VlbiBhbiBpbmNyZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHJhbXAgZm9yIGVh
Y2gKKy8vIGludGVydmFsLgorCisvLyBOdW1iZXIgb2YgdGVzdHMgdG8gcnVuLgordmFyIG51bWJl
ck9mVGVzdHMgPSAxMDA7CisKKy8vIE1heCBhbGxvd2VkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUg
cmVuZGVyZWQgZGF0YSBhbmQgdGhlIGV4cGVjdGVkIHJlc3VsdC4KK3ZhciBtYXhBbGxvd2VkRXJy
b3IgPSA2LjVlLTc7CisKKy8vIFNldCB0aGUgZ2FpbiBub2RlIHZhbHVlIHRvIHRoZSBzcGVjaWZp
ZWQgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCB0aW1lLgorZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUs
IHRpbWUpCit7CisgICAgZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7
Cit9CisKKy8vIEdlbmVyYXRlIGEgbGluZWFyIHJhbXAgZW5kaW5nIGF0IHRpbWUgfGVuZFRpbWV8
IHdpdGggYW4gZW5kaW5nIHZhbHVlIG9mIHx2YWx1ZXwuCitmdW5jdGlvbiBnZW5lcmF0ZVJhbXAo
dmFsdWUsIHN0YXJ0VGltZSwgZW5kVGltZSkKK3sKKyAgICAvLyB8c3RhcnRUaW1lfCBpcyBpZ25v
cmVkIGJlY2F1c2UgdGhlIGxpbmVhciByYW1wIHVzZXMgdGhlIHZhbHVlIGZyb20gdGhlIHNldFZh
bHVlQXRUaW1lKCkgY2FsbCBhYm92ZS4KKyAgICBnYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1Zh
bHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKQorfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAg
ICBjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdChudW1iZXJPZlRlc3RzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVSYW1wLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgpIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXhBbGxvd2VkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3JlYXRlTGluZWFyUmFtcEFycmF5KTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKyAgCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVl
QXRUaW1lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0
VGFyZ2V0VmFsdWVBdFRpbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjNmQyYTBmMWNiNTE4
Yjc3M2I2YjBhZWU5MDQxNGI5MGE4MmVjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDExIEBACitUZXN0IEF1ZGlvUGFyYW0gc2V0VGFyZ2V0VmFsdWVBdFRpbWUoKSBm
dW5jdGlvbmFsaXR5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgQWxsIDEw
MCB0ZXN0cyBzdGFydGVkIGFuZCBlbmRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLgorUEFTUyBBbGwg
MTAwIHRlc3RzIHBhc3NlZCB3aXRoaW4gYW4gYWNjZXB0YWJsZSB0b2xlcmFuY2UuCitQQVNTIEF1
ZGlvUGFyYW0gc2V0VGFyZ2V0VmFsdWVBdFRpbWUoKSB0ZXN0IHBhc3NlZC4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWVkY2Y4MGRlMmE0ODFlNGFiMGExYjdlZjM1MzEwYzZiOTA3NGJiZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0
VmFsdWVBdFRpbWUuaHRtbApAQCAtMCwwICsxLDYyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEF1ZGlvUGFy
YW0gc2V0VGFyZ2V0VmFsdWVBdFRpbWUoKSBmdW5jdGlvbmFsaXR5LiIpOworCisvLyBQbGF5IGEg
bG9uZyBEQyBzaWduYWwgb3V0IHRocm91Z2ggYW4gQXVkaW9HYWluTm9kZSwgYW5kIGNhbGwgc2V0
VmFsdWVBdFRpbWUoKSBhbmQKKy8vIHNldFRhcmdldFZhbHVlQXRUaW1lIGF0IHJlZ3VsYXIgaW50
ZXJ2YWxzIHRvIHNldCB0aGUgc3RhcnRpbmcgdmFsdWUgYW5kIHRoZSB0YXJnZXQKKy8vIHZhbHVl
LiBFYWNoIHRpbWUgaW50ZXJ2YWwgaGFzIGEgcmFtcCB3aXRoIGEgZGlmZmVyZW50IHN0YXJ0aW5n
IGFuZCB0YXJnZXQgdmFsdWUgc28gdGhhdAorLy8gdGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0
IGVhY2ggdGltZSBpbnRlcnZhbCBib3VuZGFyeS4gIFRoZSBkaXNjb250aW51aXR5IGlzIGZvciB0
ZXN0aW5nCisvLyB0aW1pbmcuICBBbHNvLCB3ZSBhbHRlcm5hdGUgYmV0d2VlbiBhbiBpbmNyZWFz
aW5nIGFuZCBkZWNyZWFzaW5nIHJhbXAgZm9yIGVhY2ggaW50ZXJ2YWwuCisKKy8vIE51bWJlciBv
ZiB0ZXN0cyB0byBydW4uCit2YXIgbnVtYmVyT2ZUZXN0cyA9IDEwMDsKKworLy8gTWF4IGFsbG93
ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW5kZXJlZCBkYXRhIGFuZCB0aGUgZXhwZWN0ZWQg
cmVzdWx0LgordmFyIG1heEFsbG93ZWRFcnJvciA9IDIuNzllLTU7CisKKy8vIFRoZSBBdWRpb0dh
aW5Ob2RlIHN0YXJ0cyB3aXRoIHRoaXMgdmFsdWUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCB2YWx1
ZS4KK3ZhciBpbml0aWFsVmFsdWUgPSAxMDA7CisKKy8vIFNldCB0aGUgZ2FpbiBub2RlIHZhbHVl
IHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCB0aW1lLgorZnVuY3Rpb24g
c2V0VmFsdWUodmFsdWUsIHRpbWUpCit7CisgICAgZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGlt
ZSh2YWx1ZSwgdGltZSk7Cit9CisKKy8vIEdlbmVyYXRlIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNo
IHN0YXJ0aW5nIGF0IHxzdGFydFRpbWV8IHdpdGggYSB0YXJnZXQgdmFsdWUgb2YgfHZhbHVlfC4K
K2Z1bmN0aW9uIGF1dG9tYXRpb24odmFsdWUsIHN0YXJ0VGltZSwgZW5kVGltZSkKK3sKKyAgICAv
LyBlbmRUaW1lIGlzIG5vdCB1c2VkIGZvciBzZXRUYXJnZXRWYWx1ZUF0VGltZS4KKyAgICBnYWlu
Tm9kZS5nYWluLnNldFRhcmdldFZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25z
dGFudCkKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgY3JlYXRlQXVkaW9HcmFwaEFu
ZFRlc3QobnVtYmVyT2ZUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFs
VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0b21hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAic2V0VGFyZ2V0VmFsdWVBdFRpbWUoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF4QWxsb3dlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUV4cG9u
ZW50aWFsQXBwcm9hY2hBcnJheSk7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVBdFRpbWUtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRiZTM1YzI0Y2NjNmM3ODlmNzhjMTc3MjljNjUwNDgy
OTIxYTljMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFy
YW0tc2V0VmFsdWVBdFRpbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3QgQXVk
aW9QYXJhbSBzZXRWYWx1ZUF0VGltZSgpIGZ1bmN0aW9uYWxpdHkuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworUEFTUyBBbGwgMTAwIHRlc3RzIHN0YXJ0ZWQgYW5kIGVuZGVkIGF0IHRo
ZSBjb3JyZWN0IHRpbWUuCitQQVNTIEFsbCAxMDAgdGVzdHMgcGFzc2VkIHdpdGhpbiBhbiBhY2Nl
cHRhYmxlIHRvbGVyYW5jZS4KK1BBU1MgQXVkaW9QYXJhbSBzZXRWYWx1ZUF0VGltZSgpIHRlc3Qg
cGFzc2VkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVB
dFRpbWUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVBdFRp
bWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ODg5NGQ4MjFjZTFmY2ExMzY0NmY0N2JjNWMwY2RhYjNiZjg4
MGE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1z
ZXRWYWx1ZUF0VGltZS5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQXVkaW9Q
YXJhbSBzZXRWYWx1ZUF0VGltZSgpIGZ1bmN0aW9uYWxpdHkuIik7CisKKy8vIFBsYXkgYSBsb25n
IERDIHNpZ25hbCBvdXQgdGhyb3VnaCBhbiBBdWRpb0dhaW5Ob2RlLCBhbmQgY2FsbCBzZXRWYWx1
ZUF0VGltZSgpIGF0IHJlZ3VsYXIKKy8vIGludGVydmFscyB0byBzZXQgdGhlIHZhbHVlIGZvciB0
aGUgZHVyYXRpb24gb2YgdGhlIGludGVydmFsLiAgRWFjaCB0aW1lIGludGVydmFsIGhhcworLy8g
ZGlmZmVyZW50IHZhbHVlIHNvIHRoYXQgdGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IGVhY2gg
dGltZSBpbnRlcnZhbCBib3VuZGFyeS4gIFRoZQorLy8gZGlzY29udGludWl0eSBpcyBmb3IgdGVz
dGluZyB0aW1pbmcuCisKKy8vIE51bWJlciBvZiB0ZXN0cyB0byBydW4uCit2YXIgbnVtYmVyT2ZU
ZXN0cyA9IDEwMDsKKworLy8gTWF4IGFsbG93ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW5k
ZXJlZCBkYXRhIGFuZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgordmFyIG1heEFsbG93ZWRFcnJvciA9
IDZlLTg7CisKKy8vIFNldCB0aGUgZ2FpbiBub2RlIHZhbHVlIHRvIHRoZSBzcGVjaWZpZWQgdmFs
dWUgYXQgdGhlIHNwZWNpZmllZCB0aW1lLgorZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUsIHRpbWUp
Cit7CisgICAgZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7Cit9CisK
Ky8vIEZvciB0ZXN0aW5nIHNldFZhbHVlQXRUaW1lKCksIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55
dGhpbmcgZm9yIGF1dG9tYXRpb24uIGJlY2F1c2UgdGhlIHZhbHVlIGF0CisvLyB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBpbnRlcnZhbCBpcyBzZXQgYnkgc2V0VmFsdWUgYW5kIGl0IHJlbWFpbnMgY29u
c3RhbnQgZm9yIHRoZSBkdXJhdGlvbiwgd2hpY2gKKy8vIGlzIHdoYXQgd2Ugd2FudC4KK2Z1bmN0
aW9uIGF1dG9tYXRpb24odmFsdWUsIHN0YXJ0VGltZSwgZW5kVGltZSkKK3sKKyAgICAvLyBEbyBu
b3RoaW5nLgorfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBjcmVhdGVBdWRpb0dyYXBo
QW5kVGVzdChudW1iZXJPZlRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0b21hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0VmFs
dWVBdFRpbWUoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4QWxsb3dlZEVycm9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNvbnN0YW50QXJyYXkpOworfQor
CitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKwor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9h
dWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUN1cnZlQXRUaW1lLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43Mzc3YmIwOTQxNmY1YmQ0MjE0ODkxYTQ1NmU3MzliNjlkN2RhMTFiCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUN1cnZl
QXRUaW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0IEF1ZGlvUGFyYW0gc2V0
VmFsdWVDdXJ2ZUF0VGltZSgpIGZ1bmN0aW9uYWxpdHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworUEFTUyBBbGwgMjAgdGVzdHMgc3RhcnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJl
Y3QgdGltZS4KK1BBU1MgQWxsIDIwIHRlc3RzIHBhc3NlZCB3aXRoaW4gYW4gYWNjZXB0YWJsZSB0
b2xlcmFuY2UuCitQQVNTIEF1ZGlvUGFyYW0gc2V0VmFsdWVDdXJ2ZUF0VGltZSgpIHRlc3QgcGFz
c2VkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVDdXJ2
ZUF0VGltZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUN1
cnZlQXRUaW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmVmOGM3OGIzZmQ4MDUyZWQxYWIxYTNlNGEzNzM0
MjUwNjUyNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlv
cGFyYW0tc2V0VmFsdWVDdXJ2ZUF0VGltZS5odG1sCkBAIC0wLDAgKzEsNzQgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVzdGluZy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48
L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24o
IlRlc3QgQXVkaW9QYXJhbSBzZXRWYWx1ZUN1cnZlQXRUaW1lKCkgZnVuY3Rpb25hbGl0eS4iKTsK
KworLy8gUGxheSBhIGxvbmcgREMgc2lnbmFsIG91dCB0aHJvdWdoIGFuIEF1ZGlvR2Fpbk5vZGUg
YW5kIGZvciBlYWNoIHRpbWUgaW50ZXJ2YWwgY2FsbAorLy8gc2V0VmFsdWVDdXJ2ZUF0VGltZSgp
IHRvIHNldCB0aGUgdmFsdWVzIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGludGVydmFsLiAgRWFj
aCBjdXJ2ZSBpcyBhIHNpbmUKKy8vIHdhdmUsIGFuZCB3ZSBhc3N1bWUgdGhhdCB0aGUgdGltZSBp
bnRlcnZhbCBpcyBub3QgYW4gZXhhY3QgbXVsdGlwbGUgb2YgdGhlIHBlcmlvZC4gVGhpcyBjYXVz
ZXMgYQorLy8gZGlzY29udGludWl0eSBiZXR3ZWVuIHRpbWUgaW50ZXJ2YWxzIHdoaWNoIGlzIHVz
ZWQgdG8gdGVzdCB0aW1pbmcuCisKKy8vIE51bWJlciBvZiB0ZXN0cyB0byBydW4uCit2YXIgbnVt
YmVyT2ZUZXN0cyA9IDIwOworCisvLyBNYXggYWxsb3dlZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhl
IHJlbmRlcmVkIGRhdGEgYW5kIHRoZSBleHBlY3RlZCByZXN1bHQuICAoVGhlIGVycm9yIGlzIHpl
cm8KKy8vIGJlY2F1c2UgdGhlIHJlbmRlcmVkIGN1cnZlIHNob3VsZCByZWFsbHkgYmUgZXhhY3Rs
eSB0aGUgc2FtZSBhcyB0aGUgcmVmZXJlbmNlLikKK3ZhciBtYXhBbGxvd2VkRXJyb3IgPSAwOwor
CisvLyBUaGUgYW1wbGl0dWRlIG9mIHRoZSBzaW5lIHdhdmUuCit2YXIgc2luZUFtcGxpdHVkZSA9
IDE7CisKKy8vIEZyZXF1ZW5jeSBvZiB0aGUgc2luZSB3YXZlLgordmFyIGZyZXFIeiA9IDQ0MDsK
KworLy8gQ3VydmUgdG8gdXNlIGZvciBzZXRWYWx1ZUN1cnZlQXRUaW1lKCkuCit2YXIgY3VydmU7
CisKKy8vIFNldHMgdGhlIGN1cnZlIGRhdGEgZm9yIHRoZSBlbnRpcmUgdGltZSBpbnRlcnZhbC4K
K2Z1bmN0aW9uIGF1dG9tYXRpb24odmFsdWUsIHN0YXJ0VGltZSwgZW5kVGltZSkKK3sKKyAgICBn
YWluTm9kZS5nYWluLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHN0YXJ0VGltZSwgZW5kVGlt
ZSAtIHN0YXJ0VGltZSk7Cit9CisKKy8vIENyZWF0ZSBhIHNpbmUgd2F2ZSBvZiB0aGUgc3BlY2lm
aWVkIGR1cmF0aW9uLgorZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlU2luZUFycmF5KHN0YXJ0VGlt
ZSwgZW5kVGltZSwgc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIHNhbXBsZVJhdGUpCit7CisgICAgLy8g
SWdub3JlIHxzdGFydFZhbHVlfCBhbmQgfGVuZFZhbHVlfCBmb3IgdGhlIHNpbmUgd2F2ZS4KKyAg
ICByZXR1cm4gY3JlYXRlU2luZVdhdmVBcnJheShlbmRUaW1lIC0gc3RhcnRUaW1lLCBmcmVxSHos
IHNpbmVBbXBsaXR1ZGUsIHNhbXBsZVJhdGUpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgCit7
CisgICAgLy8gVGhlIGN1cnZlIG9mIHZhbHVlcyB0byB1c2UuCisgICAgY3VydmUgPSBjcmVhdGVT
aW5lV2F2ZUFycmF5KHRpbWVJbnRlcnZhbCwgZnJlcUh6LCBzaW5lQW1wbGl0dWRlLCBzYW1wbGVS
YXRlKTsKKworICAgIGNyZWF0ZUF1ZGlvR3JhcGhBbmRUZXN0KG51bWJlck9mVGVzdHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2luZUFtcGxpdHVkZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbihrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInNldFZhbHVlQ3VydmVBdFRpbWUoKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF4QWxsb3dlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZVJlZmVyZW5jZVNpbmVBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyICogTWF0aC5QSSAqIHNpbmVBbXBsaXR1ZGUgKiBmcmVxSHogLyBzYW1wbGVSYXRlKTsK
K30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+
CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNv
dXJjZXMvYXVkaW8tdGVzdGluZy5qcwppbmRleCA4ZjY3ZjJkNmZmNzAzYmFmNGYxYTllY2I3OTll
MDM0OWQwNTIwODU2Li5hZjBhZDI3YTIzMmUyNTljZDgxZmU1MzNkNTc0YTdlMjk1Y2NkZjg3IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5q
cworKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcwpA
QCAtMTI4LDMgKzEyOCw4IEBAIGZ1bmN0aW9uIGdyYWluTGVuZ3RoSW5TYW1wbGVGcmFtZXMoZ3Jh
aW5PZmZzZXQsIGR1cmF0aW9uLCBzYW1wbGVSYXRlKSB7CiAKICAgICByZXR1cm4gZW5kRnJhbWUg
LSBzdGFydEZyYW1lOwogfQorCisvLyBUcnVlIGlmIHRoZSBudW1iZXIgaXMgbm90IGFuIGluZmlu
aXR5IG9yIE5hTgorZnVuY3Rpb24gaXNWYWxpZE51bWJlcih4KSB7CisgICAgcmV0dXJuICFpc05h
Tih4KSAmJiAoeCAhPSBJbmZpbml0eSkgJiYgKHggIT0gLUluZmluaXR5KTsKK30KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanMg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW9wYXJhbS10ZXN0aW5nLmpzCmlu
ZGV4IGNjYTM0Yzk2ZDBiMTgzOWYyMGRhY2VmNTk3YmIwYWU2Y2U2ZTgxMTQuLjhkM2FjMDIzN2Ex
MjliZGRjNDY2YTY3MWEyZDU3ZWYwMjM2M2IwNzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL3Jlc291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanMKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVzdGluZy5qcwpAQCAtMSwxOCArMSwzOCBA
QAogdmFyIHNhbXBsZVJhdGUgPSA0NDEwMDsKIAotLy8gTnVtYmVyIG9mIHRlc3RzIHRvIHJ1bi4K
LXZhciBudW1iZXJPZlRlc3RzID0gMTAwOworLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXJ0
aW5nL2VuZGluZyB0aW1lcyBhbmQgc3RhcnRpbmcvZW5kaW5nIHZhbHVlcyBmb3IgZWFjaCB0aW1l
IGludGVydmFsLgordmFyIHRpbWVWYWx1ZUluZm87CiAKLS8vIFRpbWUgaW50ZXJ2YWwgYmV0d2Vl
biB2YWx1ZSBjaGFuZ2VzLiAgSXQgaXMgYmVzdCBpZiAxIC8gbnVtYmVyT2ZUZXN0cyBpcyBub3Qg
Y2xvc2UgdG8KLS8vIHRpbWVJbnRlcnZhbC4KKy8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc3Rh
cnRpbmcgdmFsdWVzIGJldHdlZW4gZWFjaCB0aW1lIGludGVydmFsLgordmFyIHN0YXJ0aW5nVmFs
dWVEZWx0YTsKKyAgICAgIAorLy8gRm9yIGFueSBhdXRvbWF0aW9uIGZ1bmN0aW9uIHRoYXQgaGFz
IGFuIGVuZCBvciB0YXJnZXQgdmFsdWUsIHRoZSBlbmQgdmFsdWUgaXMgYmFzZWQgdGhlIHN0YXJ0
aW5nCisvLyB2YWx1ZSBvZiB0aGUgdGltZSBpbnRlcnZhbC4gIFRoZSBzdGFydGluZyB2YWx1ZSB3
aWxsIGJlIGluY3JlYXNlZCBvciBkZWNyZWFzZWQgYnkKKy8vIHxzdGFydEVuZFZhbHVlQ2hhbmdl
fC4gV2UgY2hvb3NlIGhhbGYgb2YgfHN0YXJ0aW5nVmFsdWVEZWx0YXwgc28gdGhhdCB0aGUgZW5k
aW5nIHZhbHVlIHdpbGwgYmUKKy8vIGRpc3RpbmN0IGZyb20gdGhlIHN0YXJ0aW5nIHZhbHVlIGZv
ciBuZXh0IHRpbWUgaW50ZXJ2YWwuICBUaGlzIGFsbG93cyB1cyB0byBkZXRlY3Qgd2hlcmUgdGhl
IHJhbXAKKy8vIGJlZ2lucyBhbmQgZW5kcy4KK3ZhciBzdGFydEVuZFZhbHVlQ2hhbmdlOworCisv
LyBEZWZhdWx0IHRocmVzaG9sZCB0byB1c2UgZm9yIGRldGVjdGluZyBkaXNjb250aW51aXRpZXMg
dGhhdCBzaG91bGQgYXBwZWFyIGF0IGVhY2ggdGltZSBpbnRlcnZhbC4KK3ZhciBkaXNjb250aW51
aXR5VGhyZXNob2xkOworCisvLyBUaW1lIGludGVydmFsIGJldHdlZW4gdmFsdWUgY2hhbmdlcy4g
IEl0IGlzIGJlc3QgaWYgMSAvIG51bWJlck9mVGVzdHMgaXMgbm90IGNsb3NlIHRvIHRpbWVJbnRl
cnZhbC4KIHZhciB0aW1lSW50ZXJ2YWwgPSAuMDM7CiAKLS8vIE1ha2Ugc3VyZSB3ZSByZW5kZXIg
bG9uZyBlbm91Z2ggdG8gY2FwdHVyZSBhbGwgb2Ygb3VyIHRlc3QgZGF0YS4KLXZhciByZW5kZXJU
aW1lID0gKG51bWJlck9mVGVzdHMgKyAxKSAqIHRpbWVJbnRlcnZhbDsKLXZhciByZW5kZXJMZW5n
dGggPSB0aW1lVG9TYW1wbGVGcmFtZShyZW5kZXJUaW1lLCBzYW1wbGVSYXRlKTsKKy8vIFNvbWUg
c3VpdGFibGUgdGltZSBjb25zdGFudCBzbyB0aGF0IHdlIGNhbiBzZWUgYSBzaWduaWZpY2FudCBj
aGFuZ2Ugb3ZlciBhIHRpbWVJbnRlcnZhbC4gIFRoaXMgaXMKKy8vIG9ubHkgbmVlZGVkIGJ5IHNl
dFRhcmdldFZhbHVlQXRUaW1lKCkgd2hpY2ggbmVlZHMgYSB0aW1lIGNvbnN0YW50LgordmFyIHRp
bWVDb25zdGFudCA9IHRpbWVJbnRlcnZhbCAvIDM7CisKK3ZhciBnYWluTm9kZTsKIAogdmFyIGNv
bnRleHQ7CiAKKy8vIE1ha2Ugc3VyZSB3ZSByZW5kZXIgbG9uZyBlbm91Z2ggdG8gY2FwdHVyZSBh
bGwgb2Ygb3VyIHRlc3QgZGF0YS4KK2Z1bmN0aW9uIHJlbmRlckxlbmd0aChudW1iZXJPZlRlc3Rz
KQoreworICAgIHJldHVybiB0aW1lVG9TYW1wbGVGcmFtZSgobnVtYmVyT2ZUZXN0cyArIDEpICog
dGltZUludGVydmFsLCBzYW1wbGVSYXRlKTsKK30KKwogLy8gQ3JlYXRlIGEgYnVmZmVyIGNvbnRh
aW5pbmcgdGhlIHNhbWUgY29uc3RhbnQgdmFsdWUuCiBmdW5jdGlvbiBjcmVhdGVDb25zdGFudEJ1
ZmZlcihjb250ZXh0LCBjb25zdGFudCwgbGVuZ3RoKSB7CiAgICAgdmFyIGJ1ZmZlciA9IGNvbnRl
eHQuY3JlYXRlQnVmZmVyKDEsIGxlbmd0aCwgY29udGV4dC5zYW1wbGVSYXRlKTsKQEAgLTI2LDYg
KzQ2LDM5IEBAIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0YW50QnVmZmVyKGNvbnRleHQsIGNvbnN0YW50
LCBsZW5ndGgpIHsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCisvLyBDcmVhdGUgYSBjb25zdGFu
dCByZWZlcmVuY2Ugc2lnbmFsIHdpdGggdGhlIGdpdmVuIHx2YWx1ZXwuICBCYXNpY2FsbHkgdGhl
IHNhbWUgYXMKKy8vIHxjcmVhdGVDb25zdGFudEJ1ZmZlcnwsIGJ1dCB3aXRoIHRoZSBwYXJhbWV0
ZXJzIHRvIG1hdGNoIHRoZSBvdGhlciBjcmVhdGUgZnVuY3Rpb25zLiAgVGhlCisvLyB8ZW5kVmFs
dWV8IGlzIGlnbm9yZWQuCitmdW5jdGlvbiBjcmVhdGVDb25zdGFudEFycmF5KHN0YXJ0VGltZSwg
ZW5kVGltZSwgdmFsdWUsIGVuZFZhbHVlLCBzYW1wbGVSYXRlKQoreworICAgIHZhciBzdGFydEZy
YW1lID0gdGltZVRvU2FtcGxlRnJhbWUoc3RhcnRUaW1lLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIg
ZW5kRnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZShlbmRUaW1lLCBzYW1wbGVSYXRlKTsKKyAgICB2
YXIgbGVuZ3RoID0gZW5kRnJhbWUgLSBzdGFydEZyYW1lOworCisgICAgdmFyIGJ1ZmZlciA9IGNy
ZWF0ZUNvbnN0YW50QnVmZmVyKGNvbnRleHQsIHZhbHVlLCBsZW5ndGgpOworCisgICAgcmV0dXJu
IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKK30KKworLy8gQ3JlYXRlIGEgbGluZWFyIHJhbXAg
c3RhcnRpbmcgYXQgfHN0YXJ0VmFsdWV8IGFuZCBlbmRpbmcgYXQgfGVuZFZhbHVlfC4gIFRoZSBy
YW1wIHN0YXJ0cyBhdCB0aW1lCisvLyB8c3RhcnRUaW1lfCBhbmQgZW5kcyBhdCB8ZW5kVGltZXwu
ICAoVGhlIHN0YXJ0IGFuZCBlbmQgdGltZXMgYXJlIG9ubHkgdXNlZCB0byBjb21wdXRlIGhvdyBt
YW55CisvLyBzYW1wbGVzIHRvIHJldHVybi4pCitmdW5jdGlvbiBjcmVhdGVMaW5lYXJSYW1wQXJy
YXkoc3RhcnRUaW1lLCBlbmRUaW1lLCBzdGFydFZhbHVlLCBlbmRWYWx1ZSwgc2FtcGxlUmF0ZSkK
K3sKKyAgICB2YXIgc3RhcnRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKHN0YXJ0VGltZSwgc2Ft
cGxlUmF0ZSk7CisgICAgdmFyIGVuZEZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUoZW5kVGltZSwg
c2FtcGxlUmF0ZSk7CisgICAgdmFyIGxlbmd0aCA9IGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsKKyAg
ICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkobGVuZ3RoKTsKKworICAgIHZhciBzdGVwID0gKGVuZFZh
bHVlIC0gc3RhcnRWYWx1ZSkgLyBsZW5ndGg7CisKKyAgICBmb3IgKGsgPSAwOyBrIDwgbGVuZ3Ro
OyArK2spIHsKKyAgICAgICAgYXJyYXlba10gPSBzdGFydFZhbHVlICsgayAqIHN0ZXA7CisgICAg
fQorCisgICAgcmV0dXJuIGFycmF5OworfQorCiAvLyBDcmVhdGUgYW4gZXhwb25lbnRpYWwgcmFt
cCBzdGFydGluZyBhdCB8c3RhcnRWYWx1ZXwgYW5kIGVuZGluZyBhdCB8ZW5kVmFsdWV8LiAgVGhl
IHJhbXAgc3RhcnRzIGF0CiAvLyB0aW1lIHxzdGFydFRpbWV8IGFuZCBlbmRzIGF0IHxlbmRUaW1l
fC4gIChUaGUgc3RhcnQgYW5kIGVuZCB0aW1lcyBhcmUgb25seSB1c2VkIHRvIGNvbXB1dGUgaG93
CiAvLyBtYW55IHNhbXBsZXMgdG8gcmV0dXJuLikKQEAgLTM0LDI4ICs4NywxMDUgQEAgZnVuY3Rp
b24gY3JlYXRlRXhwb25lbnRpYWxSYW1wQXJyYXkoc3RhcnRUaW1lLCBlbmRUaW1lLCBzdGFydFZh
bHVlLCBlbmRWYWx1ZSwgc2EKICAgICB2YXIgc3RhcnRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1l
KHN0YXJ0VGltZSwgc2FtcGxlUmF0ZSk7CiAgICAgdmFyIGVuZEZyYW1lID0gdGltZVRvU2FtcGxl
RnJhbWUoZW5kVGltZSwgc2FtcGxlUmF0ZSk7CiAgICAgdmFyIGxlbmd0aCA9IGVuZEZyYW1lIC0g
c3RhcnRGcmFtZTsKLSAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGxlbmd0aCk7CisgICAgdmFy
IGFycmF5ID0gbmV3IEFycmF5KGxlbmd0aCk7CiAKICAgICB2YXIgbXVsdGlwbGllciA9IE1hdGgu
cG93KGVuZFZhbHVlIC8gc3RhcnRWYWx1ZSwgMSAvIGxlbmd0aCk7CiAgICAgCiAgICAgZm9yICh2
YXIgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgewotICAgICAgICBidWZmZXJba10gPSBzdGFydFZh
bHVlICogTWF0aC5wb3cobXVsdGlwbGllciwgayk7CisgICAgICAgIGFycmF5W2tdID0gc3RhcnRW
YWx1ZSAqIE1hdGgucG93KG11bHRpcGxpZXIsIGspOwogICAgIH0KIAotICAgIHJldHVybiBidWZm
ZXI7CisgICAgcmV0dXJuIGFycmF5OworfQorCitmdW5jdGlvbiBkaXNjcmV0ZVRpbWVDb25zdGFu
dEZvclNhbXBsZVJhdGUodGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKQoreworICAgIHJldHVybiAx
IC0gTWF0aC5leHAoLTEgLyAoc2FtcGxlUmF0ZSAqIHRpbWVDb25zdGFudCkpOworfQorCisvLyBD
cmVhdGUgYSBzaWduYWwgdGhhdCBzdGFydHMgYXQgfHN0YXJ0VmFsdWV8IGFuZCBleHBvbmVudGlh
bGx5IGFwcHJvYWNoZXMgdGhlIHRhcmdldCB2YWx1ZSBvZgorLy8gfHRhcmdldFZhbHVlfCwgdXNp
bmcgYSB0aW1lIGNvbnN0YW50IG9mIHx0aW1lQ29uc3RhbnR8LiAgVGhlIHJhbXAgc3RhcnRzIGF0
IHRpbWUgfHN0YXJ0VGltZXwgYW5kCisvLyBlbmRzIGF0IHxlbmRUaW1lfC4gIChUaGUgc3RhcnQg
YW5kIGVuZCB0aW1lcyBhcmUgb25seSB1c2VkIHRvIGNvbXB1dGUgaG93IG1hbnkgc2FtcGxlcyB0
bworLy8gcmV0dXJuLikKK2Z1bmN0aW9uIGNyZWF0ZUV4cG9uZW50aWFsQXBwcm9hY2hBcnJheShz
dGFydFRpbWUsIGVuZFRpbWUsIHN0YXJ0VmFsdWUsIHRhcmdldFZhbHVlLCBzYW1wbGVSYXRlLCB0
aW1lQ29uc3RhbnQpCit7CisgICAgdmFyIHN0YXJ0RnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZShz
dGFydFRpbWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBlbmRGcmFtZSA9IHRpbWVUb1NhbXBsZUZy
YW1lKGVuZFRpbWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBsZW5ndGggPSBlbmRGcmFtZSAtIHN0
YXJ0RnJhbWU7CisgICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KGxlbmd0aCk7CisgICAgdmFyIGMg
PSBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUodGltZUNvbnN0YW50LCBzYW1wbGVS
YXRlKTsKKworICAgIHZhciB2YWx1ZSA9IHN0YXJ0VmFsdWU7CisgICAgCisgICAgZm9yICh2YXIg
ayA9IDA7IGsgPCBsZW5ndGg7ICsraykgeworICAgICAgICBhcnJheVtrXSA9IHZhbHVlOworICAg
ICAgICB2YWx1ZSArPSAodGFyZ2V0VmFsdWUgLSB2YWx1ZSkgKiBjOworICAgIH0KKworICAgIHJl
dHVybiBhcnJheTsKK30KKworLy8gQ3JlYXRlIGEgc2luZSB3YXZlIG9mIHRoZSBnaXZlbiBmcmVx
dWVuY3kgYW5kIGFtcGxpdHVkZS4gIFRoZSBzaW5lIHdhdmUgaXMgb2Zmc2V0IGJ5IGhhbGYgdGhl
CisvLyBhbXBsaXR1ZGUgc28gdGhhdCByZXN1bHQgaXMgYWx3YXlzIHBvc2l0aXZlLgorZnVuY3Rp
b24gY3JlYXRlU2luZVdhdmVBcnJheShkdXJhdGlvblNlY29uZHMsIGZyZXFIeiwgYW1wbGl0dWRl
LCBzYW1wbGVSYXRlKQoreworICAgIHZhciBsZW5ndGggPSB0aW1lVG9TYW1wbGVGcmFtZShkdXJh
dGlvblNlY29uZHMsIHNhbXBsZVJhdGUpOworICAgIHZhciBzaWduYWwgPSBuZXcgRmxvYXQzMkFy
cmF5KGxlbmd0aCk7CisgICAgdmFyIG9tZWdhID0gMiAqIE1hdGguUEkgKiBmcmVxSHogLyBzYW1w
bGVSYXRlOworICAgIHZhciBoYWxmQW1wbGl0dWRlID0gYW1wbGl0dWRlIC8gMjsKKyAgICAKKyAg
ICBmb3IgKHZhciBrID0gMDsgayA8IGxlbmd0aDsgKytrKSB7CisgICAgICAgIHNpZ25hbFtrXSA9
IGhhbGZBbXBsaXR1ZGUgKyBoYWxmQW1wbGl0dWRlICogTWF0aC5zaW4ob21lZ2EgKiBrKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc2lnbmFsOworfQorCisvLyBSZXR1cm4gdGhlIGRpZmZlcmVuY2Ug
YmV0d2VlbiB0aGUgc3RhcnRpbmcgdmFsdWUgYW5kIHRoZSBlbmRpbmcgdmFsdWUgZm9yIHRpbWUg
aW50ZXJ2YWwKKy8vIHx0aW1lSW50ZXJ2YWxJbmRleHwuICBXZSBhbHRlcm5hdGUgYmV0d2VlbiBh
biBlbmQgdmFsdWUgdGhhdCBpcyBhYm92ZSBvciBiZWxvdyB0aGUgc3RhcnRpbmcKKy8vIHZhbHVl
LgorZnVuY3Rpb24gZW5kVmFsdWVEZWx0YSh0aW1lSW50ZXJ2YWxJbmRleCkKK3sKKyAgICBpZiAo
dGltZUludGVydmFsSW5kZXggJiAxKSB7CisgICAgICAgIHJldHVybiAtc3RhcnRFbmRWYWx1ZUNo
YW5nZTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gc3RhcnRFbmRWYWx1ZUNoYW5nZTsK
KyAgICB9Cit9CisKKy8vIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzdGFydGlu
ZyB2YWx1ZSBhdCB8dGltZUludGVydmFsSW5kZXh8IGFuZCB0aGUgc3RhcnRpbmcgdmFsdWUgYXQK
Ky8vIHRoZSBuZXh0IHRpbWUgaW50ZXJ2YWwuICBTaW5jZSB3ZSBzdGFydGVkIGF0IGEgbGFyZ2Ug
aW5pdGlhbCB2YWx1ZSwgd2UgZGVjcmVhc2UgdGhlIHZhbHVlIGF0IGVhY2gKKy8vIHRpbWUgaW50
ZXJ2YWwuCitmdW5jdGlvbiB2YWx1ZVVwZGF0ZSh0aW1lSW50ZXJ2YWxJbmRleCkKK3sKKyAgICBy
ZXR1cm4gLXN0YXJ0aW5nVmFsdWVEZWx0YTsKIH0KIAogLy8gQ29tcGFyZSBhIHNlY3Rpb24gb2Yg
dGhlIHJlbmRlcmVkIGRhdGEgYWdhaW5zdCBvdXIgZXhwZWN0ZWQgc2lnbmFsLgogZnVuY3Rpb24g
Y29tcGFyZVBhcnRpYWxTaWduYWxzKHJlbmRlcmVkLCBleHBlY3RlZEZ1bmN0aW9uLCBzdGFydFRp
bWUsIGVuZFRpbWUsIHZhbHVlSW5mbywgc2FtcGxlUmF0ZSkKIHsKICAgICB2YXIgc3RhcnRTYW1w
bGUgPSB0aW1lVG9TYW1wbGVGcmFtZShzdGFydFRpbWUsIHNhbXBsZVJhdGUpOwotICAgIHZhciBl
eHBlY3RlZCA9IGV4cGVjdGVkRnVuY3Rpb24oc3RhcnRUaW1lLCBlbmRUaW1lLCB2YWx1ZUluZm8u
c3RhcnRWYWx1ZSwgdmFsdWVJbmZvLmVuZFZhbHVlLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgZXhw
ZWN0ZWQgPSBleHBlY3RlZEZ1bmN0aW9uKHN0YXJ0VGltZSwgZW5kVGltZSwgdmFsdWVJbmZvLnN0
YXJ0VmFsdWUsIHZhbHVlSW5mby5lbmRWYWx1ZSwgc2FtcGxlUmF0ZSwgdGltZUNvbnN0YW50KTsK
IAogICAgIHZhciBuID0gZXhwZWN0ZWQubGVuZ3RoOwogICAgIHZhciBtYXhFcnJvciA9IC0xOwog
ICAgIHZhciBtYXhFcnJvckluZGV4ID0gLTE7CiAgICAgCiAgICAgZm9yICh2YXIgayA9IDA7IGsg
PCBuOyArK2spIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHBhc3MgdGhlc2UgdGVz
dHMgYmVjYXVzZSBhIE5hTiBoYXMgYmVlbiBnZW5lcmF0ZWQgaW4gZWl0aGVyIHRoZQorICAgICAg
ICAvLyByZW5kZXJlZCBkYXRhIG9yIHRoZSByZWZlcmVuY2UgZGF0YS4KKyAgICAgICAgaWYgKCFp
c1ZhbGlkTnVtYmVyKHJlbmRlcmVkW3N0YXJ0U2FtcGxlICsga10pKSB7CisgICAgICAgICAgICBt
YXhFcnJvciA9IEluZmluaXR5OworICAgICAgICAgICAgbWF4RXJyb3JJbmRleCA9IHN0YXJ0U2Ft
cGxlICsgazsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIk5hTiBvciBpbmZpbml0eSBmb3IgcmVu
ZGVyZWQgZGF0YSBhdCAiICsgbWF4RXJyb3JJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWlzVmFsaWROdW1iZXIoZXhwZWN0ZWRba10pKSB7CisgICAg
ICAgICAgICBtYXhFcnJvciA9IEluZmluaXR5OworICAgICAgICAgICAgbWF4RXJyb3JJbmRleCA9
IHN0YXJ0U2FtcGxlICsgazsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIk5hbiBvciBpbmZpbml0
eSBmb3IgcmVmZXJlbmNlIGRhdGEgYXQgIiArIG1heEVycm9ySW5kZXgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICAgICAgdmFyIGVycm9yID0gTWF0aC5hYnMocmVuZGVyZWRb
c3RhcnRTYW1wbGUgKyBrXSAtIGV4cGVjdGVkW2tdKTsKICAgICAgICAgaWYgKGVycm9yID4gbWF4
RXJyb3IpIHsKICAgICAgICAgICAgIG1heEVycm9yID0gZXJyb3I7CkBAIC04Myw5ICsyMTMsMjYg
QEAgZnVuY3Rpb24gdmVyaWZ5RGlzY29udGludWl0aWVzKHZhbHVlcywgdGltZXMsIHRocmVzaG9s
ZCkKICAgICAgICAgfQogICAgIH0KIAorICAgIHZhciB0ZXN0Q291bnQ7CisKKyAgICAvLyBJZiB0
aGVyZSBhcmUgbnVtYmVyT2ZUZXN0cyBpbnRlcnZhbHMsIHRoZXJlIGFyZSBvbmx5IG51bWJlck9m
VGVzdHMgLSAxIGludGVybmFsIGludGVydmFsCisgICAgLy8gYm91bmRhcmllcy4gSGVuY2UgdGhl
IG1heGltdW0gbnVtYmVyIG9mIGRpc2NvbnRpbnV0aWVzIHdlIGV4cGVjdCB0byBmaW5kIGlzIG51
bWJlck9mVGVzdHMgLQorICAgIC8vIDEuIElmIHdlIGZpbmQgbW9yZSB0aGFuIHRoYXQsIHdlIGhh
dmUgbm8gcmVmZXJlbmNlIHRvIGNvbXBhcmUgYWdhaW5zdC4gV2UgYWxzbyBhc3N1bWUgdGhhdAor
ICAgIC8vIHRoZSBhY3R1YWwgZGlzY29udGludWl0aWVzIGFyZSBjbG9zZSB0byB0aGUgZXhwZWN0
ZWQgb25lcy4KKyAgICAvLworICAgIC8vIFRoaXMgaXMganVzdCBhIHNhbml0eSBjaGVjayB3aGVu
IHNvbWV0aGluZyBnb2VzIHJlYWxseSB3cm9uZy4gIEZvciBleGFtcGxlLCBpZiB0aGUgdGhyZXNo
b2xkCisgICAgLy8gaXMgdG9vIGxvdywgZXZlcnkgc2FtcGxlIGZyYW1lIGxvb2tzIGxpa2UgYSBk
aXNjb250aW51aXR5LgorICAgIGlmIChicmVha3MubGVuZ3RoID49IG51bWJlck9mVGVzdHMpIHsK
KyAgICAgICAgdGVzdENvdW50ID0gbnVtYmVyT2ZUZXN0cyAtIDE7CisgICAgICAgIHRlc3RGYWls
ZWQoIkZvdW5kIG1vcmUgZGlzY29udGludWl0aWVzICgiICsgYnJlYWtzLmxlbmd0aCArICIpIHRo
YW4gZXhwZWN0ZWQuICBPbmx5IGNvbXBhcmluZyBmaXJzdCAiICsgdGVzdENvdW50ICsgImRpc2Nv
bnRpbnVpdGllcy4iKTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRlc3RDb3VudCA9IGJyZWFrcy5sZW5ndGg7CisgICAgfQorICAgIAogICAgIC8vIENv
bXBhcmUgdGhlIGxvY2F0aW9uIG9mIGVhY2ggZGlzY29udGludWl0eSB3aXRoIHRoZSBlbmQgdGlt
ZSBvZiBlYWNoIGludGVydmFsLiAoVGhlcmUgaXMgbm8KICAgICAvLyBkaXNjb250aW51aXR5IGF0
IHRoZSBzdGFydCBvZiB0aGUgc2lnbmFsLikKLSAgICBmb3IgKHZhciBrID0gMDsgayA8IGJyZWFr
cy5sZW5ndGg7ICsraykgeworICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGVzdENvdW50OyArK2sp
IHsKICAgICAgICAgdmFyIGV4cGVjdGVkU2FtcGxlRnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZSh0
aW1lc1trICsgMV0sIHNhbXBsZVJhdGUpOwogICAgICAgICBpZiAoYnJlYWtzW2tdICE9IGV4cGVj
dGVkU2FtcGxlRnJhbWUpIHsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKQEAgLTk2LDgg
KzI0MywxNCBAQCBmdW5jdGlvbiB2ZXJpZnlEaXNjb250aW51aXRpZXModmFsdWVzLCB0aW1lcywg
dGhyZXNob2xkKQogCiAgICAgaWYgKGJhZExvY2F0aW9ucykgewogICAgICAgICB0ZXN0RmFpbGVk
KGJhZExvY2F0aW9ucyArICIgZGlzY29udGludWl0aWVzIGF0IGluY29ycmVjdCBsb2NhdGlvbnMi
KTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHRlc3RQ
YXNzZWQoIkFsbCAiICsgKGJyZWFrcy5sZW5ndGggKyAxKSArICIgdGVzdHMgc3RhcnRlZCBhbmQg
ZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4iKTsKKyAgICAgICAgaWYgKGJyZWFrcy5sZW5ndGgg
PT0gbnVtYmVyT2ZUZXN0cyAtIDEpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkFsbCAiICsg
bnVtYmVyT2ZUZXN0cyArICIgdGVzdHMgc3RhcnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJlY3Qg
dGltZS4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkZvdW5k
ICIgKyBicmVha3MubGVuZ3RoICsgIiBkaXNjb250aW51aXRpZXMgYnV0IGV4cGVjdGVkICIgKyAo
bnVtYmVyT2ZUZXN0cyAtIDEpKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICByZXR1cm4gc3VjY2VzczsKQEAgLTEzMSw3ICsyODQsNyBA
QCBmdW5jdGlvbiBjb21wYXJlU2lnbmFscyh0ZXN0TmFtZSwgbWF4RXJyb3IsIHJlbmRlcmVkRGF0
YSwgZXhwZWN0ZWRGdW5jdGlvbiwgdGltZQogICAgICAgICB2YXIgcmVzdWx0ID0gY29tcGFyZVBh
cnRpYWxTaWduYWxzKHJlbmRlcmVkRGF0YSwgZXhwZWN0ZWRGdW5jdGlvbiwgdGltZXNba10sIHRp
bWVzW2sgKyAxXSwgdmFsdWVzW2tdLCBzYW1wbGVSYXRlKTsKIAogICAgICAgICBpZiAocmVzdWx0
Lm1heEVycm9yID4gbWF4RXJyb3IpIHsKLSAgICAgICAgICAgIHRlc3RGYWlsZWQoIkluY29ycmVj
dCBnYWluIGZvciB0ZXN0ICIgKyBrICsgIi4gTWF4IGVycm9yID0gIiArIHJlc3VsdC5tYXhFcnJv
ciArICIgYXQgb2Zmc2V0ICIgKyAocmVzdWx0LmluZGV4ICsgdGltZVRvU2FtcGxlRnJhbWUodGlt
ZXNba10sIHNhbXBsZVJhdGUpKSk7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJJbmNvcnJlY3Qg
dmFsdWUgZm9yIHRlc3QgIiArIGsgKyAiLiBNYXggZXJyb3IgPSAiICsgcmVzdWx0Lm1heEVycm9y
ICsgIiBhdCBvZmZzZXQgIiArIChyZXN1bHQuaW5kZXggKyB0aW1lVG9TYW1wbGVGcmFtZSh0aW1l
c1trXSwgc2FtcGxlUmF0ZSkpKTsKICAgICAgICAgICAgICsrZmFpbGVkVGVzdENvdW50OwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTUwLDIzICszMDMsNTIgQEAgZnVuY3Rpb24gY29tcGFyZVNpZ25h
bHModGVzdE5hbWUsIG1heEVycm9yLCByZW5kZXJlZERhdGEsIGV4cGVjdGVkRnVuY3Rpb24sIHRp
bWUKICAgICB9CiB9CiAKKy8vIENyZWF0ZSBhIGZ1bmN0aW9uIHRvIHRlc3QgdGhlIHJlbmRlcmVk
IGRhdGEgd2l0aCB0aGUgcmVmZXJlbmNlIGRhdGEuCisvLworLy8gdGVzdE5hbWUgLSBzdHJpbmcg
ZGVzY3JpYmluZyB0aGUgdGVzdAorLy8KKy8vIGVycm9yIC0gbWF4IGFsbG93ZWQgZXJyb3IgYmV0
d2VlbiByZW5kZXJlZCBkYXRhIGFuZCB0aGUgcmVmZXJlbmNlIGRhdGEuCisvLworLy8gcmVmZXJl
bmNlRnVuY3Rpb24gLSBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyB0aGUgcmVmZXJlbmNlIGRhdGEg
dG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVuZGVyZWQKKy8vIGRhdGEuCisvLworLy8ganVtcFRo
cmVzaG9sZCAtIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgdGhyZXNob2xk
IHRvIHVzZSBmb3IgZGV0ZWN0aW5nCisvLyBkaXNjb250aW51aXRpZXMuICBJZiBub3Qgc3BlY2lm
aWVkLCBkZWZhdWx0cyB0byBkaXNjb250aW51aXR5VGhyZXNob2xkLgorLy8KK2Z1bmN0aW9uIGNo
ZWNrUmVzdWx0RnVuY3Rpb24odGVzdE5hbWUsIGVycm9yLCByZWZlcmVuY2VGdW5jdGlvbiwganVt
cFRocmVzaG9sZCkKK3sKKyAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFy
IGJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAgICAgICByZW5kZXJlZERhdGEgPSBi
dWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisKKyAgICAgICAgdmFyIHRocmVzaG9sZDsKKworICAg
ICAgICBpZiAoIWp1bXBUaHJlc2hvbGQpIHsKKyAgICAgICAgICAgIHRocmVzaG9sZCA9IGRpc2Nv
bnRpbnVpdHlUaHJlc2hvbGQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJlc2hv
bGQgPSBqdW1wVGhyZXNob2xkOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb21wYXJl
U2lnbmFscyh0ZXN0TmFtZSwgZXJyb3IsIHJlbmRlcmVkRGF0YSwgcmVmZXJlbmNlRnVuY3Rpb24s
IHRpbWVWYWx1ZUluZm8sIHRocmVzaG9sZCk7CisKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfQorfQorCiAvLyBSdW4gYWxsIHRoZSBhdXRvbWF0aW9uIHRlc3RzLgogLy8KLS8vIGluaXRp
YWxWYWx1ZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBmaXJzdCB0aW1lIGludGVydmFsLgor
Ly8gbnVtYmVyT2ZUZXN0cyAtIG51bWJlciBvZiB0ZXN0cyAodGltZSBpbnRlcnZhbHMpIHRvIHJ1
bi4KIC8vCi0vLyBlbmRWYWx1ZURlbHRhRnVuY3Rpb24gLSBIb3cgbXVjaCB0aGUgZW5kIHZhbHVl
IGRpZmZlcnMgZnJvbSB0aGUgdmFsdWUgYXQgdGhlIHN0YXJ0IG9mIHRoZQotLy8gaW50ZXJ2YWwu
CisvLyBpbml0aWFsVmFsdWUgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgZmlyc3QgdGltZSBp
bnRlcnZhbC4KIC8vCiAvLyBzZXRWYWx1ZUZ1bmN0aW9uIC0gZnVuY3Rpb24gdGhhdCBzZXRzIHRo
ZSBzcGVjaWZpZWQgdmFsdWUgYXQgdGhlIHN0YXJ0IG9mIGEgdGltZSBpbnRlcnZhbC4KIC8vCiAv
LyBhdXRvbWF0aW9uRnVuY3Rpb24gLSBmdW5jdGlvbiB0aGF0IHNldHMgdGhlIGVuZCB2YWx1ZSBm
b3IgdGhlIHRpbWUgaW50ZXJ2YWwuICBJdCBzcGVjaWZpZXMgaG93CiAvLyB0aGUgdmFsdWUgYXBw
cm9hY2hlcyB0aGUgZW5kIHZhbHVlLgogLy8KLS8vIHZhbHVlVXBkYXRlRnVuY3Rpb24gLSBUaGUg
c3RhcnRpbmcgdmFsdWUgYXQgdGltZSBpbnRlcnZhbCBrIGlzIGFkanVzdGVkIGJ5IHZhbHVlVXBk
YXRlRnVuY3Rpb24oaykgdG8gZ2l2ZSB0aGUgbmV3IHN0YXJ0aW5nIHZhbHVlIGF0IHRpbWUgaW50
ZXJ2YWwgayArIDEuCi0vLwogLy8gQW4gb2JqZWN0IGlzIHJldHVybmVkIGNvbnRhaW5pbmcgYW4g
YXJyYXkgb2Ygc3RhcnQgdGltZXMgZm9yIGVhY2ggdGltZSBpbnRlcnZhbCwgYW5kIGFuIGFycmF5
CiAvLyBnaXZpbmcgdGhlIHN0YXJ0IGFuZCBlbmQgdmFsdWVzIGZvciB0aGUgaW50ZXJ2YWwuCi1m
dW5jdGlvbiBkb0F1dG9tYXRpb24oaW5pdGlhbFZhbHVlLCBlbmRWYWx1ZURlbHRhRnVuY3Rpb24s
IHNldFZhbHVlRnVuY3Rpb24sIGF1dG9tYXRpb25GdW5jdGlvbiwgdmFsdWVVcGRhdGVGdW5jdGlv
bikKK2Z1bmN0aW9uIGRvQXV0b21hdGlvbihudW1iZXJPZlRlc3RzLCBpbml0aWFsVmFsdWUsIHNl
dFZhbHVlRnVuY3Rpb24sIGF1dG9tYXRpb25GdW5jdGlvbikKIHsKICAgICB2YXIgdGltZUluZm8g
PSBbMF07CiAgICAgdmFyIHZhbHVlSW5mbyA9IFtdOwpAQCAtMTc1LDIwICszNTcsODQgQEAgZnVu
Y3Rpb24gZG9BdXRvbWF0aW9uKGluaXRpYWxWYWx1ZSwgZW5kVmFsdWVEZWx0YUZ1bmN0aW9uLCBz
ZXRWYWx1ZUZ1bmN0aW9uLCBhdXQKICAgICBmb3IgKHZhciBrID0gMDsgayA8IG51bWJlck9mVGVz
dHM7ICsraykgewogICAgICAgICB2YXIgc3RhcnRUaW1lID0gayAqIHRpbWVJbnRlcnZhbDsKICAg
ICAgICAgdmFyIGVuZFRpbWUgPSAoayArIDEpICogdGltZUludGVydmFsOwotICAgICAgICB2YXIg
ZW5kVmFsdWUgPSB2YWx1ZSArIGVuZFZhbHVlRGVsdGFGdW5jdGlvbihrKTsKKyAgICAgICAgdmFy
IGVuZFZhbHVlID0gdmFsdWUgKyBlbmRWYWx1ZURlbHRhKGspOwogCiAgICAgICAgIC8vIFNldCB0
aGUgdmFsdWUgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0aW1lIGludGVydmFsLgogICAgICAgICBzZXRW
YWx1ZUZ1bmN0aW9uKHZhbHVlLCBzdGFydFRpbWUpOwogCi0gICAgICAgIC8vIFNwZWNpZnkgdGhl
IHRhcmdldCB2YWx1ZSwgYW5kIGhvdyB3ZSBzaG91bGQgYXBwcm9hY2ggdGhlIHRhcmdldCB2YWx1
ZS4KKyAgICAgICAgLy8gU3BlY2lmeSB0aGUgZW5kIG9yIHRhcmdldCB2YWx1ZSwgYW5kIGhvdyB3
ZSBzaG91bGQgYXBwcm9hY2ggaXQuCiAgICAgICAgIGF1dG9tYXRpb25GdW5jdGlvbihlbmRWYWx1
ZSwgc3RhcnRUaW1lLCBlbmRUaW1lKTsKIAogICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBz
dGFydCB0aW1lcywgYW5kIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcyBmb3IgZWFjaCB0aW1lIGlu
dGVydmFsLgogICAgICAgICB0aW1lSW5mby5wdXNoKGVuZFRpbWUpOwogICAgICAgICB2YWx1ZUlu
Zm8ucHVzaCh7c3RhcnRWYWx1ZTogdmFsdWUsIGVuZFZhbHVlIDogZW5kVmFsdWV9KTsKIAotICAg
ICAgICB2YWx1ZSArPSB2YWx1ZVVwZGF0ZUZ1bmN0aW9uKGspOworICAgICAgICB2YWx1ZSArPSB2
YWx1ZVVwZGF0ZShrKTsKICAgICB9CiAKICAgICByZXR1cm4ge3RpbWVzIDogdGltZUluZm8sIHZh
bHVlcyA6IHZhbHVlSW5mb307CiB9CisKKy8vIENyZWF0ZSB0aGUgYXVkaW8gZ3JhcGggZm9yIHRo
ZSB0ZXN0IGFuZCB0aGVuIHJ1biB0aGUgdGVzdC4KKy8vCisvLyBudW1iZXJPZlRlc3RzIC0gbnVt
YmVyIG9mIHRpbWUgaW50ZXJ2YWxzICh0ZXN0cykgdG8gcnVuLgorLy8KKy8vIGluaXRpYWxWYWx1
ZSAtIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBnYWluIGF0IHRpbWUgMC4KKy8vCisvLyBzZXRW
YWx1ZUZ1bmN0aW9uIC0gZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBhdCB0aGUgYmVnaW5uaW5n
IG9mIGVhY2ggdGltZSBpbnRlcnZhbC4KKy8vCisvLyBhdXRvbWF0aW9uRnVuY3Rpb24gLSB0aGUg
QXVkaW9QYXJhbVRpbWVsaW5lIGF1dG9tYXRpb24gZnVuY3Rpb24KKy8vCisvLyB0ZXN0TmFtZSAt
IHN0cmluZyBpbmRpY2F0aW5nIHRoZSB0ZXN0IHRoYXQgaXMgYmVpbmcgcnVuLgorLy8KKy8vIG1h
eEVycm9yIC0gbWF4aW11bSBhbGxvd2VkIGVycm9yIGJldHdlZW4gdGhlIHJlbmRlcmVkIGRhdGEg
YW5kIHRoZSByZWZlcmVuY2UgZGF0YQorLy8KKy8vIHJlZmVyZW5jZUZ1bmN0aW9uIC0gZnVuY3Rp
b24gdGhhdCBnZW5lcmF0ZXMgdGhlIHJlZmVyZW5jZSBkYXRhIHRvIGJlIGNvbXBhcmVkIGFnYWlu
c3QgdGhlCisvLyByZW5kZXJlZCBkYXRhLgorLy8KKy8vIGp1bXBUaHJlc2hvbGQgLSBvcHRpb25h
bCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHRocmVzaG9sZCB0byB1c2UgZm9yIGRldGVj
dGluZworLy8gZGlzY29udGludWl0aWVzLiAgSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8g
ZGlzY29udGludWl0eVRocmVzaG9sZC4KKy8vCitmdW5jdGlvbiBjcmVhdGVBdWRpb0dyYXBoQW5k
VGVzdChudW1iZXJPZlRlc3RzLCBpbml0aWFsVmFsdWUsIHNldFZhbHVlRnVuY3Rpb24sIGF1dG9t
YXRpb25GdW5jdGlvbiwgdGVzdE5hbWUsIG1heEVycm9yLCByZWZlcmVuY2VGdW5jdGlvbiwganVt
cFRocmVzaG9sZCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKKworICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQu
CisgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgcmVuZGVyTGVuZ3RoKG51
bWJlck9mVGVzdHMpLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgY29uc3RhbnRCdWZmZXIgPSBjcmVh
dGVDb25zdGFudEJ1ZmZlcihjb250ZXh0LCAxLCByZW5kZXJMZW5ndGgobnVtYmVyT2ZUZXN0cykp
OworCisgICAgLy8gV2UgdXNlIGFuIEF1ZGlvR2Fpbk5vZGUgaGVyZSBzaW1wbHkgYXMgYSBjb252
ZW5pZW50IHdheSB0byB0ZXN0IHRoZSBBdWRpb1BhcmFtCisgICAgLy8gYXV0b21hdGlvbiwgc2lu
Y2UgaXQncyBlYXN5IHRvIHBhc3MgYSBjb25zdGFudCB2YWx1ZSB0aHJvdWdoIHRoZSBub2RlLCBh
dXRvbWF0ZSB0aGUKKyAgICAvLyAuZ2FpbiBhdHRyaWJ1dGUgYW5kIG9ic2VydmUgdGhlIHJlc3Vs
dGluZyB2YWx1ZXMuCisKKyAgICBnYWluTm9kZSA9IGNvbnRleHQuY3JlYXRlR2Fpbk5vZGUoKTsK
KworICAgIHZhciBidWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwor
ICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgPSBjb25zdGFudEJ1ZmZlcjsKKyAgICBidWZmZXJTb3Vy
Y2UuY29ubmVjdChnYWluTm9kZSk7CisgICAgZ2Fpbk5vZGUuY29ubmVjdChjb250ZXh0LmRlc3Rp
bmF0aW9uKTsKKworICAgIC8vIFNldCB1cCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRl
cnMgdGhhdCBjb250cm9sIGhvdyB0aGUgYXV0b21hdGlvbiB0ZXN0IHZhbHVlcyBwcm9ncmVzcwor
ICAgIC8vIGZvciBlYWNoIHRpbWUgaW50ZXJ2YWwuCisgICAgc3RhcnRpbmdWYWx1ZURlbHRhID0g
aW5pdGlhbFZhbHVlIC8gbnVtYmVyT2ZUZXN0czsKKyAgICBzdGFydEVuZFZhbHVlQ2hhbmdlID0g
c3RhcnRpbmdWYWx1ZURlbHRhIC8gMjsKKyAgICBkaXNjb250aW51aXR5VGhyZXNob2xkID0gc3Rh
cnRFbmRWYWx1ZUNoYW5nZSAvIDI7CisKKyAgICAvLyBSdW4gdGhlIGF1dG9tYXRpb24gdGVzdHMu
CisgICAgdGltZVZhbHVlSW5mbyA9IGRvQXV0b21hdGlvbihudW1iZXJPZlRlc3RzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0VmFsdWVGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG9tYXRpb25GdW5jdGlvbik7CisgICAgYnVmZmVyU291cmNlLm5vdGVP
bigwKTsKKyAgICAgIAorICAgIGNvbnRleHQub25jb21wbGV0ZSA9IGNoZWNrUmVzdWx0RnVuY3Rp
b24odGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlZmVyZW5jZUZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAganVtcFRocmVzaG9sZCk7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOwor
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0
aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpz
CmluZGV4IGI4NWUwYzljMmRiYzlmMjc1MzZhZDY0NTFkNzEyMmE4MWIzOThlMzcuLjQ3OTEyMDVh
NDdmOTZkMTkwZWI2NGZkMjhjNDI1Njg2MWQyM2M0NTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcworKysgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9yZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMKQEAgLTQ4MCwxMSArNDgwLDYgQEAg
ZnVuY3Rpb24gZ2VuZXJhdGVSZWZlcmVuY2UoZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1ldGVycykg
ewogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS8vIFRydWUgaWYgdGhlIG51bWJlciBpcyBub3Qg
YW4gaW5maW5pdHkgb3IgTmFOCi1mdW5jdGlvbiBpc1ZhbGlkTnVtYmVyKHgpIHsKLSAgICByZXR1
cm4gIWlzTmFOKHgpICYmICh4ICE9IEluZmluaXR5KSAmJiAoeCAhPSAtSW5maW5pdHkpOwotfQot
CiBmdW5jdGlvbiBjaGVja0ZpbHRlclJlc3BvbnNlKGZpbHRlclR5cGUsIGZpbHRlclBhcmFtZXRl
cnMpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgcmVuZGVyZWRCdWZm
ZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129742</attachid>
            <date>2012-03-01 14:06:54 -0800</date>
            <delta_ts>2012-03-02 00:01:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77666-20120301140653.patch</filename>
            <type>text/plain</type>
            <size>40203</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MzgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDk3OWIwNzJiYzAzODc5
ZTA0ZDQ3MDI4N2E1ODVkYTIzZTI2ZjgxMS4uZDkwYmE1NzdjMjg2MDE4MGRiYzM1OGJkMzVhNTE4
ZmFjZDgzOGQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAyLTIzICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBBdWRpb1BhcmFtIG5lZWRzIHRl
c3RzIGZvciB0aGUgcGFyYW1ldGVyIGF1dG9tYXRpb24gcm91dGluZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzY2NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRpby9hdWRpb3Bh
cmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmF1ZGlv
L2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFsdWVBdFRpbWUuaHRtbAorICAgICAgICAgICAgICAgd2Vi
YXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS5odG1sCisgICAgICAgICAgICAgICB3ZWJh
dWRpby9hdWRpb3BhcmFtLXNldFZhbHVlQ3VydmVBdFRpbWUuaHRtbAorCisgICAgICAgICogd2Vi
YXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFy
YW1UaW1lbGluZTo6dmFsdWVzRm9yVGltZVJhbmdlSW1wbCk6IFJvdW5kIHRoZQorICAgICAgICBj
dXJ2ZUluZGV4IHRvIGZpeCB0aW1pbmcgaXNzdWUgaW4gc2V0VmFsdWVDdXJ2ZUF0VGltZS4KKwog
MjAxMi0wMy0wMSAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTA5MzY3LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAKaW5kZXggY2Q4ZjUzNjc2MmE0Y2Uw
YzAzMDM1MzM5NjkxOGZkNjFjNWI1YzQyNC4uOGJlNDhjNTY5NjA2ZmQ0NTBkODc1NDYyN2EzMTY1
MTM2ZmI1NTE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYXJh
bVRpbWVsaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1BhcmFtVGlt
ZWxpbmUuY3BwCkBAIC0zMjksNyArMzI5LDEwIEBAIGZsb2F0IEF1ZGlvUGFyYW1UaW1lbGluZTo6
dmFsdWVzRm9yVGltZVJhbmdlSW1wbChmbG9hdCBzdGFydFRpbWUsCiAgICAgICAgICAgICAgICAg
ICAgIC8vIFJlbmRlciB0aGUgc3RyZXRjaGVkIGN1cnZlIGRhdGEgdXNpbmcgbmVhcmVzdCBuZWln
aGJvciBzYW1wbGluZy4KICAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcnNhbXBsZWQgY3VydmUg
ZGF0YSBjYW4gYmUgcHJvdmlkZWQgaWYgc21vb3RobmVzcyBpcyBkZXNpcmVkLgogICAgICAgICAg
ICAgICAgICAgICBmb3IgKDsgd3JpdGVJbmRleCA8IGZpbGxUb0ZyYW1lOyArK3dyaXRlSW5kZXgp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGN1cnZlSW5kZXggPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY3VydmVWaXJ0dWFsSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWRlYWxseSB3ZSdkIHVzZSByb3VuZCgpIGZyb20gTWF0aEV4dHJhcywgYnV0IHdlJ3Jl
IGluIGEgdGlnaHQgbG9vcCBoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd2Un
cmUgdHJhZGluZyBvZmYgcHJlY2lzaW9uIGZvciBleHRyYSBzcGVlZC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGN1cnZlSW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMC41
ICsgY3VydmVWaXJ0dWFsSW5kZXgpOworCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZVZp
cnR1YWxJbmRleCArPSBjdXJ2ZVBvaW50c1BlckZyYW1lOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBCb3VuZHMgY2hlY2suCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWU1ZTE3NWUwYmMyZmY4OWFjMDIzMTRhZmY3
MzRmODgzZmRhM2NmZi4uMWVhODkwZmJiMGI3NDFjMmEwYTNiZmYwMGUyYzYzZmUzM2U2NjBjNyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAyLTIzICBSYXltb25kIFRveSAgPHJ0b3lAZ29v
Z2xlLmNvbT4KKworICAgICAgICBBdWRpb1BhcmFtIG5lZWRzIHRlc3RzIGZvciB0aGUgcGFyYW1l
dGVyIGF1dG9tYXRpb24gcm91dGluZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NzY2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1leHBvbmVudGlhbFJhbXBUb1Zh
bHVlQXRUaW1lLmh0bWw6CisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1saW5lYXJSYW1w
VG9WYWx1ZUF0VGltZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1
ZGlvcGFyYW0tbGluZWFyUmFtcFRvVmFsdWVBdFRpbWUuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRUYXJnZXRWYWx1ZUF0VGltZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFsdWVBdFRpbWUu
aHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGlt
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0
VmFsdWVBdFRpbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1z
ZXRWYWx1ZUN1cnZlQXRUaW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVk
aW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUN1cnZlQXRUaW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL3Jlc291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanM6CisgICAgICAgIChyZW5k
ZXJMZW5ndGgpOgorICAgICAgICAoY3JlYXRlQ29uc3RhbnRBcnJheSk6CisgICAgICAgIChjcmVh
dGVMaW5lYXJSYW1wQXJyYXkpOgorICAgICAgICAoZGlzY3JldGVUaW1lQ29uc3RhbnRGb3JTYW1w
bGVSYXRlKToKKyAgICAgICAgKGNyZWF0ZUV4cG9uZW50aWFsQXBwcm9hY2hBcnJheSk6CisgICAg
ICAgIChjcmVhdGVTaW5lV2F2ZUFycmF5KToKKyAgICAgICAgKGVuZFZhbHVlRGVsdGEpOgorICAg
ICAgICAodmFsdWVVcGRhdGUpOgorICAgICAgICAoY29tcGFyZVBhcnRpYWxTaWduYWxzKToKKyAg
ICAgICAgKHZlcmlmeURpc2NvbnRpbnVpdGllcyk6CisgICAgICAgIChjb21wYXJlU2lnbmFscyk6
CisgICAgICAgIChjaGVja1Jlc3VsdEZ1bmN0aW9uLnJldHVybi52YXIpOgorICAgICAgICAoY2hl
Y2tSZXN1bHRGdW5jdGlvbik6CisgICAgICAgIChkb0F1dG9tYXRpb24pOgorICAgICAgICAoY3Jl
YXRlQXVkaW9HcmFwaEFuZFRlc3QpOgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9hdWRp
by10ZXN0aW5nLmpzOiBNb3ZlZCBpc1ZhbGlkTnVtYmVyIGZyb20KKyAgICAgICAgYmlxdWFkLXRl
c3RpbmcuanMgdG8gaGVyZS4KKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJjZXMvYmlxdWFkLXRl
c3RpbmcuanM6IE1vdmVkIGlzVmFsaWROdW1iZXIgZnJvbQorICAgICAgICBoZXJlIHRvIGF1ZGlv
LXRlc3RpbmcuanMuCisKIDIwMTItMDMtMDEgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwOTM2Ny4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tZXhwb25lbnRpYWxS
YW1wVG9WYWx1ZUF0VGltZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1l
eHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKaW5kZXggM2U2MmY4NDIzNjYxOGI0MTFk
YTI1Mzc5NWZhYzk5YTk0ZDk3MGRkNS4uMDJlMTcwMjdiNjhjOWQyN2RkZjA2MjNmZWE3NzVmOWVj
ZmFkZmM4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1leHBv
bmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
YXVkaW9wYXJhbS1leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lLmh0bWwKQEAgLTIwLDQ1ICsy
MCwxNSBAQAogICAgICAgLy8gZGlzY29udGludWl0eSBpcyBmb3IgdGVzdGluZyB0aW1pbmcuICBB
bHNvLCB3ZSBhbHRlcm5hdGUgYmV0d2VlbiBhbiBpbmNyZWFzaW5nIGFuZAogICAgICAgLy8gZGVj
cmVhc2luZyByYW1wIGZvciBlYWNoIGludGVydmFsLgogCisgICAgICAvLyBOdW1iZXIgb2YgdGVz
dHMgdG8gcnVuLgorICAgICAgdmFyIG51bWJlck9mVGVzdHMgPSAxMDA7CisKICAgICAgIC8vIE1h
eCBhbGxvd2VkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVuZGVyZWQgZGF0YSBhbmQgdGhlIGV4
cGVjdGVkIHJlc3VsdC4KICAgICAgIHZhciBtYXhBbGxvd2VkRXJyb3IgPSA2Ljc1ZS00OwogCi0g
ICAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyB0aW1lcyBh
bmQgc3RhcnRpbmcgYW5kIGVuZGluZyB2YWx1ZXMgZm9yIGVhY2gKLSAgICAgIC8vIHRpbWUgaW50
ZXJ2YWwuCi0gICAgICB2YXIgdGltZVZhbHVlSW5mbzsKLQogICAgICAgLy8gVGhlIEF1ZGlvR2Fp
bk5vZGUgc3RhcnRzIHdpdGggdGhpcyB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHZhbHVl
LgogICAgICAgdmFyIGluaXRpYWxWYWx1ZSA9IDEwMDsKIAotICAgICAgLy8gVGhlIGRpZmZlcmVu
Y2UgYmV0d2VlbiBzdGFydGluZyB2YWx1ZXMgYmV0d2VlbiBlYWNoIHRpbWUgaW50ZXJ2YWwuCi0g
ICAgICB2YXIgc3RhcnRpbmdWYWx1ZURlbHRhID0gaW5pdGlhbFZhbHVlIC8gbnVtYmVyT2ZUZXN0
czsKLSAgICAgIAotICAgICAgLy8gRWFjaCBleHBvbmVudGlhbCByYW1wIHdpbGwgaW5jcmVhc2Ug
b3IgZGVjcmVhc2UgYnkgdGhpcyBtdWNoIGZyb20gdGhlIHN0YXJ0IHRvIHRoZSBlbmQgb2YKLSAg
ICAgIC8vIHRoZSB0aW1lIGludGVydmFsLiAgV2UgY2hvb3NlIGhhbGYgb2Ygc3RhcnRpbmdWYWx1
ZURlbHRhIHNvIHRoYXQgdGhlIGVuZGluZyB2YWx1ZSBvZiB0aGUKLSAgICAgIC8vIHJhbXAgd2ls
bCBiZSBkaXN0aW5jdCBmcm9tIHRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgcmFtcCBmb3IgbmV4
dCB0aW1lIGludGVydmFsLiAgVGhpcwotICAgICAgLy8gYWxsb3dzIHVzIHRvIGRldGVjdCB3aGVy
ZSB0aGUgcmFtcCBiZWdpbnMgYW5kIGVuZHMuCi0gICAgICB2YXIgc3RhcnRFbmRWYWx1ZUNoYW5n
ZSA9IHN0YXJ0aW5nVmFsdWVEZWx0YSAvIDI7Ci0KLSAgICAgIC8vIFRocmVzaG9sZCB0byB1c2Ug
Zm9yIGRldGVjdGluZyBkaXNjb250aW51aXRpZXMgdGhhdCBzaG91bGQgYXBwZWFyIGF0IGVhY2gg
dGltZSBpbnRlcnZhbC4KLSAgICAgIHZhciBkaXNjb250aW51aXR5VGhyZXNob2xkID0gc3RhcnRF
bmRWYWx1ZUNoYW5nZSAvIDI7Ci0KLSAgICAgIHZhciBnYWluTm9kZTsKLSAgICAgIAotICAgICAg
dmFyIGNvbnN0YW50QnVmZmVyOwotICAgICAgdmFyIGJ1ZmZlclNvdXJjZTsKLQotICAgICAgLy8g
UmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHN0YXJ0aW5nIHZhbHVlIGFuZCB0aGUg
ZW5kaW5nIHZhbHVlIGZvciB0aW1lIGludGVydmFsCi0gICAgICAvLyB8dGltZUludGVydmFsSW5k
ZXh8LiAgV2UgYWx0ZXJuYXRlIGJldHdlZW4gYW4gZW5kIHZhbHVlIHRoYXQgaXMgYWJvdmUgb3Ig
YmVsb3cgdGhlIHN0YXJ0aW5nCi0gICAgICAvLyB2YWx1ZS4KLSAgICAgIGZ1bmN0aW9uIGVuZFZh
bHVlRGVsdGEodGltZUludGVydmFsSW5kZXgpCi0gICAgICB7Ci0gICAgICAgICAgaWYgKHRpbWVJ
bnRlcnZhbEluZGV4ICYgMSkgewotICAgICAgICAgICAgICByZXR1cm4gLXN0YXJ0RW5kVmFsdWVD
aGFuZ2U7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RW5k
VmFsdWVDaGFuZ2U7Ci0gICAgICAgICAgfQotICAgICAgfQotCiAgICAgICAvLyBTZXQgdGhlIGdh
aW4gbm9kZSB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgdGlt
ZS4KICAgICAgIGZ1bmN0aW9uIHNldFZhbHVlKHZhbHVlLCB0aW1lKQogICAgICAgewpAQCAtNzMs
NjUgKzQzLDE2IEBACiAgICAgICAgICAgZ2Fpbk5vZGUuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1Zh
bHVlQXRUaW1lKHZhbHVlLCBlbmRUaW1lKQogICAgICAgfQogICAgICAgCi0gICAgICAvLyBSZXR1
cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3RhcnRpbmcgdmFsdWUgYXQgfHRpbWVJbnRl
cnZhbEluZGV4fCBhbmQgdGhlIHN0YXJ0aW5nCi0gICAgICAvLyB2YWx1ZSBhdCB0aGUgbmV4dCB0
aW1lIGludGVydmFsLiAgU2luY2Ugd2Ugc3RhcnRlZCBhdCBhIGxhcmdlIGluaXRpYWwgdmFsdWUs
IHdlIGRlY3JlYXNlCi0gICAgICAvLyB0aGUgdmFsdWUgYXQgZWFjaCB0aW1lIGludGVydmFsLgot
ICAgICAgZnVuY3Rpb24gdmFsdWVVcGRhdGUodGltZUludGVydmFsSW5kZXgpCi0gICAgICB7Ci0g
ICAgICAgICAgcmV0dXJuIC1zdGFydGluZ1ZhbHVlRGVsdGE7Ci0gICAgICB9Ci0KLSAgICAgIGZ1
bmN0aW9uIGNoZWNrUmVzdWx0KGV2ZW50KQotICAgICAgewotICAgICAgICAgIHZhciBidWZmZXIg
PSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKLSAgICAgICAgICByZW5kZXJlZERhdGEgPSBidWZmZXIu
Z2V0Q2hhbm5lbERhdGEoMCk7Ci0KLSAgICAgICAgICBjb21wYXJlU2lnbmFscygiZXhwb25lbnRp
YWxSYW1wVG9WYWx1ZUF0VGltZSgpIiwgbWF4QWxsb3dlZEVycm9yLCByZW5kZXJlZERhdGEsIGNy
ZWF0ZUV4cG9uZW50aWFsUmFtcEFycmF5LCB0aW1lVmFsdWVJbmZvLCBkaXNjb250aW51aXR5VGhy
ZXNob2xkKTsKLQotICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwotICAgICAgfQotICAgICAgCiAg
ICAgICBmdW5jdGlvbiBydW5UZXN0KCkKICAgICAgIHsKLSAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKLSAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKKyAgICAgICAgICBjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdChudW1iZXJPZlRlc3Rz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0ZVJhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoKSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4QWxsb3dlZEVycm9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZUV4cG9uZW50aWFsUmFtcEFycmF5KTsKIAotICAgICAgICAg
IC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCi0gICAgICAgICAgY29udGV4dCA9IG5l
dyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgcmVuZGVyTGVuZ3RoLCBzYW1wbGVSYXRlKTsKLSAgICAg
ICAgICBjb25zdGFudEJ1ZmZlciA9IGNyZWF0ZUNvbnN0YW50QnVmZmVyKGNvbnRleHQsIDEsIHJl
bmRlckxlbmd0aCk7Ci0KLSAgICAgICAgICAvLyBXZSB1c2UgYW4gQXVkaW9HYWluTm9kZSBoZXJl
IHNpbXBseSBhcyBhIGNvbnZlbmllbnQgd2F5IHRvIHRlc3QgdGhlIEF1ZGlvUGFyYW0KLSAgICAg
ICAgICAvLyBhdXRvbWF0aW9uLCBzaW5jZSBpdCdzIGVhc3kgdG8gcGFzcyBhIGNvbnN0YW50IHZh
bHVlIHRocm91Z2ggdGhlIG5vZGUsIGF1dG9tYXRlIHRoZQotICAgICAgICAgIC8vIC5nYWluIGF0
dHJpYnV0ZSBhbmQgb2JzZXJ2ZSB0aGUgcmVzdWx0aW5nIHZhbHVlcy4KLQotICAgICAgICAgIGdh
aW5Ob2RlID0gY29udGV4dC5jcmVhdGVHYWluTm9kZSgpOwotCi0gICAgICAgICAgYnVmZmVyU291
cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKLSAgICAgICAgICBidWZmZXJTb3Vy
Y2UuYnVmZmVyID0gY29uc3RhbnRCdWZmZXI7Ci0gICAgICAgICAgYnVmZmVyU291cmNlLmNvbm5l
Y3QoZ2Fpbk5vZGUpOwotICAgICAgICAgIGdhaW5Ob2RlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5h
dGlvbik7Ci0KLSAgICAgICAgICAvLyBBdCBlYWNoIHRpbWUgaW50ZXJ2YWwsIHdlIGFkanVzdCB0
aGUgdmFsdWUgYnkgc3RhcnRpbmdWYWx1ZURlbHRhLiAgSG93ZXZlciwgdGhlCi0gICAgICAgICAg
Ly8gZXhwb25lbnRpYWwgcmFtcCBlbmQgdmFsdWUgaXMgdGhlIHZhbHVlICsvLSBzdGFydEVuZFZh
bHVlQ2hhbmdlLiAgKFdlIGFsdGVybmF0ZWx5Ci0gICAgICAgICAgLy8gc3BlY2lmeSB0aGUgZW5k
IHZhbHVlIHRvIGJlIGdyZWF0ZXIgb3Igc21hbGxlciB0aGFuIHRoZSBzdGFydGluZyB2YWx1ZSwg
dG8gdGVzdCB0aGUKLSAgICAgICAgICAvLyByYW1wIGdvaW5nIHVwIGFuZCBkb3duLikKLSAgICAg
ICAgICAvLwotICAgICAgICAgIC8vIEJ5IGRvaW5nIGl0IHRoaXMgd2F5LCB3ZSBnZXQgYSBkaXNj
b250aW51aXR5IGF0IGVhY2ggdGltZSBpbnRlcnZhbCB3aGljaCB3ZSBjYW4gdXNlIHRvCi0gICAg
ICAgICAgLy8gdGVzdCBpZiB0aGUgcmFtcCBzdGFydGVkIGFuZCBlbmRlZCBhdCB0aGUgY29ycmVj
dCB0aW1lLgotICAgICAgICAgIHRpbWVWYWx1ZUluZm8gPSBkb0F1dG9tYXRpb24oaW5pdGlhbFZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kVmFsdWVEZWx0
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVSYW1wLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVVcGRhdGUpOwotCi0gICAgICAg
ICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKLSAgICAgIAotICAgICAgICAgIGNvbnRleHQub25j
b21wbGV0ZSA9IGNoZWNrUmVzdWx0OwotICAgICAgICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmco
KTsKICAgICAgIH0KIAogICAgICAgcnVuVGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYXVkaW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxpbmVhclJhbXBUb1ZhbHVlQXRUaW1l
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NWFiNTdhNjU3YmY4YjE5MWIyYTc3MWY5ZDMzZjY5
NTlkZWZjYTEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9w
YXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBA
QAorVGVzdCBBdWRpb1BhcmFtIGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCkgZnVuY3Rpb25hbGl0
eS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIEFsbCAxMDAgdGVzdHMgc3Rh
cnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4KK1BBU1MgQWxsIDEwMCB0ZXN0cyBw
YXNzZWQgd2l0aGluIGFuIGFjY2VwdGFibGUgdG9sZXJhbmNlLgorUEFTUyBBdWRpb1BhcmFtIGxp
bmVhclJhbXBUb1ZhbHVlQXRUaW1lKCkgdGVzdCBwYXNzZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYXVkaW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS5odG1sIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1saW5lYXJSYW1wVG9WYWx1ZUF0VGltZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE4NWEyY2Q2ZDZjNzQ3M2Q2YjYyNzExZmEyOTEwOWIxYzEwMDU2YmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWxpbmVhclJhbXBU
b1ZhbHVlQXRUaW1lLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW9wYXJhbS10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCBBdWRpb1Bh
cmFtIGxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKCkgZnVuY3Rpb25hbGl0eS4iKTsKKworLy8gUGxh
eSBhIGxvbmcgREMgc2lnbmFsIG91dCB0aHJvdWdoIGFuIEF1ZGlvR2Fpbk5vZGUsIGFuZCBjYWxs
IHNldFZhbHVlQXRUaW1lKCkgYW5kCisvLyBsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgpIGF0IHJl
Z3VsYXIgaW50ZXJ2YWxzIHRvIHNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyB2YWx1ZXMgZm9y
IGEKKy8vIGxpbmVhciByYW1wLiBFYWNoIHRpbWUgaW50ZXJ2YWwgaGFzIGEgcmFtcCB3aXRoIGEg
ZGlmZmVyZW50IHN0YXJ0aW5nIGFuZCBlbmRpbmcgdmFsdWUgc28KKy8vIHRoYXQgdGhlcmUgaXMg
YSBkaXNjb250aW51aXR5IGF0IGVhY2ggdGltZSBpbnRlcnZhbCBib3VuZGFyeS4gIFRoZSBkaXNj
b250aW51aXR5IGlzIGZvcgorLy8gdGVzdGluZyB0aW1pbmcuICBBbHNvLCB3ZSBhbHRlcm5hdGUg
YmV0d2VlbiBhbiBpbmNyZWFzaW5nIGFuZCBkZWNyZWFzaW5nIHJhbXAgZm9yIGVhY2gKKy8vIGlu
dGVydmFsLgorCisvLyBOdW1iZXIgb2YgdGVzdHMgdG8gcnVuLgordmFyIG51bWJlck9mVGVzdHMg
PSAxMDA7CisKKy8vIE1heCBhbGxvd2VkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVuZGVyZWQg
ZGF0YSBhbmQgdGhlIGV4cGVjdGVkIHJlc3VsdC4KK3ZhciBtYXhBbGxvd2VkRXJyb3IgPSA2LjVl
LTc7CisKKy8vIFNldCB0aGUgZ2FpbiBub2RlIHZhbHVlIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUg
YXQgdGhlIHNwZWNpZmllZCB0aW1lLgorZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUsIHRpbWUpCit7
CisgICAgZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7Cit9CisKKy8v
IEdlbmVyYXRlIGEgbGluZWFyIHJhbXAgZW5kaW5nIGF0IHRpbWUgfGVuZFRpbWV8IHdpdGggYW4g
ZW5kaW5nIHZhbHVlIG9mIHx2YWx1ZXwuCitmdW5jdGlvbiBnZW5lcmF0ZVJhbXAodmFsdWUsIHN0
YXJ0VGltZSwgZW5kVGltZSkKK3sKKyAgICAvLyB8c3RhcnRUaW1lfCBpcyBpZ25vcmVkIGJlY2F1
c2UgdGhlIGxpbmVhciByYW1wIHVzZXMgdGhlIHZhbHVlIGZyb20gdGhlIHNldFZhbHVlQXRUaW1l
KCkgY2FsbCBhYm92ZS4KKyAgICBnYWluTm9kZS5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1l
KHZhbHVlLCBlbmRUaW1lKQorfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBjcmVhdGVB
dWRpb0dyYXBoQW5kVGVzdChudW1iZXJPZlRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVSYW1wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJsaW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXhBbGxvd2VkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
TGluZWFyUmFtcEFycmF5KTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKyAgCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFs
dWVBdFRpbWUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjNmQyYTBmMWNiNTE4Yjc3M2I2YjBh
ZWU5MDQxNGI5MGE4MmVjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDExIEBACitUZXN0IEF1ZGlvUGFyYW0gc2V0VGFyZ2V0VmFsdWVBdFRpbWUoKSBmdW5jdGlvbmFs
aXR5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgQWxsIDEwMCB0ZXN0cyBz
dGFydGVkIGFuZCBlbmRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLgorUEFTUyBBbGwgMTAwIHRlc3Rz
IHBhc3NlZCB3aXRoaW4gYW4gYWNjZXB0YWJsZSB0b2xlcmFuY2UuCitQQVNTIEF1ZGlvUGFyYW0g
c2V0VGFyZ2V0VmFsdWVBdFRpbWUoKSB0ZXN0IHBhc3NlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJhdWRpby9hdWRpb3BhcmFtLXNldFRhcmdldFZhbHVlQXRUaW1lLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYWVkY2Y4MGRlMmE0ODFlNGFiMGExYjdlZjM1MzEwYzZiOTA3NGJiZQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VGFyZ2V0VmFsdWVBdFRp
bWUuaHRtbApAQCAtMCwwICsxLDYyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8v
RFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
KworPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IEF1ZGlvUGFyYW0gc2V0VGFy
Z2V0VmFsdWVBdFRpbWUoKSBmdW5jdGlvbmFsaXR5LiIpOworCisvLyBQbGF5IGEgbG9uZyBEQyBz
aWduYWwgb3V0IHRocm91Z2ggYW4gQXVkaW9HYWluTm9kZSwgYW5kIGNhbGwgc2V0VmFsdWVBdFRp
bWUoKSBhbmQKKy8vIHNldFRhcmdldFZhbHVlQXRUaW1lIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzIHRv
IHNldCB0aGUgc3RhcnRpbmcgdmFsdWUgYW5kIHRoZSB0YXJnZXQKKy8vIHZhbHVlLiBFYWNoIHRp
bWUgaW50ZXJ2YWwgaGFzIGEgcmFtcCB3aXRoIGEgZGlmZmVyZW50IHN0YXJ0aW5nIGFuZCB0YXJn
ZXQgdmFsdWUgc28gdGhhdAorLy8gdGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IGVhY2ggdGlt
ZSBpbnRlcnZhbCBib3VuZGFyeS4gIFRoZSBkaXNjb250aW51aXR5IGlzIGZvciB0ZXN0aW5nCisv
LyB0aW1pbmcuICBBbHNvLCB3ZSBhbHRlcm5hdGUgYmV0d2VlbiBhbiBpbmNyZWFzaW5nIGFuZCBk
ZWNyZWFzaW5nIHJhbXAgZm9yIGVhY2ggaW50ZXJ2YWwuCisKKy8vIE51bWJlciBvZiB0ZXN0cyB0
byBydW4uCit2YXIgbnVtYmVyT2ZUZXN0cyA9IDEwMDsKKworLy8gTWF4IGFsbG93ZWQgZGlmZmVy
ZW5jZSBiZXR3ZWVuIHRoZSByZW5kZXJlZCBkYXRhIGFuZCB0aGUgZXhwZWN0ZWQgcmVzdWx0Lgor
dmFyIG1heEFsbG93ZWRFcnJvciA9IDIuNzllLTU7CisKKy8vIFRoZSBBdWRpb0dhaW5Ob2RlIHN0
YXJ0cyB3aXRoIHRoaXMgdmFsdWUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCB2YWx1ZS4KK3ZhciBp
bml0aWFsVmFsdWUgPSAxMDA7CisKKy8vIFNldCB0aGUgZ2FpbiBub2RlIHZhbHVlIHRvIHRoZSBz
cGVjaWZpZWQgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCB0aW1lLgorZnVuY3Rpb24gc2V0VmFsdWUo
dmFsdWUsIHRpbWUpCit7CisgICAgZ2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwg
dGltZSk7Cit9CisKKy8vIEdlbmVyYXRlIGFuIGV4cG9uZW50aWFsIGFwcHJvYWNoIHN0YXJ0aW5n
IGF0IHxzdGFydFRpbWV8IHdpdGggYSB0YXJnZXQgdmFsdWUgb2YgfHZhbHVlfC4KK2Z1bmN0aW9u
IGF1dG9tYXRpb24odmFsdWUsIHN0YXJ0VGltZSwgZW5kVGltZSkKK3sKKyAgICAvLyBlbmRUaW1l
IGlzIG5vdCB1c2VkIGZvciBzZXRUYXJnZXRWYWx1ZUF0VGltZS4KKyAgICBnYWluTm9kZS5nYWlu
LnNldFRhcmdldFZhbHVlQXRUaW1lKHZhbHVlLCBzdGFydFRpbWUsIHRpbWVDb25zdGFudCkKK30K
KworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgY3JlYXRlQXVkaW9HcmFwaEFuZFRlc3QobnVt
YmVyT2ZUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0b21hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0VGFy
Z2V0VmFsdWVBdFRpbWUoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4QWxsb3dl
ZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUV4cG9uZW50aWFsQXBw
cm9hY2hBcnJheSk7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVBdFRpbWUtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0VGltZS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWRiZTM1YzI0Y2NjNmM3ODlmNzhjMTc3MjljNjUwNDgyOTIxYTljMgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFs
dWVBdFRpbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3QgQXVkaW9QYXJhbSBz
ZXRWYWx1ZUF0VGltZSgpIGZ1bmN0aW9uYWxpdHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworUEFTUyBBbGwgMTAwIHRlc3RzIHN0YXJ0ZWQgYW5kIGVuZGVkIGF0IHRoZSBjb3JyZWN0
IHRpbWUuCitQQVNTIEFsbCAxMDAgdGVzdHMgcGFzc2VkIHdpdGhpbiBhbiBhY2NlcHRhYmxlIHRv
bGVyYW5jZS4KK1BBU1MgQXVkaW9QYXJhbSBzZXRWYWx1ZUF0VGltZSgpIHRlc3QgcGFzc2VkLgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVBdFRpbWUuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVBdFRpbWUuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45ODg5NGQ4MjFjZTFmY2ExMzY0NmY0N2JjNWMwY2RhYjNiZjg4MGE3Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUF0
VGltZS5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzND
Ly9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorCis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQXVkaW9QYXJhbSBzZXRW
YWx1ZUF0VGltZSgpIGZ1bmN0aW9uYWxpdHkuIik7CisKKy8vIFBsYXkgYSBsb25nIERDIHNpZ25h
bCBvdXQgdGhyb3VnaCBhbiBBdWRpb0dhaW5Ob2RlLCBhbmQgY2FsbCBzZXRWYWx1ZUF0VGltZSgp
IGF0IHJlZ3VsYXIKKy8vIGludGVydmFscyB0byBzZXQgdGhlIHZhbHVlIGZvciB0aGUgZHVyYXRp
b24gb2YgdGhlIGludGVydmFsLiAgRWFjaCB0aW1lIGludGVydmFsIGhhcworLy8gZGlmZmVyZW50
IHZhbHVlIHNvIHRoYXQgdGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IGVhY2ggdGltZSBpbnRl
cnZhbCBib3VuZGFyeS4gIFRoZQorLy8gZGlzY29udGludWl0eSBpcyBmb3IgdGVzdGluZyB0aW1p
bmcuCisKKy8vIE51bWJlciBvZiB0ZXN0cyB0byBydW4uCit2YXIgbnVtYmVyT2ZUZXN0cyA9IDEw
MDsKKworLy8gTWF4IGFsbG93ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSByZW5kZXJlZCBkYXRh
IGFuZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgordmFyIG1heEFsbG93ZWRFcnJvciA9IDZlLTg7CisK
Ky8vIFNldCB0aGUgZ2FpbiBub2RlIHZhbHVlIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgYXQgdGhl
IHNwZWNpZmllZCB0aW1lLgorZnVuY3Rpb24gc2V0VmFsdWUodmFsdWUsIHRpbWUpCit7CisgICAg
Z2Fpbk5vZGUuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh2YWx1ZSwgdGltZSk7Cit9CisKKy8vIEZvciB0
ZXN0aW5nIHNldFZhbHVlQXRUaW1lKCksIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9y
IGF1dG9tYXRpb24uIGJlY2F1c2UgdGhlIHZhbHVlIGF0CisvLyB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBpbnRlcnZhbCBpcyBzZXQgYnkgc2V0VmFsdWUgYW5kIGl0IHJlbWFpbnMgY29uc3RhbnQgZm9y
IHRoZSBkdXJhdGlvbiwgd2hpY2gKKy8vIGlzIHdoYXQgd2Ugd2FudC4KK2Z1bmN0aW9uIGF1dG9t
YXRpb24odmFsdWUsIHN0YXJ0VGltZSwgZW5kVGltZSkKK3sKKyAgICAvLyBEbyBub3RoaW5nLgor
fQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdChu
dW1iZXJPZlRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXV0b21hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0VmFsdWVBdFRpbWUo
KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4QWxsb3dlZEVycm9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNvbnN0YW50QXJyYXkpOworfQorCitydW5UZXN0
KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBz
cmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFt
LXNldFZhbHVlQ3VydmVBdFRpbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
YXVkaW9wYXJhbS1zZXRWYWx1ZUN1cnZlQXRUaW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
Mzc3YmIwOTQxNmY1YmQ0MjE0ODkxYTQ1NmU3MzliNjlkN2RhMTFiCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUN1cnZlQXRUaW1lLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0IEF1ZGlvUGFyYW0gc2V0VmFsdWVDdXJ2
ZUF0VGltZSgpIGZ1bmN0aW9uYWxpdHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
UEFTUyBBbGwgMjAgdGVzdHMgc3RhcnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4K
K1BBU1MgQWxsIDIwIHRlc3RzIHBhc3NlZCB3aXRoaW4gYW4gYWNjZXB0YWJsZSB0b2xlcmFuY2Uu
CitQQVNTIEF1ZGlvUGFyYW0gc2V0VmFsdWVDdXJ2ZUF0VGltZSgpIHRlc3QgcGFzc2VkLgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0VmFsdWVDdXJ2ZUF0VGltZS5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1zZXRWYWx1ZUN1cnZlQXRUaW1l
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmVmOGM3OGIzZmQ4MDUyZWQxYWIxYTNlNGEzNzM0MjUwNjUyNzdh
YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tc2V0
VmFsdWVDdXJ2ZUF0VGltZS5odG1sCkBAIC0wLDAgKzEsNzQgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVzdGluZy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3QgQXVk
aW9QYXJhbSBzZXRWYWx1ZUN1cnZlQXRUaW1lKCkgZnVuY3Rpb25hbGl0eS4iKTsKKworLy8gUGxh
eSBhIGxvbmcgREMgc2lnbmFsIG91dCB0aHJvdWdoIGFuIEF1ZGlvR2Fpbk5vZGUgYW5kIGZvciBl
YWNoIHRpbWUgaW50ZXJ2YWwgY2FsbAorLy8gc2V0VmFsdWVDdXJ2ZUF0VGltZSgpIHRvIHNldCB0
aGUgdmFsdWVzIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGludGVydmFsLiAgRWFjaCBjdXJ2ZSBp
cyBhIHNpbmUKKy8vIHdhdmUsIGFuZCB3ZSBhc3N1bWUgdGhhdCB0aGUgdGltZSBpbnRlcnZhbCBp
cyBub3QgYW4gZXhhY3QgbXVsdGlwbGUgb2YgdGhlIHBlcmlvZC4gVGhpcyBjYXVzZXMgYQorLy8g
ZGlzY29udGludWl0eSBiZXR3ZWVuIHRpbWUgaW50ZXJ2YWxzIHdoaWNoIGlzIHVzZWQgdG8gdGVz
dCB0aW1pbmcuCisKKy8vIE51bWJlciBvZiB0ZXN0cyB0byBydW4uCit2YXIgbnVtYmVyT2ZUZXN0
cyA9IDIwOworCisvLyBNYXggYWxsb3dlZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHJlbmRlcmVk
IGRhdGEgYW5kIHRoZSBleHBlY3RlZCByZXN1bHQuICAoVGhlIGVycm9yIGlzIHplcm8KKy8vIGJl
Y2F1c2UgdGhlIHJlbmRlcmVkIGN1cnZlIHNob3VsZCByZWFsbHkgYmUgZXhhY3RseSB0aGUgc2Ft
ZSBhcyB0aGUgcmVmZXJlbmNlLikKK3ZhciBtYXhBbGxvd2VkRXJyb3IgPSAwOworCisvLyBUaGUg
YW1wbGl0dWRlIG9mIHRoZSBzaW5lIHdhdmUuCit2YXIgc2luZUFtcGxpdHVkZSA9IDE7CisKKy8v
IEZyZXF1ZW5jeSBvZiB0aGUgc2luZSB3YXZlLgordmFyIGZyZXFIeiA9IDQ0MDsKKworLy8gQ3Vy
dmUgdG8gdXNlIGZvciBzZXRWYWx1ZUN1cnZlQXRUaW1lKCkuCit2YXIgY3VydmU7CisKKy8vIFNl
dHMgdGhlIGN1cnZlIGRhdGEgZm9yIHRoZSBlbnRpcmUgdGltZSBpbnRlcnZhbC4KK2Z1bmN0aW9u
IGF1dG9tYXRpb24odmFsdWUsIHN0YXJ0VGltZSwgZW5kVGltZSkKK3sKKyAgICBnYWluTm9kZS5n
YWluLnNldFZhbHVlQ3VydmVBdFRpbWUoY3VydmUsIHN0YXJ0VGltZSwgZW5kVGltZSAtIHN0YXJ0
VGltZSk7Cit9CisKKy8vIENyZWF0ZSBhIHNpbmUgd2F2ZSBvZiB0aGUgc3BlY2lmaWVkIGR1cmF0
aW9uLgorZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlU2luZUFycmF5KHN0YXJ0VGltZSwgZW5kVGlt
ZSwgc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIHNhbXBsZVJhdGUpCit7CisgICAgLy8gSWdub3JlIHxz
dGFydFZhbHVlfCBhbmQgfGVuZFZhbHVlfCBmb3IgdGhlIHNpbmUgd2F2ZS4KKyAgICByZXR1cm4g
Y3JlYXRlU2luZVdhdmVBcnJheShlbmRUaW1lIC0gc3RhcnRUaW1lLCBmcmVxSHosIHNpbmVBbXBs
aXR1ZGUsIHNhbXBsZVJhdGUpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgCit7CisgICAgLy8g
VGhlIGN1cnZlIG9mIHZhbHVlcyB0byB1c2UuCisgICAgY3VydmUgPSBjcmVhdGVTaW5lV2F2ZUFy
cmF5KHRpbWVJbnRlcnZhbCwgZnJlcUh6LCBzaW5lQW1wbGl0dWRlLCBzYW1wbGVSYXRlKTsKKwor
ICAgIGNyZWF0ZUF1ZGlvR3JhcGhBbmRUZXN0KG51bWJlck9mVGVzdHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2luZUFtcGxpdHVkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbihrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0
IG5lZWQgdG8gc2V0IHRoZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInNldFZhbHVlQ3VydmVBdFRpbWUoKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4QWxsb3dlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZVJlZmVyZW5jZVNpbmVBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICog
TWF0aC5QSSAqIHNpbmVBbXBsaXR1ZGUgKiBmcmVxSHogLyBzYW1wbGVSYXRlKTsKK30KKworcnVu
VGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3Vy
Y2VzL2F1ZGlvLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVk
aW8tdGVzdGluZy5qcwppbmRleCA4ZjY3ZjJkNmZmNzAzYmFmNGYxYTllY2I3OTllMDM0OWQwNTIw
ODU2Li5hZjBhZDI3YTIzMmUyNTljZDgxZmU1MzNkNTc0YTdlMjk1Y2NkZjg3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcworKysgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcwpAQCAtMTI4LDMg
KzEyOCw4IEBAIGZ1bmN0aW9uIGdyYWluTGVuZ3RoSW5TYW1wbGVGcmFtZXMoZ3JhaW5PZmZzZXQs
IGR1cmF0aW9uLCBzYW1wbGVSYXRlKSB7CiAKICAgICByZXR1cm4gZW5kRnJhbWUgLSBzdGFydEZy
YW1lOwogfQorCisvLyBUcnVlIGlmIHRoZSBudW1iZXIgaXMgbm90IGFuIGluZmluaXR5IG9yIE5h
TgorZnVuY3Rpb24gaXNWYWxpZE51bWJlcih4KSB7CisgICAgcmV0dXJuICFpc05hTih4KSAmJiAo
eCAhPSBJbmZpbml0eSkgJiYgKHggIT0gLUluZmluaXR5KTsKK30KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanMgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW9wYXJhbS10ZXN0aW5nLmpzCmluZGV4IGNjYTM0
Yzk2ZDBiMTgzOWYyMGRhY2VmNTk3YmIwYWU2Y2U2ZTgxMTQuLjhkM2FjMDIzN2ExMjliZGRjNDY2
YTY3MWEyZDU3ZWYwMjM2M2IwNzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jl
c291cmNlcy9hdWRpb3BhcmFtLXRlc3RpbmcuanMKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
cmVzb3VyY2VzL2F1ZGlvcGFyYW0tdGVzdGluZy5qcwpAQCAtMSwxOCArMSwzOCBAQAogdmFyIHNh
bXBsZVJhdGUgPSA0NDEwMDsKIAotLy8gTnVtYmVyIG9mIHRlc3RzIHRvIHJ1bi4KLXZhciBudW1i
ZXJPZlRlc3RzID0gMTAwOworLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXJ0aW5nL2VuZGlu
ZyB0aW1lcyBhbmQgc3RhcnRpbmcvZW5kaW5nIHZhbHVlcyBmb3IgZWFjaCB0aW1lIGludGVydmFs
LgordmFyIHRpbWVWYWx1ZUluZm87CiAKLS8vIFRpbWUgaW50ZXJ2YWwgYmV0d2VlbiB2YWx1ZSBj
aGFuZ2VzLiAgSXQgaXMgYmVzdCBpZiAxIC8gbnVtYmVyT2ZUZXN0cyBpcyBub3QgY2xvc2UgdG8K
LS8vIHRpbWVJbnRlcnZhbC4KKy8vIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc3RhcnRpbmcgdmFs
dWVzIGJldHdlZW4gZWFjaCB0aW1lIGludGVydmFsLgordmFyIHN0YXJ0aW5nVmFsdWVEZWx0YTsK
KyAgICAgIAorLy8gRm9yIGFueSBhdXRvbWF0aW9uIGZ1bmN0aW9uIHRoYXQgaGFzIGFuIGVuZCBv
ciB0YXJnZXQgdmFsdWUsIHRoZSBlbmQgdmFsdWUgaXMgYmFzZWQgdGhlIHN0YXJ0aW5nCisvLyB2
YWx1ZSBvZiB0aGUgdGltZSBpbnRlcnZhbC4gIFRoZSBzdGFydGluZyB2YWx1ZSB3aWxsIGJlIGlu
Y3JlYXNlZCBvciBkZWNyZWFzZWQgYnkKKy8vIHxzdGFydEVuZFZhbHVlQ2hhbmdlfC4gV2UgY2hv
b3NlIGhhbGYgb2YgfHN0YXJ0aW5nVmFsdWVEZWx0YXwgc28gdGhhdCB0aGUgZW5kaW5nIHZhbHVl
IHdpbGwgYmUKKy8vIGRpc3RpbmN0IGZyb20gdGhlIHN0YXJ0aW5nIHZhbHVlIGZvciBuZXh0IHRp
bWUgaW50ZXJ2YWwuICBUaGlzIGFsbG93cyB1cyB0byBkZXRlY3Qgd2hlcmUgdGhlIHJhbXAKKy8v
IGJlZ2lucyBhbmQgZW5kcy4KK3ZhciBzdGFydEVuZFZhbHVlQ2hhbmdlOworCisvLyBEZWZhdWx0
IHRocmVzaG9sZCB0byB1c2UgZm9yIGRldGVjdGluZyBkaXNjb250aW51aXRpZXMgdGhhdCBzaG91
bGQgYXBwZWFyIGF0IGVhY2ggdGltZSBpbnRlcnZhbC4KK3ZhciBkaXNjb250aW51aXR5VGhyZXNo
b2xkOworCisvLyBUaW1lIGludGVydmFsIGJldHdlZW4gdmFsdWUgY2hhbmdlcy4gIEl0IGlzIGJl
c3QgaWYgMSAvIG51bWJlck9mVGVzdHMgaXMgbm90IGNsb3NlIHRvIHRpbWVJbnRlcnZhbC4KIHZh
ciB0aW1lSW50ZXJ2YWwgPSAuMDM7CiAKLS8vIE1ha2Ugc3VyZSB3ZSByZW5kZXIgbG9uZyBlbm91
Z2ggdG8gY2FwdHVyZSBhbGwgb2Ygb3VyIHRlc3QgZGF0YS4KLXZhciByZW5kZXJUaW1lID0gKG51
bWJlck9mVGVzdHMgKyAxKSAqIHRpbWVJbnRlcnZhbDsKLXZhciByZW5kZXJMZW5ndGggPSB0aW1l
VG9TYW1wbGVGcmFtZShyZW5kZXJUaW1lLCBzYW1wbGVSYXRlKTsKKy8vIFNvbWUgc3VpdGFibGUg
dGltZSBjb25zdGFudCBzbyB0aGF0IHdlIGNhbiBzZWUgYSBzaWduaWZpY2FudCBjaGFuZ2Ugb3Zl
ciBhIHRpbWVJbnRlcnZhbC4gIFRoaXMgaXMKKy8vIG9ubHkgbmVlZGVkIGJ5IHNldFRhcmdldFZh
bHVlQXRUaW1lKCkgd2hpY2ggbmVlZHMgYSB0aW1lIGNvbnN0YW50LgordmFyIHRpbWVDb25zdGFu
dCA9IHRpbWVJbnRlcnZhbCAvIDM7CisKK3ZhciBnYWluTm9kZTsKIAogdmFyIGNvbnRleHQ7CiAK
Ky8vIE1ha2Ugc3VyZSB3ZSByZW5kZXIgbG9uZyBlbm91Z2ggdG8gY2FwdHVyZSBhbGwgb2Ygb3Vy
IHRlc3QgZGF0YS4KK2Z1bmN0aW9uIHJlbmRlckxlbmd0aChudW1iZXJPZlRlc3RzKQoreworICAg
IHJldHVybiB0aW1lVG9TYW1wbGVGcmFtZSgobnVtYmVyT2ZUZXN0cyArIDEpICogdGltZUludGVy
dmFsLCBzYW1wbGVSYXRlKTsKK30KKwogLy8gQ3JlYXRlIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhl
IHNhbWUgY29uc3RhbnQgdmFsdWUuCiBmdW5jdGlvbiBjcmVhdGVDb25zdGFudEJ1ZmZlcihjb250
ZXh0LCBjb25zdGFudCwgbGVuZ3RoKSB7CiAgICAgdmFyIGJ1ZmZlciA9IGNvbnRleHQuY3JlYXRl
QnVmZmVyKDEsIGxlbmd0aCwgY29udGV4dC5zYW1wbGVSYXRlKTsKQEAgLTI2LDYgKzQ2LDM5IEBA
IGZ1bmN0aW9uIGNyZWF0ZUNvbnN0YW50QnVmZmVyKGNvbnRleHQsIGNvbnN0YW50LCBsZW5ndGgp
IHsKICAgICByZXR1cm4gYnVmZmVyOwogfQogCisvLyBDcmVhdGUgYSBjb25zdGFudCByZWZlcmVu
Y2Ugc2lnbmFsIHdpdGggdGhlIGdpdmVuIHx2YWx1ZXwuICBCYXNpY2FsbHkgdGhlIHNhbWUgYXMK
Ky8vIHxjcmVhdGVDb25zdGFudEJ1ZmZlcnwsIGJ1dCB3aXRoIHRoZSBwYXJhbWV0ZXJzIHRvIG1h
dGNoIHRoZSBvdGhlciBjcmVhdGUgZnVuY3Rpb25zLiAgVGhlCisvLyB8ZW5kVmFsdWV8IGlzIGln
bm9yZWQuCitmdW5jdGlvbiBjcmVhdGVDb25zdGFudEFycmF5KHN0YXJ0VGltZSwgZW5kVGltZSwg
dmFsdWUsIGVuZFZhbHVlLCBzYW1wbGVSYXRlKQoreworICAgIHZhciBzdGFydEZyYW1lID0gdGlt
ZVRvU2FtcGxlRnJhbWUoc3RhcnRUaW1lLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgZW5kRnJhbWUg
PSB0aW1lVG9TYW1wbGVGcmFtZShlbmRUaW1lLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgbGVuZ3Ro
ID0gZW5kRnJhbWUgLSBzdGFydEZyYW1lOworCisgICAgdmFyIGJ1ZmZlciA9IGNyZWF0ZUNvbnN0
YW50QnVmZmVyKGNvbnRleHQsIHZhbHVlLCBsZW5ndGgpOworCisgICAgcmV0dXJuIGJ1ZmZlci5n
ZXRDaGFubmVsRGF0YSgwKTsKK30KKworLy8gQ3JlYXRlIGEgbGluZWFyIHJhbXAgc3RhcnRpbmcg
YXQgfHN0YXJ0VmFsdWV8IGFuZCBlbmRpbmcgYXQgfGVuZFZhbHVlfC4gIFRoZSByYW1wIHN0YXJ0
cyBhdCB0aW1lCisvLyB8c3RhcnRUaW1lfCBhbmQgZW5kcyBhdCB8ZW5kVGltZXwuICAoVGhlIHN0
YXJ0IGFuZCBlbmQgdGltZXMgYXJlIG9ubHkgdXNlZCB0byBjb21wdXRlIGhvdyBtYW55CisvLyBz
YW1wbGVzIHRvIHJldHVybi4pCitmdW5jdGlvbiBjcmVhdGVMaW5lYXJSYW1wQXJyYXkoc3RhcnRU
aW1lLCBlbmRUaW1lLCBzdGFydFZhbHVlLCBlbmRWYWx1ZSwgc2FtcGxlUmF0ZSkKK3sKKyAgICB2
YXIgc3RhcnRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKHN0YXJ0VGltZSwgc2FtcGxlUmF0ZSk7
CisgICAgdmFyIGVuZEZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUoZW5kVGltZSwgc2FtcGxlUmF0
ZSk7CisgICAgdmFyIGxlbmd0aCA9IGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsKKyAgICB2YXIgYXJy
YXkgPSBuZXcgQXJyYXkobGVuZ3RoKTsKKworICAgIHZhciBzdGVwID0gKGVuZFZhbHVlIC0gc3Rh
cnRWYWx1ZSkgLyBsZW5ndGg7CisKKyAgICBmb3IgKGsgPSAwOyBrIDwgbGVuZ3RoOyArK2spIHsK
KyAgICAgICAgYXJyYXlba10gPSBzdGFydFZhbHVlICsgayAqIHN0ZXA7CisgICAgfQorCisgICAg
cmV0dXJuIGFycmF5OworfQorCiAvLyBDcmVhdGUgYW4gZXhwb25lbnRpYWwgcmFtcCBzdGFydGlu
ZyBhdCB8c3RhcnRWYWx1ZXwgYW5kIGVuZGluZyBhdCB8ZW5kVmFsdWV8LiAgVGhlIHJhbXAgc3Rh
cnRzIGF0CiAvLyB0aW1lIHxzdGFydFRpbWV8IGFuZCBlbmRzIGF0IHxlbmRUaW1lfC4gIChUaGUg
c3RhcnQgYW5kIGVuZCB0aW1lcyBhcmUgb25seSB1c2VkIHRvIGNvbXB1dGUgaG93CiAvLyBtYW55
IHNhbXBsZXMgdG8gcmV0dXJuLikKQEAgLTM0LDI4ICs4NywxMDUgQEAgZnVuY3Rpb24gY3JlYXRl
RXhwb25lbnRpYWxSYW1wQXJyYXkoc3RhcnRUaW1lLCBlbmRUaW1lLCBzdGFydFZhbHVlLCBlbmRW
YWx1ZSwgc2EKICAgICB2YXIgc3RhcnRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKHN0YXJ0VGlt
ZSwgc2FtcGxlUmF0ZSk7CiAgICAgdmFyIGVuZEZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUoZW5k
VGltZSwgc2FtcGxlUmF0ZSk7CiAgICAgdmFyIGxlbmd0aCA9IGVuZEZyYW1lIC0gc3RhcnRGcmFt
ZTsKLSAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGxlbmd0aCk7CisgICAgdmFyIGFycmF5ID0g
bmV3IEFycmF5KGxlbmd0aCk7CiAKICAgICB2YXIgbXVsdGlwbGllciA9IE1hdGgucG93KGVuZFZh
bHVlIC8gc3RhcnRWYWx1ZSwgMSAvIGxlbmd0aCk7CiAgICAgCiAgICAgZm9yICh2YXIgayA9IDA7
IGsgPCBsZW5ndGg7ICsraykgewotICAgICAgICBidWZmZXJba10gPSBzdGFydFZhbHVlICogTWF0
aC5wb3cobXVsdGlwbGllciwgayk7CisgICAgICAgIGFycmF5W2tdID0gc3RhcnRWYWx1ZSAqIE1h
dGgucG93KG11bHRpcGxpZXIsIGspOwogICAgIH0KIAotICAgIHJldHVybiBidWZmZXI7CisgICAg
cmV0dXJuIGFycmF5OworfQorCitmdW5jdGlvbiBkaXNjcmV0ZVRpbWVDb25zdGFudEZvclNhbXBs
ZVJhdGUodGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKQoreworICAgIHJldHVybiAxIC0gTWF0aC5l
eHAoLTEgLyAoc2FtcGxlUmF0ZSAqIHRpbWVDb25zdGFudCkpOworfQorCisvLyBDcmVhdGUgYSBz
aWduYWwgdGhhdCBzdGFydHMgYXQgfHN0YXJ0VmFsdWV8IGFuZCBleHBvbmVudGlhbGx5IGFwcHJv
YWNoZXMgdGhlIHRhcmdldCB2YWx1ZSBvZgorLy8gfHRhcmdldFZhbHVlfCwgdXNpbmcgYSB0aW1l
IGNvbnN0YW50IG9mIHx0aW1lQ29uc3RhbnR8LiAgVGhlIHJhbXAgc3RhcnRzIGF0IHRpbWUgfHN0
YXJ0VGltZXwgYW5kCisvLyBlbmRzIGF0IHxlbmRUaW1lfC4gIChUaGUgc3RhcnQgYW5kIGVuZCB0
aW1lcyBhcmUgb25seSB1c2VkIHRvIGNvbXB1dGUgaG93IG1hbnkgc2FtcGxlcyB0bworLy8gcmV0
dXJuLikKK2Z1bmN0aW9uIGNyZWF0ZUV4cG9uZW50aWFsQXBwcm9hY2hBcnJheShzdGFydFRpbWUs
IGVuZFRpbWUsIHN0YXJ0VmFsdWUsIHRhcmdldFZhbHVlLCBzYW1wbGVSYXRlLCB0aW1lQ29uc3Rh
bnQpCit7CisgICAgdmFyIHN0YXJ0RnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZShzdGFydFRpbWUs
IHNhbXBsZVJhdGUpOworICAgIHZhciBlbmRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGVuZFRp
bWUsIHNhbXBsZVJhdGUpOworICAgIHZhciBsZW5ndGggPSBlbmRGcmFtZSAtIHN0YXJ0RnJhbWU7
CisgICAgdmFyIGFycmF5ID0gbmV3IEFycmF5KGxlbmd0aCk7CisgICAgdmFyIGMgPSBkaXNjcmV0
ZVRpbWVDb25zdGFudEZvclNhbXBsZVJhdGUodGltZUNvbnN0YW50LCBzYW1wbGVSYXRlKTsKKwor
ICAgIHZhciB2YWx1ZSA9IHN0YXJ0VmFsdWU7CisgICAgCisgICAgZm9yICh2YXIgayA9IDA7IGsg
PCBsZW5ndGg7ICsraykgeworICAgICAgICBhcnJheVtrXSA9IHZhbHVlOworICAgICAgICB2YWx1
ZSArPSAodGFyZ2V0VmFsdWUgLSB2YWx1ZSkgKiBjOworICAgIH0KKworICAgIHJldHVybiBhcnJh
eTsKK30KKworLy8gQ3JlYXRlIGEgc2luZSB3YXZlIG9mIHRoZSBnaXZlbiBmcmVxdWVuY3kgYW5k
IGFtcGxpdHVkZS4gIFRoZSBzaW5lIHdhdmUgaXMgb2Zmc2V0IGJ5IGhhbGYgdGhlCisvLyBhbXBs
aXR1ZGUgc28gdGhhdCByZXN1bHQgaXMgYWx3YXlzIHBvc2l0aXZlLgorZnVuY3Rpb24gY3JlYXRl
U2luZVdhdmVBcnJheShkdXJhdGlvblNlY29uZHMsIGZyZXFIeiwgYW1wbGl0dWRlLCBzYW1wbGVS
YXRlKQoreworICAgIHZhciBsZW5ndGggPSB0aW1lVG9TYW1wbGVGcmFtZShkdXJhdGlvblNlY29u
ZHMsIHNhbXBsZVJhdGUpOworICAgIHZhciBzaWduYWwgPSBuZXcgRmxvYXQzMkFycmF5KGxlbmd0
aCk7CisgICAgdmFyIG9tZWdhID0gMiAqIE1hdGguUEkgKiBmcmVxSHogLyBzYW1wbGVSYXRlOwor
ICAgIHZhciBoYWxmQW1wbGl0dWRlID0gYW1wbGl0dWRlIC8gMjsKKyAgICAKKyAgICBmb3IgKHZh
ciBrID0gMDsgayA8IGxlbmd0aDsgKytrKSB7CisgICAgICAgIHNpZ25hbFtrXSA9IGhhbGZBbXBs
aXR1ZGUgKyBoYWxmQW1wbGl0dWRlICogTWF0aC5zaW4ob21lZ2EgKiBrKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc2lnbmFsOworfQorCisvLyBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0
aGUgc3RhcnRpbmcgdmFsdWUgYW5kIHRoZSBlbmRpbmcgdmFsdWUgZm9yIHRpbWUgaW50ZXJ2YWwK
Ky8vIHx0aW1lSW50ZXJ2YWxJbmRleHwuICBXZSBhbHRlcm5hdGUgYmV0d2VlbiBhbiBlbmQgdmFs
dWUgdGhhdCBpcyBhYm92ZSBvciBiZWxvdyB0aGUgc3RhcnRpbmcKKy8vIHZhbHVlLgorZnVuY3Rp
b24gZW5kVmFsdWVEZWx0YSh0aW1lSW50ZXJ2YWxJbmRleCkKK3sKKyAgICBpZiAodGltZUludGVy
dmFsSW5kZXggJiAxKSB7CisgICAgICAgIHJldHVybiAtc3RhcnRFbmRWYWx1ZUNoYW5nZTsKKyAg
ICB9IGVsc2UgeworICAgICAgICByZXR1cm4gc3RhcnRFbmRWYWx1ZUNoYW5nZTsKKyAgICB9Cit9
CisKKy8vIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzdGFydGluZyB2YWx1ZSBh
dCB8dGltZUludGVydmFsSW5kZXh8IGFuZCB0aGUgc3RhcnRpbmcgdmFsdWUgYXQKKy8vIHRoZSBu
ZXh0IHRpbWUgaW50ZXJ2YWwuICBTaW5jZSB3ZSBzdGFydGVkIGF0IGEgbGFyZ2UgaW5pdGlhbCB2
YWx1ZSwgd2UgZGVjcmVhc2UgdGhlIHZhbHVlIGF0IGVhY2gKKy8vIHRpbWUgaW50ZXJ2YWwuCitm
dW5jdGlvbiB2YWx1ZVVwZGF0ZSh0aW1lSW50ZXJ2YWxJbmRleCkKK3sKKyAgICByZXR1cm4gLXN0
YXJ0aW5nVmFsdWVEZWx0YTsKIH0KIAogLy8gQ29tcGFyZSBhIHNlY3Rpb24gb2YgdGhlIHJlbmRl
cmVkIGRhdGEgYWdhaW5zdCBvdXIgZXhwZWN0ZWQgc2lnbmFsLgogZnVuY3Rpb24gY29tcGFyZVBh
cnRpYWxTaWduYWxzKHJlbmRlcmVkLCBleHBlY3RlZEZ1bmN0aW9uLCBzdGFydFRpbWUsIGVuZFRp
bWUsIHZhbHVlSW5mbywgc2FtcGxlUmF0ZSkKIHsKICAgICB2YXIgc3RhcnRTYW1wbGUgPSB0aW1l
VG9TYW1wbGVGcmFtZShzdGFydFRpbWUsIHNhbXBsZVJhdGUpOwotICAgIHZhciBleHBlY3RlZCA9
IGV4cGVjdGVkRnVuY3Rpb24oc3RhcnRUaW1lLCBlbmRUaW1lLCB2YWx1ZUluZm8uc3RhcnRWYWx1
ZSwgdmFsdWVJbmZvLmVuZFZhbHVlLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgZXhwZWN0ZWQgPSBl
eHBlY3RlZEZ1bmN0aW9uKHN0YXJ0VGltZSwgZW5kVGltZSwgdmFsdWVJbmZvLnN0YXJ0VmFsdWUs
IHZhbHVlSW5mby5lbmRWYWx1ZSwgc2FtcGxlUmF0ZSwgdGltZUNvbnN0YW50KTsKIAogICAgIHZh
ciBuID0gZXhwZWN0ZWQubGVuZ3RoOwogICAgIHZhciBtYXhFcnJvciA9IC0xOwogICAgIHZhciBt
YXhFcnJvckluZGV4ID0gLTE7CiAgICAgCiAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyArK2sp
IHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHBhc3MgdGhlc2UgdGVzdHMgYmVjYXVz
ZSBhIE5hTiBoYXMgYmVlbiBnZW5lcmF0ZWQgaW4gZWl0aGVyIHRoZQorICAgICAgICAvLyByZW5k
ZXJlZCBkYXRhIG9yIHRoZSByZWZlcmVuY2UgZGF0YS4KKyAgICAgICAgaWYgKCFpc1ZhbGlkTnVt
YmVyKHJlbmRlcmVkW3N0YXJ0U2FtcGxlICsga10pKSB7CisgICAgICAgICAgICBtYXhFcnJvciA9
IEluZmluaXR5OworICAgICAgICAgICAgbWF4RXJyb3JJbmRleCA9IHN0YXJ0U2FtcGxlICsgazsK
KyAgICAgICAgICAgIHRlc3RGYWlsZWQoIk5hTiBvciBpbmZpbml0eSBmb3IgcmVuZGVyZWQgZGF0
YSBhdCAiICsgbWF4RXJyb3JJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWlzVmFsaWROdW1iZXIoZXhwZWN0ZWRba10pKSB7CisgICAgICAgICAgICBt
YXhFcnJvciA9IEluZmluaXR5OworICAgICAgICAgICAgbWF4RXJyb3JJbmRleCA9IHN0YXJ0U2Ft
cGxlICsgazsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIk5hbiBvciBpbmZpbml0eSBmb3IgcmVm
ZXJlbmNlIGRhdGEgYXQgIiArIG1heEVycm9ySW5kZXgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICAgICAgdmFyIGVycm9yID0gTWF0aC5hYnMocmVuZGVyZWRbc3RhcnRTYW1w
bGUgKyBrXSAtIGV4cGVjdGVkW2tdKTsKICAgICAgICAgaWYgKGVycm9yID4gbWF4RXJyb3IpIHsK
ICAgICAgICAgICAgIG1heEVycm9yID0gZXJyb3I7CkBAIC04Myw5ICsyMTMsMjYgQEAgZnVuY3Rp
b24gdmVyaWZ5RGlzY29udGludWl0aWVzKHZhbHVlcywgdGltZXMsIHRocmVzaG9sZCkKICAgICAg
ICAgfQogICAgIH0KIAorICAgIHZhciB0ZXN0Q291bnQ7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUg
bnVtYmVyT2ZUZXN0cyBpbnRlcnZhbHMsIHRoZXJlIGFyZSBvbmx5IG51bWJlck9mVGVzdHMgLSAx
IGludGVybmFsIGludGVydmFsCisgICAgLy8gYm91bmRhcmllcy4gSGVuY2UgdGhlIG1heGltdW0g
bnVtYmVyIG9mIGRpc2NvbnRpbnV0aWVzIHdlIGV4cGVjdCB0byBmaW5kIGlzIG51bWJlck9mVGVz
dHMgLQorICAgIC8vIDEuIElmIHdlIGZpbmQgbW9yZSB0aGFuIHRoYXQsIHdlIGhhdmUgbm8gcmVm
ZXJlbmNlIHRvIGNvbXBhcmUgYWdhaW5zdC4gV2UgYWxzbyBhc3N1bWUgdGhhdAorICAgIC8vIHRo
ZSBhY3R1YWwgZGlzY29udGludWl0aWVzIGFyZSBjbG9zZSB0byB0aGUgZXhwZWN0ZWQgb25lcy4K
KyAgICAvLworICAgIC8vIFRoaXMgaXMganVzdCBhIHNhbml0eSBjaGVjayB3aGVuIHNvbWV0aGlu
ZyBnb2VzIHJlYWxseSB3cm9uZy4gIEZvciBleGFtcGxlLCBpZiB0aGUgdGhyZXNob2xkCisgICAg
Ly8gaXMgdG9vIGxvdywgZXZlcnkgc2FtcGxlIGZyYW1lIGxvb2tzIGxpa2UgYSBkaXNjb250aW51
aXR5LgorICAgIGlmIChicmVha3MubGVuZ3RoID49IG51bWJlck9mVGVzdHMpIHsKKyAgICAgICAg
dGVzdENvdW50ID0gbnVtYmVyT2ZUZXN0cyAtIDE7CisgICAgICAgIHRlc3RGYWlsZWQoIkZvdW5k
IG1vcmUgZGlzY29udGludWl0aWVzICgiICsgYnJlYWtzLmxlbmd0aCArICIpIHRoYW4gZXhwZWN0
ZWQuICBPbmx5IGNvbXBhcmluZyBmaXJzdCAiICsgdGVzdENvdW50ICsgImRpc2NvbnRpbnVpdGll
cy4iKTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIHRl
c3RDb3VudCA9IGJyZWFrcy5sZW5ndGg7CisgICAgfQorICAgIAogICAgIC8vIENvbXBhcmUgdGhl
IGxvY2F0aW9uIG9mIGVhY2ggZGlzY29udGludWl0eSB3aXRoIHRoZSBlbmQgdGltZSBvZiBlYWNo
IGludGVydmFsLiAoVGhlcmUgaXMgbm8KICAgICAvLyBkaXNjb250aW51aXR5IGF0IHRoZSBzdGFy
dCBvZiB0aGUgc2lnbmFsLikKLSAgICBmb3IgKHZhciBrID0gMDsgayA8IGJyZWFrcy5sZW5ndGg7
ICsraykgeworICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGVzdENvdW50OyArK2spIHsKICAgICAg
ICAgdmFyIGV4cGVjdGVkU2FtcGxlRnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZSh0aW1lc1trICsg
MV0sIHNhbXBsZVJhdGUpOwogICAgICAgICBpZiAoYnJlYWtzW2tdICE9IGV4cGVjdGVkU2FtcGxl
RnJhbWUpIHsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKQEAgLTk2LDggKzI0MywxNCBA
QCBmdW5jdGlvbiB2ZXJpZnlEaXNjb250aW51aXRpZXModmFsdWVzLCB0aW1lcywgdGhyZXNob2xk
KQogCiAgICAgaWYgKGJhZExvY2F0aW9ucykgewogICAgICAgICB0ZXN0RmFpbGVkKGJhZExvY2F0
aW9ucyArICIgZGlzY29udGludWl0aWVzIGF0IGluY29ycmVjdCBsb2NhdGlvbnMiKTsKKyAgICAg
ICAgc3VjY2VzcyA9IGZhbHNlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHRlc3RQYXNzZWQoIkFs
bCAiICsgKGJyZWFrcy5sZW5ndGggKyAxKSArICIgdGVzdHMgc3RhcnRlZCBhbmQgZW5kZWQgYXQg
dGhlIGNvcnJlY3QgdGltZS4iKTsKKyAgICAgICAgaWYgKGJyZWFrcy5sZW5ndGggPT0gbnVtYmVy
T2ZUZXN0cyAtIDEpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkFsbCAiICsgbnVtYmVyT2ZU
ZXN0cyArICIgdGVzdHMgc3RhcnRlZCBhbmQgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4iKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkZvdW5kICIgKyBicmVh
a3MubGVuZ3RoICsgIiBkaXNjb250aW51aXRpZXMgYnV0IGV4cGVjdGVkICIgKyAobnVtYmVyT2ZU
ZXN0cyAtIDEpKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQogICAg
IH0KICAgICAKICAgICByZXR1cm4gc3VjY2VzczsKQEAgLTEzMSw3ICsyODQsNyBAQCBmdW5jdGlv
biBjb21wYXJlU2lnbmFscyh0ZXN0TmFtZSwgbWF4RXJyb3IsIHJlbmRlcmVkRGF0YSwgZXhwZWN0
ZWRGdW5jdGlvbiwgdGltZQogICAgICAgICB2YXIgcmVzdWx0ID0gY29tcGFyZVBhcnRpYWxTaWdu
YWxzKHJlbmRlcmVkRGF0YSwgZXhwZWN0ZWRGdW5jdGlvbiwgdGltZXNba10sIHRpbWVzW2sgKyAx
XSwgdmFsdWVzW2tdLCBzYW1wbGVSYXRlKTsKIAogICAgICAgICBpZiAocmVzdWx0Lm1heEVycm9y
ID4gbWF4RXJyb3IpIHsKLSAgICAgICAgICAgIHRlc3RGYWlsZWQoIkluY29ycmVjdCBnYWluIGZv
ciB0ZXN0ICIgKyBrICsgIi4gTWF4IGVycm9yID0gIiArIHJlc3VsdC5tYXhFcnJvciArICIgYXQg
b2Zmc2V0ICIgKyAocmVzdWx0LmluZGV4ICsgdGltZVRvU2FtcGxlRnJhbWUodGltZXNba10sIHNh
bXBsZVJhdGUpKSk7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJJbmNvcnJlY3QgdmFsdWUgZm9y
IHRlc3QgIiArIGsgKyAiLiBNYXggZXJyb3IgPSAiICsgcmVzdWx0Lm1heEVycm9yICsgIiBhdCBv
ZmZzZXQgIiArIChyZXN1bHQuaW5kZXggKyB0aW1lVG9TYW1wbGVGcmFtZSh0aW1lc1trXSwgc2Ft
cGxlUmF0ZSkpKTsKICAgICAgICAgICAgICsrZmFpbGVkVGVzdENvdW50OwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTUwLDIzICszMDMsNTIgQEAgZnVuY3Rpb24gY29tcGFyZVNpZ25hbHModGVzdE5h
bWUsIG1heEVycm9yLCByZW5kZXJlZERhdGEsIGV4cGVjdGVkRnVuY3Rpb24sIHRpbWUKICAgICB9
CiB9CiAKKy8vIENyZWF0ZSBhIGZ1bmN0aW9uIHRvIHRlc3QgdGhlIHJlbmRlcmVkIGRhdGEgd2l0
aCB0aGUgcmVmZXJlbmNlIGRhdGEuCisvLworLy8gdGVzdE5hbWUgLSBzdHJpbmcgZGVzY3JpYmlu
ZyB0aGUgdGVzdAorLy8KKy8vIGVycm9yIC0gbWF4IGFsbG93ZWQgZXJyb3IgYmV0d2VlbiByZW5k
ZXJlZCBkYXRhIGFuZCB0aGUgcmVmZXJlbmNlIGRhdGEuCisvLworLy8gcmVmZXJlbmNlRnVuY3Rp
b24gLSBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyB0aGUgcmVmZXJlbmNlIGRhdGEgdG8gYmUgY29t
cGFyZWQgd2l0aCB0aGUgcmVuZGVyZWQKKy8vIGRhdGEuCisvLworLy8ganVtcFRocmVzaG9sZCAt
IG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgdGhyZXNob2xkIHRvIHVzZSBm
b3IgZGV0ZWN0aW5nCisvLyBkaXNjb250aW51aXRpZXMuICBJZiBub3Qgc3BlY2lmaWVkLCBkZWZh
dWx0cyB0byBkaXNjb250aW51aXR5VGhyZXNob2xkLgorLy8KK2Z1bmN0aW9uIGNoZWNrUmVzdWx0
RnVuY3Rpb24odGVzdE5hbWUsIGVycm9yLCByZWZlcmVuY2VGdW5jdGlvbiwganVtcFRocmVzaG9s
ZCkKK3sKKyAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9
IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAgICAgICByZW5kZXJlZERhdGEgPSBidWZmZXIuZ2V0
Q2hhbm5lbERhdGEoMCk7CisKKyAgICAgICAgdmFyIHRocmVzaG9sZDsKKworICAgICAgICBpZiAo
IWp1bXBUaHJlc2hvbGQpIHsKKyAgICAgICAgICAgIHRocmVzaG9sZCA9IGRpc2NvbnRpbnVpdHlU
aHJlc2hvbGQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJlc2hvbGQgPSBqdW1w
VGhyZXNob2xkOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb21wYXJlU2lnbmFscyh0
ZXN0TmFtZSwgZXJyb3IsIHJlbmRlcmVkRGF0YSwgcmVmZXJlbmNlRnVuY3Rpb24sIHRpbWVWYWx1
ZUluZm8sIHRocmVzaG9sZCk7CisKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfQorfQor
CiAvLyBSdW4gYWxsIHRoZSBhdXRvbWF0aW9uIHRlc3RzLgogLy8KLS8vIGluaXRpYWxWYWx1ZSAt
IFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBmaXJzdCB0aW1lIGludGVydmFsLgorLy8gbnVtYmVy
T2ZUZXN0cyAtIG51bWJlciBvZiB0ZXN0cyAodGltZSBpbnRlcnZhbHMpIHRvIHJ1bi4KIC8vCi0v
LyBlbmRWYWx1ZURlbHRhRnVuY3Rpb24gLSBIb3cgbXVjaCB0aGUgZW5kIHZhbHVlIGRpZmZlcnMg
ZnJvbSB0aGUgdmFsdWUgYXQgdGhlIHN0YXJ0IG9mIHRoZQotLy8gaW50ZXJ2YWwuCisvLyBpbml0
aWFsVmFsdWUgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgZmlyc3QgdGltZSBpbnRlcnZhbC4K
IC8vCiAvLyBzZXRWYWx1ZUZ1bmN0aW9uIC0gZnVuY3Rpb24gdGhhdCBzZXRzIHRoZSBzcGVjaWZp
ZWQgdmFsdWUgYXQgdGhlIHN0YXJ0IG9mIGEgdGltZSBpbnRlcnZhbC4KIC8vCiAvLyBhdXRvbWF0
aW9uRnVuY3Rpb24gLSBmdW5jdGlvbiB0aGF0IHNldHMgdGhlIGVuZCB2YWx1ZSBmb3IgdGhlIHRp
bWUgaW50ZXJ2YWwuICBJdCBzcGVjaWZpZXMgaG93CiAvLyB0aGUgdmFsdWUgYXBwcm9hY2hlcyB0
aGUgZW5kIHZhbHVlLgogLy8KLS8vIHZhbHVlVXBkYXRlRnVuY3Rpb24gLSBUaGUgc3RhcnRpbmcg
dmFsdWUgYXQgdGltZSBpbnRlcnZhbCBrIGlzIGFkanVzdGVkIGJ5IHZhbHVlVXBkYXRlRnVuY3Rp
b24oaykgdG8gZ2l2ZSB0aGUgbmV3IHN0YXJ0aW5nIHZhbHVlIGF0IHRpbWUgaW50ZXJ2YWwgayAr
IDEuCi0vLwogLy8gQW4gb2JqZWN0IGlzIHJldHVybmVkIGNvbnRhaW5pbmcgYW4gYXJyYXkgb2Yg
c3RhcnQgdGltZXMgZm9yIGVhY2ggdGltZSBpbnRlcnZhbCwgYW5kIGFuIGFycmF5CiAvLyBnaXZp
bmcgdGhlIHN0YXJ0IGFuZCBlbmQgdmFsdWVzIGZvciB0aGUgaW50ZXJ2YWwuCi1mdW5jdGlvbiBk
b0F1dG9tYXRpb24oaW5pdGlhbFZhbHVlLCBlbmRWYWx1ZURlbHRhRnVuY3Rpb24sIHNldFZhbHVl
RnVuY3Rpb24sIGF1dG9tYXRpb25GdW5jdGlvbiwgdmFsdWVVcGRhdGVGdW5jdGlvbikKK2Z1bmN0
aW9uIGRvQXV0b21hdGlvbihudW1iZXJPZlRlc3RzLCBpbml0aWFsVmFsdWUsIHNldFZhbHVlRnVu
Y3Rpb24sIGF1dG9tYXRpb25GdW5jdGlvbikKIHsKICAgICB2YXIgdGltZUluZm8gPSBbMF07CiAg
ICAgdmFyIHZhbHVlSW5mbyA9IFtdOwpAQCAtMTc1LDIwICszNTcsODQgQEAgZnVuY3Rpb24gZG9B
dXRvbWF0aW9uKGluaXRpYWxWYWx1ZSwgZW5kVmFsdWVEZWx0YUZ1bmN0aW9uLCBzZXRWYWx1ZUZ1
bmN0aW9uLCBhdXQKICAgICBmb3IgKHZhciBrID0gMDsgayA8IG51bWJlck9mVGVzdHM7ICsraykg
ewogICAgICAgICB2YXIgc3RhcnRUaW1lID0gayAqIHRpbWVJbnRlcnZhbDsKICAgICAgICAgdmFy
IGVuZFRpbWUgPSAoayArIDEpICogdGltZUludGVydmFsOwotICAgICAgICB2YXIgZW5kVmFsdWUg
PSB2YWx1ZSArIGVuZFZhbHVlRGVsdGFGdW5jdGlvbihrKTsKKyAgICAgICAgdmFyIGVuZFZhbHVl
ID0gdmFsdWUgKyBlbmRWYWx1ZURlbHRhKGspOwogCiAgICAgICAgIC8vIFNldCB0aGUgdmFsdWUg
YXQgdGhlIHN0YXJ0IG9mIHRoZSB0aW1lIGludGVydmFsLgogICAgICAgICBzZXRWYWx1ZUZ1bmN0
aW9uKHZhbHVlLCBzdGFydFRpbWUpOwogCi0gICAgICAgIC8vIFNwZWNpZnkgdGhlIHRhcmdldCB2
YWx1ZSwgYW5kIGhvdyB3ZSBzaG91bGQgYXBwcm9hY2ggdGhlIHRhcmdldCB2YWx1ZS4KKyAgICAg
ICAgLy8gU3BlY2lmeSB0aGUgZW5kIG9yIHRhcmdldCB2YWx1ZSwgYW5kIGhvdyB3ZSBzaG91bGQg
YXBwcm9hY2ggaXQuCiAgICAgICAgIGF1dG9tYXRpb25GdW5jdGlvbihlbmRWYWx1ZSwgc3RhcnRU
aW1lLCBlbmRUaW1lKTsKIAogICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBzdGFydCB0aW1l
cywgYW5kIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcyBmb3IgZWFjaCB0aW1lIGludGVydmFsLgog
ICAgICAgICB0aW1lSW5mby5wdXNoKGVuZFRpbWUpOwogICAgICAgICB2YWx1ZUluZm8ucHVzaCh7
c3RhcnRWYWx1ZTogdmFsdWUsIGVuZFZhbHVlIDogZW5kVmFsdWV9KTsKIAotICAgICAgICB2YWx1
ZSArPSB2YWx1ZVVwZGF0ZUZ1bmN0aW9uKGspOworICAgICAgICB2YWx1ZSArPSB2YWx1ZVVwZGF0
ZShrKTsKICAgICB9CiAKICAgICByZXR1cm4ge3RpbWVzIDogdGltZUluZm8sIHZhbHVlcyA6IHZh
bHVlSW5mb307CiB9CisKKy8vIENyZWF0ZSB0aGUgYXVkaW8gZ3JhcGggZm9yIHRoZSB0ZXN0IGFu
ZCB0aGVuIHJ1biB0aGUgdGVzdC4KKy8vCisvLyBudW1iZXJPZlRlc3RzIC0gbnVtYmVyIG9mIHRp
bWUgaW50ZXJ2YWxzICh0ZXN0cykgdG8gcnVuLgorLy8KKy8vIGluaXRpYWxWYWx1ZSAtIHRoZSBp
bml0aWFsIHZhbHVlIG9mIHRoZSBnYWluIGF0IHRpbWUgMC4KKy8vCisvLyBzZXRWYWx1ZUZ1bmN0
aW9uIC0gZnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2gg
dGltZSBpbnRlcnZhbC4KKy8vCisvLyBhdXRvbWF0aW9uRnVuY3Rpb24gLSB0aGUgQXVkaW9QYXJh
bVRpbWVsaW5lIGF1dG9tYXRpb24gZnVuY3Rpb24KKy8vCisvLyB0ZXN0TmFtZSAtIHN0cmluZyBp
bmRpY2F0aW5nIHRoZSB0ZXN0IHRoYXQgaXMgYmVpbmcgcnVuLgorLy8KKy8vIG1heEVycm9yIC0g
bWF4aW11bSBhbGxvd2VkIGVycm9yIGJldHdlZW4gdGhlIHJlbmRlcmVkIGRhdGEgYW5kIHRoZSBy
ZWZlcmVuY2UgZGF0YQorLy8KKy8vIHJlZmVyZW5jZUZ1bmN0aW9uIC0gZnVuY3Rpb24gdGhhdCBn
ZW5lcmF0ZXMgdGhlIHJlZmVyZW5jZSBkYXRhIHRvIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhlCisv
LyByZW5kZXJlZCBkYXRhLgorLy8KKy8vIGp1bXBUaHJlc2hvbGQgLSBvcHRpb25hbCBwYXJhbWV0
ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHRocmVzaG9sZCB0byB1c2UgZm9yIGRldGVjdGluZworLy8g
ZGlzY29udGludWl0aWVzLiAgSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gZGlzY29udGlu
dWl0eVRocmVzaG9sZC4KKy8vCitmdW5jdGlvbiBjcmVhdGVBdWRpb0dyYXBoQW5kVGVzdChudW1i
ZXJPZlRlc3RzLCBpbml0aWFsVmFsdWUsIHNldFZhbHVlRnVuY3Rpb24sIGF1dG9tYXRpb25GdW5j
dGlvbiwgdGVzdE5hbWUsIG1heEVycm9yLCByZWZlcmVuY2VGdW5jdGlvbiwganVtcFRocmVzaG9s
ZCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKKworICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgY29u
dGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgcmVuZGVyTGVuZ3RoKG51bWJlck9mVGVz
dHMpLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgY29uc3RhbnRCdWZmZXIgPSBjcmVhdGVDb25zdGFu
dEJ1ZmZlcihjb250ZXh0LCAxLCByZW5kZXJMZW5ndGgobnVtYmVyT2ZUZXN0cykpOworCisgICAg
Ly8gV2UgdXNlIGFuIEF1ZGlvR2Fpbk5vZGUgaGVyZSBzaW1wbHkgYXMgYSBjb252ZW5pZW50IHdh
eSB0byB0ZXN0IHRoZSBBdWRpb1BhcmFtCisgICAgLy8gYXV0b21hdGlvbiwgc2luY2UgaXQncyBl
YXN5IHRvIHBhc3MgYSBjb25zdGFudCB2YWx1ZSB0aHJvdWdoIHRoZSBub2RlLCBhdXRvbWF0ZSB0
aGUKKyAgICAvLyAuZ2FpbiBhdHRyaWJ1dGUgYW5kIG9ic2VydmUgdGhlIHJlc3VsdGluZyB2YWx1
ZXMuCisKKyAgICBnYWluTm9kZSA9IGNvbnRleHQuY3JlYXRlR2Fpbk5vZGUoKTsKKworICAgIHZh
ciBidWZmZXJTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIGJ1ZmZl
clNvdXJjZS5idWZmZXIgPSBjb25zdGFudEJ1ZmZlcjsKKyAgICBidWZmZXJTb3VyY2UuY29ubmVj
dChnYWluTm9kZSk7CisgICAgZ2Fpbk5vZGUuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsK
KworICAgIC8vIFNldCB1cCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgdGhhdCBj
b250cm9sIGhvdyB0aGUgYXV0b21hdGlvbiB0ZXN0IHZhbHVlcyBwcm9ncmVzcworICAgIC8vIGZv
ciBlYWNoIHRpbWUgaW50ZXJ2YWwuCisgICAgc3RhcnRpbmdWYWx1ZURlbHRhID0gaW5pdGlhbFZh
bHVlIC8gbnVtYmVyT2ZUZXN0czsKKyAgICBzdGFydEVuZFZhbHVlQ2hhbmdlID0gc3RhcnRpbmdW
YWx1ZURlbHRhIC8gMjsKKyAgICBkaXNjb250aW51aXR5VGhyZXNob2xkID0gc3RhcnRFbmRWYWx1
ZUNoYW5nZSAvIDI7CisKKyAgICAvLyBSdW4gdGhlIGF1dG9tYXRpb24gdGVzdHMuCisgICAgdGlt
ZVZhbHVlSW5mbyA9IGRvQXV0b21hdGlvbihudW1iZXJPZlRlc3RzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0VmFsdWVGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG9tYXRpb25GdW5jdGlvbik7CisgICAgYnVmZmVyU291cmNlLm5vdGVPbigwKTsKKyAg
ICAgIAorICAgIGNvbnRleHQub25jb21wbGV0ZSA9IGNoZWNrUmVzdWx0RnVuY3Rpb24odGVzdE5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhFcnJv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5j
ZUZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
anVtcFRocmVzaG9sZCk7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzCmluZGV4IGI4
NWUwYzljMmRiYzlmMjc1MzZhZDY0NTFkNzEyMmE4MWIzOThlMzcuLjQ3OTEyMDVhNDdmOTZkMTkw
ZWI2NGZkMjhjNDI1Njg2MWQyM2M0NTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcworKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9y
ZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMKQEAgLTQ4MCwxMSArNDgwLDYgQEAgZnVuY3Rpb24g
Z2VuZXJhdGVSZWZlcmVuY2UoZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1ldGVycykgewogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLS8vIFRydWUgaWYgdGhlIG51bWJlciBpcyBub3QgYW4gaW5maW5p
dHkgb3IgTmFOCi1mdW5jdGlvbiBpc1ZhbGlkTnVtYmVyKHgpIHsKLSAgICByZXR1cm4gIWlzTmFO
KHgpICYmICh4ICE9IEluZmluaXR5KSAmJiAoeCAhPSAtSW5maW5pdHkpOwotfQotCiBmdW5jdGlv
biBjaGVja0ZpbHRlclJlc3BvbnNlKGZpbHRlclR5cGUsIGZpbHRlclBhcmFtZXRlcnMpIHsKICAg
ICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgcmVuZGVyZWRCdWZmZXIgPSBldmVu
dC5yZW5kZXJlZEJ1ZmZlcjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>